如何利用 HTTP 方法

信息安全 Web应用程序 应用安全 攻击 http
2021-08-18 08:08:21

许多安全扫描程序,如niktonessusnmapw3af有时会显示某些 HTTP 方法(如 HEAD、GET、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT 等)容易受到攻击。

这些方法有什么作用以及如何利用它们?

我正在寻找比 POST 或 GET 注入(例如,更改字段)等常见漏洞更具创造性的东西。与标头的利用技术相比,如果您的回答向我展示了标头的正常使用的简短示例,这将有助于我理解。

3个回答

其中一些方法通常很危险,有些方法在生产环境中是无关紧要的,可以被认为是额外的攻击面。不过,也值得关闭它们,因为您可能不需要它们:

  • HEAD、GET、POST、CONNECT - 这些都是完全安全的,至少就 HTTP 方法本身而言。当然,请求本身可能有恶意参数,但这与方法是分开的......这些通常是(注意下面的例外)唯一应该启用的参数。
  • PUT、DELETE - 正如@Justin 所提到的,这些方法最初旨在作为文件管理操作。
    一些网络服务器仍然支持它们的原始格式。也就是说,您可以任意更改或删除服务器文件系统中的文件。显然,如果启用了这些,它会使您面临一些危险的攻击。如果您绝对必须启用这些方法,
    文件访问权限应该受到非常严格的限制。但是无论如何,您不应该 - 现在,您可以使用一些简单的脚本(如果这是一个静态网站 - 如果它是一个实际的应用程序,只需自己编写代码)来支持此功能(如果您需要它)。
    注意:启用这些方法(PUT 和 DELETE)的一个有效场景是,如果您正在开发一个严格的RESTfulAPI 或服务;但是,在这种情况下,该方法将由您的应用程序代码处理,而不是由 Web 服务器处理。

  • OPTIONS - 这是一种诊断方法,它返回一条主要用于调试等的消息。令人惊讶的是,此消息基本上报告了 Web 服务器上哪些 HTTP 方法处于活动状态。实际上,如今这很少用于合法目的,但它确实为潜在的攻击者提供了一点帮助:它可以被认为是寻找另一个漏洞的捷径。
    现在,这本身并不是一个真正的漏洞。但由于它没有真正的用途,它只会影响您的攻击面,理想情况下应该禁用它。
    注意:尽管如此,如今 OPTIONS 方法仍用于多种合法目的,例如某些 REST API 需要 OPTIONS 请求,CORS 需要飞行前请求,等等。所以肯定有一些场景应该启用 OPTIONS,但默认值仍然应该是“除非需要,否则禁用”。

  • TRACE - 这是令人惊讶的......再次,一种诊断方法(如@Jeff 提到的),它在响应正文中返回整个 HTTP 请求。这包括请求正文,还包括请求标头,例如 cookie、授权标头等。
    不足为奇的是,这可能会被大量滥用,例如经典的跨站点跟踪 (XST)攻击,其中 XSS 向量可用于检索 HttpOnly cookie、授权标头等。绝对应该被禁用。

  • 另一组方法值得一提:ALL OTHERS对于某些网络服务器,为了启用/禁用/限制某些 HTTP 方法,您可以在配置文件中明确设置它们的一种或另一种方式。但是,如果未设置默认值,则可以“注入”其他方法,绕过 Web 服务器可能已实施的某些访问控制(效果不佳)。例如,请参阅有关 OWASP 的更多信息

使用 PUT 方法,您可以上传服务器上的任何文件。这可用于执行跨站点脚本 (XSS)。今天,我进行了这个攻击,所以在这里回复我的经验。下面解释了如何执行此操作。

PUT /XSS.html HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.myblog.com
Accept-Language: en-us
Connection: Keep-Alive
Content-type: text/html
Content-Length: 182
(Input your XSS script here) 

服务器返回 201 状态码,表示“文件已成功创建”。

HTTP/1.1 201 Created
Date: Mon, 05 May 2014 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Content-type: text/html
Content-length: 30
Connection: Closed

现在我们可以尝试在浏览器中访问这个上传的 XSS.html 文件。一旦你访问这个页面,你就会得到一个 XSS 弹出窗口。

同样,这也可以被进一步利用来执行命令注入,尽管我还没有尝试过。如果应用程序使用 XML,则也可以执行 XML 外部实体攻击。还没有这样做。目录遍历攻击也是可能的。

关于 TRACE 的主要警告是,它旨在分离 HTTP 请求的路由,类似于 traceroute 旨在分离数据包的路由。关键区别在于 TRACE 命令涉及后端操作和披露已收到的内容。如果您的前端提供 API 密钥或与后端类似的东西,这可能是一个问题。

查看RFC 2616以获取有关 TRACE 的更多信息以及有关其他标头的说明。