文章目录
- 1. over permission
- 1.1 水平越权
- 1.1.1 源代码分析
- 1.1.2 漏洞防御
- 1.2 垂直提权
- 1.2.1 源代码分析
- 1.2.2 漏洞防御
- 1.3 越权访问漏洞防御
1. over permission
漏洞描述
越权访问(Broken Access Control,BAC),指应用在检查授权时存在漏洞,使得攻击者在获得低权限用户账号后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限的用户。
越权漏洞的成因是因为开发人员在对数据进行增删查改时,对客户端请求的数据过分相信而遗漏了权限的判定,权限验证不当而导致的越权行为。
漏洞原因
通常情况下,一个 Web 程序功能流程是登录 - 提交请求 - 验证权限 - 数据库查询 - 返回结果。如果验证权限不足,便会导致越权。常见的程序都会认为通过登录后即可验证用户的身份,从而不会做下一步验证,最后导致越权。
- 隐藏URL
- 直接对象引用
- 多阶段功能
- 静态文件
- 平台配置错误
漏洞分类
-
水平越权
- 水平越权是指攻击者尝试访问与他具有相同权限的用户资源。
- 例如,用户A和用户B属于同一角色,拥有相同的权限等级,他们能获取自己的私有数据(数据A和数据B),但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据(数据B),那么用户A访问数据B的行为就叫做水平越权访问。
-
垂直越权
- 垂直越权是指低权限用户尝试访问高权限用户的资源。
- 由于后台应用没有做权限控制,或仅仅在菜单、按钮上做了权限控制,导致恶意用户只要猜测其他管理页面的URL或者敏感的参数信息,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
1.1 水平越权
登录lucy用户
然后修改URL中的username的值为kobe。
越权成功。
当然也还可以使用bp抓包的方式修改数据包中URL的参数实现水平越权。
1.1.1 源代码分析
op1_mem.php
用户信息是直接从url中获取的,没有校验当前用户
function.php
查看check_op_login函数,函数只检查了isset($_SESSION[‘op’][‘username’]) && isset($_SESSION[‘op’][‘password’])
,也就是用于检查会话变量中是否存在 'op'
数组中的 'username'
和 'password'
键。
1.1.2 漏洞防御
op1_mem.php
尝试进行防御,使用session来校验,增加一个if判断url传入的username和当前用户是否匹配,如果匹配则为$username赋值,若不匹配则不赋值。
if($_SESSION['op']['username'] == $_GET['username']){
$username=escape($link, $_GET['username']);
}
验证:在lucy登录的情况下,在URL路径中修改username的值为lili。
成功防御!
1.2 垂直提权
查看提示信息
提示信息表示admin用户是最高权限的。
先使用pikachu用户登录,显示我们只有查看的权限。
使用admin账户进行登录,显示我们有查看用户,添加用户以及和删除用户的权限。
使用admin用户添加一个用户,并使用bp抓取数据包。(同样删除用户也可以)
然后回到页面中退出管理员登录,再登录pikachu用户,并且使用bp抓取数据包
将pikachu这个普通用户的Cookie信息复制。
Cookie: BkGOp9578O_think_template=default; PHPSESSID=8g9mq8duq1kc55kbmp6t7espq1
在重发器里面,将管理员的Cookie值换成普通用户的Cookie,放包即可。
这里我点击了两次,然后回到页面查看,添加了两个xiaoxue用户。
越权成功。
1.2.1 源代码分析
op2_login.php
说明:如果级别是1,进入amdin.php。如果级别是2,进入user.php。
op2_admin.php
说明:这段代码判断了用户是否登录,是否权限级别为1(也就是admin用户),如果任意一条不满足,就跳转到登录页面。
op2_admin_edit.php
说明:op2_admin_edit.php中只是验证了用户是否登录,如果没登陆就跳转到登录页面,没有验证用户的权限级别等级,但是前端显示添加用户的权限级别为1的用户才能执行的操作。所以这里才会出现垂直越权漏洞。
function.php
1.2.2 漏洞防御
修改op2_admin_edit.php文件,对用户权限等级进行判断,判断用户级别是否为1。现在代码的意思变成,如果用户没登录或者权限等级不为1,则跳转到登录页面。
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){
header("location:op2_login.php");
exit();
}
验证我们的防御措施是否生效,首先登录admin账户后添加一个xiaoha用户
然后使用bp抓取数据包
退出登录后再使用pikachu用户登录,抓包将pikachu用户的Cookie信息替换到指定位置,然后放包即可。
现在发现无论怎么放包都不会在添加用户了。
1.3 越权访问漏洞防御
常见的防御措施:
- 验证和授权:在应用程序中实施适当的身份验证和授权机制。确保只有经过身份验证的用户才能访问其具备权限的资源。使用强密码策略、多因素身份验证等增加用户验证的安全性。
- 最小化权限原则:遵循最小权限原则,即每个用户只能获得其工作职责所需的最低权限。限制用户访问敏感信息和关键操作,防止未授权的访问。
- 输入验证:对于用户提供的输入数据进行充分验证和过滤,以防止恶意用户提交恶意请求。包括对输入数据进行检查、限制或转义,避免常见的安全漏洞如跨站脚本攻击(XSS)和SQL注入。
- 安全配置:合理配置应用程序和服务器的安全设置。这包括限制文件和目录的访问权限、禁用不必要的服务和功能、定期更新和修补软件漏洞。
- 会话管理:为用户会话实施安全措施,如生成强大且随机的会话标识符、设置会话超时、确保会话仅在安全通道上传输等。防止会话劫持和会话固定攻击。
- 访问日志和监控:记录用户活动和访问日志,并定期检查异常活动。使用入侵检测系统(IDS)和入侵防御系统(IPS)来监控网络流量并发现潜在的越权行为。
- 定期安全审计:进行定期安全审计,评估应用程序的安全性,并修复发现的漏洞和问题。这可以包括代码审查、渗透测试、安全漏洞扫描等。
- 敏感信息保护:对于敏感信息如密码、身份证号等,采取适当的加密手段进行保护。确保敏感数据在存储、传输和处理过程中都得到妥善保护。
- 持续安全培训:为开发人员、系统管理员和用户提供定期的安全培训和意识教育,使他们了解常见的安全威胁和最佳实践,以提高整体安全意识。