什么是越权
越权漏洞是Web应用程序中一种常见的安全漏洞。它的威胁在于一个账户即可控制全站用户数据。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定。而且属于逻辑漏洞的一种,防护和检测都不好做。
水平越权
假设用户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 -> 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 等等
|
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}}
|
参数污染
通配符
参数污染补充trick
%26是&,urldecode并转发到后端后就变成