hacktricks/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md

82 lines
4.9 KiB
Markdown
Raw Normal View History

# WWW2Exec - .dtors & .fini\_array
{% 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 %}
## .dtors
{% hint style="danger" %}
现在很**奇怪找到一个带有.dtors部分的二进制文件**
{% endhint %}
析构函数是在程序结束之前(在`main`函数返回后)执行的函数。\
这些函数的地址存储在二进制文件的**`.dtors`**部分中,因此,如果您设法**写入**一个**shellcode**的**地址**到**`__DTOR_END__`**,那么它将在程序结束之前**执行**。
使用以下命令获取此部分的地址:
```bash
objdump -s -j .dtors /exec
rabin -s /exec | grep “__DTOR”
```
通常你会在值`ffffffff`和`00000000`之间找到**DTOR**标记。所以如果你只看到这些值,意味着**没有任何函数注册**。因此,**覆盖** **`00000000`**的地址为**shellcode**的地址以执行它。
{% hint style="warning" %}
当然,你首先需要找到一个**存储shellcode的位置**,以便稍后调用它。
{% endhint %}
## **.fini\_array**
本质上,这是一个包含在程序完成之前将被调用的**函数的结构**,就像**`.dtors`**一样。如果你可以通过**跳转到一个地址调用你的shellcode**,或者在需要**再次回到`main`**以**第二次利用漏洞**的情况下,这就变得很有趣。
```bash
objdump -s -j .fini_array ./greeting
./greeting: file format elf32-i386
Contents of section .fini_array:
8049934 a0850408
#Put your address in 0x8049934
```
请注意,当执行**`.fini_array`**中的一个函数时,它会移动到下一个函数,因此不会被多次执行(防止无限循环),但它也只会给你一个在这里放置的**函数执行**。
请注意,**`.fini_array`**中的条目是以**相反**顺序调用的,因此您可能希望从最后一个开始编写。
#### 无限循环
为了滥用**`.fini_array`**以获得无限循环,您可以[**查看这里完成的操作**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**** 如果**`.fini_array`**中至少有2个条目您可以
* 使用第一个写入来再次调用**易受攻击的任意写入函数**
* 然后,在**`__libc_csu_fini`**(调用所有`.fini_array`函数的函数)存储的堆栈中计算返回地址,并将**`__libc_csu_fini`**的地址放在那里
* 这将使**`__libc_csu_fini`**再次调用自身,执行**`.fini_array`**函数这将再次调用易受攻击的WWW函数2次一次用于**任意写入**,另一次用于再次覆盖**`__libc_csu_fini`**的堆栈上的返回地址以再次调用自身。
{% hint style="danger" %}
请注意,使用[**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)****部分**`.fini_array`**部分被设置为**只读**。
在更新版本中,即使使用[**Partial RELRO**]**`.fini_array`**部分也被设置为**只读**。
{% endhint %}
{% 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 %}