欢迎光临
我们一直在努力

通过HTTP Headers进行SQL注入

前言通过漏洞评估或者渗透测试,识别目标应用程序的输入矢量是根本的一步。有时候,当处理 Web 应用程序测试时,关于 SQL 注入漏洞的常规确认,仅限于曾经作为特殊的输入向量中的 get 和 post 变量。那其他的 HTTP 头参数呢?他们是不是 SQL 注入攻击的潜在输入向量呢?如何测试这些 HTTP 参数,并且如何进行漏洞扫描,能够避免遗留下没有发现的漏洞?

在web应用程序安全扫描器中输入参数的覆盖范围

一个比较了 60 个商业和开源黑盒 web 应用程序漏洞扫描器的调查结果,已经被命题为? The Scanning Legion: Web Application Scanners Accuracy Assessment & Feature Comparison ?发布了。这个关于测试这些能够在大范围的URL中检测(并且没有必要的应用)安全漏洞的商业和开源工具的标准,已经被安全研究员 Shay Chen 在 2011 年发布了。

对于测试 web 应用程序的扫描器支持输入参数覆盖的情况,我们已经总结在下面的图表中了。
这些主要的输入是:

1.HTTP查询字符参数(GET):输入参数通过URL发送
2.HTTP正文参数(POST):输入参数通过HTTP
3.HTTP Cookie参数:输入参数通过HTTP cookie
4.HTTP查询字符参数(GET):输入参数通过URL发送

2-17 通过HTTP Headers进行SQL注入

这个图表中明显的显示出,有 75%的 web 应用程序扫描器不能发现 HTTPHeaders 参数的相关漏洞。此外,这些扫描器的 70%,也错误的检查了 HTTP Cookies 漏洞。这些比例完全说明了这些扫描器在扫描输入向量方面的能力,而不只是简单的解释。对 GET 和 POST 的评分是比较合理的,一些自动化测试工具可能导致,在处理HTTP headers 作为一个 SQL 注入输入向量时,出现不令人满意的结果。

2-17 通过HTTP Headers进行SQL注入

从实际来讲,HTTP Headers 和 Cookie 没有得到应该的认识。因此,这两个向量应该在测试计划中被考虑到。还有,当我们使用的漏洞扫描器不支持这些特征时,我们应该考虑手工测试这些参数。

潜在的 HTTP Headers 注入

  HTTP Headers 字段
HTTP header 字段是超文本传输协议(HTTP)中,提交和响应信息头的一部分。HTTP header 字段负责定义 HTTP 传输的操作参数

例如:提交的 HTTP

2-17 通过HTTP Headers进行SQL注入

我们应当首先来看 HTTP Cookie,当 HTTP Cookies 作为回话标识被保存在数据库时,我们应当把它作为应当被测试的首要前侧 HTTP 变量。在后面我们将会看到一个使用 Cookie 进行 SQL 注入的实例。也有其他的 HTTP headers 相关应用。

  X-Forwarded-For
X-Forwarded-For 是 HTTP headers 的一个字段。它被认为是标识客户端通过HTTP 代理或者负载均衡器连接到一个 web 服务端的源 ip 地址的一个标准。
我们来看一个基于表单提交缺陷的例子:

2-17 通过HTTP Headers进行SQL注入

通过 sanitize()方法来控制登陆变量的正确

2-17 通过HTTP Headers进行SQL注入

让我们检查下 ip 变量。它要经过 ip_addr()方法的输出来分配

2-17 通过HTTP Headers进行SQL注入

显然,ip 地址从 HTTP 头中的 X_FORWARDED_FOR 找回。这之后,通过pre_match 检查这个参数是否保持至少一个 ip 地址,来控制。由于,环境变量HTTP_X_FORWARDED_FOR 再插入 SQL 查询之前,它的值没有充分的过滤,导致进行 SQL 查询时,可以通过这个字段注入任意的 SQL 代码

这个头字段可以像下面这样简单地修改:

2-17 通过HTTP Headers进行SQL注入

这样将导致绕过认证控制

  User-agent
User-agent 是记录软件程序使用平台的一个 HTTP 头字段。它可以用于统计目标和追踪违规协议。它在 HTTP 头中是应该被包含的。这个字段的最前面必须要填写软件产品名称,其后面可以有一个可写可不写的斜杠参数,和版本标识符。不是所有的应用程序都要被写入 user-agent,但是有时,应用程序被要求存储这样的信息(例如:购物,货物运输,供应商)来确定用户的操作。既然如此,那么这个 user-agent 头字段可能出现的问题就值得我们检查。

HTTP 查询实例:

2-17 通过HTTP Headers进行SQL注入

  攻击者的目的
像我们所知道的,注入漏洞是在 OWASP 前十大 Web 应用程序安全风险排名第一的。攻击者越来越多的精力用于寻找能够完全获得你的数据库内容的注入点。无论这个注入点是什么矢量类型的输入,GET,POST,Cookie 或者其他的HTTP头;对于攻击者重要的是,得到至少一个能够让他们开始逐步深入利用的注入点。

  Cookie 注入的多种测试
在这一小节,我们将介绍测试 HTTP Cookie 变量的测试方法。

  使用一个浏览器插件Cookies Manager+
Cookie Manager+是一个可视,可编辑,并能够穿件新 cookies 的浏览器插件。它也能显示关于 cookies 的额外信息和同时编辑多个 cookies,并备份/回复它们。安装它后,从工具菜单,选择 Cookies Manager+。我们选择一个和目标应用有关的 Cookie 变量。

2-17 通过HTTP Headers进行SQL注入

我们将编辑这个 language_id 变量。为了判断是否存在 SQL 注入缺陷,我们将在 language_id 变量的 content 字段中添加一个引号“’”。

2-17 通过HTTP Headers进行SQL注入

然后刷新这个页面,或者点击这个应用程序的内部链接,这个应用程序提交编辑 HTTP cookie 后的请求。返回结果显示,出现了一个 SQL 错误:

2-17 通过HTTP Headers进行SQL注入

这个数据库错误,提示我们,该应用存在 SQL 注入漏洞。使用 Cookie Manager+的优点是,它使用起来非常简便,直接的对 cookie 进行操作,并且可以保存之前修改过的 cookie。下面我们将尝试使用另一个 Firefox 插件,来检测目标的列数。

  Tamper Data:
Tamper Data是一个很强大的Firefox插件,可以显示和修改HTTP/HTTPS头和 post 参数。安装它之后,从工具菜单,选择 Tamper Data。点击 Start Tamper 开始修改HTTP 请求。当从目标应用程序发送任意请求时,Tamper Data 弹出一个对话框,询问我们是否需要修改刚刚发送的 HTTP 请求。

2-17 通过HTTP Headers进行SQL注入

点击 Tamper 后,我们得到一个 Tamper popup 对话框:

2-17 通过HTTP Headers进行SQL注入

我们按上图显示的那样添加:order by 4 到 HTTP cookie 变量。从应用程序返
回的响应是正常的。

2-17 通过HTTP Headers进行SQL注入

我们继续测试列数,并且每次不断增加:order by 5 。注入返回响应如下:

2-17 通过HTTP Headers进行SQL注入

所以,我们能够推断出列数为 4。现在,我们每个能够注入更多的 SQL 查询,将尝试判断出受影响的列。所
以,我们将在 language_id 这个 HTTP cookie 变量中插入下面这个查询:

-1+UNION+ALL+SELECT+1,2,3,4

这个利用有时可能利用到高级的 SQL 注入技术。

使用自动化的渗透测试扫描工具

  用 Sqlmap 作为实例
Sqlmap 是一个流行的开源的自动化渗透测试工具。这个程序可以测试和利用 SQL 注入缺陷,并且接管数据库服务。Sqlmap 支持 HTTP cookie 特征,所以它有两种使用方法:
当 web 应用程序申请需要给予 cookie 认证
在头值中,SQL 注入的检测和利用
Sqlmap 默认测试所有的 GET 参数和 POST 参数。当-level 参数值设置为 2 或者更大时,它将测试 HTTP Cookie 头值。当这个值设置为 3 或者更大时,它也测试 HTTP User_Agent 和 HTTP Referer 头值。你可以将你想用 sqlmap 测试的参数,手工制作出一个用逗号分隔符隔开的参数列表,来代替-level 参数。

2-17 通过HTTP Headers进行SQL注入

-string 标识,作为比较有效页面和无效页面的测试点(在注入期间)。另一方面,-dbs 标识,用来列举数据库管理系统。最后,-p 标识用来强制测试PHPSESSID 变量。

2-17 通过HTTP Headers进行SQL注入

通过检测的准确率或者输入向量的覆盖范围,来选择测试 SQL 注入的工具为了能够回答这个问题,我们利用 sectoolmarket.com 提供的标准程序测试结果。我们先假设要检测准确率的候补扫描程序拥有同样的输入向量覆盖范围和支持。我们将 GET。POST,HTTP Cookie 和 HTTP Headers 作为应该被支持的输入向量。当所有的参数都被支持时,这个扫描器的覆盖范围的比率为 100%。我们建议使用下面的算术方程式,也就是说对于漏洞扫描器的得分求一个平均值。然后从得到的检测准确率的百分比中,我们列出前 14 名的扫描器:

2-17 通过HTTP Headers进行SQL注入

我们通过他们的 SQL 注入漏洞的检测准确率和他们的输入向量覆盖范围的平均值,能够得到一个图表。

2-17 通过HTTP Headers进行SQL注入

  下一步要做什么?

  对于开发者

开发者对待 Cookies 和其他的存储 HTTP 头应该像对待其他用户输入的表单和遭受传统攻击内容一样。

  对于测试者

如果这个应用程序在 SQL 注入向量或者曾经在其他标准漏洞(XSS)上是脆弱的,那么页面上 HTTP 头信息的操作是非常重要的。定义和描述用户可能操作应用程序所使用的数据的每一种情况,是一个非常好的习惯。这些数据可能在Cookie 中 被 存 储 , 提 取 和 处 理 , HTTP-headers ( 像HTTP_USER_AGENT),form-variables(显示和隐藏),Ajax- ,JQusery-,XML-requests。

————————————————————————————————

  【参考文献】

【1】Penetration Testing with Improved Input Vector Identification, William G.J.
Halfond, Shauvik Roy Choudhary, and Alessandro Orso College of Computing
Georgia Institute of Technology
【2】Security Tools Benchmarking – A blog dedicated to aiding pen-testers in
choosing tools
that make a difference. By Shay-Chen
http://sectooladdict.blogspot.com/2011/08/commercial-web-application-scanner.html
【3】https://en.wikipedia.org/wiki/X-Forwarded-For
【4】 http://www.techbrunch.fr/securite/blind-sql-injection-header-http/
【5】http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#user-agent
【6】http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z14
【7】https://addons.mozilla.org/en-US/firefox/addon/cookies-manager-plus/
【8】https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
【9】http://sqlmap.sourceforge.net/doc/README.html
【10】http://msdn.microsoft.com/en-us/library/ms161953.aspx

 

未经允许不得转载:杂术馆 » 通过HTTP Headers进行SQL注入
分享到: 更多 (0)