import requests
import json
import time
import sys
import argparse
def check_log_leak(target_url, api_port, auth_header=None):
"""
尝试触发可能记录敏感信息的操作,并提示用户检查日志。
由于无法直接读取服务器端日志文件,此脚本主要模拟攻击载荷并指导人工核查。
"""
print(f"[*] 正在对目标 {target_url} 进行日志泄露风险检测...")
# 1. 构造带有明显标识的敏感数据 payload
sensitive_token = "SECRET_TOKEN_1234567890"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {sensitive_token}",
"X-Custom-Secret": "MY_SUPER_SECRET_KEY"
}
# 2. 尝试访问一个可能触发日志记录的路径 (例如 API 状态或配置)
# 注意:不同版本 API 路径可能不同,这里以常见的 /v1/config 或根路径为例
test_paths = [
"/v1/config",
"/v1/paths",
"/"
]
found_vulnerable = False
for path in test_paths:
url = f"{target_url.rstrip('/')}{path}"
try:
print(f"[*] 测试路径: {url}")
# 发送 GET 请求,携带敏感 Header
resp = requests.get(url, headers=headers, timeout=5)
print(f"[+] 响应状态码: {resp.status_code}")
# 某些情况下,错误信息可能会回显部分请求内容
if sensitive_token in resp.text:
print("[!] 警告: 响应体中发现了敏感 Token!存在直接回显风险。")
found_vulnerable = True
except Exception as e:
print(f"[-] 请求失败: {e}")
# 3. 尝试 RTSP/RTMP 推流时的认证日志 (需要用户手动检查服务器日志文件)
print("\n[!] 关键步骤: 请检查 MediaMTX 服务器端的日志文件 (通常为 stdout 或 mediamtx.log)")
print(f" 查找是否包含以下字符串: '{sensitive_token}' 或 'MY_SUPER_SECRET_KEY'")
print(" 如果日志中明文出现了这些测试字符串,则存在敏感信息泄露漏洞。")
print(" 建议升级至 v1.19.2 或更高版本,并确保 logLevel 不为 'debug' 除非必要。")
return found_vulnerable
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="MediaMTX Log Sensitivity Leak PoC")
parser.add_argument("--url", type=str, default="http://localhost:8888", help="MediaMTX HTTP API URL")
args = parser.parse_args()
check_log_leak(args.url, 8888)