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