hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie
2024-04-07 02:33:04 +00:00
..
bypassing-canary-and-pie.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 02:33:04 +00:00
README.md Translated ['README.md', 'binary-exploitation/arbitrary-write-2-exec/aw2 2024-04-07 02:33:04 +00:00

PIE

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

基本信息

作为PIEPosition Independent Executable编译的二进制文件意味着程序每次执行时可以在不同的内存位置加载,从而防止硬编码地址。

利用这些二进制文件的技巧在于利用相对地址,即使绝对位置发生变化,程序部分之间的偏移量仍然保持不变。要绕过PIE只需泄漏一个地址,通常是从中使用格式字符串攻击等漏洞泄漏。一旦获得一个地址,您可以通过它们的固定偏移量计算其他地址。

在利用PIE二进制文件时的一个有用提示是它们的基地址通常以000结尾因为内存页面是随机化的单位大小为0x1000字节。这种对齐可以是一个关键的检查是否工作正常的指标,指示是否已识别出正确的基地址。
或者您可以将其用于您的利用,如果您泄漏了一个地址位于**0x649e1024,则您知道基地址为0x649e1000,然后您可以计算函数和位置的偏移量**。

绕过方式

为了绕过PIE需要泄漏加载的二进制文件的一些地址,有一些选项可以实现这一点:

  • 禁用ASLR如果ASLR被禁用使用PIE编译的二进制文件始终会在相同的地址加载,因此PIE将变得无效,因为对象的地址始终会在相同的位置。
  • 获得泄漏在简单的CTF挑战中很常见查看此示例
  • 在栈中暴力破解EBP和EIP值,直到泄漏正确的值:

{% content-ref url="bypassing-canary-and-pie.md" %} bypassing-canary-and-pie.md {% endcontent-ref %}

  • 使用任意读取漏洞,如格式字符串泄漏二进制文件的地址(例如从栈中,就像前一种技术中那样)以获取二进制文件的基地址,并从那里使用偏移量。在此处找到示例

参考资料

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式