iT邦幫忙

2023 iThome 鐵人賽

0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,功能同 Day 0x20 Natas Level 30 → Level 31,但多了描述 "This time you need to prove that you got code exec. There is a binary in the webroot that you need to execute.",似乎需要執行網頁根目錄的 binary 檔案
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 Perl 程式碼,和 Day 0x20 Natas Level 30 → Level 31 相同
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,同 Day 0x20 Natas Level 30 → Level 31 (廢話XD)
    • Imgur
  • 先嘗試看看 Day 0x20 Natas Level 30 → Level 31 的流程,可參考 Day 0x02 Natas Level 0 → Level 1 的方法,透過 Burp Suite 的 Proxy 攔截封包,將 Message Body 新增 ARGV 區塊,並在 URL 指定檔案路徑
    • Imgur
  • 查看網頁發現沒有內容
    • Imgur
  • 嘗試將 URL 的 Query 改成 ?ls%20.%20|,發現存在 getpassword 檔案
    • Imgur
  • 透過 ?file%20getpassword%20| 確定是可執行檔
    • Imgur
  • 執行 ?./getpassword%20|,成功獲得下題的登入密碼
    • Imgur

Note

  • 基本上同 Day 0x20 Natas Level 30 → Level 31upload() 接收到特殊字串 ARGV 時會呼叫 open(),而在 Day 0x1E Natas Level 28 → Level 29 已知存在 Command Injection
  • 透過 ?ls%20-l%20/etc/natas_webpass%20| 查看,發現 /etc/natas_webpass/natas33 只有 root 擁有讀寫權,因此直接使用 Day 0x20 Natas Level 30 → Level 31 的方法會因為 natas32 無權限而失效
    • Imgur
  • 藉由上述 file 的結果和 ls -l 皆可得知 getpassword 有設定 SUID,而當前使用者 natas32 所在的群組權限具有 x 執行功能,因此執行期間具有擁有者 root 的權限
    • Imgur

Summary

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

Reference


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

尚未有邦友留言

立即登入留言