我如何缓冲溢出64位应用程序?

时间:2014-02-04 01:49:59

标签: c 64-bit buffer buffer-overflow

首先,我想说我已经在线查看并且还没有找到任何有价值的东西。我这里有一个非常简单,标准的BOF文件来攻击。我已经用64位模式编译了它:

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

int main(int argc, char **argv)
{
    if(argc!=2) return 1;
    char buffer[500];
    strcpy(buffer, *(argv+1));  //vulnerable function
    return 0;
}

编译:

gcc -fno-stack-protector -ggdb -z execstack -o output vulnerable.c

现在,如果我添加了-m32,那么溢出很容易,而且我已经习惯了。但是,似乎无法覆盖 RIP

gdb -q output


Reading symbols from /Files/ASM/a.out...done.
(gdb) run $(python -c 'print "A"*100')
Starting program: /Files/ASM/a.out $(python -c 'print "A"*100')
You said:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Program received signal SIGSEGV, Segmentation fault.
0x000000000040059e in main (argc=2, argv=0x7fffffffe658) at vuln.c:10
10  }
(gdb) 

注册值:

(gdb) info reg
rax            0x0  0
rbx            0x0  0
rcx            0x400659 4195929
rdx            0x7ffff7dd8e10   140737351880208
rsi            0x7ffff7ff8000   140737354104832
rdi            0x0  0
rbp            0x4141414141414141   0x4141414141414141
rsp            0x7fffffffe578   0x7fffffffe578
r8             0x1  1
r9             0x4141414141414141   4702111234474983745
r10            0x0  0
r11            0x7ffff7acea40   140737348692544
r12            0x400440 4195392
r13            0x7fffffffe650   140737488348752
r14            0x0  0
r15            0x0  0
rip            0x40059e 0x40059e <main+82>
eflags         0x10206  [ PF IF RF ]
cs             0x33 51
ss             0x2b 43
ds             0x0  0
es             0x0  0
---Type <return> to continue, or q <return> to quit---
fs             0x0  0
gs             0x0  0
(gdb)

在线似乎几乎没有文档,我可以从中学习BOFing 64位应用程序。

在strcpy函数后直接设置断点时,我发现参数的结尾位于 RCX 寄存器中。

0 个答案:

没有答案