
OAuth和OpenID Connect圖解指南
訪問之后提示我們缺少參數,我們往上一級目錄,也就是api目錄訪問看看
發現了說明文檔
我們直接點delete就可以直接對指定用戶進行刪除,但是這里回顯是401權限不足,根據靶場提供的信息我們wiener用戶,再次訪問即可刪除。當然,我們也可以通過抓包,去查看這個api的使用參數,仿照發送請求,達到任意控制效果
研究api端點時,測試方法很重要,比如我們知道端點/api/tasks,我們可以嘗試以下方法
該靶場,首先我們需要找到未被使用的api端點,上面一個靶場我們是找不到的,這里根據靶場提示,我們挨個點擊靶場中購買,走一遍購買流程,我們可以在數據記錄中,找到一個隱藏的api
這個是我們在提交購買的時候產生的,我們將這個發送到重放器中
嘗試使用不同的方式進行排查,比如我們可以嘗試使用/api/products/1,或者/api/products、/api來排查所有的內容,但是這里均無法響應
那么下一步我們可以嘗試不同的方式
比如我這里使用post
這里提示不支持該方法,并且告訴了我可用的方法,這里我們試試
提示內部服務錯誤,我們在下面加上括號
提示我們缺少price參數
加上參數
提示必須是非負整數,我們去掉引號試試
提示我們需要Content-Type: application/json
我們復制放到下面
這里成功修改了價格,我們將價格修改為0元,購買即可通關。
本關卡以api傳遞參數的方式,讓我們成功修改了參數。
我們通常可以看到,一個api請求,他會允許我們修改某些東西
PATCH /api/users/請求它允許用戶更新他們的用戶名和電子郵件,并包含以下JSON:
{
"username": "wiener",
"email": "wiener@example.com",
}
返回的信息是以下JSON
{
"id": 123,
"name": "John Doe",
"email": "john@example.com",
"isAdmin": "false"
}
這表示隱藏的id和參數,可能可以進行改變使用
我們想要測試上面的isadmin參數,可以將上面的參數修改后發送到PATCH請求
{
"username": "wiener",
"email": "wiener@example.com",
"isAdmin": false,
}
如果我們將false修改為true,那么在沒有充分驗證的情況下,有可能會錯誤綁定對象,獲取權限。
該靶場,我們需要分析一下,流量包中的api,根據提示,我們在購買的過程中,找到兩個api的包
一個get一個post兩個數據包,這里我們可以在post數據包中看到一個數據結構
在GET數據包中,可以在返回包中發現一些隱藏的數據傳遞方式
我們可以嘗試拼接到post數據包中進行嘗試
這里報錯提示我們資金不足, 我們嘗試改變內容
嘗試數據
改成100,直接通關了
返回true,完成了關卡。
該靶場的問題,在于,我們可以從GET中獲取到一些隱藏的參數,在得到隱藏參數之后,我們可以通過post或者其他的方法進行發送,嘗試執行。
文章轉自微信公眾號@SecNL安全團隊