读取内存绕过 ASLR

逆向工程 开发 漏洞分析
2021-06-17 09:04:41

现代漏洞利用使用不同的技术来绕过 ASLR。某些 IE 漏洞利用中使用的技术之一是使用 BSTR 覆盖泄漏内存。

攻击者如何泄漏内存,他如何使用它来有效绕过 ASLR?

2个回答

这是BSTR在内存中的表示方式:

Length Data string Terminator

所以攻击者会尝试获得一个对齐的 heapspray,然后触发一个漏洞来修改 BSTR 的 Length 部分,它可以是:

  • 堆溢出。
  • 释放后的使用在可以修改受控内存地址(例如 AND 0xFFFFFFFF,edi)的指令上崩溃,其中 edi 由攻击者控制并指向 BSTR 长度字段
  • 等等。

那么 BSTR 的长度将如此之大,以至于您可以读取一大块内存,其中仅包含指向 DLLS 的指针,从中您可以获得这些 DLLS 的基地址,然后 BOOM!ASLR 绕过!

使用GetModuleHandle()来获取模块和偏移的基址。偏移量只是current address - base address.