PIE
Reading time: 4 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 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 值,直到您泄露正确的值:
参考
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。