在SQL注入攻击中检查数据库
利用时SQL注入漏洞,通常有必要收集有关数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库中包含哪些表和列的内容。
查询数据库类型和版本
不同的数据库提供了查询其版本的不同方法。您通常需要尝试不同的查询才能找到有效的查询,从而可以确定数据库软件的类型和版本。
确定某些流行数据库类型的数据库版本的查询如下:
数据库类型 | 询问 |
Microsoft,Mysql | 选择@@版本 |
Oracle | 从V $版本中选择 * |
Postgresql | 选择版本() |
例如,您可以使用联盟
使用以下输入攻击:
'联合选择@@版本 -
这可能会像以下内容一样返回输出,证实数据库是Microsoft SQL Server,并且正在使用的版本:
Microsoft SQL Server 2016(SP2)(KB4052908)-13.0.5026.0(x64)2018年3月18日09:11:49版权所有(C)Microsoft Corporation Standard Edition(64 -BIT)Windows Server上:)(管理程序)
列出数据库的内容
大多数数据库类型(除Oracle的显着例外)都有一组称为信息架构的视图,该视图提供了有关数据库的信息。
您可以查询信息_schema.tables
要在数据库中列出表:
选择 *来自信息_schema.tables
这将如下返回输出:
table_catalog table_schema table_name table_type ===================================================== myDatabase DBO产品基表mydatabase DBO用户基表mydatabase dbo反馈基础表
该输出表明有三个表,称为产品
,,,,用户
, 和回馈
。
然后您可以查询信息_schema.columns
在单个表中列出列:
选择 *来自信息_schema.columns where table_name ='用户'
这将如下返回输出:
table_catalog table_schema table_name column_name data_type ============================================================================================================================================================
此输出显示指定表中的列和每列的数据类型。
等效于Oracle上的信息模式
在Oracle上,您可以获取具有略有不同查询的相同信息。
您可以通过查询列出表all_table
:
从all_tables中选择 *
您可以通过查询列出列all_tab_columns
:
从all_tab_columns中选择 * table_name ='用户'