【SRC】越权漏洞

什么是越权

越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。而且属于逻辑漏洞的一种,防护和检测都不好做。

image-20240407214404287

水平越权

假设用户A和用户B属于拥有相同的权限等级,他们能获取自己的个人数据,但如果系统只验证了能访问数据的角色,而没有对数据做细分或者校验,导致用户A能访问到用户B的数据,那么用户A 访问用户B的这种行为就叫做水平越权访问。

如何测试

最重要的是要找有id控制的功能点!!!!
比如说购物网站
①收货地址(增加、修改、删除)
②发票地址(增加、修改、删除)
③优惠券(使用优惠券的时候能否修改使用其他账号的优惠券)
④提交订单(使用其他用户的地址)
⑤订单号(查看别人订单信息)
⑥评价商品(删除评价)
购物网站商家后台

get数据包

http://xxx.xxx/x/user?id=123
http://xxx.xxx/x/user/userid/123
http://xxx.xxx/x/user/userid/users/1b04c196
http://xxx.xxx/x/user/userid/users?id=1b04c196-89f4-426a-b18b-ed85924ce283

post数据包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
POST /user/xxx
xxxxxx
Userid=123

POST /user/123
xxxxxx
Userid=123

POST /user/123
xxxxxx
{"userid":123 }

POST /user/xxx
xxxxxx
{"userid":123 }

POST /user/userid=123
xxxxxx
Userid=123

POST /user/xxx
Userid:123
Userid=123

POST /user/xxx
token:123
Userid=123

POST /user/xxx
Cookie:user=123;
Userid=123

垂直越权

垂直越权是不同级别之间或不同角色之间的越权,垂直越权还可以分为向上越权和向下越权。向上越权指的是一个低级别用户尝试访问高级别用户的资源,比如说某个系统分为普通用户和管理员用户,管理员有系统管理功能,而普通用户没有,那我们就可以理解成管理功能具备垂直权限划分,如果普通用户能利用某种攻击手段访问到管理功能,那我们就称之为向上越权(就是以下犯上)。向下越权是一个高级别用户访问低级别用户信息(那这也是不行的,我们每个人都要有私生活和小秘密)。

如何测试

低权限用户访问高权限的功能
如:
修改权限功能
添加管理员功能
访问管理员功能

国外bounty tips

id垂直越权

1
/users/01 -> /user/02

参数污染

1
users=01 -> users=01&users=02

特殊字符

1
/users/01* or /user/* ->通配符导致暴露所有用户

旧的API版本

1
/api/v3/users/01 -> /api/v1/user2/02

添加后缀

1
/users/01 -> /users/02.json

更改请求方式

1
POST /users/01 -> GET,PUT,PATCH,DELETE 等等

检查是否referer或者其他的Headers参数被用于用户权限的鉴定

1
2
3
4
5
6
7
GET /users/02
Referer: example.com/users/01
-> 403 Forbidden

GET /users/02
Referer: example.com/users/02
-> 200 OK

用数字或者邮箱替换GUID

1
2
3
/users/1b04c196-89f4-426a-b18b-ed85924ce283
->
/users/02 OR /users/a@b.com

尝试如下GUIDs

1
2
00000000-0000-0000-000000000000
11111111-1111-1111-111111111111

403/401Bypass

当发现越权当访问缺出现401/403错误时,一些绕过

用数组绕过

1
{"id":111} -> {"id":[111]}

JSON绕过

1
{"id":111} -> {"id":{"id":111}}

参数污染

1
url?id=<正常>&id=<越权id>

通配符

1
{"user_id":"*"}

参数污染补充trick

1
url?id=<正常>%26id=<越权id>

%26是&,urldecode并转发到后端后就变成

1
url?id=<正常>&id=<越权id>