渗透测试步骤

(1)在以多步骤方式执行某个操作,需要从客户端向服务器提交几个不同的请求时,应单独测试每一个请求,以确定是否已对这些请求应用了访问控制。应确保测试每一个请求,包括表单提交、重定向,以及任何非参数化的请求。

(2)尝试发现应用程序确定你是否到达特定阶段(必须通过合法的途径到达该阶段)的任何位置。尝试使用权限较低的账户到达该阶段,检测是否可以实施任何权限提升攻击。

(3)手动执行这种测试的一种方法,是在浏览器中多次完成受保护的多阶段过程,并使用 代理服务器将在不同请求中提供的会话令牌切换为权限较低的用户的令牌。

(4)通过使用Burp Suite的“浏览器中的请求”(request in browser)功能,可以显著加快这个过程。

(a)使用权限较高的账户遍历整个多阶段过程。

(b)使用权限较低的账户(或根本不使用账户)登录应用程序。

(c)在Burp Proxy的历史记录中,找到权限较高的用户执行多步骤过程时提出的请求序列。对于序列中的每个请求,选择“当前浏览器会话在浏览器中的请求”(request in browser in current browser session)上下文菜单项(如图8-4所示)。将提供的URL粘贴到以权限较低的用户身份登录的浏览器中。

img221

图8-4 使用Burp在当前浏览器会话中请求给定项

(d)如果应用程序允许,则使用浏览器以正常方式完成剩下的多阶段过程。

(e)查看浏览器和代理服务器历史记录中的结果,确定是否可以成功执行特权操作。

当你对指定的请求选择Burp的“当前浏览器会话在浏览器中的请求”功能时,Burp会向你提供一个指定Burp的内部Web服务器的唯一URL,然后,将这个URL粘贴到浏览器的地址栏中。当你在浏览器中请求这个URL时,Burp将返回一个指向最初指定的URL的重定向。浏览器访问该重定向时,Burp将用最初指定的请求替换该请求,同时保持Cookie消息头不变。如果正测试不同的用户账户,可以加快这个过程。以不同用户登录几个不同的浏览器,并将上述URL粘贴到每个浏览器中,看应用程序如何处理使用不同浏览器登录的用户的请求。(需要注意的是,由于同一浏览器通常会在不同窗口之间共享cookie,因此,在执行这个测试时,需要使用不同的浏览器产品,或安装在不同机器上的浏览器。)

img004  提示  以不同的用户账户测试多阶段过程时,检查不同用户逐个提出的请求的序列有助于确定有利于进一步调查的细微差异。

如果使用不同浏览器以不同用户身份访问应用程序,可以在Burp中创建供每个浏览器使用的不同代理监听器(需要在每个浏览器中更新代理服务器配置,以指向相关监听器)。然后,对于每个浏览器,使用代理服务器历史记录中的上下文菜单打开新的历史记录窗口,并将显示过滤器设置为仅显示相关代理监听器提出的请求。

8.2.3 通过有限访问权限进行测试

如果只有一个用户级账户可用于访问应用程序(或根本没有任何账户),这时,要测试访问控制的效率,还需要完成其他工作。实际上,无论在什么情况下,要想执行全面彻底的测试,都需要完成其他工作。在应用程序中,可能存在一些未受到严格保护的功能,而且任何用户界面均未明确提供这些功能的链接。例如,可能有一些旧功能尚未删除,或者新功能已部署但未向用户公布。