iT邦幫忙

2023 iThome 鐵人賽

DAY 11
0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,發現類似 Day 0x0A Natas Level 8 → Level 9,但多了段描述表示「因為安全問題,現在已過濾某些字元」
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 PHP 程式碼
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,大致上同 Day 0x0A Natas Level 8 → Level 9,不過新增正規表達式來過濾 ;|& 特殊符號
    • Imgur
  • 在已知敏感檔案路徑的情況下,構造 '.*' /etc/natas_webpass/natas11,其中 . 代表任意字元、* 代表符合零或多次,意即符合任意長度的任意字串,完整指令 grep -i '.*' /etc/natas_webpass/natas11 dictionary.txt 代表打印出兩個檔案中所有內容
    • Imgur
  • 任選 GETPOST 的方式提交,成功獲得下題的登入密碼
    • Imgur

Note

  • 上題 Natas Level 8 → Level 9 也可輸入 '.*' /etc/natas_webpass/natas10 來達成
    • Imgur
  • 如果不熟 grep 一樣先在本地試試看,創建 a.txtb.txt 兩份檔案,並假設 b.txt 中的 secret 是目標資訊
    1. grep -i 'secret' a.txt 理所當然地找不到
    2. grep -i '.*' b.txt a.txt 找尋兩個檔案中符合任意長度的任意字串 = 所有內容
    3. grep -i 'secret' b.txt a.txt 如果知道目標字串的話當然也能直接尋找,但在此題登入密碼正是我們想得到的敏感資訊 (未知)
    • Imgur
  • 每個 Command Injection 也是 Argument Injection,例如控制輸入 --help 等,而此關雖然使用黑名單過濾了特殊字元,但根據 grep 的特性仍然可以得到登入密碼

Summary

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

Reference


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

尚未有邦友留言

立即登入留言