越权漏洞【逻辑篇】
简介
越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广、危害大,在2021被OWASP列为Web应用十大安全隐患的第一名。
由于越权访问漏洞属于逻辑类漏洞,所以目前上WAF无法进行完全的防御,也无法被全自动化的漏洞扫描器发现
漏洞类型
越权访问漏洞主要分为水平越权与垂直越权
水平越权:指攻击者尝试访问与他拥有相同权限的用户资源。例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权
垂直越权:由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的
漏洞出现原因
1.没有对数据进行完善的验证或者细分
2.有验证,逻辑顺序搞错,先执行后验证
3.有验证,验证产生在用户凭据上,如cookie、session、token、jwt
常见手段
- 通过修改GET传参来越权。GET案例
- 修改POST传参进行越权。 POST案例
- 修改cookie传参进行越权。cookie案例
- 抓取其他用户传参(验证身份的id等等)可以在浏览器、APP、应用程序访问其数据 抓参案例
- 未授权访问,没有严格设置权限,导致敏感信息可以直接访问。在日常测试中常常会遇见。只要输入正确的网址就可以直接访问,例如/admin默认是登录,登录后跳转到user.php,然后你直接访问user.php,发现你直接有后台权限。未授权案例
- 业务逻辑绕过 逻辑绕过案例
演示案例
YXcms-水平越权漏洞
原理
只检测用户和ID对应关系,没检测当前操作用户是不是当前用户
演示
(1)首先,我们注册了两个用户,他们的信息如下
(2)当我们修改用户bcxc2资料时,进行抓包
(3)这里,我们可以发现post传输的参数中,含有id=2,猜测id=2是指向账户bcxc的id,将内容里的bcxc2改为bcxc1、id=2改为id=1
(4)提示修改成功,数据库bcxc1里的手机号和qq号也被修改了
MINIcms-垂直越权(CVE-2018-18891)
原理
判断是否拥有权限在于head.php,在post.php和page.php中有这样一个问题
先等前面功能点代码执行完了
再进行权限判断
所以就导致了先执行后判断权限的垂直越权漏洞
演示
(1)现有一篇文章test123
(2)通过代码审计得知poc
poc:
http://127.0.0.1/cms/mc/mc-admin/post.php?delete=aesuas&state=publish&date=&tag=
(3)直接在其他没登录的浏览器执行该poc
(4)文章就被放到回收站了
XHcms-未授权访问
原理
通过代码审计得知,只要cookie认证是user==不为空即可
演示
(1)找到后台登录入口
(2)抓包,添加cookie
(3)成功进入后台
黑盒测试流程
(1)先通过工具把所以域名爆破出来,看看有没有含义敏感数据的页面
(2)在功能点测试中,修改所有和权限挂钩的参数,尝试判断存不存在越权漏洞