緩衝區溢位保護

2021-06-07 01:02:55 字數 610 閱讀 5525

1. 堆疊記憶體位址隨機化,程式每次執行的堆疊位址都不一樣(空出一段隨機偏移).

關閉方法:

sysctl –w kernel.randomize_va_space=0

echo 0 > /proc/sys/kernel/randomize_va_space

2. 棧**不可執行

如果棧中**不可執行的話, 緩衝區溢位的shellcode將不能執行.

關閉方法:

sysctl –w kernel.exec-shield=0

3. gcc編譯器gs驗證碼機制.

在buffer寫入之前, gcc寫入乙個隨機gs驗證碼到end[buffer] ~ before(ret address). 並在寫完buffer之後檢查gas是否被修改.

關閉方法:

編譯時加入 -fno-stack-protector 選項.

4. ld鏈結器堆疊不可執行機制

只有所有.o檔案的堆疊都標記不可執行,則整個庫的堆疊不可執行.

檢視方法:

readelf  -lw  a.out 檢視 gnu_stack是否有e可執行標記

新增可執行方法:

gcc中新增 -z execstack 選項.

緩衝區溢位

緩衝區溢位是指當電腦程式向緩衝區內填充的資料位數超過了緩衝區本身的容量。溢位的資料覆蓋在合法資料上。理想情況是,程式檢查資料長度並且不允許輸入超過緩衝區長度的字串。但是絕大多數程式都會假設資料長度總是與所分配的儲存空間相匹配,這就為緩衝區溢位埋下隱患。作業系統所使用的緩衝區又被稱為堆疊,在各個操作程...

緩衝區溢位

緩衝區溢位,簡單的說就是計算機對接收的輸入資料沒有進行有效的檢測 理想的情況是程式檢查資料長度並不允許輸入超過緩衝區長度的字元 向緩衝區內填充資料時超過了緩衝區本身的容量,而導致資料溢位到被分配空間之外的記憶體空間,使得溢位的資料覆蓋了其他記憶體空間的資料。通過往程式的緩衝區寫超出其長度的內容,造成...

緩衝區溢位 棧溢位

1 緩衝區概念 緩衝區 buffer 又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。使用緩衝區有兩個好處 1 減少實際物理讀寫次數 2 緩衝區在建立時就被分配記憶體,這塊記憶體區域一直被重用,可以...