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