在进行任何全面测试以前,枚举应用程序及其攻击面是一个关键的前提,由于它容许测试人员识别可能的弱点区域。本节旨在帮助识别和绘制应用程序中应在枚举和映射完成后应进行调查的区域。php
了解请求的造成方式以及应用程序的典型响应浏览器
在开始任何测试以前,测试人员应该始终充分了解应用程序以及用户和浏览器如何与之通讯。当测试人员遍历应用程序时,他们应该特别注意全部HTTP请求(GET和POST方法,也称为Verbs),以及传递给应用程序的每一个参数和表单字段。此外,他们应该注意什么时候使用GET请求以及什么时候使用POST请求将参数传递给应用程序。使用GET请求是很常见的,可是当传递敏感信息时,它一般在POST请求的主体内完成。服务器
请注意,要查看POST请求中发送的参数,测试人员须要使用拦截代理(例如,OWASP:Zed攻击代理(ZAP))或浏览器插件等工具。在POST请求中,测试人员还应特别注意传递给应用程序的任何隐藏表单字段,由于这些字段一般包含敏感信息,例如状态信息,项目数量,项目价格,开发人员从不供您查看或更改。cookie
根据做者的经验,在此阶段的测试中使用拦截代理和电子表格很是有用。代理将跟踪测试人员和应用程序之间的每一个请求和响应。此外,此时,测试人员一般会捕获每一个请求和响应,以便他们能够准确地查看传递给应用程序的每一个标头,参数等以及返回的内容。这有时可能很是繁琐,特别是在大型互动网站上(想一想银行应用程序)。可是,经验将显示要查找的内容,而且能够显着减小此阶段。工具
当测试人员遍历应用程序时,他们应该记录URL,自定义标题或请求/响应正文中的任何有趣参数,并将它们保存在电子表格中。电子表格应包括所请求的页面(也能够从代理添加请求编号,以备未来参考),有趣的参数,请求类型(POST / GET),访问是否通过身份验证/未经身份验证,若是是SSL若是它是多步骤过程的一部分,则使用,以及任何其余相关注释。一旦他们将应用程序的每一个区域都映射出来,他们就能够浏览应用程序并测试他们已识别的每一个区域,并记录哪些有效,哪些无效。本指南的其他部分将肯定如何测试每一个感兴趣的领域,测试
如下是全部请求和响应的一些兴趣点。在请求部分中,关注GET和POST方法,由于这些方法出如今大多数请求中。请注意,可使用其余方法,例如PUT和DELETE。一般,这些更罕见的请求(若是容许)可能会暴露漏洞。本指南中有一个专门用于测试这些HTTP方法的部分。网站
要求:编码
对策:加密
测试应用程序入口点:
如下是有关如何检查应用程序入口点的两个示例。spa
此示例显示了将从在线购物应用程序购买商品的GET请求。
获取https://xxxx/shoppingApp/buyme.asp?CUSTOMERID = 100&ITEM = z101a&PRICE = 62.50&IP = xxxx 主持人:xxxx Cookie:SESSIONID = Z29vZCBqb2IgcGFkYXdhIG15IHVzZXJuYW1lIGlzIGZvbyBhbmQgcGFzc3dvcmQgaXMgYmFy
结果预期:
在这里,测试人员会记录请求的全部参数,例如CUSTOMERID,ITEM,PRICE,IP和Cookie(可能只是编码参数或用于会话状态)。
此示例显示了一个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服务或任何其余功能)。