初尝Linux栈溢出
利用栈缓冲区溢出的本质,就是利用程序的漏洞和缺陷,使用精心构造的输入去触发溢出,改变EIP寄存器的值,从而能够控制程序的流程。
但是EIP寄存器可不是像通用寄存器方便的,能说改就改,这可是整个程序流的根本所在。但是难改是难改,但是不代表没法改嘛。
程序在执行子过程时总是要根据过程地址通过跳转指令重新设置eip的值,原来的值则和别的状态一起暂时保存在栈中,这就给了Shellex可乘之机。
Shellex的平台:
$ uname -a
Linux shellex-laptop 2.6.27-7-generic #1 SMP Tue Nov 4 19:33:20 UTC 2008 i686 GNU/Linux
首先Shellex写了这么一个程序
#include “stdio.h”
#include “string.h”
int fun(char *str) {
char buffer[10];
strcpy(buffer,str);
printf(“%s”,buffer);
return 0;
}
int main(int argc,char *argv[]) {
int i=0;
char *str;
[...]