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