2011-04-13 55 views

回答

5

我是这个项目在加州大学圣迭戈分校研究人员之一,并写了C到利用字符串的编译器部分。您提到的特定工作是SPARC特定的(并且还针对已知的Solaris libc二进制文件进一步量身定制)。这些文件实际上给我们做了一个更好地了解(和概括和编程方法):用于ROP攻击创造

对于Linux + 64,已经有许多工具因为我们的研究一般可以通过搜索网络找到。其中大部分比我们(现在相对较旧)的研究专用工具更有用,更方便用户。

让我给您一个建议,如果你想了解你的Linux系统的较低水平,也没有这样做的话,可以考虑“阶梯形”与以下方法:

  1. “OLD-学校“堆栈注入:在你的盒子上禁用不可执行的堆栈保护,并注入shell代码。 Lot是这里的资源 - 从Aleph One的开创性的“Smashing The Stack For Fun And Profit”开始(在网络上广泛使用)。
  2. Return-to-Libc:重新启用不可执行的堆栈,并尝试创建自定义有效内容以跳入libc(可能的execve)并尝试抓取一个shell。

一旦你掌握了这些知识,那么进入ROP将会容易得多。如果你已经在那里,那么给你力量!

+0

瑞恩,我想了解它是如何工作的。我是ROP新手,我开始使用SPARC,因为我正在开发一个漏洞。我刚刚学会了返回LibC,但调用者函数在将%i0寄存器作为%i0使用/ bin/sh之前到达system()之前对其进行了保存。我认为ROP可能能够救我,我可以在那里中间调用一个小的后缀函数来恢复我已经溢出的其他寄存器之一的%o0 ..我几乎开始用更新后的手稿中的图表来理解它,它展示了%sp如何在ROP中占据领先地位,但随后我丢失了它... – bazz 2014-10-16 12:56:16

+0

继续上面的评论:AFAIK,我正在利用一个远程程序,我不知道没有蛮力的堆栈偏移量。当我覆盖%fp和%i7时,我用一些随机的合格堆栈地址写了%fp,我意识到它在ret恢复到感染的%i7后变成%sp。这个%sp然后成为新堆栈框架中%i7的基础,对吧?!这就是为什么我不明白我如何能够控制SPARC上的多个级别的回报:| – bazz 2014-10-16 13:02:56

+0

嗨,感谢您的关注!你是否通过了CCS 2008的全部文章? SPARC ROP的难点在于滑动注册窗口,并准备在返回之后汇总。目前还不清楚你是否有ASLR,如果事情变得更加困难(我们没有在我们的论文中解决这个问题)。只要ASLR关闭,并且您有一个“常规”strcpy或其他可用的exploit,则基本上需要回溯到函数返回时所有寄存器应该在哪里,并且该文件应该在那里提供高级别。 – 2014-11-03 21:47:37