越权漏洞
- 水平越权:同一层级间的用户可以互相访问到对方的敏感信息;同时还可能会以其他平级权限用户的身份来执行某种功能,如删除、添加、修改等;
- 垂直越权:低权限用户来执行高权限用户功能;
常见越权方法:
- 修改 GET、POST、cookie 传参进行越权。
以 pikachu 靶场为例
水平越权
点击提示可以看到已存在的一些用户和密码信息。

登录其中一个查看个人信息,页面显示该用户的相关信息。(lucy/123456)

URL 中有 username 字段,对其直接进行修改访问,成功获取到 lili 的个人信息,即水平越权。(在没有登录 lili 账号的情况下,成功访问到 lili 的相关内容)

源码分析,查找用户信息的时候传入的参数是直接从 URL 中获取的,没有校验当前用户。
file:op1_mem.php1 2 3 4 5 6 7 8 9
| $link=connect();
if(!check_op_login($link)){ header("location:op1_login.php"); } $html=''; if(isset($_GET['submit']) && $_GET['username']!=null){ $username=escape($link, $_GET['username']);
|
防御,添加一步简单的验证,判断 URL 传入的 username 和当前用户是否匹配,如果匹配再赋值。
1 2 3
| if($_SESSION['op']['username']==$_GET['username']){ $username=escape($link,$_GET['username']); }
|
1 2 3 4 5 6 7 8 9 10 11 12
| $link=connect();
if(!check_op_login($link)){ header("location:op1_login.php"); } $html=''; if(isset($_GET['submit']) && $_GET['username']!=null){ if($_SESSION['op']['username']==$_GET['username']){ $username=escape($link,$_GET['username']); }
|
这时再修改 URL 中的 username 值则不再起作用。
垂直越权

先登录普通用户,只有查看权限。

管理员用户,拥有查看、添加和删除的权限。

1 2 3 4 5 6
| 查看用户列表URL http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php 添加用户URL http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin_edit.php 删除用户URL(每次删除后面的id都会变) http://127.0.0.1/pikachu/vul/overpermission/op2/op2_admin.php?id=27
|
在仅登录普通用户的情况下,直接访问管理员用户的查看、添加和删除的 URL ;此时发现查看和删除操作需要登录管理员账户才能操作,而添加操作直接可以实现。
分析源码,查看操作,判断用户是否登录,是否权限级别为 1(超级 boss),若有一条不满足,就跳转至登录页面。
file:op2_admin.php1 2 3 4 5 6 7
| $link=connect();
if(!check_op2_login($link) || $_SESSION['op2']['level']!=1){ header("location:op2_login.php"); exit(); }
|
删除操作,没有验证权限级别导致了垂直越权漏洞。
file:op2_admin_edit.php1 2 3 4 5 6 7
| $link=connect();
if(!check_op2_login($link)){ header("location:op2_login.php"); exit(); }
|
未授权访问
在攻击者没有登录或未输入密码登进行验证时,即可直接进入后台主页面;或其他不允许查看页面可直接访问和操作所产生的漏洞。
一般通过目录扫描或是修改请求参数(eg:控制用户角色的参数)。
未授权访问漏洞汇总: https://www.freebuf.com/articles/web/338459.html
挖掘和测试方式
- 主要关注其 URL 及参数数据,找到所有和用户相关的参数和参数值提交测试;
- 设计到 JS 中提取 URL 或数据,在放回包中提取参数名和参数值,FUZZ 技术等。