虽然这个技术已经不能在新版本上使用了,但是还是有许多学习价值的。
刚开始学,与大家分享一下,直说自己不是很明白的几个点,然后是参考的文章。
实例代码如下:
/*
Heap overflow vulnerable program.
*/
#include <stdlib.h>
#include <string.h>
int main( int argc, char * argv[] )
{
char * first, * second;
/*[1]*/ first = malloc( 666 );
/*[2]*/ second = malloc( 12 );
if(argc!=1)
/*[3]*/ strcpy( first, argv[1] );
/*[4]*/ free( first );
/*[5]*/ free( second );
/*[6]*/ return( 0 );
}
我们要知道堆是从内存低址到内存高址增长的,很明显第三行代码strcpy有堆溢出。
此时如果传入的数据过多,就会覆盖second的堆首、堆身数据。