使用gdb来利用缓冲区溢出

时间:2015-07-27 16:28:12

标签: c++ gdb buffer-overflow

我正在完成一项任务,但我遇到了一些问题。我对编程的整个安全部门都很陌生,所以我可能只是遗漏了一些简单的东西,但我很感激你们给予的任何帮助。

在这个作业中(旧的作业,不适用于我的班级的这个术语),我们的目的是让一个程序调用一个与它打算调用的函数不同的函数。代码发布在下面:

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

int oopsIGotToTheBadFunction(void)
{
    printf("Gotcha!\n");
    exit(0);
}

int goodFunctionUserInput(void)
{
    char buf[12];
    gets(buf);
    return(1);
}

int main(void)
{
    goodFunctionUserInput();
    printf("Overflow failed\n");
    return(1);
}

我们打算在调用其他函数时执行oopsIGotToTheBadFunction。到目前为止,我在Terminal或PuTTy中加载程序然后执行disas命令,但结果信息不是我所期望的。我希望这些信息能够像这样阅读

Dump of assembler code for function bar:
0x000000000040068e <+0>: push %rbp
0x000000000040068f <+1>: mov %rsp,%rbp
0x0000000000400692 <+4>: mov $0x400800,%edi
0x0000000000400697 <+9>: callq 0x400528 <puts@plt>
0x000000000040069c <+14>: mov 0x20099d(%rip),%rax # 0x601040 ...
0x00000000004006a3 <+21>: mov %rax,%rdi
0x00000000004006a6 <+24>: callq 0x400558 <fflush@plt>
0x00000000004006ab <+29>: leaveq
0x00000000004006ac <+30>: retq
End of assembler dump.

但我得到了这个:

enter(gdb) disas oopsIGotToTheBadFunction
Dump of assembler code for function oopsIGotToTheBadFunction:
0x00000001000008fc <oopsIGotToTheBadFunction+0>:        save  %sp, -192, %sp
0x0000000100000900 <oopsIGotToTheBadFunction+4>:        sethi  %hi(0x100000), %g      1
0x0000000100000904 <oopsIGotToTheBadFunction+8>:        mov  %g1, %g1   ! 0x1000      00
0x0000000100000908 <oopsIGotToTheBadFunction+12>:       sllx  %g1, 0xc, %g1
0x000000010000090c <oopsIGotToTheBadFunction+16>:       or  %g1, 0xa20, %o0
0x0000000100000910 <oopsIGotToTheBadFunction+20>:       call  0x100100c20 <puts@      plt>
0x0000000100000914 <oopsIGotToTheBadFunction+24>:       nop
0x0000000100000918 <oopsIGotToTheBadFunction+28>:       clr  %o0        !    0x0
0x000000010000091c <oopsIGotToTheBadFunction+32>:       call  0x100100ba0 <exit@      plt>
0x0000000100000920 <oopsIGotToTheBadFunction+36>:       nop
0x0000000100000924 <oopsIGotToTheBadFunction+40>:       nop
End of assembler dump.

我正在使用的漫游要求我操纵rbp和leaveq中的信息但是我不知道该使用什么而不是那些因为当我运行disas命令时它们不存在。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

我希望信息能够像这样阅读

您希望找到Intel x86_64说明...

  

但我得到了这个:

您正在查找Sun SPARC条指令。你知道英特尔x86以外的处理器存在,对吗?

如果要调试/操作英特尔程序集,则必须在装有英特尔CPU的计算机上执行此操作。