当攻击者获得对x86-64上Windows中的指令指针的控制权时,如何使用NX-bit和ASLR保护NX位保护?我假设系统调用禁用此功能只是在非ASLRed地址,可以直接调用吗?
似乎堆喷涂经常用于利用现代Windows机器(例如在Javascript实现中有bug),显然这需要一个可执行堆,那么堆如何在堆喷涂之前可执行?在Windows上是否有一些文件清楚地显示了这是如何完成的?
答案 0 :(得分:0)
通常,漏洞攻击涉及ROP attack。 ROP攻击可能直接调用某些系统调用(例如,生成shell),或者可能调用VirtualProtect()
来禁用NX位。
ROP攻击中的一个步骤通常是在可预测的位置(例如,a DLL that didn't opt into ASLR)找到至少一些代码,或找到一个信息泄露漏洞,让攻击者预测某些代码的位置,这样攻击者可以在可预测的地址找到小工具。一旦攻击者能够执行任意小工具,通常就是游戏结束:例如,漏洞利用代码可以对所有其他函数的地址进行去随机化,例如VirtualProtect()
,然后调用它。
您询问堆是如何可执行的。答案是:堆不是可执行的,因为在使用ROP攻击时不需要使其可执行。实际上,这是ROP攻击常用的原因之一。