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

81 lines
4.9 KiB
Markdown
Raw 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.

# 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 %}