iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,網頁和 Day 0x0D Natas Level 11 → Level 12 類似,但描述改成「因為安全問題,我們現在只接受照片」
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 PHP 程式碼
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,最初生成亂數檔案名稱並寫入網頁的 input 標籤的 value 中,上傳檔案後會重新生成檔案名稱但保留副檔名,使用 exif_imagetype() 檢查是否為圖片檔案,並將檔案位址的超連結回顯於網頁中
    • Imgur
  • 構造插入 JPG File Signature 的 PHP one-liner webshell
    echo '\xFF\xD8\xFF\xE0<?php system("cat /etc/natas_webpass/natas14"); ?>' > natas13_webshell.php
    
    • Imgur
  • Ctrl + Shift + iF12 開啟 DevTools,找到包含亂數檔案名稱的 input 標籤,修改成 value=<隨便你>.php 後按下 Upload File 按鈕上傳檔案
    • Imgur
  • 看到有成功回顯亂數檔案名稱但副檔名不變的超連結
    • Imgur
  • 點擊超連結成功看到下題的登入密碼
    • Imgur

Note

  • 比起 Day 0x0D Natas Level 11 → Level 12 多檢查了檔頭的 File Signature,但因為網站沒有完整驗證 (例如副檔名沒檢查),所以仍然存在繞過的方法
  • 一般所熟知的副檔名 (Filename Extension) 主要代表要用什麼方式或軟體來開啟,例如透過上傳副檔名為 .php 的檔案來執行 webshell、副檔名 .txt 使用記事本開啟,而檔案實際格式則是 File Signature (Magic Numbers/Bytes),每種檔案都有相對應的格式定義,例如 PNG (Portable Network Graphics) Specification, Version 1.2APPNOTE.TXT - .ZIP File Format Specification
    • Imgur
  • 所以如果重新命名檔案名稱時將 PNG 的副檔名改成 .zip,則有可能因為系統嘗試以 ZIP 的方式開啟而導致失敗,因為檔案內容、格式都未改變,不會因此而變成 ZIP 壓縮檔
    • Imgur

Summary

  • 相關弱點:
  • 弱點原因:
    • 透過前端調整副檔名,允許使用者上傳惡意檔案
  • 修補建議:
    • 由網站建立白名單驗證檔案類型,並重新創建檔案、名稱、副檔名,並建議立即更換密碼,以減少資訊洩漏的風險

Reference


上一篇
Day 0x0D Natas Level 11 → Level 12
下一篇
Day 0x0F Natas Level 13 → Level 14
系列文
Natas 網頁安全:從入門到放棄35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言