1.BrokenAccessControl(BAC)是Web应用中的一个常见漏洞。由于其存在范围广、危害大,被OWASP列为Web应用程序十大安全隐患中的第二位。1.非授权访问的产生例如在一个订单系统中,用户可以查询自己的订单信息。用户A查询订单时,发送的HTTP请求中包含参数“orderid=A”。订单系统拿到orderid后,最后会查询数据库。查询语句类似于“select*fromtablenamewhereorderid=A”。用户B查询订单时,发送的HTTP请求中包含参数“orderid=B”,系统查询数据库语句类似于“select*fromtablenamewhereorderid=B”。一般情况下,每个用户只会查询自己的订单。但是,当用户B修改自己的HTTP请求参数为“orderid=A”时,用户B执行的数据库语句变为“select*fromtablenamewhereorderid=A”,导致用户B获取到A的订单信息。一般来说,网站设计者会对用户的访问权限进行检查,保证用户只能访问自己的资源,但是业务复杂到一定程度后,这样的数据非常多,从订单信息到地址数据、支付信息等等,都需要小心处理。一旦有任何遗漏,就会存在未授权访问漏洞。2.未经授权访问的类型。越权访问分为纵向越权访问、横向越权访问和交叉越权访问。垂直越权是指不同用户级别之间的越权,比如普通用户执行管理员用户的权限。横向越权操作是指同一级别用户之间的越权操作。(1)横向越界假设用户A和用户B属于同一个角色X,权限级别相同,都可以获得自己的私有数据(数据A和数据B),但是如果系统只验证角色X可以访问数据,并且没有对数据进行细分和验证,导致用户A可以访问用户B的数据(数据B),那么用户A访问数据B的行为称为水平越权访问。(2)垂直提权垂直提权也称为提权攻击。其原理是因为web应用没有做权限控制,或者只对菜单做权限控制,恶意用户只要猜到其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,所以从而达到提权的目的。3、越权访问测试本文以三人系统为例,首先介绍三人系统。最初,三人系统拥有三个不同权限的管理员:系统管理员、安全管理员和安全审计员。三位成员级别相同,但主要职能不同。另外,根据不同的web系统的要求,会出现三人用户的子用户和普通用户,不同权限的用户可能会与普通用户(如操作员、监控员等)分开。为满足涉密产品的安全需求,三人制导致用户权限划分细化、繁多。与普通系统相比,权限判断更加复杂,需要更加细化。因此,权限控制更加困难,导致三人系统存在未授权漏洞的概率更高。(1)通过三位成员交叉授权登录管理员A,执行管理员A的功能x,抓取并保存x的功能包。注销管理员A,登录管理员B,抓取管理员B的cookie,将x功能包中的cookie替换为B的cookie,发送x功能包。通过响应包或者x函数的网页查看请求是否成功。以上是一种常见的越权测试方法,但在实际测试中需要注意以下几点:一般Web应用都是使用COOKIE中的信息来验证用户身份,但并不是所有的Web应用都这样。当遇到身份认证不是cookie的web应用时,需要更换的是系统认证身份的地方,而不是cookie。下图是COOKIE认证和jitabc认证用户身份的登录状态。当遇到有COOKIE共享的web应用(同一个COOKIE多次登录同一个或不同的用户),因为COOKIE不变,不需要替换COOKIE,直接替换Web当前用户直接发送一个请求测试。但是此时,未授权漏洞和退出后无法清除cookie的问题会影响未授权漏洞的验证。三个成员之间的权限交叉最常发生在同一职能不同权限的情况下。例如:系统管理员和安全管理员都有用户功能模块,但只有系统管理员有添加用户的功能,只有安全管理员有授予用户权限的功能,功能模块在程序但是,当子功能缺乏验证时,就会出现未经授权的漏洞。(2)三人管理员垂直越界该漏洞是当用户拥有某项功能的权限,增删改查的值有限制但限制不完善时出现的问题。示例:三个管理员可以添加各自权限的子用户。抓取系统管理员的用户角色添加功能。有一个roles=1的字段,可能是角色控制的值。改成roleid=2,继续发送发现请求成功。在网上查到用户被赋予了安全管理员的角色,显然存在越权漏洞。注意:在实际测试中,可能不会出现roleid这样明显的角色词。这时候就需要仔细分析,尝试找出请求中各个字段的含义,然后再进行测试。该漏洞常发生在用户添加和角色分配与用户角色相关但有限制的地方。一旦程序限制不完善,就会出现漏洞。(3)三人子用户/普通用户未经授权垂直登录管理员C,执行管理员C的功能y,抓取并保存功能包y。退出C管理员,登录D的三人子用户/普通用户,抓取D的cookie,将y功能包中的cookie替换为D的cookie,发送y功能包。使用响应包或者去y函数的网页查看请求是否成功。与1.3.1类似,不同的是它使用低权限用户的身份来执行高权限用户特有的功能。(4)三人子用户/普通用户以非授权方式登录用户E执行用户E的功能z,抓取z功能包并将其中的用户标识id更改为用户F的(例如抓取E修改密码时的功能包:username=E&passwd=123,改成username=F&passwd=123),发送请求测试用户F对应的功能是否被修改,修改成功说明越界漏洞。2.未授权访问未授权访问漏洞可以理解为需要安全配置或授权认证的地址,授权页面存在缺陷允许其他用户直接访问,导致可操作的重要权限、数据库等敏感信息泄露或网站目录。常见的第三方未授权访问漏洞:MongoDB未授权访问漏洞Redis未授权访问漏洞Memcached未授权访问漏洞CVE-2013-7239JBOSS未授权访问漏洞VNC未授权访问漏洞Docker未授权访问漏洞ZooKeeper未授权访问漏洞Rsync未授权访问漏洞以上是未授权漏洞第三方。如果web系统中使用了上述组件,需要及时更新,修复漏洞。Web应用本身也存在未经授权的漏洞,常见的有两种:没有用户身份认证手段。某些页面或文件未经过身份验证。第一类问题的测试只需要随意抓取用户函数,清除或修改其中的用户认证信息(COOKIE等),然后发送即可。如果请求成功,就会存在未授权漏洞。第二类题的测试方式与第一类题相同,只存在特定的页面或文件。一般存在于:可执行文件、用户手册、Web应用新增加的功能页面。3、认证信息失效机制的问题用户正常退出后,用户的认证信息不会立即失效。用户认为自己退出了账号,但是在服务器中保留了用户登录状态,仍然可以使用认证信息进行请求。因此,在要求单点登录生效的应用系统中,在用户注销或正常注销时,应取消服务器认证信息。4.结论上述安全问题测试方法的前提是获取其他用户认证信息。虽然在实际应用场景中很难获取其他管理员认证信息,但在如今层出不穷的网络攻击手段下,我们不得不关注这些。安全问题本身。“三人”之间存在越权问题的主要原因是身份认证不严格,绑定角色和职能存在疏漏。因此,在企业的重要应用系统中,建议在服务器端对用户和角色进行一对一的验证。功能的一对一认证,或用户和功能的一对一认证。
