緩衝區溢位實驗 原理篇

2021-04-03 02:47:54 字數 2234 閱讀 3896

緩衝區溢位實驗1原理篇

//---c源程式--------

#include

#include

unsigned char name="12345678aaaa";

int main(int argc, char* argv)

下面是進入main()後的彙編**:

00401000  /$  83ec 08       sub     esp, 8

00401003  |.  83c9 ff       or      ecx, ffffffff

00401006  |.  33c0          xor     eax, eax

00401008  |.  8d5424 00     lea     edx, [esp]

0040100c  |.  56            push    esi

0040100d  |.  57            push    edi

0040100e  |.  bf 30704000   mov     edi, 00407030                    ;  ascii "12345678aaaa"

00401013  |.  68 48704000   push    00407048                         ;  ascii "hello world!"

00401018  |.  f2:ae         repne   scas byte ptr es:[edi]

0040101a  |.  f7d1          not     ecx

0040101c  |.  2bf9          sub     edi, ecx

0040101e  |.  8bc1          mov     eax, ecx

00401020  |.  8bf7          mov     esi, edi

00401022  |.  8bfa          mov     edi, edx

00401024  |.  c1e9 02       shr     ecx, 2

00401027  |.  f3:a5         rep     movs dword ptr es:[edi], dword p>

00401029  |.  8bc8          mov     ecx, eax

0040102b  |.  83e1 03       and     ecx, 3

0040102e  |.  f3:a4         rep     movs byte ptr es:[edi], byte ptr>

00401030  |.  e8 0b000000   call    00401040

00401035  |.  83c4 04       add     esp, 4

00401038  |.  33c0          xor     eax, eax

0040103a  |.  5f            pop     edi

0040103b  |.  5e            pop     esi

0040103c  |.  83c4 08       add     esp, 8

0040103f  /.  c3            retn

在執行strcpy之前的堆疊情況:

0012ff68   0012ffc0

0012ff6c   00401af1 

0012ff70<= 00407048  push [ascii "hello world!"]

0012ff74   7c930738  push edi

0012ff78   ffffffff  push esi;

0012ff7c   00401bac  |_這裡就是給buf[8]留的記憶體空間

0012ff80   00407000  |

0012ff84   00401125

<-- main()的返回位址

0012ff88   00000001

0012ff8c   00370b40

0012ff90   00370b88

0012ff94   7c930738  ntdll.7c930738

執行了 strcpy 以後會從 0012ff7c 一直填充,將main()地返回位址給覆蓋,成了61616161

於是當main()返回的時候就會跳到位址61616161去,那個地方不存在,於是就出錯咯`

緩衝區溢位實驗

具體過程嚴格按照上面所描述。首先配置好環境。存漏洞程式stack.c,如圖,需對其許可權做更改,更改前後的許可權變化如圖,同樣是按照文件中的 存乙個exploit.c,先存著。使用gdb,在這裡我遇到了問題,因為在設定斷點時輸錯了位址,所以在輸入r時執行失敗,顯示無法插入斷點。解決方法 使用help...

緩衝區溢位漏洞實驗

根據實驗指導輸入命令安裝一些用於編譯 32 位 c 程式的軟體包 關閉位址空間隨機化功能 設定 zsh 程式 輸入命令 linux32 進入32位linux環境 在 tmp 目錄下新建乙個 stack.c 檔案,編輯 編譯該程式,並設定 set uid 在 tmp 目錄下新建乙個 exploit.c...

緩衝區溢位

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