漏洞利用开发如何为渗透测试人员工作?

信息安全 渗透测试 开发开发
2021-09-09 13:12:48

在进行漏洞利用开发时,该进程始终依赖于受害者机器的内存地址。

作为漏洞利用开发人员,您必须设置攻击者\受害者机器的环境并尝试使用它。漏洞利用开发人员在从易受攻击的应用程序中获取 shell 的过程中的主要线索是内存地址(主要是 DLL 和缓冲区位置),他通过将应用程序附加到调试器(通常由 CPU 寄存器(例如 EIP )指向, ESP 等)。

如果最终目标是制作概念验证代码以证明此应用程序易受攻击,这很好。但是,据我所知,这些地址不是永久性的,并且可以在机器之间更改。如果您正在为一家公司进行黑盒渗透测试,您将无法将调试器附加到他们的应用程序以获取正确的跳转地址。这同样适用于来自exploit-db的公共漏洞利用,因为那里的大多数漏洞利用都需要对地址和偏移量进行一些修复。

所以我的问题是:作为渗透测试人员而不是作为漏洞利用开发人员,渗透测试人员如何从编写这样的漏洞(或从漏洞利用数据库下载漏洞)中受益?

2个回答

每次启动时地址的更改称为地址空间布局随机化 (ASLR)。与数据执行保护 (DEP) 一起,ASLR 是针对内存损坏漏洞的最有效的安全控制之一。阅读DEP 和 ASLR 的工作原理中的优秀答案。但是,当创建针对 Windows XP 之上的任何东西(现在几乎所有东西)的缓冲区溢出漏洞利用时,使用一些技术可以绕过 ASLR。最常见的一种是将代码执行转移到一个未启用 ASLR 的模块,该模块在固定或预测地址加载。大多数针对 IE8 和 IE9 的 IE 漏洞利用使用两个模块之一(MSVCR71.dll 和 HXDS.dll),因为这两个模块都是非 ASLR 并在 IE 进程中加载​​(默认情况下或可以轻松触发) .

大多数闪存攻击使用一种技术,其中向量数组的长度被覆盖,并且读取的数据多于预期。当攻击者能够在被利用的进程内存中读取任意长度的数据时,它可以用于查找可以构造 ROP gadgets 的常见 DLL 的地址。您可以在雷海飞的优秀论文中找到更多详细信息如果您想阅读一些能够绕过 ASLR 的代码,请在此处查看Metasploit 使用的漏洞利用代码。

简而言之,ASLR 与 DEP 一起是一种极好的缓解措施。但是,在某些情况下,有技术可以绕过它以进行可靠的利用。

您在问 shellcode 如何击败地址空间布局随机化,但这从您提出问题的方式中并不能立即清楚。“面向返回的编程”(ROP)的艺术已经发展以应对这一挑战。ROP 的目标是确保任何代码执行的返回地址是一个已预先批准执行的地址空间,因为它位于一个或多个模块(或称为“小工具”)使用的地址空间中在 ROP 语言中),它已经是已被利用的原始程序的一部分,或者在被利用的程序可以合法调用的库中。如果将初始程序和相关库放置在随机位置,则需要发现随机位置。例如,以下是绕过 ALSR 的方法:

  • 以非 ALSR 模块为目标。有些软件没有编译为遵守 ALSR 并且不会尊重它。对 JRE6 浏览器插件的许多攻击都依赖于此。 来源
  • 查找可执行文件的初始地址并推断其余部分。例如,这个Adobe Reader 漏洞利用找到初始地址并使用操作指针的能力,然后“读取 vtable”以获取内存位置,从而将自己从硬编码的内存位置中解放出来。也就是说,一旦完成,它就可以依赖于相对的内存位置。

在进行漏洞利用开发时,该进程始终依赖于受害者机器的内存地址。

最初的说法是错误的。并非所有为 Metasploit 开发的或在exploit-db 中列出的漏洞都依赖于执行 shellcode 的能力。也许您只是在提到调试器时询问这些类型,但以防万一,请考虑来自exploitdb的以下利用:

https://www.exploit-db.com/exploits/39515/ 不涉及内存位置。Metasploit 将使用未经身份验证的文件上传功能来上传 JSP 文件,然后您可以连接到该文件并向系统发出命令。