WEB漏洞—逻辑越权之水平垂直越权全解

WEB漏洞—逻辑越权之水平垂直越权全解

13984逻辑越权

逻辑越权简介

1.水平越权

—通过更换的某个 ID 之类的身份标识,从而使 A 账号获取(修改、删除等)B/C/D账号数据(权限相同)。

2.逻辑越权

—使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作。

3.未授权访问

—通过删除请求中的认证信息后重放该请求,依旧可以访问或者完成操作。(有些操作要管理员才行)

dslksdgklkslglkj

水平越权

水平越权指的是攻击者尝试访问与他拥有相同权限的用户的资源。比如某系统中有个人资料这个功能,A账号和B账号都可以访问这个功能,但是A账号的个人信息和B账号的个人信息不同,可以理解为A账号和B账号个人资料这个功能上具备水平权限的划分。此时,A账号通过攻击手段访问了B账号的个人资料,这就是水平越权漏洞。

1. 基于用户身份ID

在使用某个功能时通过用户提交的身份ID(用户ID、账号、手机号、证件号等用户唯一标识)来访问或操作对应的数据。

2. 基于对象ID

在使用某个功能时通过用户提交的对象ID(如订单号、记录号)来访问或操作对应的数据。

3. 基于文件名

在使用某个功能时通过文件名直接访问文件,最常见于用户上传文件的场景。

垂直越权

垂直越权指的是一个低级别攻击者尝试访问高级别用户的资源。比如说某个系统分为普通用户和管理员,管理员有系统管理功能,而普通用户没有,那我们就可以理解管理功能具备垂直权限划分,如果普通用户能利用某种攻击手段访问到管理功能,那我们就称之为垂直越权。

垂直越权主要有以下两种攻击场景:

1. 未认证账户访问无需认证后能访问该功能。

比如某站点后台仅使用js跳转来限制未授权的用户访问。去掉js可以成功访问后台,且可以进行操作。

2. 不具备某个功能权限的账户认证后成功访问该功能。

权限框架缺陷

权限控制框架是实现权限控制功能的基础,如果权限控制框架本身存在缺陷容易被攻陷,会导致权限控制功能完全失效。在cookie中使用简单的权限标识来标记用户的权限等级或使用用户请求参数中所带的简单用户ID来控制用户权限,是典型的权限框架缺陷。

修复意见

  1. 采用成熟的权限管理框架,如spring security。
  2. 用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)优先采用在服务端关联session或加密后放在session中的方式获取。
  3. 必须采用表单或其他参数提交用户进行访问操作的凭证(如用户ID、产品号码、订单流水号等)时,应尽可能采用难以猜测的构造方式(增加字母及随机数字等)或采用复杂的加密算法加密后提交,应对客户端提交的凭证与会话的权限进行严格的验证,如提交的产品号码是否为隶属于登录用户的产品号码。
  4. 对管理功能模块进行严格的权限验证,如非必要建议不对互联网开放或进行网络层的访问控制。

参考链接

1
2
https://www.freebuf.com/sectool/188068.html
https://blog.csdn.net/weixin_45663905/article/details/108429801?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-15.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromMachineLearnPai2~default-15.control

水平越权

抓包,看usename那一项,修改用户名

(我们通过前期信息收集得到用户名:注册时显示用户名已被注册或者访问用户的空间得到用户名)

这个漏洞的用处?因为这个漏洞危害到其他用户的信息安全,有些src平台也会收。

垂直越权

从admin用户处抓的添加的数据包,在pikachu用户下发送出去,成功添加账户。(改了PHPSESSID)

怎么找到这个数据包?根据当前用户的数据包盲猜/找到源码,本地搭建,找到数据包

970D10B6624823DED686BD3AA751CF78

pikachu案例演示

Snipaste_2022-05-16_15-36-24

刷新页面,抓取这里的数据包

Snipaste_2022-05-16_15-37-08

那么在真实环境下,我怎么知道这个用户名是这个呢?可以通过在注册的时候,如果告诉你这个用户名已经存在,或者通过前期的一些信息收集

将这个username的时候更改为这个lucy,放包

Snipaste_2022-05-16_15-39-45

垂直越权

Snipaste_2022-05-16_17-07-01

这个是管理员的访问的界面

下图是普通用户访问的界面

Snipaste_2022-05-16_17-06-25

可以明显的看出来,管理员不仅可以看,还可以进行增删,而普通用户只能查看。

Snipaste_2022-05-16_17-16-35

Snipaste_2022-05-16_17-19-18

这个是普通用户的数据包,里面也有一个sessid,将其复制

Snipaste_2022-05-16_17-19-26

复制到这个管理员的数据包中,如果存在这个垂直越权的漏洞,那么这里就会创建成功,虽然响应码是这个302,但是回到靶场看到已经创建了

Snipaste_2022-05-16_17-21-27

墨者靶场演示

Snipaste_2022-05-16_19-01-40

进入靶场,登陆默认账号密码,test

Snipaste_2022-05-16_19-02-06

抓包分析

Snipaste_2022-05-16_19-02-51

Snipaste_2022-05-16_19-03-40

这里然后讲数值改变,发现可以得出不同目标的信息

Snipaste_2022-05-16_19-04-48

使用burp自带的爆破模块进行爆破

Snipaste_2022-05-16_19-05-31

Snipaste_2022-05-16_19-06-10

Snipaste_2022-05-16_19-06-47

Snipaste_2022-05-16_19-07-31

这里单单看数据包并不能直接看出哪个才是目标用户的数据包,返回页面,查看源代码

Snipaste_2022-05-16_19-09-22

得到这个尾数是16的为目标用户,查看数据包进行登陆

Snipaste_2022-05-16_19-11-33

Snipaste_2022-05-16_19-12-37

解密,得出密码,登陆

Snipaste_2022-05-16_19-11-47

原理:

前端安全造成:界面

判断用户等级后,代码界面部分进行可选显示

个人理解:前端验证就是存在对应的代码只是不将其显示,所以这里是存在越权漏洞的

后盾安全造成:数据库

Snipaste_2022-05-16_19-43-33

例子说就是在数据库中的表中加上一个字段,一个验证的字段,这里名字是usertype,如果是1就是管理员权限,如果是2就是普通用户权限

登陆用户admin或xiaodi时,代码时如何验证这个级别?(usertype判断)

如果在访问网站数据包中有传输用户的编号,用户组编号或类型编号的时候,那么尝试对这个值进行修改,就是测试越权漏洞的基本

上节课的说明:login 0 和 login 1这个就是类似于说的usertype

burp扩展模块

Snipaste_2022-05-16_20-26-49

按照刚刚的思路再来一遍

Snipaste_2022-05-16_20-37-21

Snipaste_2022-05-16_20-40-47

Snipaste_2022-05-16_20-42-53

Snipaste_2022-05-16_20-43-18

Snipaste_2022-05-16_20-46-31

使用pikachu这个靶场来测试这个模块

Snipaste_2022-05-16_20-48-36

Snipaste_2022-05-16_20-50-32

Snipaste_2022-05-16_20-53-42

中通下载地址:https://github.com/ztosec/secscan-authcheck

修复防御方案

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

2、调用功能前验证用户是否有权限调用相关功能

3、执行关键操作前必须验证用户身份,验证用户是否具备操作数据权限

4、直接对象引用的加密资源ID,防止攻击者枚举ID,敏感数据特殊化权限。

5、永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤