Array Indexing
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
此类别包括所有由于在处理数组索引时出现错误而可能覆盖某些数据的漏洞。这是一个非常广泛的类别,没有特定的方法,因为利用机制完全依赖于漏洞的条件。
然而,您可以找到一些不错的 示例:
有 2 个冲突的数组,一个用于 地址,存储数据,另一个用于该数据的 大小。可以从一个数组覆盖另一个数组,从而写入一个任意地址,将其指示为大小。这允许在 GOT 表中写入 free
函数的地址,然后用 system
的地址覆盖它,并从内存中调用 /bin/sh
。
64 位,无 nx。覆盖一个大小以获得一种缓冲区溢出,其中每个东西都将被用作双倍数字,并按从小到大的顺序排序,因此需要创建一个满足该要求的 shellcode,考虑到 canary 不应从其位置移动,最后用一个返回地址覆盖 RIP,该地址满足先前的要求,并将最大的地址指向一个新的地址,指向堆栈的开始(由程序泄漏),因此可以使用返回跳转到那里。
64 位,无 relro,canary,nx,无 pie。堆栈中的数组存在一个越界错误,允许控制一个指针,授予 WWW(它将数组中所有数字的总和写入被越界错误覆盖的地址)。堆栈被控制,因此 GOT 的 exit
地址被覆盖为 pop rdi; ret
,并在堆栈中添加 main
的地址(循环回到 main
)。使用 ROP 链泄漏 GOT 中的地址,使用 puts(exit
将被调用,因此将调用 pop rdi; ret
,因此在堆栈中执行此链)。最后,使用新的 ROP 链执行 ret2lib。
32 位,无 relro,无 canary,nx,pie。利用错误的索引泄漏 libc 和堆的地址。利用缓冲区溢出进行 ret2lib 调用 system('/bin/sh')
(需要堆地址以绕过检查)。