编写缓冲区溢出漏洞

时间:2015-04-14 18:52:41

标签: security buffer-overflow

我知道有很多关于如何编写缓冲区溢出的教程,但仍然无法编写自己的。

以下是我想破解的C代码:

#include <stdio.h>
#include <stdlib.h>

static int x = 8;

void prompt(){
    char buf[100];

    gets(buf);
    printf("You entered: %s\n", buf);

}

int main(){
    prompt();

    return 0;
}

void target(){
    printf("Haha! I made it!\n");
    exit(0);
}

我的目标是通过缓冲区溢出漏洞来执行target()函数。 通过反复试验,我发现获得分段错误所需​​的最小字符数为108.(因此107个字符不会导致seg错误) 我已经反汇编了二进制文件,发现目标可执行文件位于地址0x08048e7f

我已经翻转了字节顺序以补偿字节序。 - &GT; 0x7f8e0408 然后我将十六进制转换为二进制,然后转换为ASCII,获得:&amp; #3 8 1; (忽略空格,stackoverflow最初没有正确显示) 之后,我插入了前107个字符,然后是Ž

因此,我的攻击字符串是:iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii 这仍然给我一个分段错误。 我这样编译:

gcc ./vuln_program.c -fno-stack-protector -z execstack -static -o vuln_program

并事先禁用了保护措施:

sudo sysctl -w kernel.randomize_va_space=0

我使用的是32位Ubuntu虚拟机。

有什么想法吗? 谢谢。

编辑: 我刚刚意识到我在这个网站上的输出被视为奇怪的字符。 如果你看到一个奇怪的Z,它真的是1)&amp; 2)#3)3 4)8 5)1 6);按照确切的顺序

0 个答案:

没有答案