首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >x86_64上的缓冲区溢出-返回到libc攻击(linux)

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

Stack Overflow用户
提问于 2014-04-07 11:34:08
回答 1查看 2.3K关注 0票数 3

在研究和测试了32位linux机器上的各种攻击(外壳代码注入,返回到libc,GOT覆盖)之后,我专注于64位世界。在实现基本外壳代码注入攻击方面,我没有任何问题。

但是现在我试图返回到libc对x86_64的攻击,以绕过NX堆栈保护。现在,在64世界中,易受攻击程序的文本段被保护为空字节,所以您不能将执行重定向到受害者内部的指令。

代码语言:javascript
复制
(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个为空字节,->发现32位pop小工具不是解决方案)。

与32-体系结构一样,libc中的指令使用空字节进行保护:

代码语言:javascript
复制
(gdb ) p execve<br/>
$ 1 = { <text variable, no debug info> } 0x7ffff7ad2cc0 <execve>

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

我发现了一篇关于我正试图意识到的技巧的文章:

http://pastebin.com/RA4qVWgX

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-02-12 08:48:28

因此,我想您可以说:如果漏洞是由于gets的存在,就有可能实现返回到libc的漏洞(包含许多空字节),但是如果漏洞是由于strcpy的存在,就不可能意识到这一点,因为strcpy将在第一个空字节处停止。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22911248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档