漏洞利用开发基础:简单缓冲区溢出

admin 2024年9月18日10:31:29评论14 views字数 2862阅读9分32秒阅读模式

当数据从一个位置移动到另一个位置时,缓冲区(内存存储区域)会暂时保留数据。大于内存缓冲区存储容量的数据量会导致缓冲区溢出,也称为缓冲区溢出。应用程序在尝试将数据复制到缓冲区的过程中覆盖附近的内存区域。

任何类型的程序都可能遇到缓冲区溢出。最常见的原因是错误的输入或缓冲区空间分配不足。程序行为可能会变得不可预测,从而导致结果不准确、内存访问问题,或者在事务覆盖可执行代码时崩溃。

查找缓冲区溢出的步骤:

1. Spiking — 查找程序的易受攻击部分

2. 模糊测试 — 发送一堆字符,看看我们是否可以破解程序

3. 找到偏移量 — 找出我们在什么点打破了它

4. 覆盖 EIP — 用于漏洞利用和远程代码执行

5. 寻找坏角色 — 额外的角色

6. 找到合适的模块 — 用于开发

7. 生成 Shellcode — 恶意 shellcode 会给我们一个反向 shell

8. 根!!— 如果一切顺利

让我们深入研究一下,我们如何找到这个漏洞!!

注意:出于演示目的,我们将使用 vulnserver

扣球

  1. 启动 vulnserver 并连接到它:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

2. 打开 immunity debugger 并附加 vulserver 并运行它:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

3. 让我们与它交流,我们将专注于 highlighter 命令:

漏洞利用开发基础:简单缓冲区溢出

4. 这里 TRUN 是我们将要查看的易受攻击组件,要找到易受攻击的命令,我们需要执行 spiking

5. 我们将获取每个命令并提供一堆字符,看看它是否溢出,如果它溢出并且程序崩溃,那么这是易受攻击的

6. 为此,我们将使用名为 generic_send_tcp 的工具:

漏洞利用开发基础:简单缓冲区溢出

7. 我们需要 spike 脚本,让我们检查 stats 命令:

漏洞利用开发基础:简单缓冲区溢出

8. 在上面的 spike 脚本中,我们可以看到:

一个。我们阅读了这条线

b.然后我们获取字符串 (STATS here)

c. 然后我们将向它发送变量

9. 让我们测试 STAT:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

10. 让我们测试 TRUN:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

11. 按下 run 后,我们看到 access violation 错误,这意味着某些内容易受攻击:

漏洞利用开发基础:简单缓冲区溢出

12. 查看寄存器以获取信息:

漏洞利用开发基础:简单缓冲区溢出

一个。寄存器中填充了 “A=41 in hex”

b.另外,看看 EIP

漏洞利用开发基础:简单缓冲区溢出

13. 现在,我们发现 该点或命令是脆弱的 i..e 特伦

一个。此阶段称为加标

B. I..e..确定易受攻击的内容

模糊

1. 类似于尖峰

2. 在这个阶段,我们将派遣一群 charecter 到一个指挥部并尝试将其 breken

一个。区别在于,在尖峰攻击中,我们试图找到易受攻击的内容

b.在模糊测试中,我们知道什么是易受攻击的,我们将对其进行攻击

3. 为此,编写 python 脚本并使其可执行:

漏洞利用开发基础:简单缓冲区溢出

4. 启动模糊测试程序并等待程序崩溃:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

5. 我们使程序崩溃

6. 现在下一步是找出我们崩溃的时间点以及 EIP 在哪里

一个。这是找到偏移量

查找偏移量

1. 要找到偏移量,我们需要创建模式(msf 框架提供的工具):

漏洞利用开发基础:简单缓冲区溢出

或者,您也可以使用 mona.py 创建模式

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

2. 现在,我们制作 offset.py 代码并将其发送:

漏洞利用开发基础:简单缓冲区溢出

3. 当我们发送它时,我们将获得 EIP 的价值;因此程序崩溃,并且 EIP 上的 value 将返回

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

4. 现在我们知道了 EIP 的价值,让我们看看如何使用它

漏洞利用开发基础:简单缓冲区溢出

或者,我们同样可以使用 mona.py 来确定偏移量,这非常简单

漏洞利用开发基础:简单缓冲区溢出

5. 该值告诉我们,在 2002 年,我们可以控制 EIP

一个。或覆盖 EIP

覆盖弹性公网 IP

1. offset 2002 的值表示:

a. 在获得 EIP 之前有 2002 个字节

b.此外,EIP 本身的长度为 4 字节

2. 我们将尝试写入这 4 个特定字节

3. 为此,我们可以将 offset 脚本修改为:

漏洞利用开发基础:简单缓冲区溢出

4. 我们发送包含 A 和 B 的 shellcode

漏洞利用开发基础:简单缓冲区溢出

一个。我们将发送 2002 * A,截至 2002 年,我们的 EIP 位于

b.4 * B,因为 EIP 为 4 字节

5. 现在,我们通过传递 4*B 来控制 EIP:

6. 现在,我们知道我们可以控制 EIP,让我们尝试查找坏字符(如果有)。

查找 Bad 角色

1. 查找坏字符就像生成 shellcode

一个。我们需要知道哪些字符对我们的 shellcode 是好的或坏的

漏洞利用开发基础:简单缓冲区溢出

或者,我们可以使用 mona.py 来简化此操作:

漏洞利用开发基础:简单缓冲区溢出

2. 执行上述脚本:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

3. 程序确实如预期般崩溃,但我们真的对 badchar 的十六进制转储感兴趣:

漏洞利用开发基础:简单缓冲区溢出

4. 最后一个角色是 FF;同样在现实生活中,我们需要看看中间是否有任何坏角色

漏洞利用开发基础:简单缓冲区溢出

一个。如果有一些,它将看起来像 11 12 13 15

b.请注意,缺少 12 个

c. 这清楚地表明,这两者之间存在不良品格

5. 坏角色列表:(此处不存在)

漏洞利用开发基础:简单缓冲区溢出

6. 找到所有 badchars 时写下它们,比如缺少什么

一个。唯一的错误字符是缺失序列的第 1 个字符

7. 在这里,没有坏角色

一个。如果有坏字符

b.运行 badchar.py

8. 现在,我们需要将生成的 bin 文件与字节数组的起始地址进行比较:

漏洞利用开发基础:简单缓冲区溢出

9. 按 C,它将带您进入 CPU 窗口,并反映出规定的字节数组地址:

漏洞利用开发基础:简单缓冲区溢出

10. 现在,我们将比较:

漏洞利用开发基础:简单缓冲区溢出

11. 上述 ss 所反映的情况应该是这种情况

12. 如上述 ss 所示,您还需要删除 09:

漏洞利用开发基础:简单缓冲区溢出

13. 重复直到没有找到坏字符,然后我们可以将字符串放入没有坏字符的最终漏洞利用中。

找到合适的模块

1. 这意味着寻找没有内存保护的 DLL,即......没有 DEP、ASLR 等。

2. 我们可以在调试器中使用 mona.py 来实现这一点:

3. 我们将 mon.py 放入文件夹中并输入:!mona modules

漏洞利用开发基础:简单缓冲区溢出

4. 我们将使用第一个模块,因为它没有所需的内存保护。

5. 现在,我们需要找到 JMP 的等效操作码

答:我们需要找到“JMP ESP”地址,以便让我们跳转到堆栈地址来执行我们的 shellcode。我们可以使用 mona.py 脚本来帮助我们找到具有 'jmp esp 的正确模块

漏洞利用开发基础:简单缓冲区溢出

6. 现在这条指令会告诉 EIP 地址跳转到我们当前 ESP 指向的地址。

7. 然后,我们将使用找到的 ESP 地址编辑我们的漏洞利用:

漏洞利用开发基础:简单缓冲区溢出

8. 如果您注意到,JMP 代码现在以相反的顺序写入 EIP

一个。这是因为 x86 接受 little endian 格式

b. 其中,较低字节的数据存储在较低的地址,而高阶字节存储在较高的地址

9. 现在,我们将继续 JMP 地址:

漏洞利用开发基础:简单缓冲区溢出

10. 现在,我们将按 F2 设置一个中断点:

漏洞利用开发基础:简单缓冲区溢出

11. 我们正在这样做,所以如果我们运行程序,它会在 ar 断点右暂停,然后继续前进

12. 执行我们的脚本:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

13. 现在,你可以看到我们已经控制了 EIP,剩下的唯一就是编写 shellcode 和 root!!它

最终漏洞

1. 生成我们的 shellcode:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

a. b 表示字节编码

b. /x90 为 NOP

c. 现在,让我们启动漏洞利用:

漏洞利用开发基础:简单缓冲区溢出

漏洞利用开发基础:简单缓冲区溢出

结论

基于堆栈的 Windows 缓冲区溢出和缓冲区溢出攻击的基本概念到此结束。

其它课程

linux恶意软件开发对抗与进程安全管理视频教程

漏洞利用开发基础:简单缓冲区溢出

linux文件系统存储与文件过滤安全开发视频教程(2024最新)

漏洞利用开发基础:简单缓冲区溢出

linux高级usb安全开发与源码分析视频教程

漏洞利用开发基础:简单缓冲区溢出

linux程序设计与安全开发

漏洞利用开发基础:简单缓冲区溢出

  • windows恶意软件开发与对抗视频教程

  • 漏洞利用开发基础:简单缓冲区溢出

  • 漏洞利用开发基础:简单缓冲区溢出

  • windows

  • 漏洞利用开发基础:简单缓冲区溢出

  • windows()

  • 漏洞利用开发基础:简单缓冲区溢出

  • USB()

  • 漏洞利用开发基础:简单缓冲区溢出

  • ()

  • 漏洞利用开发基础:简单缓冲区溢出

  • ios

  • 漏洞利用开发基础:简单缓冲区溢出

  • windbg

  • 漏洞利用开发基础:简单缓冲区溢出

  • ()

  • 漏洞利用开发基础:简单缓冲区溢出漏洞利用开发基础:简单缓冲区溢出漏洞利用开发基础:简单缓冲区溢出

  • 漏洞利用开发基础:简单缓冲区溢出

  • 漏洞利用开发基础:简单缓冲区溢出

  • 漏洞利用开发基础:简单缓冲区溢出

原文始发于微信公众号(安全狗的自我修养):漏洞利用开发基础:简单缓冲区溢出

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月18日10:31:29
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   漏洞利用开发基础:简单缓冲区溢出https://cn-sec.com/archives/3177795.html

发表评论

匿名网友 填写信息