SQL注入分类

Acunetix的官方网站,只是低级翻译以便参考。

一、SQL注入类型(SQLi)

SQL注入可以以多种方式使用,从而导致严重的问题。通过使用SQL注入,攻击者可以绕过认证、访问、修改和删除数据库中的数据。在某些情况下,甚至可以使用SQL注入来执行操作系统上的命令,这可能会让攻击者升级到防火墙后的网络中更具破坏性的攻击。SQL注入可以分为以下三个主要类别。

(1)带内SQLi(In-band SQLi)

(2)推论SQLi(Inferential SQLi)

(3)带外的SQLi(Out-of-band SQLi)

二、带内SQLi(经典的SQLi)

带内SQL注入是SQL注入攻击中最常见和最容易被利用的。当攻击者能够使用相同的通信通道来启动攻击并收集结果时,就会出现带内的SQL注入。


两种最常见的带内SQL注入类型是基于错误的SQLi和基于unix的SQLi。

1、基于错误的SQLi

基于错误的SQLi是一种内带SQL注入技术,它依赖于数据库服务器抛出的错误消息来获取关于数据库结构的信息。在某些情况下,仅凭错误的SQL注入就足以让攻击者枚举整个数据库。虽然错误在web应用程序的开发阶段非常有用,但是它们应该在一个实时站点上被禁用,或者登录到一个有限制访问的文件。

2、基于联合的SQLi

基于unix的SQLi是一种内带SQL注入技术,它利用UNION SQL操作符将两个或多个SELECT语句的结果合并到单个结果中,然后作为HTTP响应的一部分返回。



三、推论SQLi(盲目的SQLi)



与in-band SQLi不同的是,推论SQL注入可能需要更长的时间才能攻击攻击者,然而,它和其他形式的SQL注入一样危险。在一个推论的SQLi攻击中,没有任何数据通过web应用程序传输,攻击者将无法看到攻击带的结果(这就是为什么此类攻击通常被称为“盲SQL注入攻击”)。相反,攻击者能够通过发送有效负载、观察web应用程序的响应以及数据库服务器的结果行为来重建数据库结构。

这两种类型的推论SQL注入是基于blind-booleb的SQLi和基于盲的SQLi。

(1)基于布尔的盲目SQLi(基于内容)

基于boolea的SQL注入是一种推论SQL注入技术,它依赖于向数据库发送一条SQL查询,这迫使应用程序返回一个不同的结果,这取决于查询是否返回一个真实的或错误的结果。

根据结果,HTTP响应中的内容将会改变,或者保持不变。这使得攻击者可以推断出所使用的有效负载是否返回真或假,即使没有返回数据库的数据。这种攻击通常是缓慢的(特别是在大型数据库中),因为攻击者需要枚举一个数据库,字符的字符。

(2)基于时间的盲目SQLi

基于时间的SQL注入是一种推论SQL注入技术,它依赖于向数据库发送SQL查询,从而迫使数据库在响应之前等待指定的时间(以秒为单位)。响应时间将指示攻击者是否查询的结果为真或假。

根据结果的不同,HTTP响应将会延迟返回,或者立即返回。这使得攻击者可以推断出所使用的有效负载是否返回真或假,即使没有返回数据库的数据。这种攻击通常是缓慢的(特别是在大型数据库中),因为攻击者需要按字符枚举一个数据库字符。

四、带外SQLi

带外的SQL注入不是很常见,主要是因为它依赖于web应用程序所使用的数据库服务器上启用的特性。当攻击者不能使用相同的通道启动攻击并收集结果时,就会出现带外的SQL注入。

带外技术,为攻击者提供一种替代基于时间的技术的替代方案,特别是如果服务器的响应不是非常稳定的(使基于时间的攻击不可靠)。

带外的SQLi技术将依赖于数据库服务器的能力,使DNS或HTTP请求能够将数据传递给攻击者。这就是Microsoft SQL Server的xpdirtree命令的情况,它可以用来向攻击者控制的服务器发出DNS请求;以及Oracle数据库的utlhttp包,它可以用来向攻击者控制的服务器发送来自SQL和pl/SQL的HTTP请求。