iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0

Info

Walkthrough

  • 存取網頁後使用帳號和上關獲取的密碼登入,有一個可以調背景顏色的輸入框,網頁提示寫 CookiesXOR 加密來保護
    • Imgur
    • Imgur
  • 點擊 View sourcecode 超連結查看後端 PHP 程式碼
    • Imgur
  • 分析程式碼邏輯後畫成流程圖如下,$defaultdata 內的 showpassword 初始為 "no",如果經過解碼、解密後 bgcolor 是長度為六的十六進位字串,則根據使用者輸入 (Cookie 可被用戶端修改) 調整 bgcolorshowpassword,最後再透過 showpassword 是否為 "yes" 決定是否回顯下關登入密碼
    • I.e., 要透過調整 Cookie 來讓 showpassword 變成 "yes"
    • Imgur
  • Ctrl + Shift + iF12 開啟 DevTools,選擇 Storage (Chrome 的在 Application) 查看 Cookies,發現確實存有名為 data 的參數
    • Imgur
  • 複製出 data 的值,根據 XOR 的特性 (加解密都用同樣步驟,所以 loadData()saveData() 都呼叫 xor_encrypt()),使用 PHP (看個人習慣,我只是因為網頁有現成的程式碼可以抄) 撰寫腳本來推出金鑰
    1. 已知 pt ^ key = ctct ^ key = pt
    2. 將兩個等式做 XOR 得出 ct ^ pt = pt ^ key ^ ct ^ key
    3. 根據交換律得知 1. 的 ct ^ key = pt 可以改寫成 key ^ ct = pt
    4. 根據結合律將 2. 改寫成 ct ^ pt = pt ^ (key ^ ct) ^ key = pt ^ pt ^ key
    5. 根據自反性將 4. 改寫成 ct ^ pt = 0 ^ key = key
    • Imgur
  • 再透過 PHP 把想要的明文 showpassword="yes" 使用金鑰 KNHL 做加密
    • Imgur
  • 修改 Cookiesdata 的值
    • Imgur
  • 重新整理網頁,成功獲得下題的登入密碼
    • Imgur

Note

  • 程式碼變長了~但耐心看其實該做的事情很單純,網站根據不安全的來源 (Cookie) 做不安全的加密 (XOR) 來決定是否顯示敏感資訊 (下題的登入密碼)

Summary

Reference


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

尚未有邦友留言

立即登入留言