iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
Security

CTF 菜鳥修練日誌系列 第 22 篇

Day 22:【Crypto】寫自動化腳本解題:Python pwntools 程式庫基礎

  • 分享至 

  • xImage
  •  

1. 前言與核心概念

在 CTF 競賽中,密碼學(Crypto)題目往往不只是靜態的密文分析,許多題目會架設遠端伺服器(常見為 Netcat/NC 連線),要求參賽者在極短時間內回答數十輪數學計算,或是進行動態的 Oracle 攻擊(如 Padding Oracle Attack)。

如果依靠手動輸入,不僅效率低下,更無法處理複雜的大數運算與即時回應。此時,Python 的 pwntools 框架就是解題的終極神器!

pwntools 是專為 CTF 設計的漏洞利用與自動化庫,具備以下核心功能:

  • 網路通訊 (Network I/O):輕鬆建立 TCP 連線(Socket),封裝了繁瑣的接收與發送邏輯。
  • 資料轉換 (Data Encoding):內建位元組(Bytes)與十六進位(Hex)、Base64、大數轉換工具。
  • 日誌與除錯 (Logging):提供清晰的連線狀態與除錯訊息。

2. pwntools 核心語法速查

在撰寫自動化腳本時,最常用的四大模組如下:

1. 建立遠端連線

from pwn import *

# 建立 TCP 連線 (IP / Domain, Port)
r = remote('challenge.ctf.org', 1337)

2. 接收資料 (Receive)

  • r.recvline():接收一行資料(直到換行符 \n)。
  • r.recvuntil(b'something'): 持續接收資料,直到讀取到指定的位元組標記。
  • r.recvall():接收直到伺服器關閉連線的所有內容。

3. 發送資料 (Send)

  • r.send(b'data'):發送純位元組資料。
  • r.sendline(b'data'):發送資料並自動追加換行符 \n(相當於按下 Enter)。

4. 進入互動模式

  • r.interactive():將控制權交還給使用者,允許手動輸入(常用於成功拿到 Shell 或拿到 Flag 前的最後確認)。

3. Python 實戰演練:模擬 NC 自動化答題

我們來寫一個模擬情境:伺服器會連續發送 5 輪 RSA 或數學挑戰,要求我們解析題目後在 1 秒內回傳答案。

步驟一:撰寫自動化解題腳本

在 WSL 中創建 day22_pwntools_demo.py(此範例模擬建立連線與解析資料流的完整邏輯):

from pwn import *
import hashlib

# 設定 pwntools 日誌等級 (info / debug)
context.log_level = 'info'

def solve_challenge():
    log.info("正在連線至遠端挑戰伺服器...")
    
    # 模擬接收伺服器提示訊息 (相當於 r.recvuntil 或 r.recvline)
    demo_server_prompt = b"Challenge 1: Calculate MD5 of 'picoCTF_2026'\nInput: "
    log.info(f"收到伺服器訊息: {demo_server_prompt.decode().strip()}")
    
    # 自動提取關鍵字並計算解答
    raw_data = "picoCTF_2026"
    answer = hashlib.md5(raw_data.encode()).hexdigest()
    log.success(f"自動計算出解答: {answer}")
    
    # 模擬發送解答至伺服器 (相當於 r.sendline)
    log.info(f"已發送解答至伺服器: {answer}")
    
    print("\n[🎯] pwntools 自動化接收與回應測試成功!")

if __name__ == "__main__":
    solve_challenge()

步驟二:執行結果

在 WSL 終端機執行:

python3 day22_pwntools_demo.py

輸出畫面:

[*] 正在連線至遠端挑戰伺服器...
[*] 收到伺服器訊息: Challenge 1: Calculate MD5 of 'picoCTF_2026'
    Input:
[+] 自動計算出解答: 8b178fea5c634b323644982880eb01ab
[*] 已發送解答至伺服器: 8b178fea5c634b323644982880eb01ab

[🎯] pwntools 自動化接收與回應測試成功!

https://ithelp.ithome.com.tw/upload/images/20261006/20184211AsO1MIJrZC.png

5. 總結與心得

pwntools 是貫穿密碼學與 Pwn 領域的必備基礎。掌握了recvuntil與 sendline 的搭檔使用,未來面對任何 NC 連線型的動態密碼學挑戰(例如:RSA 密碼學問答、Padding Oracle 爆破、流密碼金鑰重用攻擊),都能輕鬆寫出自動化腳本一鍵抓取 Flag!


上一篇
Day 21:【Crypto】雜湊演算法的單向性:MD5/SHA256 碰撞與 Rainbow Table
系列文
CTF 菜鳥修練日誌 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言