vlambda博客
学习文章列表

SQL注入攻击-查询数据信息(上)

在学习本章前,建议先对前序章节进行了解,传送门如下:



本章节结合靶场试验来介绍如何获取数据库一些有用的信息。
使用的靶机场景是portswigger里面提供的
https://portswigger.net
 

为何要查询数据库信息?
在数据库中,获取有关数据库本身的一些信息通常是很有用的,利用好这些信息对注入攻击很有帮助。
我们可以查询数据库的版本信息,通过掌握数据库类型从而用合适的语句进行后续的注入攻击。
例如,在Oracle上,我们可以执行下面这条语句来获取版本信息:

我们还可以查询在数据库中存在哪些表,以及这些表包含哪些列。
例如,在大多数数据库上,我们可以执行下面查询来列出表:

SQL注入攻击-查询数据信息(上)

 

如何查询数据库类型和版本?
不同的数据库提供了不同的方式来查询它们的版本,我们经常需要尝试不同的查询来找到一个有效的查询语句,从而确定数据库软件的类型和版本。
下面列出来部分流行数据库类型和版本的查询:

SQL注入攻击-查询数据信息(上)

例如,我们可以使用下面这个UNION攻击来查询版本:

SQL注入攻击-查询数据信息(上)

可能会返回类似下面的输出,确认数据库是MSQL以及正在使用的版本:

SQL注入攻击-查询数据信息(上)

 
场景试验一:
https://portswigger.net/web-security/sql-injection/examining-the-database/lab-querying-database-version-oracle
场景说明:
这个场景包含SQL注入漏洞,可以使用UNION攻击从注入的查询中检索结果,数据库为Oracle数据库。
试验目的:
要完成这个试验,需要显示数据库版本字符串。
攻击过程:
Burp Suite设置为阻断模式,先尝试用上个章节直接用NULL的方法来探测列数好像不行,那我们就尝试用查询内置表的方式来猜测返回的列数

SQL注入攻击-查询数据信息(上)

猜测一列时,返回错误,接下来改成两列

SQL注入攻击-查询数据信息(上)

能够正常响应,说明当前这个查询是两列

SQL注入攻击-查询数据信息(上)

 
确认这两列类型是否是字符串

SQL注入攻击-查询数据信息(上)

能够正确返回,说明这两列都支持字符串类型

SQL注入攻击-查询数据信息(上)

 
构造查询数据库信息的Payload

SQL注入攻击-查询数据信息(上)

可以看到,返回数据中包含数据库的相关信息,完成本试验

SQL注入攻击-查询数据信息(上)

 
场景试验二:
https://portswigger.net/web-security/sql-injection/examining-the-database/lab-querying-database-version-mysql-microsoft
场景说明:
这个场景包含SQL注入漏洞,可以使用UNION攻击从注入的查询中检索结果,数据库为MySQLMSSQL数据库。
试验目的:
要完成这个试验,需要显示数据库版本字符串。
攻击过程:
Burp Suite设置为阻断模式,先尝试用上个章节的方式,用NULL进行返回列判断,注意最后是用井号#来进行注释

SQL注入攻击-查询数据信息(上)

通过返回的响应,可以确认查询的列数量是二

SQL注入攻击-查询数据信息(上)

 
确认返回的两列是否是字符串类型

SQL注入攻击-查询数据信息(上)

确认两列都是字符串类型

SQL注入攻击-查询数据信息(上)

 
构造查询数据库版本的Payload

SQL注入攻击-查询数据信息(上)

可以在返回响应中看到数据库的具体版本号,完成本次试验

 

/




/ /
/ /