描述
为了解决实验室问题,利用一个隐藏的 API 端点购买一件 Lightweight l33t 皮夹克。您可以使用以下凭据登录您自己的账户:wiener:peter。
所需知识
要解决这个实验室问题,您需要了解以下内容:
- 如何利用错误消息构造有效的请求。
- RESTful API 如何使用 HTTP 方法。
- 改变 HTTP 方法如何揭示额外的功能。
这些内容在我们的 API 测试学院主题中有涵盖。
进入实验室
解决方案
1、 在 Burp 的浏览器中访问实验室,并点击一个产品。
2、 在 Proxy > HTTP history 中,注意产品的 API 请求。例如,/api/products/3/price。
3、 右键点击 API 请求,选择 Send to Repeater。
4、 在 Repeater 标签页中,将 API 请求的 HTTP 方法从 GET 改为 OPTIONS,然后发送请求。注意到响应中指定了允许的方法,包括 GET 和 PATCH。
简言之,可以用 options 请求去嗅探某个请求在对应的服务器中都支持哪种请求方法,options请求是用于请求服务器对于某些接口等资源的支持情况的,包括各种请求方法、头部的支持情况,仅作查询使用
5、 将 API 请求的方法从 GET 改为 PATCH,然后发送请求。注意到您收到了一个未授权的(Unauthorized)消息。这可能表示您需要进行身份验证才能更新订单。
6、 在 Burp Suite 的浏览器中,使用凭据 wiener:peter 登录应用程序。
7、 点击 Lightweight "l33t" 皮夹克产品。
8、 在 Proxy > HTTP history 中,右键点击 Leather Jacket 皮夹克的 /api/products/1/price 请求,并选择 Send to Repeater。
9、 在 Repeater 标签页中,将 API 请求的方法从 GET 改为 PATCH,然后发送请求。注意到由于不正确的 Content-Type,会导致错误。错误消息指定 Content-Type 应为 application/json。
10、 添加一个 Content-Type 头,并将其值设置为 application/json。
11、 将一个空的 JSON 对象 {} 作为请求体添加进去,然后发送请求。注意到由于请求体缺少 price 参数,会导致错误。
12、 向 JSON 对象 {"price": 0} 添加一个 price 参数,并发送请求。
{
"price":0
}
13、 在 Burp Suite 的浏览器中,重新加载皮夹克产品页面。注意到皮夹克的价格现在是 $0.00。
14、 将皮夹克添加到您的购物篮中。
15、 转到您的购物篮,并点击 Place order 完成实验室任务。