# WWW2Exec - GOT/PLT

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks 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`**

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-c7ca19b12271414299fcb693df5bde9f81d705ac%2Fimage%20\(118\).png?alt=media)

在GEF中**加载**可执行文件后，您可以**查看**GOT中的**函数**：`gef➤ x/20x 0xDIR_GOT`

![](https://github.com/xsxtw/hacktricks/blob/cn/.gitbook/assets/image%20\(620\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(2\)%20\(2\)%20\(2\).png)

使用GEF，您可以**开始**调试会话并执行\*\*`got`\*\*以查看got表：

![](https://615200056-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1DLBZdNLkY4FUHtMnjPr%2Fuploads%2Fgit-blob-e635399ce9d43284a46d9ef3ee3b4c34b0728c83%2Fimage%20\(493\).png?alt=media)

### GOT2Exec

在二进制文件中，GOT中有**函数的地址或**将加载函数地址的**PLT**部分。此任意写入的目标是**覆盖将稍后执行的函数的GOT条目**，使其指向**例如`system`函数的PLT的地址**。

理想情况下，您将**覆盖**将由您控制参数调用的**函数**的**GOT**（因此您将能够控制发送到system函数的参数）。

如果脚本**未使用`system`**，则系统函数**不会**在PLT中有一个条目。在这种情况下，您将\*\*需要首先泄漏`system`\*\*函数的地址，然后覆盖GOT以指向此地址。

您可以使用\*\*`objdump -j .plt -d ./vuln_binary`\*\*查看PLT地址。

## libc GOT条目

**libc的GOT**通常使用**部分RELRO**编译，如果能够找出其地址（[**ASLR**](https://hacktricks.xsx.tw/binary-exploitation/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" %}
[one-gadget](https://hacktricks.xsx.tw/binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget)
{% endcontent-ref %}

## **保护**

**Full RELRO**保护旨在通过在二进制文件启动时解析所有函数的地址并使**GOT表只读**来防止这种技术：

{% content-ref url="../common-binary-protections-and-bypasses/relro" %}
[relro](https://hacktricks.xsx.tw/binary-exploitation/common-binary-protections-and-bypasses/relro)
{% endcontent-ref %}

## 参考

* <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>

<details>

<summary><strong>从零开始学习AWS黑客技术，成为专家</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE（HackTricks 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>
