(1)将Burp配置为代理服务器并禁用拦截,以一个用户账户浏览应用程序的所有内容。如果要测试垂直访问控制,则使用权限较高的账户。
(2)检查Burp的站点地图的内容,确保已确定要测试的所有功能。然后使用上下文菜单选择“比较站点地图”(compare site maps)功能。
(3)要选择第二个进行比较的站点地图,可以从Burp状态文件中加载该地图,或让Burp在新会话中动态重新请求第一个站点地图。要测试同一类型的用户之间的水平访问控制,只需加载以前保存的、已将应用程序映射为其他用户的状态文件。要测试垂直访问控制,最好是以低 权限用户身份重新请求高权限站点地图,因为这样可确保完全涵盖相关的功能。
(4)要在不同的会话中重新请求第一个站点地图,需要使用低权限用户会话的详细资料配置Burp的会话处理功能(例如,通过记录一个登录宏或提供要在请求中使用的特定cookie)。我们将在第14章中详细讨论此功能。还可能需要定义适当的范围规则,以防止Burp请求任何注销功能。
图8-1显示了一次简单站点地图比较的结果。其中的深色部分是站点地图之间差异分析的结果,这些部分显示了两个地图之间已添加、删除或修改的项目。对于已修改的项目,该表格提供了一个“diff count”列,其中列出了将第一个地图中的项目修改为第二个地图中的项目所需的编辑次数。而且,如果选中一个项目,其响应也以深色显示,以显示那些编辑在响应中的位置。
图8-1 显示以不同用户账户访问的内容之间的差异的站点地图比较
解释站点地图比较的结果需要一定的智慧,并需要了解特定应用程序功能的意义及用法。例如,图8-1显示了在用户查看主页时返回给每名用户的响应。其中的两个响应显示了针对登录用户的不同说明,而且管理用户拥有一个额外的菜单项。这些差异是预期行为,它们与应用程序访问控制的效率无关,因为它们只与用户界面有关。
用户请求顶级管理页面时返回的响应如图8-2所示。其中显示,管理用户可以看到一个包含可用选项的菜单,而普通用户则看到“未授权”(not authorized)消息。这些差异表明,访问控制已得到正确应用。用户请求“列举用户”(list users)管理功能时返回的响应如图8-3所示。其中显示的两个响应完全相同,这表示应用程序易于受到攻击,因为普通用户不应拥有访问此功能的权限,而且该用户的用户界面中也没有任何指向该功能的链接。
图8-3 低权限用户可以访问用于列举应用程序用户的管理功能
仅仅通过分析站点地图树及查看项目之间的差异数量,并不足以评估应用程序访问控制的效率。出现两个完全相同的响应可能表示存在漏洞(例如,在披露敏感信息的管理功能中),也可能不会导致任何危险(例如,在不受保护的搜索功能中)。相反,两个不同的响应也有可能表示存在漏洞(例如,在每次访问都返回不同内容的管理功能中),也可能不会导致任何危险(例如,在显示当前登录用户的用户信息的页面中)。基于上述原因,在确定访问控制漏洞方面,完全自动化的工具往往效率低下。使用Burp的“站点地图比较”功能,可以尽可能自动完成确定漏洞的过程,以现成的格式获得所需的全部信息,同时应用自己在应用程序功能方面的知识来确定任何具体的漏洞。