在如下三种场景中,SQL盲注非常有用:1)提交一个导致SQL查询无效的漏洞时会返回一个通用的错误页面,而提交正确的SQL时则会返回一个内容可被适度控制的页面。这种情况通常出现在根据用户选择来显示信息的页面中,例如,用户点击一个包含id参数(能唯一识别数据库中的商品)的链接或者提交一个搜索请求。对于这两种情况,用户可控制页面提供的输出,因为该页面是根据用户提供的信息来生成的,比如提供一个产品的id,该页面还包含了从响应中获得的数据。漏洞。因为页面提供了反馈信息(虽然不是以详细的数据库错误消息方式),所以可以使用基于时间的确认漏洞以及能够修改页面显示数据集的漏洞。例如,某个攻击可能会显示香皂或刷子的产品描述,以指示是否提取到了0-bit或1-bit的数据。大多数情况下,只需提交一个单引号就足以破坏SQL查询平衡并强制产生一个通用的错误页面,这将有助于推断是否存在SQL注入
通用的错误。
2)提交一个导致SQL查询无效的漏洞时会返回一个通用的错误页面,而提交正确的SQL时则会返回一个内容不可控的页面。当页面包含多个SQL查询,但只有第一个查询容易受到攻击且不产生输出时会碰到这种情况。还有一种场景也会引发这种情况:SQL注入位于LPDATE或INSERT语句中,此时提交的信息虽然被写入数据库中且不产生输出,但却会产生通用的错误。
3)提交受损或不正确的SQL既不会产生错误页面,也不会以任何方式影响页面输出。因可能成功识别易受攻击的参数。为这种类型的SQL盲注场景不返回错误,而基于时间的漏洞或产生带外副作用的漏洞则最有可能成功识别易受攻击的参数。
SQL盲注技术了解了SQL盲注的定义以及寻找这类漏洞的方法后,现在我们来深入研究利用这些漏洞的技术。可以将这些技术分为两类:推断攻击技术和带外通道技术。推断攻击技术描述了一列攻击,它们使用SQL提出关于数据库的问题并通过推断一次一位地逐步提取信息;带外适技术则通过可用的带外通道并使用某些机制来直接提取大块信息。对于特定的漏洞,选择采用哪一种攻击技术才是最佳方案,这取决于易受攻击的资源对攻击作出的反应。在试图决定采用哪一种攻击办法时,应该思考以下两个问题:一是根据所提的受损的SQL片段,资源是否能返回通用的错误页面;二是资源是否允许我们在某种程度控制页面的输出结果。