hacktricks/binary-exploitation/array-indexing.md

3.3 KiB
Raw Permalink Blame History

数组索引

{% hint style="success" %} 学习并练习AWS黑客HackTricks培训AWS红队专家ARTE
学习并练习GCP黑客HackTricks培训GCP红队专家GRTE

支持HackTricks
{% endhint %}

基本信息

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

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

  • 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的位置并最终用指向ret的地址覆盖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')(需要堆地址来绕过检查)。