今天挑戰的題目是:
我有偷偷看了旁邊的Hints:檢查器 level3.py、雜湊檔 level3.hash.bin,以及被 XOR 加密的 flag level3.flag.txt.enc。
解題步驟與思路
根據提示可推斷解題流程大概是:讀程式拿到候選密碼 → 用同樣的雜湊方法把候選密碼雜湊 → 找出跟 level3.hash.bin 相符的那個 → 用它當 key 對加密檔做 XOR 解密拿到 flag。
一、先看程式確認流程與候選密碼:
cat level3.py
會出現一拖拉庫的程式碼,但只須看最後的重點即可:
["f09e", "4dcf", "87ab", "dba8", "752e", "3961", "f159"]
二、對 7 個候選密碼做 MD5,找出哪一個 match:
使用一段小 Python 腳本把 7 個 candidate 的 md5 都算出來並比對 level3.hash.bin
python3 - <<'PY'
import hashlib
cands = ["f09e", "4dcf", "87ab", "dba8", "752e", "3961", "f159"]
correct = open("level3.hash.bin","rb").read()
def hash_pw(pw_str):
m = hashlib.md5()
m.update(pw_str.encode())
return m.digest()
for pw in cands:
d = hash_pw(pw)
print(pw, d.hex(), d == correct)
if d == correct:
print("FOUND:", pw)
PY
執行後會印出哪個 candidate 的 MD5 跟 level3.hash.bin 完全一致──那就是正確密碼:
三、用正確密碼去解加密檔:
python3 level3.py //當提示請輸入密碼時,輸入剛剛找到的密碼(87ab)
即可獲得題目答案:picoCTF{m45h_fl1ng1ng_cd6ed2eb}
小心得
看程式碼先於亂猜:很多 CTF 題目把重要資訊放在隨附的 script 裡,閱讀程式碼能省很多時間。
學會基本的 hash(MD5 / SHA 系列)與 XOR 概念,這兩項在入門的 CTF 題目裡超常見。
把流程拆成小步驟:找到候選 → 同演算法處理 → 比對 bytes → 用找到的 key 還原。
一步一步檢查,比起一次嘗試很多方法更可靠。
這次題目的難度也從先前的Easy跨到Medium確實解題的複雜度和要求也越來越高...
希望不要有需要解好多天的題目🥺🥺