# DDexec / EverythingExec

<details>

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

## 上下文

在Linux中，为了运行程序，它必须作为一个文件存在，必须以某种方式通过文件系统层次结构进行访问（这就是`execve()`的工作原理）。这个文件可以存在于磁盘上或内存中（tmpfs，memfd），但你需要一个文件路径。这使得在Linux系统上控制运行什么变得非常容易，也很容易检测威胁和攻击者的工具，或者防止它们尝试执行任何自己的东西（例如，不允许非特权用户在任何地方放置可执行文件）。

但是这项技术可以改变这一切。如果您无法启动想要的进程... **那么您就劫持一个已经存在的进程**。

这项技术允许您**绕过常见的保护技术，如只读、noexec、文件名白名单、哈希白名单...**

## 依赖关系

最终脚本依赖于以下工具才能正常工作，它们需要在您攻击的系统中可访问（默认情况下，您将在任何地方找到它们）：

```
dd
bash | zsh | ash (busybox)
head
tail
cut
grep
od
readlink
wc
tr
base64
```

## 技术

如果您能任意修改进程的内存，则可以接管该进程。这可以用来劫持已经存在的进程并用另一个程序替换它。我们可以通过使用`ptrace()`系统调用（需要您能够执行系统调用或在系统上有gdb可用）或者更有趣的是，写入`/proc/$pid/mem`来实现这一点。

文件`/proc/$pid/mem`是进程整个地址空间的一对一映射（例如从`0x0000000000000000`到`0x7ffffffffffff000`在x86-64中）。这意味着从该文件的偏移`x`读取或写入与从虚拟地址`x`读取或修改内容是相同的。

现在，我们需要面对四个基本问题：

* 通常只有root和文件的程序所有者可以修改它。
* ASLR。
* 如果我们尝试读取或写入未映射在程序地址空间中的地址，将会收到I/O错误。

这些问题有解决方案，虽然它们不是完美的，但是很好：

* 大多数shell解释器允许创建文件描述符，然后将其继承给子进程。我们可以创建一个指向shell的`mem`文件的具有写权限的fd...因此使用该fd的子进程将能够修改shell的内存。
* ASLR甚至不是问题，我们可以检查shell的`maps`文件或procfs中的任何其他文件，以获取有关进程地址空间的信息。
* 因此，我们需要在文件上执行`lseek()`。从shell中，除非使用臭名昭著的`dd`，否则无法执行此操作。

### 更详细地

这些步骤相对简单，不需要任何专业知识来理解它们：

* 解析我们想要运行的二进制文件和加载器，找出它们需要的映射。然后编写一个“shell”代码，它将执行大致相同的步骤，即内核在每次调用`execve()`时执行的步骤：
* 创建这些映射。
* 将二进制文件读入其中。
* 设置权限。
* 最后，使用程序参数初始化堆栈，并放置加载器所需的辅助向量。
* 跳转到加载器，让它完成剩下的工作（加载程序所需的库）。
* 从`syscall`文件中获取进程在执行系统调用后将返回的地址。
* 用我们的shell代码覆盖该位置，该位置将是可执行的（通过`mem`我们可以修改不可写的页面）。
* 将要运行的程序传递给进程的stdin（将由所述“shell”代码`read()`）。
* 到这一步，加载器将加载我们程序所需的必要库并跳转到它。

**查看工具** [**https://github.com/arget13/DDexec**](https://github.com/arget13/DDexec)

## EverythingExec

有几种替代方案可以替代`dd`，其中之一是`tail`，目前是用于通过`mem`文件`lseek()`的默认程序（这是使用`dd`的唯一目的）。这些替代方案包括：

```bash
tail
hexdump
cmp
xxd
```

通过设置变量 `SEEKER`，您可以更改所使用的搜索器，例如：

```bash
SEEKER=cmp bash ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)
```

如果您发现脚本中未实现的另一个有效的查找器，仍然可以使用它，设置`SEEKER_ARGS`变量：

```bash
SEEKER=xxd SEEKER_ARGS='-s $offset' zsh ddexec.sh ls -l <<< $(base64 -w0 /bin/ls)
```

阻止这个，EDRs。

## 参考

* <https://github.com/arget13/DDexec>

<details>

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hacktricks.xsx.tw/linux-hardening/bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/ddexec.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
