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