1

我了解溢出利用需要三个步骤:

1.将任意代码(shellcode)注入目标进程内存空间。

2.控制eip。

3.设置eip执行任意代码。

我阅读了 ben hawkens 关于堆利用的文章,并且了解一些关于如何最终覆盖函数指针以指向我的代码的策略。

换句话说,我理解第 2 步。

我不明白第 1 步和第 3 步。

  1. 如何将我的代码注入进程内存空间?

  2. 在第 3 步中,我使用指向我的 shellcode 的指针覆盖了一个函数指针,我如何计算\知道我的注入代码注入到哪个地址?(这个问题在stackoverflow中通过使用“jmp esp”来解决)。

4

3 回答 3

3

在堆溢出中,假设系统没有激活 ASLR,您将知道在溢出中使用的内存块(也称为缓冲区)的地址。

一种选择是将 shellcode 放在缓冲区所在的位置,因为您可以控制缓冲区的内容(作为应用程序用户)。将 shellcode 字节放入缓冲区后,您只需跳转到该缓冲区地址。

例如,执行该跳转的一种方法是覆盖 .dtors 条目。一旦易受攻击的程序完成,shellcode - 放置在缓冲区中 - 将被执行。复杂的部分是 .dtors 覆盖。为此,您将不得不使用已发布的堆利用技术。

先决条件是禁用 ASLR(在执行易受攻击的程序之前知道缓冲区的地址)并且放置缓冲区的内存区域必须是可执行的。

更重要的是,第 2 步和第 3 步是相同的。如果您控制 eip,则将其指向 shellcode(任意代码)是逻辑。

PS:绕过ASLR比较复杂。

于 2012-09-28T02:38:11.843 回答
2

第 1 步需要被攻击代码中的漏洞。常见的漏洞包括:

  • 缓冲区溢出(常见的 i C 代码,如果程序将任意长字符串读入固定缓冲区,就会发生这种情况)
  • 评估未经处理的数据(在SQL和脚本语言中很常见,但也可以在其他语言中出现)

第 3 步需要详细了解目标架构。

于 2012-05-28T13:42:23.337 回答
1
  1. 如何将我的代码注入进程空间?

    这是一个相当的陈述/问题。它需要在所述进程空间中有一个“可利用”的代码区域。例如,Windows 目前正在尽可能将大多数 strcpy() 重写为 strncpy()。我说如果可能的话

    因为并非所有使用 strcpy 的代码区域都可以成功转换为 strncpy。为什么?因为~@这个症结的区别如下所示;

    strcpy($buffer, $copied);
    

    或者

    strncpy($buffer, $copied, sizeof($copied));
    

    这就是strncpy在现实世界场景中难以实施的原因。大多数操作都必须安装一个“幻数” strncpy(sizeof() 运算符创建这个幻数)

    作为编码员,我们被教导使用硬编码值,例如严格遵守 achar buffer[1024];是非常糟糕的编码实践。

    但是 ~ 相比之下 - 使用buffer[]="";orbuffer[1024]="";是漏洞利用的核心。但是,例如,如果我们将此代码更改为后者,我们会在系统中引入另一个漏洞......

    char * buffer;
    char * copied;
    
    strcpy(buffer, copied);//overflow this right here...
    

    或这个:

    int size = 1024;
    
    char buffer[size];
    char copied[size];
    
    strncpy(buffer,copied, size);
    

    这将阻止溢出,但在 RAM 中引入了一个可利用的区域,因为大小是可预测的,并且可以结构化为 1024 个代码/数据块。

    因此,例如,在程序的地址空间中寻找 strcpy 的原始发布者,如果 strcpy 存在,将使该程序可被利用。

    strcpy 受到程序员青睐的原因有很多strncpy。幻数、可变输入/输出数据大小……编程风格……等等……

  2. 如何在我的代码中找到自己(我的位置)

    查看各种黑客书籍以获取此类示例〜

    但是,试试;

    label:
    pop eax
    pop eax
    call pointer
    
    jmp label
    pointer:
    mov esp, eax
    jmp $
    

    这是一个无效的示例,因为我不想负责编写下一个莫里斯蠕虫!但是,任何体面的程序员都会了解这段代码的要点并立即知道我在说什么。

    我的儿子,我希望你的溢出技术在未来能奏效!

于 2016-11-10T10:35:12.830 回答