意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

应用程序越权漏洞安全测试总结体会

来源:恒创科技 编辑:恒创科技编辑部
2024-02-12 07:26:59

申明:本文为信息安全工作的总结体会,所有的测试均在测试环境中进行,严禁任何用于危害网络安全的行为。​

一、 越权漏洞简介

越权漏洞顾名思议超越了自身的权限去访问一些资源,在OWASP TOP10 2021中归类为A01:Broken Access Control,其本质原因为对访问用户的权限未进行校验或者校验不严谨。在一个特定的系统或者应用程序中,根据“默认拒绝”的安全设计公理,应将资源按组进行管理,对用户按角色进行管理,不同的角色可以访问不同的资源,然后给不同级别的用户赋予不同的角色,从而实现不同级别的用户去访问不同的资源,这是通常使用的RBAC模型(当然也有其他的授权模型)。越权有几种表现形式:


应用程序越权漏洞安全测试总结体会

1、 水平越权访问。两个相同级别的用户A与B,A可以越权去访问B的资源。

2、 垂直越权访问。低级别权限的用户去访问高级别权限用户的资源,如普通用户去访问管理员用户的资源;或者高级别权限用户去访问低级别权限用户的私有资源;

3、 未授权访问。这个类别进行单列,尽管个人认为这是一个特殊的垂直越权访问方式。

二、 常见越权漏洞测试说明

在应用程序中进行权限控制有很多种不同的方式,目前见到的包括token、会话、用户名与用户id等参数,这些字段可能位于请求报文的URI、Cookie等Header、Body体中,报文的请求方式可能包括多种,比如GET、POST、DELETE等等。

应用程序越权漏洞安全测试总结体会_越权漏洞

简要说明如下:

1、 参数修改。部分应用程序通过一些用户名、Id等可以代表身份的参数进行用户权限控制,并且这些参数又可以进行猜解,因此在测试过程中可以准备不同的用户观察这些字段,然后测试,或者直接通过BURP对这些字段进行猜解爆破。

2、身份权限控制猜解。对Token,JWT等代表身份权限控制的内容进行猜解,有的只进行了BASE64编码,可以解码后观察是否可以利用。

3、 关键URI替换。在测试前找到相关资源的URI,与域名或者IP进行拼接后放到其他权限的用户中进行访问。

4、 Cookie替换、token删除等。在高权限访问一些关键操作的时候,将cookie替换为低权限用户的cookie,以验证低权限用户能否进行此关键操作。方式3和方式4其实原理是一样的,只不过一个是换URI另外一个是换cookie。

在测试越权漏洞的过程中首先还是要使用不同的用户去观察他们权限的差异,常见的比如增、删、改操作,这样在测试过程中才能够比较容易发现结果的差异。

三、 环境搭建

这里我是在网上找的一套图书管理系统代码,基于JDK8、springboot、hibernate、mysql、shiro进行开发,在本地的IDEA运行后进行测试的。搭建后后登录页面:

应用程序越权漏洞安全测试总结体会_越权漏洞_02

这个登录界面是有安全漏洞的,可以进行爆破,这里不作进一步说明。

登录后先看一下管理员用户admin登录后有用户管理、角色管理、菜单管理、图书类型、图书管理几个菜单,如下所示:

应用程序越权漏洞安全测试总结体会_Autorize_03

再创建一个普通用户user1,登录后只有用户管理、角色管理以及菜单管理三个菜单,如下:

应用程序越权漏洞安全测试总结体会_越权漏洞_04

因此这里可以看到管理员用户与普通用户的权限是存在差别的,这也是我们在测试的时候需要关注的点。

四、 手工测试

1、 使用admin用户访问图书类型或者图书管理这两个特权菜单,在burp中截取URI信息/admin/book/list?page=1&limit=500:

应用程序越权漏洞安全测试总结体会_Autorize_05

与请求的IP或者域名进行拼接后为:

​​http://192.168.2.6//admin/book/list?page=1&limit=500​​

2、 使用user1进行登录,然后将上述URL在浏览器中打开,如下:

应用程序越权漏洞安全测试总结体会_水平越权_06

可以看到普通用户成功的访问到了此URL,证明存在越权漏洞。

3、 退出user1再访问访问此URL,页面被强制跳转到登录页面,证明这里不存在未授权访问。

五、 使用BURP的Autorize进行自动化测试

在上面演示的是手工测试的方式,为了提高效率,可以使用BURP的插件Autorize进行自动化测试,Autorize的原理就是上面的第4种方式的自动化测试实现。

1、 安装Autorize插件

Autorize插件基于Python,在BURP的BApp Store中可以搜索到,需要首先安装Jython环境,根据说明就可以安装成功,安装好后多了一个Autorize标签。

2、 BURP处于正常监听admin管理员账号的状态。

3、 首先获取user1的cookie,Cookie: JSESSIONID=F129D56EB938F0BCA344D66846A4E25F,要确保该cookie处于有效期。

4、 按照步骤配置Autorize的cookie信息,3里面的名字是自定义的。

应用程序越权漏洞安全测试总结体会_Autorize_07

5、 点击Autorize is off按钮开启,然后在admin用户登录的浏览器中正常的访问特权菜单。

6、 观察Autorize的结果:

应用程序越权漏洞安全测试总结体会_Autorize_08

可以看到直观的展示了结果,在左边展示的是在页面上点击菜单的操作触发的URL请求,结果包括修改后的请求测试结果以及未授权请求测试结果,状态分别为红色的Bypassed!以及绿色的Enforced!,红色的Bypassed表示存在越权,而绿色的Enforced表示不存在越权。同时也显示了报文的返回长度,通过长度也可以进行初步的判断。点击某一条后,在右边的Request/Response Viewers中可以看到请求与返回的结果,同样是分为修改后的请求(Modified)、原始请求(Original)以及未认证请求(Unauthenticated)三种情况的请求与响应报文,方便对报文进行比对。同时要以看到因为是在菜单栏进行的每一个操作,实际上会产生两条结果。

7、 配置过滤器

如果因为BURP截获的报文较大,导致这里展示的信息太多,可以进行过滤,比如我这里配置如下:

应用程序越权漏洞安全测试总结体会_Autorize_09

这里选择URL中要包括192.168.2.6:80这个字符串,再次访问,这里在左边就只会展示符合过滤条件的内容了。

8、 不足

使用Autorize插件提高了效率,但是仍然存在一些不足,比如在上述中有一个操作是对条目进行删除操作,由于在原始请求中已经进行了删除操作,因此在修改后的越权删除操作中无法再次删除,导致测试结果失败,这种操作需要手工再进行验证。

六、 总结

本文对越权漏洞进行了简介,对常见测试方式进行了总结,通过手工方式以及自动化工具Autorize进行了简要的说明,由于作者水平有限,可能总结远远不到位,在这里献丑了。还需要在工作中不断的测试学习,积累经验,提高漏洞发现率。

上一篇: TCP HTTP Socket 下一篇: 手机怎么远程登录云服务器?