在 Day 04 中,我們看到了直接將 Flag 拆碎放在 JavaScript 原始碼中的荒謬情況。然而,有些網站開發者稍微聰明一點點:他們不會把明碼放著,而是會將輸入的密碼進行 Base64 編碼、雜湊(Hash)或是簡單的數學運算後再做比對。
今天我們要透過 PicoCTF 的 login 題目,示範當前端試圖用簡單的 JS 加密來保護密碼時,攻擊者如何還原加密邏輯,甚至直接在 DevTools Console 中執行逆向腳本一秒拿 Flag!
透過 PicoCTF 實戰,掌握以下核心技能:
btoa() / Base64)。

.js 檔案。Ctrl + U)。<script> 標籤內直接找到了處理表單監聽與驗證的完整邏輯:
index.js),找到表單監聽器與驗證邏輯:
觀察程式碼,可以發現網頁把我們輸入的密碼經由btoa()處理並去除等號(=)後,與這串 Base64 字串比對:
cGljb0NURnt1M3J2M3JfNTNydj3JN3XUzcnYzc181M3J2M3JfNTNydjNyfQ
由於Base64只是編碼而非不可逆加密,且Base64長度需為 4 的倍數,我們補上填補符號==後按 F12 切換到DevTools的Console(主控台),使用atob()函式進行解碼:atob("cGljb0NURnt1M3J2M3JfNTNydj3JN3XUzcnYzc181M3J2M3JfNTNydjNyfQ==")
按下 Enter 後,主控台便會直接印出解碼後的字串!
Flag:picoCTF{53rv3r_53rv3r_53rv3r_53rv3r_53rv3r}
