講者 : 邱妍瑛
日期:2019 / 12 / 1
是針對程式設計缺陷,
向程式輸入超過了處理限制的範圍的資料,
導致相鄰存儲器位置被覆蓋,
從而破壞程式執行或趁著中斷之際取得系統控制權。
U | S | E | R | N | A | M | E |
---|
1 | 2 |
---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
緩衝區 (8byte)
溢位
8 | 9 |
使用 C 語言:
#include <stdio.h>
void Name()
{
char name[10];
printf("What's your name?\n");
gets(name);
printf("Hey %s, how are you?\n", name);
}
int main()
{
Name();
return 0;
}
請按這個連結前往 homebrew,
照官網步驟安裝好後,在終端機輸入:
$ brew install gcc
$ gcc --version
$ whereis gcc
確認是否安裝 gcc :
請按這個連結前往 minGW,
安裝後更改環境變數為你的 minGW 的路徑
$ gcc --v
確認是否安裝 gcc :
找到 PATH 的方式可參考這裡。
真的不懂可以參考這個影片的 14:40 秒左右https://www.bilibili.com/video/av75301720/
$ gcc overflow.c -o overflow -fno-stack-protector
打開終端機並輸入 :
overflow.c 是你剛剛的檔案名稱
$ gcc overflow.c -o overflow -fno-stack-protector
意思是「不啟用堆棧保護器」。
用於設置編譯後的檔案名稱。
$ gcc -o overflow overflow.c -fno-stack-protector
$ ./overflow //mac
$ overflow //windows
What is your name?
>>>Erica
Hey Erica, how are you?
如果我們的輸入少於10個字元:
What is your name?
>>>EricaOneAAAAAAAAAA
Hey EricaOneAAAAAAAAAA, how are you?
segmentation fault
如果我們的輸入大於10個字元:
這表示我們成功使用「緩衝區溢位」使程式中斷。
如果刪除此命令,重新編譯並執行,應該會失敗。
當輸入少於 10 個字元
▼ Stack
name[1] ... name[10] |
rdp |
ret of Name |
當輸入比 10 個字元多
▼ Stack
name[1] ... name[10] |
rdp |
ret of Name |
Erica
OneAA
AAAAAAAA
Buffer overflow From Wikipedia. 2019/11/10 Retrieved from: https://reurl.cc/b6N9Yo
緩衝區溢位攻擊之一(Buffer Overflow) 。2019/11/10. Retrieved from: https://reurl.cc/9zb4vd
攻擊行為-緩衝區溢位 Buffer Overflow。2019/11/10. Retrieved from: https://reurl.cc/Ylk0VX