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++ 不會對原始陣列進行自動邊界檢查。strcpy、gets、sprintf 和 strcat 這些函式會樂意地寫超過緩衝區末端,因為它們只在乎空結尾符號或來源長度,不在乎目的地的實際大小。相比之下,strncpy 或 snprintf 會接受明確的大小參數並在那裡停止。這個漏洞的根本原因不在於
本文由 AI 協助撰寫,經 Michal Pilch(CISSP)審核並發佈,Korra Studio。
準備好更進一步了嗎?
這是 Korra Studio 知識庫中的一篇筆記——該平台將每個主題與一對一的師資配對。
免費開始arrow_forward