如果你没有积极地参与Web应用程序开发,几乎就不可能了解HTTP协议的内部工作机理,也几乎没有机会知道Web应用程序与数据库进行交互的不同方法,也无法真正知道,当用户点击了一个链接或在浏览器的URL中键入字符时会发生什么。
如果你以前并没有编程技能,也没有积极地参与Web应用程序的开发,就不可能有效地执行渗透测试。作为渗透测试人员,你需要Web应用程序和HTTP协议的基础知识。
作为渗透测试人员,理解信息流是如何从客户端达到服务器,再返回服务器是非常重要的。举个例子,一位给你修电视的技术人员在接触电视的任何零件之前,必须理解电视的内部工作原理。本文将讨论一些实施渗透测试时的重要HTTP方法,旨在帮助没有Web应用渗透测试知识的渗透测试人员能够充分利用已有工具,成功地实施端到端的Web渗透测试。
实施渗透测试的重要HTTP方法
在客户端将请求发送给服务器时,它还应当通知服务器对目标源采取的行动。例如,如果一个用户仅希望查看一个网页的内容,就会激发GET方法,通知服务器将网页上的内容发送给客户端的Web浏览器。
本文将讨论几种方法,其宗旨就是要使渗透测试人员明确,在两端之间发生了哪些类型的数据交换。
GET/POST方法
GET方法通过URL将参数传递给Web应用程序。它取得表单中的所有输入并将其附加到URL。这种方法有些局限性;你在URL中通过GET方法最多只能传递255个字符,如果超过了这个数字,多数服务器就会在不发出警告的情况下截下超过限制的字符,或者会返回一个HTTP
414错误。使用GET方法的另一个重要问题是,输入的内容成为URL的一部分而易于被嗅探。如果用户键入了用户名和口令,而这些值都通过GET方法被传递给服务器,那么Web服务器上的任何人都可以从Apache或IIS的日志文件中找到用户名和口令。如果你收藏了URL,传递的值也会连同URL以明文的形式被保存。GET方法最初仅用于从服务器来恢复数据,但是许多开发人员用它向服务器发送数据。
POST方法类似于GET方法,它用于从服务器上检索数据,但它是通过请求主体来传递内容的。因为数据是在请求主体中传送的,所以攻击者就很难检测并攻击底层操作。
HEAD方法
攻击者使用HEAD方法来确认服务器的类型,因为服务器仅通过HTTP头来响应而无需发送任何负载。这是一种快速发现服务器版本和日期的方法。
TRACE方法
在使用TRACE方法时,检索服务器会通过响应主体中的原始请求消息,返回TRACE响应。TRACE方法用于确认中间设备(例如,代理服务器和防火墙)对请求做出的任何修改。有些代理服务器会在数据包经过时编辑HTTP头部,而这可以通过使用TRACE方法来确认。TRACE方法用于测试目的,你可以跟踪另一端接收了什么。微软的IIS服务器有一个与TRACE方法相同的TRACK命令。有一种更加高级的攻击称为XST(跨站跟踪),它利用跨站脚本攻击(XSS)和TRACE方法来窃取用户的cookies。
PUT和DELETE方法
PUT和DELETE方法是WebDAV(HTTP协议的一个扩展)的一部分,它支持对Web服务器上的文档和文件进行管理。开发者用WebDAV将制作完成的网页上传到web服务器。PUT用于上传数据到服务器,而DELETE用于删除数据。
OPTIONS方法
OPTIONS方法用于查询服务器所支持的方法。有一种方法可以很容易查询服务器支持什么:使用所有Linux发行版都内置的Netcat(nc)实用程序。我们可以在80端口上连接网站,然后使用OPTIONS方法查询服务器所支持的方法。我们可以使用HTTP/1.1向服务器发送请求。返回的响应就可以确认服务器所支持方法,连同其它信息,如内容长度、日期,等等。
作者:赵长林
来源:51CTO