iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
自我挑戰組

利用生成式AI等工具來學習資安系列 第 15

Day 15:PWN / Buffer Overflow(概念 + 實作)

  • 分享至 

  • xImage
  •  

今日目標(3 項)

理解堆疊溢位原理(stack frame、return address 覆寫、buffer overflow)。

熟悉防護機制與名詞:ASLR、NX/DEP、Canary、PIE,並學習如何在受控環境下關閉或調整測試。

實作一個簡單的 overflow PoC:建立脆弱 C 程式、用 gdb 找 offset、用 Python(pwntools) 製作 exploit 並驗證 flag/shell。

必備工具

gcc, gdb, pwntools(Python)、pwndbg/gef(gdb 插件)、objdump、readelf、netcat(若需 remote)。

測試環境:隔離 VM 或本機 docker container(關閉對外網路或用 loopback)。

建議步驟(一步步照做)

寫一個簡單脆弱程式 vuln.c(例如 gets(buf) 或 strcpy 無邊界檢查)。

編譯(方便測試):

# 方便測試:關閉 stack protector、PIE,關閉編譯器優化
gcc -fno-stack-protector -z execstack -no-pie -g vuln.c -o vuln

用 gdb / pwndbg 觀察:執行並填入長字串,找到 overflow 導致 crash 的 return address 偏移(可用 cyclic/pattern)。

python3 -c "from pwn import cyclic; print(cyclic(200))"  # 產生測試模式

在 gdb 裡用 run ,info registers,cyclic -l 找 offset。

確認保護機制(查看 binary):

checksec --file=./vuln
readelf -h vuln

若啟用 ASLR/Canary/NX,先在受控環境關閉或調整測試策略(例如臨時關閉 ASLR:echo 0 | sudo tee /proc/sys/kernel/randomize_va_space)。

撰寫 exploit(pwntools):用找到的 offset 製作 payload(填充 + 新 return 指向 system("/bin/sh") 或跳到 shellcode)。

from pwn import *
p = process('./vuln')
payload = b'A'*offset + p64(ret_addr)
p.sendline(payload)
p.interactive()

驗證與紀錄:取得 shell 或 flag,截圖 gdb crash 與 exploit 成功畫面,保存 exploit script、gdb log、binary hash。

還原環境:恢復 ASLR(echo 2 | sudo tee /proc/sys/kernel/randomize_va_space),刪除/關閉測試容器。

今天完成 Day15:實作基礎 Buffer Overflow。從撰寫脆弱 C 範例、用 gdb 找偏移並確認 crash,到用 pwntools 撰寫 exploit 並驗證取得 shell/flag。我更理解 return overwrite、堆疊布局與 ASLR/NX/Canary 對 exploit 的影響,也學會在受控環境中關閉保護做測試並在結束後還原。下一步會練習 ROP 與繞過保護技巧。


上一篇
Day 14:自動化腳本入門 — 用 Python 進行簡易安全檢測
下一篇
Day 16:密碼學基礎(對稱/非對稱/雜湊與實作)
系列文
利用生成式AI等工具來學習資安30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言