0x01 简介
Django是一款广为流行的开源web框架,由Python编写,许多网站和app都基于Django开发。
什么是JSONField,Django是一个大而全的Web框架,其支持很多数据库引擎,包括Postgresql、Mysql、Oracle、Sqlite3等,但与Django天生为一对儿的数据库莫过于Postgresql了,Django官方也建议配合Postgresql一起使用。
相比于Mysql,Postgresql支持的数据类型更加丰富,其对JSON格式数据的支持也让这个关系型数据库拥有了NoSQL的一些特点。
该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。
Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。
通过JSONField类获得KeyTransform类并生成sql语句的位置。
0x02 影响范围
Django1.11.x before 1.11.232.1.x before 2.1.112.2.x before 2.2.4
0x03 漏洞复现
复现环境:vulfocus 靶场
vulfocus/django-cve_2019_14234:latest
访问 http://192.168.100.254:61241/admin/
进入管理界面
访问 collection 页面
http://192.168.100.254:61241/admin/vuln/collection/
手动注入测试
http://192.168.100.254:61241/admin/vuln/collection/?detail__a'b=123 |
出现报错,截断了
在请求信息中找到 flag
任务完成。