我听说过缓冲区溢出很多,并且相信我理解了这个问题,但我仍然没有看到一个说法的例子
char buffer[16]; //code that will over write that buffer and launch notepad.exe
@R_301_323@
首先,您需要一个可以启动其他程序的程序.以某种形式或其他形式执行OS exec的程序.这是高度操作系统和语言特定的.
其次,启动其他程序的程序必须从一些外部源读取到缓冲区.
第三,然后必须检查正在运行的程序 – 由编译器在内存中布局 – 以查看输入缓冲区和用于步骤1(启动其他程序)的其他变量是如何存在的.
第四,你必须编写一个实际超出缓冲区并设置其他变量的输入.
所以.第1部分和第2部分是一个在C中看起来像这样的程序.
#include <someOSstuff> char buffer[16]; char *program_to_run= "something.exe"; void main( char *args[] ) { gets( buffer ); exec( program_to_run ); }
第3部分需要对缓冲区和program_to_run的外观进行一些分析,但你会发现它可能只是
\x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 \x00 s o m e t h i n g . e x e \x00
第4部分,你的输入,然后必须
1234567890123456notepad.exe\x00
所以它将填充缓冲区并写入program_to_run.