SQL 注入二

  1. 盲注
    1. 触发有条件的响应

续 - 注入实例

盲注

需要盲注的场景是,Web 应用不会在响应中返回 SQL 查询的结果,或者 SQL 的,数据库的错误。此时用前面的注入方式是无法看到查询结果的。
盲注比较复杂并且比较难执行。

根据漏洞的性质和所涉及的数据库,以下技术可用盲注:

  • 您可以更改查询语句的逻辑,从而根据单个条件的真实性来触发应用程序响应中的可以观察出的差异。这可能涉及将新条件注入某些 Boolean 逻辑,或有条件地触发错误,如除以零。
  • 您可以设定条件去触发查询处理中的时间延迟,允许您根据应用程序响应所需的时间推断出条件的真实性。
  • 您可以使用 OAST 技术触发带外网络交互(out-of-band)。这种技术非常强大,可以在其他技术不起作用的情况下工作。通常,您可以通过带外网络交互直接渗出数据,例如将数据放入您控制的域名的 DNS lookup。

触发有条件的响应

考虑使用 Cookie 收集有关使用情况的分析的应用程序。
程序请求包括这样的 cookie:

Cookie: TrackingId=u5YD3PapBcR4lN3e7Tj4(用户可控制的)

应用程序可能会根据这个 ID 判断用户:

SELECT TrackingId FROM TrackedUsers WHERE TrackingId = 'u5YD3PapBcR4lN3e7Tj4(用户可控制的)'

虽然这个查询可能有 SQL 注入,但是查询结果用户看不到。
例如,应用会根据 ID 存在与否判断用户是否登陆,并返回登陆成功与失败的原因。

** 总之,会根据你在 AND 后追加的条件的真假返回不同的信息即可。** 这就足够了。

此响应足以用来盲注,并通过有条件地触发不同的响应来检索信息,具体取决于注射条件。
要了解其工作原理,请假设发送了两个请求,依次包含以下 “跟踪”Cookie 值:

...cookieid'AND'1'='1
拼接后的查询语句:SELECT TrackingId FROM TrackedUsers WHERE TrackingId = '...cookieid' AND '1'='1'
...cookieid'AND'1'='2
拼接后的查询语句:SELECT TrackingId FROM TrackedUsers WHERE TrackingId = '...cookieid' AND '1'='2'

第一个将导致查询返回结果,因为注入的 AND '1'='1 是 true, 因此将显示登陆成功的消息。

第二个导致查询不会返回任何值,因为注入的条件时 false

这两种操作可以让我们能够确定任何单一条件注入的答案,可以每次提取出一点数据。

举例来说,假设有一个称为 Users 的表,列是 UsernamePassword 有一个用户 Administrator

我们可以通过发送一系列输入逐渐地确定此用户的密码,以一次测试一个字符的密码。

abcd'AND SUBSTRING((SELECT password FROM users where username='admin'), 1, 1) >'m

上述的 SUBSTREING 的意思是查询用户 admin 的密码,看其第一个 (从索引 1 开始截取一个字符) 字符是否大于字符 m

根据服务器返回的结果判断是否正确

然后,可以使用二分法判断到底是哪个字符


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论。
我的空间