01 什么是越权
越权,是攻击者在获得低权限账号后,利用一些方式绕过权限检查,访问或者操作到原本无权访问的高权限功能。在实际的代码安全审查中,这类漏洞很难通过工具进行自动化检测,因此危害很大。越权有两种类型:
- 垂直越权,是一种“基于URL的访问控制”设计缺陷引起的漏洞。由于web应用程序没有做权限控制或者仅仅在前端菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问其他角色拥有的数据或页面。通俗点说,普通用户A利用一些方式访问了管理员角色才有权限访问的页面和数据。
- 水平越权,是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收请求时没有判断数据的所属人而引起的越权数据访问。如服务端直接从客户端提交请求中获取用户id,恶意攻击者通过修改请求ID的值,即可查看或修改其他用户的数据。即,普通用户A访问了普通用户B的数据。
02 示例
02-1 pikachu靶场-水平越权
通过lucy/123456登录,并点击“查看个人信息”
修改username=kevin,再次请求,发现可以查看kevin的个人信息,越权成功。
02-2 pikachu靶场-垂直越权
通过pikachu/000000登录系统,发现pikachu只有查询权限
根据提示,使用admin/123456登录超管账号,发现admin可以添加账号,url为 http://192.168.77.193:8082/vul/overpermission/op2/op2_admin_edit.php。
退出admin账号,登录pikachu账号,尝试访问http://192.168.77.193:8082/vul/overpermission/op2/op2_admin_edit.php,并输入新增用户信息并创建。
03 检测方法
- 找到管理员/高权限才能访问的页面链接A,尝试通过普通用户访问链接A,若能访问,则存在越权漏洞
- 检查接口参数是否有isadmin字段,并尝试更改值,以确认是否可以越权
- 如http://localhost/users/getinfo?id=123,尝试修改参数id的值,以确认是否可以访问其他用户的信息
- ……
04 防御措施
垂直越权防御:服务端对每个URL进行权限校验,检查用户是否登录,是否对资源有访问/操作权限。不能仅仅在客户端进行菜单屏蔽和disabled/hidden来限制。
水平越权防御:从session中获取用户的id信息,接口执行中应使用session中获取到的id。