Ret2dlresolve
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
加入 💬 Discord群 或 电报群 或 关注我们的Twitter 🐦 @hacktricks_live。
通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
基本信息
如GOT/PLT和Relro页面所述,没有Full Relro的二进制文件将在首次使用时解析符号(如外部库的地址)。这种解析是通过调用函数**_dl_runtime_resolve**来实现的。
_dl_runtime_resolve函数从堆栈中获取一些结构的引用,以便解析指定的符号。
因此,可以伪造所有这些结构,使动态链接解析请求的符号(如**system函数)并使用配置的参数(例如system('/bin/sh'))进行调用。
通常,通过创建一个初始ROP链调用read来伪造所有这些结构,然后将结构和字符串**'/bin/sh'传递,以便它们被read存储在已知位置,然后ROP链继续调用_dl_runtime_resolve,使其在伪造的结构中解析system**的地址并使用地址调用此地址到'/bin/sh'。
如果没有系统调用gadgets(用于使用技术,如ret2syscall或SROP)并且没有泄漏libc地址的方法,这种技术特别有用。
在视频的后半部分中查看有关此技术的详细解释:
或查看以下页面以逐步解释:
攻击摘要
在某个位置写入伪造结构
设置
system的第一个参数($rdi = &'/bin/sh')在堆栈上设置要调用**
_dl_runtime_resolve**的结构的地址调用**
_dl_runtime_resolve****
system**将被解析并使用'/bin/sh'作为参数调用
根据pwntools文档,这是**ret2dlresolve**攻击的样子。
示例
纯Pwntools
您可以在这里找到此技术的示例 包含了最终ROP链的非常好的解释,但这里是使用的最终利用:
原始
其他示例和参考资料
32位,无relro,无canary,nx,无pie,基本的小缓冲区溢出和返回。要利用它,使用bof再次调用
read,使用.bss部分和更大的大小,将dlresolve伪造表存储在那里以加载system,返回到主函数并重新滥用初始bof以调用dlresolve,然后system('/bin/sh')。
最后更新于