Django_JSONField_HStoreField_SQL注入漏洞 CVE-2019-14234 漏洞复现

Django JSONField / HStoreField SQL注入漏洞(CVE-2019-14234)

by ADummy

0x00利用路线

​ 直接url注入

0x01漏洞介绍

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

​ 该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。通过JSONField类获得KeyTransform类并生成sql语句的位置。

影响版本
Django < 1.11.23
Django < 2.1.11
Django < 2.2.4

0x02漏洞复现

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

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

在这里插入图片描述

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

在这里插入图片描述

然后在GET参数中构造detail__a'b=123提交,其中detail是模型Collection中的JSONField:

http://your-ip:8000/admin/vuln/collection/?detail__a%27b=123

可见,单引号已注入成功,SQL语句报错
在这里插入图片描述

0x03参考资料

https://www.cnblogs.com/huangxiaosan/p/14322147.html (强烈推荐,写的十分好且有拓展)

猜你喜欢

转载自blog.csdn.net/weixin_43416469/article/details/113954617