hacktricks/binary-exploitation/array-indexing.md

3.4 KiB
Raw Blame History

数组索引

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

基本信息

此类别包括所有由于在处理数组索引时出现错误而可能覆盖某些数据而导致的漏洞。这是一个非常广泛的类别,没有特定的方法论,因为利用机制完全取决于漏洞的条件。

然而,您可以找到一些不错的示例

  • https://guyinatuxedo.github.io/11-index/swampctf19_dreamheaps/index.html
  • 存在2个冲突的数组,一个用于存储数据的地址,另一个用于存储该数据的大小。可以从一个数组中覆盖另一个数组,从而可以写入任意地址并将其指定为大小。这允许将free函数的地址写入GOT表然后用system的地址覆盖它,并从具有/bin/sh的内存中调用free。
  • https://guyinatuxedo.github.io/11-index/csaw18_doubletrouble/index.html
  • 64位无nx。覆盖一个大小以获得一种缓冲区溢出其中每个东西都将被用作双精度数并按从小到大排序因此需要创建一个满足该要求的shellcode考虑到不能移动canary的位置并最终用地址覆盖RIP以返回满足先前的要求并将最大的地址放在一个新地址上指向栈的起始位置由程序泄漏因此可以使用ret跳转到那里。
  • https://faraz.faith/2019-10-20-secconctf-2019-sum/
  • 64位无relrocanarynx无pie。栈中数组存在一个off-by-one允许控制指针以授予WWW它将数组中所有数字的总和写入数组中的off-by-one覆盖的地址。控制堆栈以覆盖GOT exit地址为pop rdi; ret,并在堆栈中添加main的地址(回到main。使用ROP链泄漏GOT中put的地址将调用exit,因此将调用pop rdi; ret从而在堆栈中执行此链。最后使用新的ROP链执行ret2lib。
  • https://guyinatuxedo.github.io/14-ret_2_system/tu_guestbook/index.html
  • 32位无relro无canarynxpie。利用错误的索引来从堆栈中泄漏libc和堆的地址。利用缓冲区溢出执行ret2lib调用system('/bin/sh')(需要堆地址来绕过检查)。