iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,看到 Leet 的句子和下拉式選單,但並沒有 sourcecode 超連結可以查看後端程式碼
    • Imgur
  • 下拉式選單點擊 perl underground,發現 URL 多出 index.pl?file=perl+underground,猜測後端是採用 Perl 語言
    • Imgur
  • 經過一連串嘗試後,透過 wfuzz 枚舉 payload,發現其中 %7Cid%3B (解碼為 |id;) 較為不同
    • Imgur
  • 可參考 Day 0x02 Natas Level 0 → Level 1 的方法,透過 Burp Suite 的 Proxy 攔截封包並 Send to Repeater,將請求的 URL 替換成 ?file=%7Cid%3B,觀察回傳推測存在 Command Injection
    • Imgur
    • Imgur
  • 嘗試 cat index.pl 查看後端程式碼,當請求的 file 不存在 natas 時,透過 open 開啟指定檔案
    • Imgur
  • 構造 payload %7Ccat+/etc/*webpass/*30%3B 放進請求的 URL 中,成功獲得下題的登入密碼
    • Imgur

Note

  • 繞過 natas 黑名單驗證的方法有很多,以下簡單列舉幾項
    1. 無意義的單雙引號 %7Ccat+/etc/n""atas_webpass/na""tas30%3B
    2. 反斜線跳脫 %7Ccat+/etc/nata\s_webpass/n\atas30%3B
    3. wildcard 字元 %7Ccat+/etc/na?as_webpass/na?as30%3B
      • * 代表任意數量的任意字元;? 代表不多於問號數量的任意字元
  • Command Injection 的成因來自於 open(FD, "$f.txt");,因為使用者輸入可以控制檔案名稱,當包含 | 時會將後續的字串當作指令執行,所以需要 ; (或者用 %00 空字元) 截斷 .txt

    "By prefixing the filename with a pipe (|), the rest of it is interpreted as a command invocation, which accepts standard input by printing to the filehandle, and is executed after the filehandle is closed." - 4.3. open() for Command Execution

Summary

  • 相關弱點:
  • 弱點原因:
    • 網站採取黑名單驗證,將使用者輸入當作指令的一部分來執行
  • 修補建議:
    • 謹慎評估是否真的需要將使用者輸入併進指令中,如果可以最好停用此方案,否則建議制定白名單嚴格過濾使用者輸入,並尋找可行的 API 等替代手段;並建議立即更換密碼,以減少資訊洩漏的風險

Reference


上一篇
Day 0x1D Natas Level 27 → Level 28
下一篇
Day 0x1F Natas Level 29 → Level 30
系列文
Natas 網頁安全:從入門到放棄35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言