使用GDB调试易受攻击的二进制文件

时间:2016-12-12 20:24:48

标签: c integer gdb buffer-overflow

我试图从Phrack Magazine开始利用这个易受攻击的代码。这是易受攻击的二进制文件的代码:

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

int main(int argc, char *argv[]){
        unsigned short s;
        int i;
        char buf[80];

        if(argc < 3){
                return -1;
        }

        i = atoi(argv[1]);
        s = i;

        if(s >= 80){            /* [w1] */
                printf("Oh no you don't!\n");
                return -1;
        }

        printf("s = %d\n", s);

        memcpy(buf, argv[2], i);
        buf[i] = '\0';
        printf("%s\n", buf);

        return 0;
}

我成功获得了可以绕过验证的整数,当它转换为无符号短路时为65536,它将等于0,但是当我试图放置一些&#34; A&#34;为了找到返回地址(EIP)的位置,我收到了这个错误: 这是我的有效载荷:

  

(gdb)r 65536 $(python -c&#39; print&#34; A&#34; * 65536&#39;)

当我调查问题时,它就在这里:

  `0x08048532 <+182>:   lea    0x1a(%esp),%edx
   0x08048536 <+186>:   mov    0x5c(%esp),%eax
---Type <return> to continue, or q <return> to quit---
   0x0804853a <+190>:   add    %edx,%eax
=> 0x0804853c <+192>:   movb   $0x0,(%eax)
   0x0804853f <+195>:   lea    0x1a(%esp),%eax
   0x08048543 <+199>:   mov    %eax,(%esp)
   0x08048546 <+202>:   call   0x8048350 <puts@plt>
   0x0804854b <+207>:   mov    $0x0,%eax
   0x08048550 <+212>:   leave
   0x08048551 <+213>:   ret`

但我不明白为什么会发生这种情况。

0 个答案:

没有答案