.. | ||
bypassing-canary-and-pie.md | ||
README.md |
PIE
{% hint style="success" %}
学习并练习AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看订阅计划!
- 加入 💬 Discord 群组 或 telegram 群组 或 关注我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。
基本信息
作为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 Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
支持 HackTricks
- 查看订阅计划!
- 加入 💬 Discord 群组 或 telegram 群组 或 关注我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享黑客技巧。