iT邦幫忙

2023 iThome 鐵人賽

0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,有上傳檔案功能,並透過描述猜測預期是處理 .csv 檔案
    • Imgur
  • 嘗試上傳 .csv 檔案,會將內容顯示於網頁中
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 Perl 程式碼
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,同樣使用 param() 處理請求,並用迴圈將內容寫進 HTML 中
    • Imgur
  • 可參考 Day 0x02 Natas Level 0 → Level 1 的方法,透過 Burp Suite 的 Proxy 攔截封包,將 Message Body 新增 ARGV 區塊,並在 URL 指定檔案路徑
    • Imgur
    • Imgur
  • 查看網頁成功獲得下題的登入密碼
    • Imgur

Note

  • 詳細原因可參考 The Perl Jam 2: The Camel Strikes Back,以最後構造的請求為例
    1. upload() 會檢查 file 參數中是否有其中一個為上傳檔案,因此新增同為 file 的區塊仍會通過檢查
    2. param()Day 0x1F Natas Level 29 → Level 30 所述,將多個 file 以 list 的方式回傳,再取新增的第一個區塊 ARGV 字串
    3. <> 接收到特別字串 ARGV 時,會讀取 URL 中的 Query 內容,並呼叫 open() 開啟每個指定的檔案
    4. 讀取任意檔案!

Summary

  • 相關弱點:
  • 弱點原因:
    • 透過 upload() 背後實作的漏洞,若輸入為 ARGV 能夠讀取任意檔案,獲取敏感資訊
  • 修補建議:
    • 更換其它 API 或程式語言,且針對使用者輸入的長度、型態、特殊字元等過濾及轉譯,並建議立即更換密碼,以減少資訊洩漏的風險

Reference


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

尚未有邦友留言

立即登入留言