漏洞之 越权

越权简介

信息安全行业关于权限有两个常见的概念,一个叫越权,一个叫提权。

  • 提权指的是低权限的用户通过技术手段提升到高权限的用户。(权限一般是指计算机权限,提权是指从用户权限提升到管理员权限)。
  • 越权一般是指低权限用户进行高权限的操作或平级操作,越权漏洞出现的地方一般以网页、APP 为主。

越权漏洞是一种很常见的逻辑安全漏洞。是由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能,从而导致越权漏洞。

像 SQL 注入、XSS、CSRF、文件上传这类漏洞用企业级工具(如awvs、绿盟科技公司的极光软件)可以测出来,但是逻辑安全漏洞则需要手动才能测出来,因为代码本身没问题,而是程序设计思路有问题。

越权的分类

  • 水平越权(横向越权\平行越权)是指相同权限下不同的用户互相影响。
  • 垂直越权(纵向越权)是指使用权限低的用户影响到权限较高的用户。

交叉越权是指既可以水平越权又可以垂直越权。基本上只要垂直越权能做,水平越权也能做。

常见越权方法

  1. 修改 GET 传参来越权。
  2. 修改 POST 传参进行越权。
  3. 修改 COOKIE 传参进行越权。

注意:但凡看到可能代表身份或者某些信息的传参,都可以去尝试修改看看有没有漏洞。

未授权访问

还有一类叫做未授权访问,即不需要权限就能访问。严格意义上而言,这个不属于越权漏洞,但是在日常测试中常常会遇见。(比如只要输入正确的网址就可以直接访问,例如 /admin 默认是登录,登录后跳转到 user.php,然后你直接访问user.php,发现你直接有后台权限)

网站中的未授权访问通过目录扫描往往就可以发现。

越权检测的思路

水平越权测试方法主要就是:看能否通过A用户的操作影响到B用户

垂直越权的测试思路就是:看低权限用户能否使用高权限用户专属的功能

一般而言,低权限用户的漏洞比较难挖,高权限的用户相对好挖(高权限用户功能多,而功能越多越可能有漏洞)。

水平越权

登录A用户时,正常更改或者是查看A用户信息,然后抓取数据包,将传参ID修改为其他用户,如果成功查看或者修改了同权限其他用户的信息就属于水平越权测试。(如果可以影响到高权限用户就是垂直越权)

测试过程中的传参ID参数需要自己检测(常见:uid= id= user= 等)通常使用 burp 进行爆破传参(传参可能在GET、POST、COOKIE传参)

例如:不需要输入原密码的修改密码、抓包改用户名或者用户id修改他人密码、修改资料的时候修改用户id、查看订单的时候,遍历订单id等。

垂直越权

在与服务器进行数据交互时客户端携带着标识用户的身份的 cookie,当服务端的 session 与 cookie 中的身份匹配成功后,才能允许该用户进行相关操作。除了cookie之外,在请求中可能会带一些参数,细览下可能存在辨别信息的唯一值,来进行测试。这里要说一点,传输的参数并不一定在请求参数中,也有可能存在URL链接的位置(GET和POST请求的区别)。当拦截一个请求后分析是否有参数:

  1. 请求中不存在参数,只用 cookie 进行身份验证,无法水平越权,可能出现垂直越权;

  2. 请求中存在参数,并且参数中的某些值可能是辨别信息的唯一值(如employeeID、departmentID、ID等),可能存在水平和垂直越权;越权的原因是参数中的 employeeID 没有判断是否是 cookie 中用户所管辖的员工ID

越权防御

  • 永远不要相信来自用户的输入,包括请求行,请求头,请求体,对于可控参数进行严格的检查与过滤。

  • 前后端同时对用户输入信息进行校验,双重验证机制。

    • 前端:对于没有权限的功能和数据不进行展示。
    • 后端:执行操作前必须验证用户身份,然后验证用户是否具备操作数据的权限。
  • 后端:对于可以表明资源信息的需要进行隐藏。使用加密的资源 ID,防止攻击者枚举ID,敏感数据特殊化处理。

  • 后端:对于可以表明用户身份的需要进行隐藏。如可以从用户的加密认证 cookie 中获取当前用户 id,防止攻击者对其修改。或在 session、cookie 中加入不可预测、不可猜解的 user 信息。


漏洞之 越权
https://flepeng.github.io/081-security-漏洞-漏洞之-越权/
作者
Lepeng
发布于
2021年3月8日
许可协议