PIE
Last updated
Last updated
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
编译为 PIE 或 位置无关可执行文件 的二进制文件意味着 程序每次执行时可以加载到不同的内存位置,防止硬编码地址。
利用这些二进制文件的技巧在于利用 相对地址——程序各部分之间的偏移量即使绝对位置改变也保持不变。要 绕过 PIE,您只需泄露一个地址,通常通过格式字符串攻击等漏洞从 栈 中获取。一旦您有了一个地址,就可以通过其 固定偏移量 计算其他地址。
在利用 PIE 二进制文件时,一个有用的提示是它们的 基地址通常以 000 结尾,因为内存页是随机化的单位,大小为 0x1000 字节。如果一个漏洞没有按预期工作,这种对齐可以是一个关键的 检查,指示是否已识别正确的基地址。
或者您可以将其用于您的漏洞利用,如果您泄露了一个地址位于 0x649e1024
,您就知道 基地址是 0x649e1000
,然后您可以直接 计算函数和位置的偏移量。
为了绕过 PIE,需要 泄露已加载二进制文件的某个地址,有一些选项可以做到这一点:
禁用 ASLR:如果 ASLR 被禁用,编译为 PIE 的二进制文件将始终 加载到相同的地址,因此 PIE 将变得无用,因为对象的地址将始终在同一位置。
被 给出 泄露(在简单的 CTF 挑战中常见, 查看此示例)
暴力破解栈中的 EBP 和 EIP 值,直到您泄露出正确的值:
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)