三分钟了解HTTP TRACE方法
Brian King //
我们所有的扫描工具都告诉我们应当禁用HTTP TRACE和TRACK方法。大家普遍认为这是因为攻击者可以利用这些方法从合法用户那里窃取敏感信息。但TRACE方法对攻击者还有另一个用途,而这与其他用户无关。
OWASP建议禁用HTTP TRACE,因为它可用于跨站追踪(Cross Site Tracing)。
https://www.owasp.org/index.php/Cross_Site_Tracing
CERT指出它可以“结合跨域浏览器漏洞读取第三方域的敏感头信息”。
https://www.kb.cert.org/vuls/id/867593
《最致命的Web攻击》一书提到你可以读取cookies。
跨站追踪(XST):被误解的漏洞
以上说法都正确,但略显过时。在现代浏览器中,XMLHttpRequest不再发送“TRACE”请求,且CORS框架阻止向未明确允许的外域站点发送XHR请求。因此这些老式攻击不再有效。
CORS阻止GET请求,浏览器阻止TRACE请求
但是!TRACE仍然是一个有用的信息获取工具。记住,TRACE动词由Web服务器处理。你的请求在到达Web服务器的途中可能会经过其他组件。如果这些组件添加了头信息,那么你的TRACE响应将包含这些头信息,从而获得一些你原本不知道的信息。
在Web服务器前面可能有什么有趣的东西?Web应用防火墙(WAF),它可能会过滤请求以在到达Web服务器之前检测并阻止攻击。
这些不是我发送的头信息…
X-Forwarded-For头是一些WAF添加的头信息之一,有时WAF本身会使用它来决定是否过滤该请求。如果该头存在且包含WAF的IP地址,那么请求必定来自WAF,且必定不是恶意的,对吗?
那么,如果我们在发送的请求中添加这样一个头呢?
嘿,看。我的X-Forwarded-For头通过了。
这个WAF不仅创建X-Forwarded-For头,还将请求系统的IP地址(我的公网IP,以103结尾)添加到任何已存在的内容中。如果你知道WAF的IP地址(你知道,因为你在与它通信),你可以尝试告诉WAF你的请求实际上是WAF的请求,应该被忽略。如果它相信了你,那么你就绕过了WAF。
这是最直接的WAF绕过方法。这根本不是新发现,但此处的TRACE动词向你展示了它为何能奏效。
如果你想在家尝试,以下是我在上面XHR演示中使用的HTML代码:
|
|
评论
RjSec - 2016年7月14日 @ 7:21 am
嘿Brian,
如你所说浏览器阻止TRACE请求,我如何从浏览器使用你提供的代码发送TRACE请求?
Brian - 2016年7月14日 @ 8:49 am
嘿,RjSec!
问题就在于此——如今的浏览器不会为你做这件事。
我使用BurpSuite完成了这个操作,但你也可以使用ZAP或其他代理,甚至命令行如果你喜欢。
以下是我刚才操作时得到的结果——你输入下面第一和第五行(在输入“TRACE / HTTP/1.0”后按两次回车):
|
|