Web应用程序黑客的方法论(6) --Test Access Controls

Posted by D on February 13, 2020

Web应用程序黑客的方法论来自书本 The Web Application Hacker’s Handbook

Testing access controls

6.1 了解访问控制要求(Understand the Access Control Requirements)

6.1.1
基于应用程序内实现的核心功能,了解垂直分隔(不同级别的用户可以访问不同类型的功能)和水平分隔(相同特权级别的用户可以访问不同的数据子集)方面对访问控制的广泛要求.通常,两种类型的隔离都存在。例如,普通用户也许可以访问他们自己的数据,而管理员可以访问每个人的数据。

6.1.2
查看您的应用程序映射结果,以识别代表权限提升攻击最有效目标的功能区域和数据资源类型。

6.1.3
为了对访问控制漏洞执行最有效的测试,理想情况下,您应该获得许多具有不同垂直和水平特权的不同帐户。如果可以进行自我注册,则可以直接从应用程序中获取后者。要获得前者,您可能需要应用程序所有者的合作(或需要利用某些漏洞来访问高特权帐户)。各种帐户的可用性将影响您可以执行的测试类型,如下所述。

6.2 使用多个帐户进行测试(Test with Multiple Accounts)

6.2.1
如果应用程序强制执行垂直特权隔离,请首先使用一个功能强大的帐户来定位它可以访问的所有功能。然后使用特权较少的帐户并尝试访问此功能的每个项目。

  • 6.2.1.1 使用Burp,在一个用户上下文中浏览所有应用程序的内容。
  • 6.2.1.2 查看Burp网站地图的内容,以确保您已确定要测试的所有功能。然后,注销该应用程序,然后使用其他用户上下文重新登录。使用上下文菜单选择compare site maps功能,以确定较低特权用户可以访问哪些高特权请求。有关此技术的更多详细信息,请参见第8章。

6.2.2
如果应用程序强制执行横向特权隔离,请执行使用两个具有相同特权的不同帐户的等效测试级别,尝试使用一个帐户访问属于该帐户的数据其他帐户。这通常涉及替换请求中的标识符(例如文档ID)以指定属于另一个用户的资源。

6.2.3
手动检查密钥访问控制逻辑。

  • 6.2.3.1 对于每个用户特权,查看用户可用的资源。通过使用未授权用户的会话令牌重播请求,尝试从未授权用户帐户访问那些资源。

6.2.4
当您执行任何类型的访问控制测试时,请确保分别测试多阶段功能的每个步骤,以确认访问控制是否已在每个阶段正确实施,或者应用程序是否假定访问后一阶段的用户必须通过安全检查在早期阶段实施。例如,如果包含表单的管理页面受到了适当的保护,请检查实际表单提交是否也受到适当的访问控制。

6.3 使用受限访问进行测试(Test with Limited Access)

6.3.1
如果您没有权限访问具有不同特权级别的帐户,或者无法访问具有不同数据访问权限的多个帐户,那么测试损坏的访问控制就不那么容易了。因为您不知道利用这些弱点所需的URL名称,标识符和参数,所以许多常见的漏洞将很难定位。

6.3.2
在使用低特权帐户的应用程序映射练习中,您可能已经标识了特权功能(例如管理界面)的URL。如果这些得不到足够的保护,您可能已经知道这一点。

6.3.3
反编译存在的所有已编译客户端,并提取对服务器端功能的所有引用。

6.3.4
使用标识符(例如帐号或订单参考)可以访问受水平访问控制约束的大多数数据。要测试仅使用一个帐户访问控制是否有效,您必须尝试猜测或发现与其他用户的数据关联的标识符。如果可能,快速连续生成一系列标识符(例如,通过创建多个新订单)。如果可能,快速连续生成一系列标识符(例如,通过创建多个新订单)。尝试识别任何可能使您能够预测发布给其他用户的标识符的模式。如果无法生成新的标识符,则可能只能分析现有的标识符并在此基础上进行猜测。

6.3.5
如果找到预测发给其他用户的标识符的方法,请使用第14章中介绍的技术进行自动攻击,以收集属于其他用户的有趣数据。使用Burp Intruder中的Extract Grep函数从应用程序的响应中捕获相关信息。

6.4 测试不安全的访问控制方法(Test for Insecure Access Control Methods)

6.4.1
一些应用程序以天生地不安全的方式基于请求参数实现访问控制。在任何关键请求中查找诸如edit = false或access = read之类的参数,并根据其明显的作用对其进行修改,以尝试干扰应用程序的访问控制逻辑。

6.4.2
某些应用程序的访问控制决策基于HTTP Referer标头。例如,应用程序可以适当地控制对/admin.jsp的访问,并接受将其显示为Referer的任何请求。要测试此行为,请尝试执行一些您被授权的特权操作,然后提交缺少或修改的Referer标头。如果此更改导致应用程序阻止您的请求,则可能是以不安全的方式使用Referer标头。尝试执行与未授权用户相同的操作,但是提供原始的Referer标头,然后查看操作是否成功。

6.4.3
如果HEAD是网站上允许的方法,请测试对URL的不安全的容器管理的访问控制。使用HEAD方法发出请求,以确定应用程序是否允许它。

Web应用程序黑客的方法论(5)
Web应用程序黑客的方法论(7)

: