vulfocus——Django SQL注入(CVE-2021-35042)

描述

如果 order_by 是来自 Web 应用程序客户端的不受信任的输入,则 3.1.13 之前的 Django 3.1.x 和 3.2.5 之前的 3.2.x 允许 QuerySet.order_by SQL 注入。http://ip:port/vuln/?order= 

参照大佬的复现Django SQL注入漏洞分析复现(CVE-2021-35042) - FreeBuf网络安全行业门户

复现

 1.打开web界面

2.根据提示访问,根据返回的信息可得出order传入的值可控。

(当为“id”正序排列,当为“-id”反序排列)

3.利用堆叠+报错进行注入(flag在报错页面的下面)

 vuln_collection.id);select updatexml(1,concat(0x7e,(select @@version)),1)%23

### 关于Django SQL注入漏洞 CVE-2022-28347 的背景 Django 是一种流行的 Python Web 开发框架,其设计目标之一是提供内置的安全机制来防止常见的安全威胁,例如跨站脚本攻击 (XSS)SQL 注入。然而,在某些情况下,由于不恰当的输入验证或错误配置,仍然可能发生安全漏洞。 对于 CVE-2022-28347,这是一个与 Django 中 ORM 查询相关的 SQL 注入漏洞。该漏洞允许经过身份验证的攻击者通过特定条件下的查询参数执行恶意 SQL 命令[^2]。此问题的根本原因在于未正确处理用户提供的数据,尤其是在动态构建复杂查询时未能充分转义特殊字符。 受影响版本包括 Django 3.2.x 版本系列中的部分子版本以及更早的一些分支。官方已发布补丁更新以解决这一问题,并建议所有用户尽快升级到修补后的稳定版。 ### 解决方案与缓解措施 #### 升级至最新版本 最直接有效的解决方案是将项目依赖的 Django 库升级到不受影响的新版本。具体来说,针对不同分支有如下推荐: - 对于长期支持 (LTS) 分支 3.2.x 用户应迁移到 **3.2.15 或更高版本**; - 如果使用的是较新的主线开发线,则需确保至少运行在 **4.0.4 及以上**。 这些新发布的修订包含了必要的修复程序,能够有效阻止潜在的 SQL 注入尝试[^3]。 #### 安全编码实践 除了及时打上厂商提供的热修外,开发者还应该遵循良好的编程习惯减少未来发生类似事件的可能性: 1. 避免手动拼接字符串作为最终执行语句的一部分;改用占位符语法让底层驱动负责实际替换工作。 ```python from django.db import connection # 不推荐做法:容易引发安全隐患 query = f"SELECT * FROM users WHERE username='{username}'" # 推荐方式:利用参数化查询防范风险 with connection.cursor() as cursor: cursor.execute("SELECT * FROM users WHERE username=%s", [username]) result = cursor.fetchall() ``` 2. 使用 Django 提供的高级抽象层——QuerySet API 来代替原始 SQL 操作。它会自动对传入的数据做适当转换从而避免大部分常见陷阱。 3. 实施严格的输入校验逻辑,限定字段只接受预期范围内的值类型和格式。 4. 启用数据库级别的防护策略比如视图权限控制或者存储过程封装核心业务流程等手段进一步增强系统的鲁棒性。 上述方法结合起来可以极大程度降低遭受此类攻击的概率并保护敏感资料免受侵害。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值