堆溢出漏洞利用: EldenRingFinal 中的_hgame2024_off_by_one攻击

0 下载量 76 浏览量 更新于2024-06-16 收藏 10.34MB PDF 举报
本周四的hgame2024官方题解涉及一个Pwn挑战,题目是关于利用堆溢出漏洞实现任意写入并泄露libc库的内存地址,进而获取shell。出题思路主要围绕以下几个关键步骤: 1. **漏洞利用原理**: 题目利用的是off_by_one技术,即通过计算错误的内存边界导致数据溢出,使得可以写入的部分和需要访问的结构体部分交错。设计上,题目中结构体被分配的内存不仅包括自身,还包括需要填充的部分,这要求攻击者精确控制内存布局,确保写入的数据可以正确地写入到物理地址上相邻的内存位置。 2. **调试与堆操作**: - 调试过程中,攻击者首先调整堆的结构,比如将content的大小设置为与page和note相同,即0x30字节,然后删除并重新申请不同大小的堆块,使得note会被移动到fastbin,而content会紧邻其后。 - 利用off_by_one技术,攻击者修改size字段合并堆块,使其进入unsorted_bin,此时fd和bk指针指向main_arena。关键在于main_arena的后四位与目标stderr的偏移地址相似,只需爆破一位,然后将unsorted_bin的指针重定向到fastbin中的fd,进一步修改size以实现内存分配,并覆盖后四位为特定值。 - 通过leak_IO_stderr,攻击者成功获取到libcbase地址。然后利用合并堆块的方法进行malloc_hook,最终实现本地getshell。值得注意的是,由于远程端加载的随机性,本地测试的exploit可能需要多次尝试才能在远程环境下成功。 3. **脚本与工具使用**: 使用Python的pwn库进行编程,首先设置日志级别和架构(amd64),然后通过process()函数启动本地进程或remote()函数连接服务器。接下来,通过ELF对象初始化libc,这将用于后续的内存分析和动态链接库的利用。 总结来说,这个CTF挑战考验了参赛者的内存管理理解、off_by_one漏洞利用技巧以及基本的动态链接库(libc)分析能力。参与者需要熟练运用这些技术来解决实际的漏洞,同时注意处理好内存的动态分配和定位,才能成功获取shell权限。
2021-03-15 上传
2021-03-15 上传
2024-11-29 上传