我的大部分问题都在这篇文章信息泄漏的ASLR旁路中得到了回答
但是,我只想知道从信息泄漏到最终利用中使用内存地址的过程。
在我看来,其中涉及两个步骤:
因此,它需要一些手动或自动的方法来将内存地址从步骤1传递到步骤2。
我不太明白的部分是,如何从第一步获得信息并将信息传递到第二步?
发布于 2019-03-30 05:52:22
是的,这确实是一个两步的过程。这意味着目标进程必须为您提供一些方法,使您能够在多个步骤中与其交互。基本的利用活动往往是有限的,因为它们不能提供太多的互动,但一个真正的目标通常会提供一些建立会话或交换信息的手段。例如,如果您的目标是一个web服务器,您可能会发送一个虚假的请求来泄漏堆栈的转储。然后,使用另一个请求,您可以利用一些写原语来实现代码执行。其他典型的例子包括从JavaScript攻击浏览器,或者从用户空间攻击内核。在这些情况下,您将编写一个典型的(或不太典型的)程序,该程序执行对底层平台的服务调用,以便泄漏信息(可能写入到您可以从程序中读取的某些内存位置),并最终利用一些写原语来获得代码执行或您想要实现的任何目标。
一般来说,信息泄露可以采取任何形式。您可以通过任何渠道与服务器通信,都可能泄漏信息。只是一个随机的例子:想象一个pdf生成服务,它接受一个doc文件并创建一个pdf。您可以提供一个假文档文件,使服务将堆或堆栈内存转储到生成的pdf中,然后下载,然后提供第二个文档来完成攻击。
一般来说,您将如何从第一步到第二步,在很大程度上取决于目标系统和被利用的漏洞类型。在很多情况下,不仅仅是两个步骤,所以自动化并不是个坏主意。如果自动化确实是一个选项,您可能希望创建一个按顺序执行步骤的脚本。回到web服务器示例,您可以编写一些Python或Ruby脚本,发送第一个请求,读取响应,提取相关信息,准备第二个请求计算地址,并将最终请求发送到服务器以完成攻击。
https://security.stackexchange.com/questions/205809
复制相似问题