缓冲区溢出攻击实验(另附源代码)
缓冲区溢出攻击代码如下:
#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攻击代码为攻击行为。