2019测试指南-web应用程序安全测试(二)识别应用程序入口点

在进行任何全面测试以前,枚举应用程序及其攻击面是一个关键的前提,由于它容许测试人员识别可能的弱点区域。本节旨在帮助识别和绘制应用程序中应在枚举和映射完成后应进行调查的区域。php

 

测试目标

了解请求的造成方式以及应用程序的典型响应浏览器

 

如何测试

在开始任何测试以前,测试人员应该始终充分了解应用程序以及用户和浏览器如何与之通讯。当测试人员遍历应用程序时,他们应该特别注意全部HTTP请求(GET和POST方法,也称为Verbs),以及传递给应用程序的每一个参数和表单字段。此外,他们应该注意什么时候使用GET请求以及什么时候使用POST请求将参数传递给应用程序。使用GET请求是很常见的,可是当传递敏感信息时,它一般在POST请求的主体内完成。服务器


请注意,要查看POST请求中发送的参数,测试人员须要使用拦截代理(例如,OWASP:Zed攻击代理(ZAP))或浏览器插件等工具。在POST请求中,测试人员还应特别注意传递给应用程序的任何隐藏表单字段,由于这些字段一般包含敏感信息,例如状态信息,项目数量,项目价格,开发人员从不供您查看或更改。cookie


根据做者的经验,在此阶段的测试中使用拦截代理和电子表格很是有用。代理将跟踪测试人员和应用程序之间的每一个请求和响应。此外,此时,测试人员一般会捕获每一个请求和响应,以便他们能够准确地查看传递给应用程序的每一个标头,参数等以及返回的内容。这有时可能很是繁琐,特别是在大型互动网站上(想一想银行应用程序)。可是,经验将显示要查找的内容,而且能够显着减小此阶段。工具


当测试人员遍历应用程序时,他们应该记录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”表示站点是负载平衡的。所以,若是站点负载平衡且一个服务器配置不正确,则测试人员可能必须发出多个请求才能访问易受攻击的服务器,具体取决于所使用的负载平衡类型。

 

黑盒测试

测试应用程序入口点: 
如下是有关如何检查应用程序入口点的两个示例。
spa

 

例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服务或任何其余功能)。

相关文章
相关标签/搜索