越权漏洞(Pikachu)
原理
该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦权限验证不充分,就易致越权漏洞。
漏洞分类
越权访问漏洞主要分为水平越权、垂直越权。
水平越权:指攻击者尝试访问与他拥有相同权限的用户资源。例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的这种行为就叫做水平越权访问。
垂直越权:由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
漏洞产生原因
通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。
\1. 通过隐藏 URL
实现控制访问有些程序的管理员的管理页面只有管理员才显示,普通用户看不到,利用 URL 实现访问控制,但 URL 泄露或被恶意攻击者猜到后,这会导致越权攻击。
\2. 直接对象引用
这种通过修改一下参数就可以产生水平越权,例如查看用户信息页面 URL 后加上自己的 id 便可查看,当修改为他人的 ID 号时会返回他人的信息,便产生了水平越权。
\3. 多阶段功能
多阶段功能是一个功能有多个阶段的实现。例如修改密码,可能第一步是验证用户身份信息,号码验证码类的。当验证成功后,跳到第二步,输入新密码,很多程序会在这一步不再验证用户身份,导致恶意攻击者抓包直接修改参数值,导致可修改任意用户密码。
\4. 静态文件
很多网站的下载功能,一些被下载的静态文件,例如 pdf、word、xls 等,可能只有付费用户或会员可下载,但当这些文件的 URL 地址泄露后,导致任何人可下载,如果知道 URL 命名规则,则会便利服务器的收费文档进行批量下载。
\5. 平台配置错误
一些程序会通过控件来限制用户的访问,例如后台地址,普通用户不属于管理员组,则不能访问。但当配置平台或配置控件错误时,就会出现越权访问。
pikachu
水平越权
查看提示后都是普通用户,登录lucy账号
看到url里参数username=lucy以此来判断用户身份,试试改成lili,可以看到在登录lucy的情况下访问到了lili的用户信息,发生水平越权。
这是因为查找用户信息时传入的参数是直接从url中获取的,没有校验当前用户是否为要查找信息的用户
改进:增加判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
垂直越权
查看提示超级用户:admin;普通用户:pikachu
我们先看看普通用户
再看看超级用户,比普通用户多了用户管理选项
我们点击添加用户,观察url
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
删除用户
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=1
再删除一个用户,貌似参数id有什么规律
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=2
再次用普通用户pikachu登录
登录后直接输入地址栏输入payload:
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php
顺利来到了添加用户的页面
添加用户为chacha
再次登录pikachu用户发现创建完成
试试
http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=3
并未删除成功
思考
op2_admin_edit.php
(添加用户操作)
22-25行只验证了用户是否登录,如果没登录就跳转到登录页面,没有验证用户权限等级,但前端显示添加用户是权限等级为1的用户才能执行的操作,因此这里有垂直越权漏洞。
op2_admin.php
(删除操作)
主要是23~26行,判断了用户是否登录,是否权限级别为1(超级boss),如果任意一条不满足,就跳转到登录页面,没有垂直越权漏洞