緩沖區溢出攻擊代碼如下:
#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攻擊代碼為攻擊行為。
