WEB安全之:越权访问
郑重声明:
本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关。倡导维护网络安全人人有责,共同维护网络文明和谐。
越权访问(Broken Access Control,简称BAC)是一种很常见的逻辑安全漏洞。可以理解为服务器端对客户提出的数据操作请求过分信任,一个用户一般只能够对自己本身的信息进行增删改查,然而由于后台开发人员的疏忽,没有在信息进行增删改查时候进行用户判断,忽略了对该用户操作权限的判定,导致攻击账号拥有了其他账户的增删改查功能。
越权分类:水平越权和垂直越权
1 越权简介
1.1 实验平台
zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 (github.com)
1.2 越权漏洞的危害
- 越权查询
- 越权删除
- 越权修改
- 越权增加
1.3 产生越权漏洞的原因
-
通过隐藏 URL 实现权限管理
实现控制访问有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用 URL 实现访问控制,但 URL 泄露或被恶意攻击者猜到后,这会导致越权攻击。
-
直接引用对象实现权限管理
这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
-
多阶段功能
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
-
静态文件
很多网站的下载功能,一些被下载的静态文件,例如 pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
-
平台配置错误
一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。
2 水平越权
访问与攻击者拥有相同权限的用户资源
1. 在越权模块水平越权登陆 lucy 用户,并点击查看个人信息,此时可以查看到 lucy 用户的相关信息。
http://bac.lab.com/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF
2. 通过 BurpSuit对浏览器数据包进行抓包,并再次点击查看个人信息。BurpSuit 阻断的信息请求包中,修改以下请求头中的 lucy 为 lili,最后发送修改后的请求包
GET /vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF HTTP/1.1
3. 结果显示的是用户 lili 的信息。即此网站存在水平越权漏洞。
3 垂直越权
由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的 URL 或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
1. 在越权模块垂直越权标签下使用 admin 用户登陆,并点击添加用户,复制此时的浏览器 URL 链接
http://bac.lab.com/vul/overpermission/op2/op2_admin_edit.php
2. 退出 admin 用户登陆或使用另一个浏览器登陆普通用户(pikachu),登陆成功后,创建新标签打开前面复制的添加用户的 URL 链接。
3. 引时浏览器能正常加载添加用户界面,在此页面上尝试创建新用户,创建完成后提交时页面返回到登陆界面,使用 admin 用户登陆,发现之前在普通用户权限下创建的用户被顺利创建。
4. 结果,该页面存在垂直越权漏洞。
4 预防越权
- 前后端同时对用户输入信息进行校验,双重验证机制
- 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
- 特别敏感操作可以让用户再次输入密码或其他的验证信息。
- 可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息。
- 直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
- 永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤