hacktricks/binary-exploitation/common-binary-protections-and-bypasses/pie
2024-07-18 17:33:27 +00:00
..
bypassing-canary-and-pie.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:33:27 +00:00
README.md Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb 2024-07-18 17:33:27 +00:00

PIE

{% hint style="success" %} 学习并练习AWS HackingHackTricks Training AWS Red Team Expert (ARTE)
学习并练习GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks
{% endhint %}

基本信息

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

利用这些二进制文件的漏洞的技巧在于利用相对地址,即使绝对位置发生变化,程序部分之间的偏移量仍然保持不变。要绕过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 %}

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

参考资料

{% hint style="success" %} 学习并练习AWS HackingHackTricks Training AWS Red Team Expert (ARTE)
学习并练习GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks
{% endhint %}