x86_64上的缓冲区溢出 - 返回libc攻击(linux)

时间:2014-04-07 11:34:09

标签: c linux security x86-64 buffer-overflow

在研究和测试了32位linux机器上的各种类型的攻击(shellcode注入,返回libc,GOT覆盖)后,我专注于64位世界。我在执行基本shellcode注入攻击方面没有任何问题。

但是现在我试图在x86_64上返回libc攻击以绕过NX-stack保护。现在,在64世界中,易受攻击程序的文本段受到空字节的保护,因此您无法将执行重定向到受害者内部的指令。

(gdb) disas main
Dump of assembler code for function main:
   0x00000000004005bc <+0>: push   %rbp
   0x00000000004005bd <+1>: mov    %rsp,%rbp
   .........................................................
   0x0000000000400600 <+68>:    callq  0x400480 <strcpy@plt>
   0x0000000000400605 <+73>:    lea    -0x40(%rbp),%rax
   .........................................................
End of assembler dump.

8个字节的地址中有5个是空字节(4个中的1个是空字节 - &gt;查找32位pop-ret小工具不是解决方案)。

与32架构一样,libc中的指令用NULL字节保护:

(gdb ) p execve<br/>
$ 1 = { <text variable, no debug info> } 0x7ffff7ad2cc0 <execve>

8个字节中的2个是null个字节。

我发现了一篇关于我正在努力实现的技术的文章:

http://pastebin.com/RA4qVWgX

但是在输入(使用空字节?)传递给程序(文章的第241行)的主要点上,它只是说“将它输入受害者”。据我所知,没有办法在利用易受攻击的函数(getsstrcpy)的字符串中注入带有多个空字节的输入。

如果有人能帮助我理解这一点,或者在x86_64机器上给出关于ret2libc攻击的建议,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

  

所以我想你可以说:如果漏洞是由于存在   得到它可以实现一个返回libc漏洞利用(包含   许多空字节),但如果漏洞是由于存在   strcpy它不可能意识到因为strcpy会停止   在第一个空字节。

我们可以这么说,但是应该知道gets只是代码的一个例子,它不会停留在空字节上,而strcpy只是代码的一个例子。