iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0
自我挑戰組

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

PW Crack 1 — 閱讀程式找密碼

  • 分享至 

  • xImage
  •  

今天做的題目是:
https://ithelp.ithome.com.tw/upload/images/20250928/20178898SbtrNxmPzX.png
題目給了兩個檔案:一個是密碼檢查器 level1.py ,另一個是已加密的 flag level1.flag.txt.enc。這題並不需要暴力破解,而是要讀懂程式碼 ── 密碼其實寫在程式裡。

題目檔案
level1.py(密碼檢查 + 解密邏輯)
level1.flag.txt.enc(被 XOR 加密的 flag)

解題步驟與思路
一、下載檔案並確認目標:

wget https://artifacts.picoctf.net/c/12/level1.py
wget https://artifacts.picoctf.net/c/12/level1.flag.txt.enc
ls -1

https://ithelp.ithome.com.tw/upload/images/20250928/20178898FrI3XGOecJ.png

二、讀取並檢視 level1.py:

cat level1.py

https://ithelp.ithome.com.tw/upload/images/20250928/20178898oI0kx3a9FO.png
程式內容(重點摘錄):

def str_xor(secret, key):
    # extend key to secret length...
    return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)])

flag_enc = open('level1.flag.txt.enc', 'rb').read()

def level_1_pw_check():
    user_pw = input("Please enter correct password for flag: ")
    if( user_pw == "8713"):                # ← 密碼直接寫在這裡
        print("Welcome back... your flag, user:")
        decryption = str_xor(flag_enc.decode(), user_pw)
        print(decryption)
        return
    print("That password is incorrect")

密碼是 直接寫死 在程式裡,為"8713",而解密方式是把密文和密碼做逐字元 XOR。

三、直接執行程式並輸入密碼:

python3 level1.py

#程式提示:Please enter correct password for flag:
#在提示出現時輸入:8713
程式會輸出解密後的結果(flag):picoCTF{545h_r1ng1ng_1b2fd683}
https://ithelp.ithome.com.tw/upload/images/20250928/201788985SH3wvMfp0.png


小小心得
題目設計常用的出題套路之一:把「密碼檢查」邏輯放在附件的程式中,鼓勵參賽者閱讀程式碼而非暴力破解。

str_xor 函數把密文與密碼按位 XOR(把 key 循環延伸到與 secret 一樣長度),這是非常常見的簡單對稱「流式」加密手法,既然密碼(key)在程式內明文出現,直接把它帶入就能成功解密。

讀程式碼是 CTF 很重要的基本功:很多題目的解法都隱藏在提供的腳本或資源裡。


上一篇
picoCTF 解題紀錄:Python Wrangling
下一篇
PW Crack 2 — XOR 解密 flag
系列文
新手挑戰 picoCTF:資安入門紀錄17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言