API安全Top 10 漏洞:crAPI漏洞靶场与解题思路
字数 1709 2025-08-11 22:57:12
crAPI漏洞靶场实战指南:OWASP API安全Top 10漏洞解析
1. 靶场简介与安装
crAPI是OWASP推出的API安全项目,用于演示常见的API安全漏洞。安装方法:
docker-compose -f docker-compose.yml --compatibility up -d
官方资源:
- GitHub地址: https://github.com/OWASP/crAPI
- 官方挑战提示: https://github.com/OWASP/crAPI/blob/develop/docs/challenges.md
2. API安全漏洞详解与实战
2.1 失效的对象级别授权(Broken Object Level Authorization)
挑战1:访问其他用户车辆信息
- 在社区论坛接口获取评论者信息(泄露用户ID)
- 车辆定位功能处修改
vehicle_id参数访问其他车辆信息
挑战2:访问其他用户机械报告
- 提交维修报告后获取返回的report_id
- 修改report_id参数查看其他用户的维修报告
2.2 失效的用户身份验证(Broken User Authentication)
挑战3:重置其他用户密码
- 找到泄露用户email的接口
- 密码重置功能分析:
- 重放攻击有限制
- 将API版本从v3改为v2可绕过限制
- 爆破4位数OTP完成密码重置
2.3 过多的数据暴露(Excessive Data Exposure)
挑战4:发现敏感信息泄露接口
/community/api/v2/community/posts/recent泄露用户敏感信息
挑战5:发现视频内部属性泄露
/identity/api/v2/user/videos/30暴露视频内部属性
2.4 资源缺乏和速率限制(Lack of Resources & Rate Limiting)
挑战6:完成DoS攻击
- 找到"contact mechanic"功能
- 修改参数:
repeat_request_if_failed: truenumber_of_repeats: [大数字]
2.5 失效的功能级别授权(Broken Function Level Authorization)
挑战7:删除其他用户视频
- 将PUT请求改为DELETE方法
- 尝试将接口中的
user改为admin - 修改videos后的ID参数为其他用户的视频ID
2.6 批量分配漏洞(Mass Assignment)
挑战8:免费获得商品
- 订单接口将GET改为PUT
- 修改参数:
status: "returned"(直接标记为已退货增加余额)
挑战9:增加1000元余额
- 修改订单数量为100,status为"delivered"
- 再改为"returned"状态
挑战10:更新视频内部属性
- 修改视频名称时添加
conversion_params参数
2.7 服务器端请求伪造(SSRF)
挑战11:使crAPI请求百度
- 联系机械工接口修改
mechanic_api值为http://baidu.com - 也可使用dnslog验证
2.8 NoSQL注入
挑战12:获取免费优惠券
- 优惠券验证接口使用NoSQL注入:
{"$ne":"xxxxxxxxxxxx"}($ne表示不等于) - 获取优惠券代码:TRAC075
2.9 SQL注入
挑战13:重复兑换优惠券
- 最新版本源码存在SQL注入漏洞(Docker版本可能未包含)
2.10 未经身份验证的访问(Unauthenticated Access)
挑战14:发现无需认证的接口
- 机械工报告接口无需认证即可访问
2.11 其他漏洞示例
商品添加漏洞
- 商品列表接口将GET改为POST
- 构造参数添加商品
支付漏洞
- 购买商品时修改数量为负数
- 导致余额增加
JWT密钥爆破
- 使用JWT_Tool爆破得到密钥:crapi
- 伪造token访问系统
3. 总结
crAPI靶场覆盖了OWASP API安全Top 10中的主要漏洞类型,包括:
- 授权/认证缺陷
- 数据过度暴露
- 注入漏洞
- 业务逻辑漏洞
- 配置错误等
通过实战可以深入理解API安全风险,建议按照官方挑战文档逐步练习,掌握每种漏洞的原理和利用方法。