导语:本文分享了一起通过JWT认证机制缺陷配合文件上传功能,最终实现任意文件覆写的完整攻击链。该漏洞为研究者带来了总计23000美元的赏金,其中任意文件覆写单项获得20000美元。
一、背景
目标站点使用 JSON Web Token(JWT) 作为认证机制。用户登录主站后会获得一个普通用户的JWT令牌。
通过对目标进行详细侦察(包括JavaScript文件分析、Burp Suite抓包、 Wayback Machine历史端点收集以及子域名枚举),我发现了一个管理后台子域名 admin.test.com。
阅读后台的 app.js 文件(约20万行代码)后,确认其使用JWT认证,并发现了一个名为 test-dashboard 的realm(认证域)。
二、认证绕过(JWT Realm篡改)
2.1 原理
在 jwt.io 解码普通用户令牌后,发现其中包含 realm=test-user 字段。由于服务端仅验证JWT签名是否有效,未对realm进行严格校验,我尝试将realm值修改为 test-dashboard。
2.2 利用步骤
- 登录主站
test.com获取普通用户JWT - 拦截登录API请求
/api/v1/login,修改请求体中的realm值
构造请求:
POST /api/v1/login HTTP/1.1
Host: accounts.test.com
Content-Type: application/json
{"email":"youremail@gmail.com","password":"<password>","realm":"test-dashboard"}

解码修改后的JWT,可见realm已被成功篡改为 test-dashboard:

使用篡改后的JWT令牌,成功登录管理后台。但厂商认为管理后台仅为前端React应用,实际API有独立认证,因此将漏洞等级从严重降至中危:

三、授权头绕过(Bearer关键字删除)
3.1 Fuzzing发现
为提升漏洞严重程度,我继续深入分析。由于已能控制JWT中的realm,需找到能操作API的方式。
对管理后台 /upload 接口进行 fuzzing 测试。默认情况下ffuf使用GET方法,切换为POST后发现了该上传接口。
3.2 关键发现
在Fuzzing Authorization: Bearer 时,删除 Bearer 关键字后收到200响应。
构造请求(删除Bearer):
POST /upload HTTP/1.1
Host: admin.test.com
Authorization: <JWT>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxx
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="destination"gallery/
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="file"; filename="poc.txt"
Content-Type: Text/plainh4x0r-dz POC
------WebKitFormBoundarypxxxxxx--
成功获得上传响应:

四、文件路径发现
上传成功后面临新问题:如何找到文件存储路径?
通过分析Burp Suite历史记录和响应头,发现返回的href指向:https://xxxxxxxx.cloudfront.net/gallery/xxxxxxxxx
其中 gallery 与上传请求中 destination 参数值相同。访问 https://XXXXXXXXX.cloudfront.net/gallery/poc.txt 确认文件可被访问。
由于上传功能托管于Amazon CloudFront CDN,无法直接上传WebShell,单独报告此漏洞严重程度较低。
五、任意文件覆写(Arbitrary File Overwrite)
5.1 漏洞原理
Amazon S3在默认配置下存在任意文件覆写风险。当S3桶允许上传已有文件名时,攻击者可覆盖关键文件。
分析发现 xxxxxxxx.cloudfront.net 用于托管主站的JavaScript、HTML、Windows软件及PDF文件。这意味着我可以修改这些文件内容。
5.2 攻击利用
主站通过CloudFront CDN加载资源文件。攻击者可利用任意文件覆写:
- 修改JavaScript文件,插入恶意代码实现存储型XSS
- 篡改可执行文件(.exe)或PDF,植入木马控制用户主机

初始POC文件内容:

通过以下请求覆写 poc.txt 内容为 “Arbitrary File Overwrite”:
POST /upload HTTP/1.1
Host: admin.test.com
Authorization: <JWT>
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarypxxxxxx
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="destination"gallery/
------WebKitFormBoundarypxxxxxx
Content-Disposition: form-data; name="file"; filename="poc.txt"
Content-Type: Text/plainArbitrary File Overwrite
------WebKitFormBoundarypxxxxxx--

命令行验证确认文件内容已被成功覆写:

六、漏洞总结与赏金
| 漏洞类型 | 赏金金额 |
|---|---|
| 管理后台UI访问(JWT realm篡改) | $3,000 |
| 任意文件覆写 | $20,000 |
| 总计 | $23,000 |

七、关键发现
- JWT realm字段可被篡改:部分应用仅验证JWT签名,不校验claim值的合法性
- Authorization头Bearer关键字可省略:部分服务端对认证头格式校验不严格
- S3/CloudFront默认配置存在文件覆写风险:即使无法上传WebShell,通过覆写现有资源文件同样可造成严重危害
- Fuzzing是挖掘此类漏洞的关键手段:本文中删除”Bearer”关键字的发现即源于系统化fuzzing测试
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。













暂无评论内容