在进行攻击开发时,进程总是依赖于受害者机器上的内存地址。
作为一个利用漏洞的开发人员,您必须设置一个攻击者\受害者计算机的环境,并对其进行尝试。在从易受攻击的应用程序获取外壳的过程中,开发人员的主要线索是将应用程序附加到调试器(通常由CPU寄存器(如EIP、ESP等)指向的内存地址(主要是DLL和缓冲区位置)。
这是好的,如果最终的目标是做一个概念代码的证明,以证明这个应用程序是脆弱的。然而,据我所知,这些地址不是永久性的,可以在不同的机器之间进行更改。如果您正在为一家公司进行黑匣子渗透测试,您将无法将调试器附加到他们的应用程序以获得正确的地址。同样的情况也适用于来自开发数据库的公共攻击,因为那里的大多数漏洞都需要一些地址和偏移量的修复。
因此,我的问题是:作为渗透测试人员而不是以开发开发人员的身份编写这样的漏洞(或从开发-db下载)如何使渗透测试人员受益?
发布于 2016-03-05 19:40:03
您是在问外壳代码如何克服地址空间布局的随机性,但从您的提问方式来看,这一点并不清楚。“面向返回的编程”(ROP)的艺术已经发展到迎接这一挑战。ROP的目标是确保任何代码执行的返回地址都指向已被预先批准执行的地址空间,因为它位于一个或多个模块(或ROP语言中调用的“小工具”)所使用的地址空间,该地址空间已经是已被利用的原始程序的一部分,或者位于已被利用的程序可以合法调用的库中。如果初始程序和相关库被放置在一个随机位置,则需要发现随机位置。例如,下面是绕过ALSR的方法:
在进行攻击开发时,进程总是依赖于受害者机器上的内存地址。
最初的说法是错误的。并非所有为Metasploit开发或列出的应用程序都依赖于执行外壳代码的能力。也许在提到调试器时,您只是询问了这些类型,但为了以防万一,可以考虑使用以下来自于exploitdb的漏洞:
https://www.exploit-db.com/exploits/39515/不涉及内存位置。Metasploit将使用未经身份验证的文件上载功能来上载JSP文件,然后您可以连接到该文件并向系统发出命令。
https://security.stackexchange.com/questions/116562
复制相似问题