PIE
基本信息
作为PIE编译的二进制文件,即位置无关可执行文件,意味着程序每次执行时可以加载到不同的内存位置,从而防止硬编码地址。
利用这些二进制文件的漏洞的技巧在于利用相对地址,即使绝对位置发生变化,程序部分之间的偏移量仍然保持不变。要绕过PIE,只需泄漏一个地址,通常是从栈中使用漏洞(如格式化字符串攻击)获取。一旦获得一个地址,您可以通过它们的固定偏移量计算其他地址。
在利用PIE二进制文件时的一个有用提示是,它们的基地址通常以000结尾,这是由于内存页面是随机化的单位,大小为0x1000字节。这种对齐可以是一个关键的检查是否工作正常的指标,指示是否已识别出正确的基地址。
或者您可以将其用于您的利用,如果您泄漏了一个地址位于**0x649e1024
,则您知道基地址为0x649e1000
,然后您只需计算函数和位置的偏移量**。
绕过方法
为了绕过PIE,需要泄漏加载的二进制文件的一些地址,有一些选项可以实现这一点:
禁用 ASLR:如果ASLR被禁用,使用PIE编译的二进制文件始终会加载到相同的地址,因此PIE将变得无效,因为对象的地址始终会在同一位置。
获得泄漏(在简单的CTF挑战中很常见,查看此示例)
在栈中暴力破解 EBP 和 EIP 值,直到泄漏正确的值:
参考资料
Last updated