arrow_back回到田野筆記
WEB SECURITY 已發佈 9 Aug 2026

緩衝區溢位是什麼?實作演練

透過真實的 C 例子、堆疊圖表以及自己動手操作的工具,瞭解緩衝區溢位的實際運作原理。

緩衝區溢位發生在程式寫入超過固定大小記憶體區塊容量的資料時。多出來的位元組會溢入相鄰的記憶體區域,根據緩衝區旁邊儲存的內容,你可以破壞變數、讓程式當機,或完全劫持執行流程。這是軟體安全中最古老的漏洞類型之一,至今仍在 CTF、CVE 和嵌入式韌體中出現。

容易受攻擊的模式

以下是 C 語言的典型例子:

#include <string.h>

void greet(char *name) {
    char buffer[64];
    strcpy(buffer, name);
}

int main(int argc, char **argv) {
    greet(argv[1]);
    return 0;
}

strcpy 把你傳入的任何字串複製到 buffer 中,完全不做邊界檢查。如果 argv[1] 長度超過 64 位元組,複製會繼續進行超過陣列末端。在堆疊上,buffer 位於其他本地變數、已儲存的暫存器,最終還有告訴 CPU 在 greet() 結束後要跳往何處的返回位址下方。用你能控制的位址覆寫該返回位址,你就能控制接下來執行什麼。

為什麼這仍然能編譯並執行

C 和 C++ 不會對原始陣列進行自動邊界檢查。strcpygetssprintfstrcat 這些函式會樂意地寫超過緩衝區末端,因為它們只在乎空結尾符號或來源長度,不在乎目的地的實際大小。相比之下,strncpysnprintf 會接受明確的大小參數並在那裡停止。這個漏洞的根本原因不在於

本文由 AI 協助撰寫,經 Michal Pilch(CISSP)審核並發佈,Korra Studio。

準備好更進一步了嗎?

這是 Korra Studio 知識庫中的一篇筆記——該平台將每個主題與一對一的師資配對。

免費開始arrow_forward