首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“外壳编码器手册:发现和利用安全漏洞”第8章中的第一个堆攻击是如何工作的?

“外壳编码器手册:发现和利用安全漏洞”第8章中的第一个堆攻击是如何工作的?
EN

Stack Overflow用户
提问于 2016-08-21 20:34:34
回答 1查看 124关注 0票数 0

我一直在阅读“外壳编码器手册:发现和利用安全漏洞”,它可以在here上找到,但我不完全理解可以在here中找到的第179页(全局第205页)中给出的一个漏洞。此利用漏洞攻击在p.175 (全局p.201)上发现的易受攻击的程序。

在利用漏洞过程中跳转到的外壳代码以“\x90\x01\x90\x90\x6A\x30\x59”开头。我使用this站点对其进行反汇编,结果显示此十六进制字符串与后面跟着"add DWORD PTR eax+0x59306a90,edx“的4NOPS相同。据我所知,这条指令似乎与其余的漏洞攻击不相符。用nop指令替换"\x01“会产生7 nops,然后是"push 0x30,pop”,这对我来说非常有意义,因为我们正在尝试找到偏移量为0x30的PEB到TEB中。但是,此漏洞仅适用于中留下的"\x01“,如果我将其更改为"\x90”(在Windows XP的普通副本上),则会中断。奇怪的是,漏洞还通过将"\x01“替换为"\x02”来工作,这真的让我感到困惑。因此,我的问题是"\x01“在漏洞利用中扮演了什么角色,为什么它不只是一个nop?

我认为这里有一些我遗漏的更深层次的东西。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-08-25 13:53:59

书中说:

这里没有什么棘手的事情;我们使缓冲区溢出,执行任意重写,让访问冲突发生,然后让ExitProcess开始。

所以看起来ADD指令的存在只是为了让它可以产生访问冲突。NOP可能有助于确保您到达正确的位置。

在第178页稍远一点的地方,他们提到了PEB在固定地址使用指针。通过更改这些指针,您可以调用并执行特定的代码(您的代码)。

由于您正在利用分配,HeapAlloc()将执行将指针移动到正确位置(在PEB中)的工作。指针直接指向您的代码,并从ExitProcess()调用,它实际上试图获得一个内存锁(进程间锁)。

显然,一旦你执行了你的代码,你就可以很好地做任何你想做的事情。这不是问题。

为什么能用?

MMU (内存管理单元)引入的一件事是,能够将软件安装在“任何”物理地址上,并像在不同的地址上一样执行它。

在过去,Intel处理器使用段寄存器(如DS)来获得类似的效果,但没有内存保护(进程A可以从进程B读取数据)。68000进程允许您编写大小高达64Kb的代码(32Kb以便于编写),并将其重新定位到任何位置。旧的Mac很好地利用了这一功能。

现在,MMU为您提供了完全的自由度,而Windows XP已经使用了该硬件功能。所以..。所有程序(文本)都从完全相同的地址开始。(如果我没记错的话,大概是0x10000。)而进程使用的许多信息都保存在前64Kb中。这是很容易访问的,因为它是好的旧全局变量。对于访问系统的各个部分非常有用,而不必每次都执行syscall,并且具有指向各种部分的指针,例如动态库(PEB内容)。

这意味着您的利用只需要知道这些指针,它就可以将它们用于自己的优势。入门有点费力,但是一旦你习惯了这个练习,就会很容易看到这些漏洞。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39064246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档