一、越权漏洞概述
由于没有用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以完成高权限账号(比如超级管理员)范围内的操作
1. 水平越权:
A用户和B用户属于同一级别用户,但各自不能操作对方个人信息,A用户如果越权操作B用户的个人信息的情况称为水平越权操作
2. 垂直越权:
A用户权限高于B用户,B用户越权操作A用户的权限的情况称为垂直越权
越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致
每个应用系统其用户对应的权限是根据业务功能划分的,而每个企业的业务又都是不一样的
因此,越权漏洞很难通过扫描工具发现出来,往往需要通过手动进行测试
二、常见越权漏洞演示:水平越权
第一步:先根据提示登录,登录lucy的信息
第二步:点击查看个人信息
我们发现,lucy的信息是通过username参数以get请求方式提交的,我们试试可不可以修改username参数查看其他人信息?
第三步:修改url参数的内容
如图,直接返回了lili的个人信息。因为当前是以用户名为lucy登录的,但通过修改username参数直接查询到了lili的个人信息,而lili和lucy属于同一级别用户,所以存在水平越权漏洞。
第四步:查看部分源代码
$link=connect();
// 判断是否登录,没有登录不能访问
if(!check_op_login($link)){
header("location:op1_login.php");
}
$html='';
if(isset($_GET['submit']) && $_GET['username']!=null){
//没有使用session来校验,而是使用的传进来的值,权限校验出现问题,这里应该跟登录态关系进行绑定
$username=escape($link, $_GET['username']);
$query="select * from member where username='$username'";
$result=execute($link, $query);
if(mysqli_num_rows($result)==1){
$data=mysqli_fetch_assoc($result);
$uname=$data['username'];
$sex=$data['sex'];
$phonenum=$data['phonenum'];
$add=$data['address'];
$email=$data['email'];
$html.=<<<A
判断是否为登录态
三、常见越权漏洞演示:垂直越权
先抓取超级管理员修改账户信息的数据包,然后退出超级管理员身份的登录,切换到普通管理员的身份,然后用普通管理员的身份将该数据包进行重放,查看是否操作成功。
第一步:先用超管用户登录
第二步:添加用户
第三步:打开浏览器代理,用burp抓包
把这个请求发送到 Repeater 中,然后退出管理员账号,重放这个数据包,这时候用户是会添加失败的,因为没有登录状态
添加成功
第三步:登录普通用户pikachu
发现普通用户只有查看权限
burp抓包
第四步:将普通用户的cookie复制到超户
然后刷新页面,发现又新增了一行,这就是垂直越权漏洞
四、越权漏洞防范措施
1、前后端同时对用户输入信息进行校验,双重验证机制
2、 执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
3、特别敏感操作可以让用户再次输入密码或其他的验证信息。
4、可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可 预测、不可猜解的 user 信息。
5、直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理
6、永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤