hacktricks/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md

96 lines
5.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 - GOT/PLT
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**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>
## **基本信息**
### **GOT全局偏移表**
**全局偏移表GOT**是在动态链接二进制文件中使用的机制,用于管理**外部函数的地址**。由于这些**地址直到运行时才知道**由于动态链接GOT提供了一种在这些外部符号解析后**动态更新这些外部符号地址**的方法。
GOT中的每个条目对应于二进制文件可能调用的外部库中的一个符号。当**首次调用函数时动态链接器会解析其实际地址并将其存储在GOT中**。随后对同一函数的调用使用GOT中存储的地址从而避免再次解析地址的开销。
### **PLT过程链接表**
**过程链接表PLT**与GOT密切配合作为处理对外部函数的调用的跳板。当二进制文件**首次调用外部函数时控制会传递到与该函数相关联的PLT中的一个条目**。此PLT条目负责调用动态链接器来解析函数的地址如果尚未解析。地址解析后将其存储在**GOT**中。
**因此**一旦外部函数或变量的地址解析完成就直接使用GOT条目。**PLT条目用于通过动态链接器**方便地进行这些地址的初始解析。
## 获取执行
### 检查GOT
使用以下命令获取GOT表的地址**`objdump -s -j .got ./exec`**
![](<../../.gitbook/assets/image (121).png>)
观察在**GEF中加载**可执行文件后,您可以**看到**在**GOT**中的**函数**`gef➤ x/20x 0xDIR_GOT`
![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
使用GEF您可以**开始**一个**调试**会话并执行**`got`**以查看got表
![](<../../.gitbook/assets/image (496).png>)
### GOT2Exec
在二进制文件中GOT中有**函数的地址或**将加载函数地址的**PLT**部分的地址。此任意写入的目标是**覆盖将稍后执行的函数的GOT条目****使用**例如**`system`** **函数的PLT地址**
理想情况下,您将**覆盖**将由您控制参数调用的**函数**的**GOT**(因此您将能够控制发送到系统函数的参数)。
如果脚本**未使用** **`system`**,则系统函数**不会**在PLT中有一个条目。在这种情况下您将**需要首先泄漏**`system`函数的地址然后覆盖GOT以指向此地址。
您可以使用**`objdump -j .plt -d ./vuln_binary`**查看PLT地址。
## libc GOT条目
**libc的GOT**通常使用**部分RELRO**编译,假设可以找出其地址([**ASLR**](../common-binary-protections-and-bypasses/aslr/))。
libc的常见函数将调用**其他内部函数**其GOT可以被覆盖以实现代码执行。
在[**此技术的更多信息**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)。
## **One Gadget**
{% content-ref url="../rop-return-oriented-programing/ret2lib/one-gadget.md" %}
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
{% endcontent-ref %}
## **保护**
**Full RELRO**保护旨在通过在启动二进制文件时解析所有函数的地址并使**GOT表只读**来保护免受这种技术的攻击:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md)
{% endcontent-ref %}
## 参考
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
<details>
<summary><strong>从零开始学习AWS黑客技术成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTEHackTricks AWS红队专家</strong></a><strong></strong></summary>
支持HackTricks的其他方式
* 如果您想看到您的**公司在HackTricks中做广告**或**下载PDF格式的HackTricks**,请查看[**订阅计划**](https://github.com/sponsors/carlospolop)!
* 获取[**官方PEASS & HackTricks周边产品**](https://peass.creator-spring.com)
* 探索[**PEASS家族**](https://opensea.io/collection/the-peass-family),我们独家的[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品
* **加入** 💬 [**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>