在进行任何全面测试之前,枚举应用程序及其攻击面是一个关键的前提,因为它允许测试人员识别可能的弱点区域。本节旨在帮助识别和绘制应用程序中应在枚举和映射完成后应进行调查的区域。
测试目标
了解请求的形成方式以及应用程序的典型响应
如何测试
在开始任何测试之前,测试人员应该始终充分了解应用程序以及用户和浏览器如何与之通信。当测试人员遍历应用程序时,他们应该特别注意所有HTTP请求(GET和POST方法,也称为Verbs),以及传递给应用程序的每个参数和表单字段。此外,他们应该注意何时使用GET请求以及何时使用POST请求将参数传递给应用程序。使用GET请求是很常见的,但是当传递敏感信息时,它通常在POST请求的主体内完成。
请注意,要查看POST请求中发送的参数,测试人员需要使用拦截代理(例如,OWASP:Zed攻击代理(ZAP))或浏览器插件等工具。在POST请求中,测试人员还应特别注意传递给应用程序的任何隐藏表单字段,因为这些字段通常包含敏感信息,例如状态信息,项目数量,项目价格,开发人员从不供您查看或更改。
根据作者的经验,在此阶段的测试中使用拦截代理和电子表格非常有用。代理将跟踪测试人员和应用程序之间的每个请求和响应。此外,此时,测试人员通常会捕获每个请求和响应,以便他们可以准确地查看传递给应用程序的每个标头,参数等以及返回的内容。这有时可能非常繁琐,特别是在大型互动网站上(想想银行应用程序)。但是,经验将显示要查找的内容,并且可以显着减少此阶段。
当测试人员遍历应用程序时,他们应该记录URL,自定义标题或请求/响应正文中的任何有趣参数,并将它们保存在电子表格中。电子表格应包括所请求的页面(也可以从代理添加请求编号,以备将来参考),有趣的参数,请求类型(POST / GET),访问是否经过身份验证/未经身份验证,如果是SSL如果它是多步骤过程的一部分,则使用,以及任何其他相关注释。一旦他们将应用程序的每个区域都映射出来,他们就可以浏览应用程序并测试他们已识别的每个区域,并记录哪些有效,哪些无效。本指南的其余部分将确定如何测试每个感兴趣的领域,
以下是所有请求和响应的一些兴趣点。在请求部分中,关注GET和POST方法,因为这些方法出现在大多数请求中。请注意,可以使用其他方法,例如PUT和DELETE。通常,这些更罕见的请求(如果允许)可能会暴露漏洞。本指南中有一个专门用于测试这些HTTP方法的部分。
要求:
- 确定使用GET的位置以及使用POST的位置。
- 识别POST请求中使用的所有参数(这些参数位于请求正文中)。
- 在POST请求中,要特别注意任何隐藏的参数。发送POST时,所有表单字段(包括隐藏参数)都将在HTTP消息正文中发送给应用程序。除非使用代理或查看HTML源代码,否则通常不会看到这些内容。此外,显示的下一页,其数据和访问级别都可以根据隐藏参数的值而不同。
- 识别GET请求中使用的所有参数(即URL),特别是查询字符串(通常在?标记之后)。
- 识别查询字符串的所有参数。这些通常是对形式,例如foo = bar。另请注意,许多参数可以在一个查询字符串中,例如由&,〜,:或任何其他特殊字符或编码分隔。
- 在识别一个字符串或POST请求中的多个参数时,需要注意的是执行攻击需要部分或全部参数。测试人员需要识别所有参数(即使编码或加密),并确定应用程序处理哪些参数。本指南的后面部分将确定如何测试这些参数。此时,只需确保识别出其中的每一个。
- 还要注意通常看不到的任何其他或自定义类型的标头(例如debug = False)。
对策:
- 确定新Cookie的设置位置(Set-Cookie标头),修改或添加。
- 确定在正常响应期间(即未修改的请求)中存在任何重定向(3xx HTTP状态代码),400状态代码,特别是403 Forbidden和500内部服务器错误的位置。
- 另请注意使用任何有趣的标头的位置。例如,“服务器:BIG-IP”表示站点是负载平衡的。因此,如果站点负载平衡且一个服务器配置不正确,则测试人员可能必须发出多个请求才能访问易受攻击的服务器,具体取决于所使用的负载平衡类型。
黑盒测试
测试应用程序入口点:
以下是有关如何检查应用程序入口点的两个示例。
例1
此示例显示了将从在线购物应用程序购买商品的GET请求。
获取https://xxxx/shoppingApp/buyme.asp?CUSTOMERID = 100&ITEM = z101a&PRICE = 62.50&IP = xxxx
主持人:xxxx
Cookie:SESSIONID = Z29vZCBqb2IgcGFkYXdhIG15IHVzZXJuYW1lIGlzIGZvbyBhbmQgcGFzc3dvcmQgaXMgYmFy
结果预期:
在这里,测试人员会记录请求的所有参数,例如CUSTOMERID,ITEM,PRICE,IP和Cookie(可能只是编码参数或用于会话状态)。
例2
此示例显示了一个POST请求,该请求将使您登录到应用程序。
POST https://xxxx/KevinNotSoGoodApp/authenticate.asp?service = login
主持人:xxxx
Cookie:SESSIONID = dGhpcyBpcyBhIGJhZCBhcHAgdGhhdCBzZXRzIHByZWRpY3RhYmxlignvb2tpZXMgYW5kIG1pbmUgaXMgMTIzNA ==
CustomCookie = 00my00trusted00ip00is00x.xxx00
POST消息的正文:
用户管理=&传= pass123&调试=真fromtrustIP =真
结果预期:
在此示例中,测试人员会记录之前的所有参数,但请注意参数是在消息正文中传递而不是在URL中传递。此外,请注意正在使用的自定义cookie。
灰盒测试
通过Gray Box方法测试应用程序入口点将包括上面已经识别的所有内容,并添加一个。如果存在应用程序从中接收数据并对其进行处理的外部源(例如SNMP陷阱,系统日志消息,SMTP或来自其他服务器的SOAP消息),则与应用程序开发人员的会议可以识别将接受或期望用户的任何功能输入以及它们的格式。例如,开发人员可以帮助理解如何制定应用程序可以接受的正确SOAP请求以及Web服务所在的位置(如果在黑盒测试期间尚未识别Web服务或任何其他功能)。