(转载翻译)OWASP v5 4.2.6 测试HTTP的方法

nicky   ·   发表于 2020-04-06 18:13:32   ·   技术文章投稿区

概要

HTTP提供了许多方法,可以用于在WEB服务器上执行操作。这些方法是为了帮助开发人员部署和测试HTTP应用程序。如果WEB服务器配置错误,则这些HTTP方法可以用于恶意的攻击。此外还要检查下跨站点跟踪(XST),它是使用服务器HTTP TRACE方法进行跨站点脚本编写的一种形式。尽管GET和POST是目前最常见的访问WEB服务器的方法,但是超文本协议(HTTP)也允许其它几种不是很常见的方法比如说:
1.HEAD
2.GET
3.POST
4.PUT
5.DELETE
6.TRACE
7.OPTIONS
8.CONNECT

这些方法中的某些可能会对WEB应用造成潜在的安全风险,因为它们可以允许攻击者去篡改WEB服务器上的文件,并在某些情况下,窃取用户的登录信息。更具体的说,应该禁止某些访问方法:
PUT:此方法可以让客户端在WEB服务器上上传新文件。攻击者可以上传而已文件(比如一句话木马)或仅通过使用受害者的服务器作为文件储存库来利用它。

DELETE:允许用户在客户端上删除文件。攻击者可以利用它作为破坏网站或发起DOS攻击的非常简单直接的方法

CONNECT:允许客户端将WEB服务器作为代理器

TRACE:此方法可以把已发送到服务器的任何字符串回显给客户端,并且主要用于调试目的。此方法最初被认为是危害的。直到有人发现可以进行跨站点跟踪攻击。

如果应用程序需要这些方法中的一种或多种,比如REST WEB服务,则要检查其使用是否有限制在受信任的用户和安全的条件下。

任意HTTP方法

有人发现,许多WEB程序框架都允许精心选择或任意HTTP方法绕过控制检查:
许多框架和语言都会把HEAD当作GET请求,尽管响应中没有任何东西。如果在GET请求上设置安全约束。可以使用”authenticatedUsers”来访问针对特定资源的GET请求,这样就可以绕过HEAD了。同时允许未经授权的盲目提交任意GET请求。

一些框架允许不受限制的使用任意HTTP方法。比如”JEFF”, “CAT”之类1.这些都会被系统当作GET方法。如果发现它们不受多种语言和框架的访问控制检查约束,则可以再次未经允许的盲目提交GET请求。

在许多情况下, GET或POST方法的代码是相对安全的。

测试方法

发现可以访问的方法:
为了执行测试,渗透测试人员需要某种方法确定WEB服务器可以支持哪些方法访问。测试方法很简单只需启动netcat或telnet:

从这个例子可以看出, OPTIONS提供了WEB服务器支持的方法列表,在这种情况下,我们可以看到启用了TRACE方法。

也可以使用nmap的http-methods NSE脚本执行相同的测试:

测试XST

注意:为了了解此攻击的逻辑和目标,必须熟悉跨XSS攻击。

TRACE方法虽然看似无害,但在某些情况下可以利用它来窃取用户登录信息。Jeremiah Grossman在2003年发现了这种技术,试图绕过Microsoft的Internet Explorer 6中引入的HTTPonly标签,来保护cookie不受JavaScript的访问。实际上,XSS中最经常发生的攻击方式之一是访问doucment.cookie对象,并将其发送到攻击者能控制的WEB服务器,以便可以劫持受害者会话。

将cookie标记为httpOnly会禁止JavaScript访问从而防止将其发送给第三方。但是,即使在这这种情况下,也可以使用TRACE方法绕过此保护并访问cookie。如前所述,TRACE只是返回发送到WEB服务器的任何字符串。为了验证其存在,测试人员可以按照以下示例进行操作:

响应的body内容恰好是原始请求的副本,这意味着目标对象允许此方法。现在有漏洞的地方在哪?如果渗透测试人员指示浏览器向WEB服务器发出TRACE请求,并且该浏览器具有该网站的cookie,则cookie会自动包含在请求头中,并会在回响中显示。这时,JavaScript可以访问cookie字符串,即使将cookie标记为httponly,也可以发送给第三方。

其实有很多种方法可以使浏览器发出TRACE请求,比如INTERNET EXPLORER中的XML HTTP Activex插件以及火狐和Netscape中的XMLDOM。但是处于安全原因,允许浏览器仅开始与恶意脚本所在的网站建立连接。这是一个缓解因素,因为攻击者需要将TRACE方法与另一个漏洞相结合才能发起攻击。

攻击者可以通过两种方式发起XSS攻击:
利用另一个服务器端漏洞:像正常的XSS攻击一样,攻击者在易受攻击的应用程序中注入包含TRACE请求的Javascirpt代码段。
利用客户端漏洞:攻击者创建一个包含恶意JAVASCRIPT代码的恶意网站,并利用受害者浏览器的某些跨域漏洞,来使JavaScript代码成功执行与支持该漏洞的网站连接TRACE。攻击者都是想获得cookie。

测试任意HTTP方法

查找要访问的页面,该页面可能有安全限制,因此通常会遇到强制302重定向到登陆页面。与许多WEB程序一样,此示例测试的URL就是这样运行的。然而如果发现200状态码不是在登陆页面,则可能进行绕过:

如果WEB框架或者是防火墙不支持这种“JEFF”方法,则会返回错误页面,如果它为请求提供服务,则很容易受到影响。

如果测试人员认为系统容易受到此问题的影响,则应发出类似SRF的攻击来充分利用此问题比如这样:
FOOBAR /admin/createUser.php?member=myAdmin
JEFF /admin/changePw.php?member=myAdmin&passwd=foo123&confirm=foo123
CATS /admin/groupEdit.php?group=Admins&member=myAdmin&action=add

测试绕过HEAD控制访问

跟上面的一样,如果测试人员得到405仿佛不允许或501方法未实现状态码,则目标是正常运行的。如果返回200状态码并且不包含任何东西,则可能是该应用程序已在未经身份验证或授权的情况下处理了请求。下面是例子:
HEAD /admin/createUser.php?member=myAdmin
HEAD /admin/changePw.php?member=myAdmin&passwd=foo123&confirm=foo123
HEAD /admin/groupEdit.php?group=Admins&member=myAdmin&action=add

转载:
https://github.com/OWASP/wstg/blob/master/document/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/06-Test_HTTP_Methods.md

用户名金币积分时间理由
奖励系统 100.00 0 2020-08-31 08:08:30 投稿满 10 赞奖励
奖励系统 50.00 0 2020-08-30 16:04:34 投稿满 5 赞奖励

打赏我,让我更有动力~

0 Reply   |  Until 2020-4-6 | 578 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.