Web应用程序渗透测试方法论 - 解析应用程序内容

尽可能地去发掘更多的与应用程序有关的内容

May 6, 2017 - 1 minute read -
web security test

注:原文来自《黑客攻防技术宝典》

map-app-content

1. 搜索可见的内容

(1) 配置浏览器,使用首选集成代理/抓取攻击。可以使用Burp与WebScarab监控和解析由代理服务器处理的Web内容,对站点实行被动抓取。

(2) 如果有用,配置浏览器,使用一个扩展(如IEWatch)监控和分析被浏览器处理的HTTP与HTML内容。

(3) 以常规方式浏览整个应用程序,访问发现的每一个链接和URL,提交每一个表单并执行全部多阶段功能。尝试在JavaScript激活与禁止、Cookie激活与禁止的情况下浏览。许多应用程序能够处理各种浏览器配置,渗透测试员可以获得应用程序内的不同内容和代码路径。

(4) 如果应用程序使用身份验证,并且渗透测试员已经拥有或可以建立一个登陆账户,那么他就可以使用该账户访问被保护的功能。

(5) 当浏览、监控通过拦截代理服务器的请求与响应时,了解被提交的数据种类,了解客户端如何控制服务器端应用程序的行为。

(6) 检查被动抓取生成的站点地图,确定任何尚未使用浏览器访问到的内容或功能。根据抓取结果,确定发现每一项内容的位置(例如,在Burp Spider中,检查“链接自”的详细内容)。使用浏览器访问以上内容,以便爬虫解析服务器的响应,确定其他任何内容。重复执行上述步骤,直到无法再确定其他内容或功能。

(7) 完成手动浏览和被动抓取后,可以用一组发现的URL作为种子,使用爬虫抓取应用程序。有时,这样可发现其他在手动浏览时忽略的内容。在进行自动抓取前,首先应确定任何危险的或可能会中断应用程序会话的URL,并配置爬虫,将它们排除在抓取范围之外。

2. 浏览公共资源

(1) 使用因特网搜索引擎和历史档案(例如,Wayback Machine)确定他们编入索引或保存的与目标应用程序有关的内容。

(2) 使用高级搜索选项提高搜索的效率。例如,在Google中,可以使用site:获取所有与目标站点有关的内容;使用link:获取链接到目标站点的其他站点。如果在搜索过程中找到现有应用程序已经删除的内容,仍然可以从搜索引擎的缓存中查看这些内容。这些已被删除的内容中可能包含尚未删除的其他资源的链接。

(3) 搜索在应用程序内容【如联系信息,包括并未在屏幕上显示的内容(如HTML注释)】中发现的任何姓名与电子邮件地址。除Web搜索外,还应进行新闻和分组搜索。在因特网论坛中寻找与目标应用程序及其支持基础架构有关的所有技术信息。

(4) 检查已发布的任何WSDL文件,以生成应用程序可能采用的功能名称和参数值列表。

3. 发现隐藏的内容

(1) 确定应用程序如何处理访问不存在的资源的请求。手动提出一些请求,访问已知有效和无效的资源,比较应用程序对这些请求的响应,找到一种确定资源并不存在的简单方法。

(2) 获取常见文件与目录名以及常见的文件扩展名列表。将这些列表添加到已经确定的应用程序内容以及通过这些内容推断出的其他内容中。设法了解应用程序开发者采用的命名方案。例如,如果有页面被命名为AddDocument.jsp和ViewDocument.jsp,就可能有名为EditDocument.jsp和RemoveDocument.jsp的页面存在。

(3) 审查所有客户端代码,确定任何与服务器端内容(包括HTML注释和禁用的表单元素)有关的线索。

(4) 使用自动化技巧,根据目录名、文件名及文件扩展名列表提出大量请求。监控应用程序的响应,确定存在的可访问的内容。

(5) 以刚刚枚举出的内容和模式作为用户指导的抓取以及自动化深入搜索的基础,重复进行这些内容查找操作。

4. 查找默认的内容

(1) 针对Web服务器运行Nikto,探查所有默认或已知存在的Neo的内容。使用Nikto的选项提高探查的效率。例如,使用-root选项制定查找默认内容的目录,或者使用-404选项制定一个标识定制化“文件未发现”页面的字符串。

(2) 手动核查所有可能有用的发现,减少探查结果中的错误报警。

(3) 请求服务器的根目录,在Host消息头中指定IP地址,确定应用程序是否使用任何不同的内容作出响应。如果是,则针对该IP地址及服务器名称运行Nikto扫描。

(4) 向服务器的根目录提出请求,指定一系列User-Agent消息头,如www.useragentstring.com/pages/useragentstring.php所示。

5. 枚举标识符指定的功能

(1) 确定任何通过在请求参数中提交一个功能标识符(例如,/admin.jsp?action=editUser或/main.php?func=A21)访问特殊应用程序的情况。

(2) 对用于访问单项功能的机制,应用段落3中的内容查找技巧。例如,如果应用程序使用一个包含功能名称的参数,首先应该确定指定无效功能时应用程序的行为,设法找到一个确定被请求的功能确实有效地简单方法。列出常用的功能名称或遍历所使用的标识符的语法范围。使枚举有效功能的操作自动化,使其尽可能迅速高效的完成。

(3) 如果使用,根据功能路径而非URL编制一幅应用程序内容地图,列出所有枚举出的功能和逻辑路径以及它们之间的依赖关系。

6. 调试参数

(1) 选择一个或几个使用隐藏调试参数(如debug=TRUE)的应用程序页面或功能。它们最有可能出现在登陆、搜索、文件上传或下载等关键功能中。

(2) 使用常用调试参数名(如debug、test、hide和source)与常用参数值(如true、yes、on和1)列表,排出这些名称与值的全部组合,向每一个目标功能提交每个名/值对。对于POST请求,在URL查询字符串和请求主体中提交参数。使用一些自动化技巧完成这些操作。例如,可以使用Burp Intruder中的“集束炸弹”攻击类型将两组有效载荷的全部组合结合起来。

(3) 在应用程序的响应中查找任何表示添加的参数对应用程序的行为造成影响的反常现象。