iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
自我挑戰組

新手挑戰 picoCTF:資安入門紀錄系列 第 19

PW Crack 3 — 找候選密碼、比對 MD5

  • 分享至 

  • xImage
  •  

今天挑戰的題目是:
https://ithelp.ithome.com.tw/upload/images/20250930/20178898WaUGktvGeR.png
我有偷偷看了旁邊的Hints:檢查器 level3.py、雜湊檔 level3.hash.bin,以及被 XOR 加密的 flag level3.flag.txt.enc。


解題步驟與思路
根據提示可推斷解題流程大概是:讀程式拿到候選密碼 → 用同樣的雜湊方法把候選密碼雜湊 → 找出跟 level3.hash.bin 相符的那個 → 用它當 key 對加密檔做 XOR 解密拿到 flag。

一、先看程式確認流程與候選密碼:
cat level3.py
https://ithelp.ithome.com.tw/upload/images/20250930/20178898LMAxZ2B2sC.png
會出現一拖拉庫的程式碼,但只須看最後的重點即可:

  1. 程式使用 hashlib.md5() 來對密碼做 MD5。
  2. 候選密碼列在變數 pos_pw_list:
["f09e", "4dcf", "87ab", "dba8", "752e", "3961", "f159"]
  1. 若 candidate 的 MD5 與 level3.hash.bin 完全相同,就會把 level3.flag.txt.enc 用 str_xor 解開。

二、對 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 完全一致──那就是正確密碼:
https://ithelp.ithome.com.tw/upload/images/20250930/20178898OJckvXcY1h.png

三、用正確密碼去解加密檔:
python3 level3.py //當提示請輸入密碼時,輸入剛剛找到的密碼(87ab)
即可獲得題目答案:picoCTF{m45h_fl1ng1ng_cd6ed2eb}


小心得
看程式碼先於亂猜:很多 CTF 題目把重要資訊放在隨附的 script 裡,閱讀程式碼能省很多時間。

學會基本的 hash(MD5 / SHA 系列)與 XOR 概念,這兩項在入門的 CTF 題目裡超常見。

把流程拆成小步驟:找到候選 → 同演算法處理 → 比對 bytes → 用找到的 key 還原。
一步一步檢查,比起一次嘗試很多方法更可靠。

這次題目的難度也從先前的Easy跨到Medium確實解題的複雜度和要求也越來越高...
希望不要有需要解好多天的題目🥺🥺


上一篇
小結篇|資安解題學習整理
下一篇
PW Crack 4 — 比對雜湊再解密
系列文
新手挑戰 picoCTF:資安入門紀錄21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言