21

我已经阅读并完成了Reversing: Secrets of Reverse EngineeringHacking: The Art of Exploitation。他们俩都以自己的方式进行了启发,但我仍然觉得其中提供的许多技术和信息在某种程度上已经过时了。

当臭名昭著的 Phrack 文章Smashing the Stack for Fun and Profit写于 1996 年时,就在我认为计算机安全“黄金时代”之前。

在随后的几年中编写漏洞利用相对容易。在受害者机器上执行缓冲区溢出和执行一些任意 shell 代码所需要的只是 C 和汇编的一些基本知识。

简单地说,事情变得复杂了很多。现在,安全工程师必须应对地址空间布局随机化 (ASLR)数据执行保护 (DEP)堆栈 Cookie、堆 Cookie 等问题。编写漏洞利用程序的复杂性至少上升了一个数量级。

如果不使用一堆标志进行编译以关闭现代保护,您将无法在今天找到的教程中运行大多数缓冲区溢出漏洞利用。

现在,如果你想编写一个漏洞利用程序,你必须想办法关闭 DEP,用你的 shell 代码喷洒堆数百次,并尝试猜测你的 shellcode 附近的随机内存位置。更不用说当今使用​​的托管语言的普遍性,当涉及到这些漏洞时,这些语言更加安全。

我希望将我的安全知识扩展到为十年老系统编写玩具漏洞之外的知识。面对我上面概述的所有保护措施,我无法找到有助于解决编写漏洞利用问题的资源。

有哪些更先进和流行的论文、书籍或其他资源专门用于应对为现代系统编写漏洞利用程序的挑战?

4

4 回答 4

7

你提到了'粉碎堆栈'。在研究方面,这篇文章在发表之前就已经过时了。80 年代后期的 Morris 蠕虫使用它(利用fingerd IIRC)。当时它引起了巨大的轰动,因为当时每个服务器都是用乐观的 C 语言编写的。

花了几年(10 年左右)的时间,但逐渐每个人都更加意识到与面向公众的服务器相关的安全问题。

用 C 编写的服务器经过大量安全分析,同时服务器端处理扩展到其他语言和运行时。

今天的情况看起来有点不同。服务器不被认为是一个大目标。如今,客户才是大鱼。劫持客户端,服务器将允许您在该客户端的凭据下进行操作。

风景变了。

就我个人而言,我是偶尔玩组装游戏的粉丝。我对它们没有实际用途,但如果您想参与其中,我建议您查看 Metasploit 源并阅读他们的邮件列表。他们做了很多疯狂的事情,而且都是公开的。

于 2009-12-06T03:44:24.870 回答
2

我印象深刻,你和我一样是 leet 黑客。您需要迁移到 Web 应用程序。过去几年发布的大多数 CVE 编号都在 Web 应用程序中。

阅读这两篇论文:

http://www.securereality.com.au/studyinscarlet.txt

http://www.ngssoftware.com/papers/HackproofingMySQL.pdf

获取 LAMP 堆栈并安装以下三个应用程序:

http://sourceforge.net/projects/dvwa/ (php)

http://sourceforge.net/projects/gsblogger/ (php)

http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project (j2ee)

您应该下载w3af并掌握它。为它写插件。w3af 是一个很棒的攻击平台,但它有 bug 并且有 DVWA 问题,它会破坏灰度。Acunetix 是一款不错的商业扫描仪,但价格昂贵。

于 2010-01-26T08:56:22.853 回答
1

DEP(数据执行保护)、NX(不执行)和其他明确禁止执行的安全增强功能很容易通过使用其他漏洞利用技术(如 Ret2Lib 或 Ret2Esp)绕过。编译应用程序时,通常使用其他库 (Linux) 或 DLL (Windows)。这些 Ret2* 技术只是调用驻留在内存中的现有函数()。

例如,在正常的利用中,您可能会溢出堆栈,然后使用 NOP Sled、您的 Shellcode 或包含您的 shellcode 的环境变量的地址来控制返回地址 (EIP)。在不允许堆栈可执行的系统上尝试此漏洞利用时,您的代码将无法运行。相反,当您溢出返回地址 (EIP) 时,您可以将其指向内存中的现有函数,例如 system() 或 execv()。您使用此函数所需的参数预先填充所需的寄存器,现在您可以调用 /bin/sh 而无需从堆栈中执行任何操作。

更多信息请看这里:

http://web.textfiles.com/hacking/smackthestack.txt

于 2010-03-16T17:04:26.813 回答
1

我强烈推荐“The Shellcoder's Handbook”。在编写漏洞利用程序时,它很容易成为我读过的最好的参考资料。

如果您对编写漏洞利用程序感兴趣,您可能必须学习如何进行逆向工程。对于世界上 99% 的人来说,这意味着 IDA Pro。根据我的经验,没有比 Chris Eagle 的“The IDA Pro Book”更好的 IDA Pro 书了。他详细介绍了您在 IDA Pro 中需要做的几乎所有事情。

OpenRCE.org 上有一个非常棒的逆向工程社区。那里有大量论文和各种有用的应用程序。我是在一个名为 RECon 的优秀的双年度逆向工程会议上了解到这个网站的。下一个事件将在 2010 年举行。

如今,大多数研究都将是“唾手可得的果实”。在最近的安全会议上,我参加的大部分演讲都是关于移动平台(iPhone、Android 等)上的漏洞,现代操作系统上几乎没有或根本没有可用的保护措施。

一般来说,不会有一个单一的参考资料可以解释如何编写现代漏洞利用,因为操作系统中内置了大量的保护措施。例如,假设您发现了一个堆漏洞,但 Windows 中令人讨厌的新安全取消链接功能使您无法执行。要知道有两位天才研究过这个功能,发现了一个漏洞

祝你学习顺利。漏洞利用写作非常令人沮丧,但非常有益!

呸! 垃圾邮件让我无法发布所有链接。对不起!

于 2009-12-06T04:11:44.900 回答