hacktricks/binary-exploitation/array-indexing.md

31 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数组索引
{% hint style="success" %}
学习并练习AWS黑客<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks培训AWS红队专家ARTE**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
学习并练习GCP黑客<img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks培训GCP红队专家GRTE**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>支持HackTricks</summary>
* 查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* **加入** 💬 [**Discord群**](https://discord.gg/hRep4RUj7f) 或 [**电报群**](https://t.me/peass) 或 **关注**我们的**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* 通过向[**HackTricks**](https://github.com/carlospolop/hacktricks)和[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github仓库提交PR来分享黑客技巧。
</details>
{% endhint %}
## 基本信息
此类别包括所有由于在处理数组索引时出现错误而可能覆盖某些数据而导致的漏洞。这是一个非常广泛的类别,没有特定的方法论,因为利用机制完全取决于漏洞的条件。
然而,您可以找到一些不错的**示例**
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](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](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/](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](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32位无relro无canarynxpie。利用错误的索引来从堆栈中泄漏libc和堆的地址。利用缓冲区溢出执行ret2lib调用`system('/bin/sh')`(需要堆地址来绕过检查)。