引言
内网渗透方向的 CTF(也叫 A/D 或内网靶场题)与单机题的最大区别是「有纵深」:你不是在攻破一个程序,而是在一条由多台主机与域控组成的链路上前进——先拿到一个低权限立足点,再提权、再横向、再拿到域管,最后夺取域控。每一跳都依赖上一跳的成果,任何一环断了整条链就走不通。
工程上的难点集中在三处。第一是权限模型的复杂性:Windows 的访问控制由「访问令牌 + 安全描述符 + 特权」三者共同决定,同一个账号在不同上下文(交互登录、服务账户、网络登录)下的实际权限可能完全不同。第二是枚举决定成败:内网渗透 80% 的工作量在信息收集,不知道有哪些服务、哪些共享、哪些委派关系,就只能盲试。第三是检测无处不在:现代 Windows 与 EDR 会记录大量事件,攻击者的每一个动作都可能在日志里留下痕迹,这与 CTF 里「只要能打通就行」的宽松环境形成鲜明对比。
本文按「权限模型 → 枚举 → 本地提权 → 域内攻击 → 横向 → 检测防御」的顺序组织,所有实验在自建域环境(一台 DC + 若干成员机)与公开靶场中完成,不涉及任何未授权系统。内网渗透的方法论与红队工程实践可参考 渗透测试与红队 ;检测侧的事件与告警建设可对照 SIEM 与安全运营 ;凭据管理与加固要点可延伸阅读 凭据与密钥管理 与 CTF 工具链与攻击视角下的防御 。
目录
- Windows 安全模型与访问令牌
- 信息收集与提权面枚举
- 服务、计划任务与注册表提权
- 令牌、特权与驱动相关提权
- AD 基础与 BloodHound 攻击路径
- Kerberos 协议与 Kerberoasting
- 横向移动与凭据转储
- 内网 CTF 的典型链路
- 检测与防御要点
1. Windows 安全模型与访问令牌
Windows 的每一次访问都遵循同一条路径:主体(进程)携带访问令牌,客体(对象)携带安全描述符,内核比对两者决定是否放行。理解这条路径是理解一切提权的前提。
访问令牌(Access Token)是进程的身份凭证,它包含:
| 字段 | 含义 | 提权意义 |
|---|---|---|
| SID | 用户与所属组的安全标识符 | 加入特权组即获得其全部权限 |
| Privileges | 特权列表(如 SeDebugPrivilege) | 特权可被滥用来越权 |
| Integrity Level | 完整性级别(Low/Medium/High/System) | UAC 的本质是它 |
| Logon Session | 登录会话 ID | 决定能否复用凭据 |
| Impersonation Level | 模拟级别 | 服务模拟客户端的基础 |
UAC(用户账户控制)的本质是「同一账号持有两个令牌」:管理员登录后同时获得一个「过滤令牌」(Medium 完整性,日常使用)与一个「完整令牌」(High 完整性,仅在提权后使用)。UAC 弹窗就是把完整令牌交给进程的动作。理解这一点才能明白为什么「已管理员登录但进程是 Medium」这种情况会出现——它既是提权的入口(绕过 UAC 拿到完整令牌),也是许多工具行为异常的原因。
Windows 的访问检查有两个阶段:先做自主访问控制(DACL)检查(令牌的 SID 是否在对象的允许列表里),再做特权检查(令牌是否持有 SeBackupPrivilege 这类特权可绕过 DACL)。这解释了为什么一个普通用户持有了 SeBackupPrivilege 就能读任意文件——特权检查在后,它压过了 DACL。
几个高频出现的特权及其滥用方式:
SeDebugPrivilege 可打开任意进程句柄 -> 注入 LSASS 读取凭据
SeImpersonatePrivilege 可模拟任意令牌 -> Potato 系列提权的前提
SeBackupPrivilege 绕过 DACL 读文件 -> 直接读 SAM/SYSTEM 注册表配置单元
SeRestorePrivilege 绕过 DACL 写文件 -> 替换系统二进制
SeTakeOwnershipPrivilege 取得对象所有权 -> 改写任意对象 ACL
SeLoadDriverPrivilege 加载内核驱动 -> 加载恶意驱动进入内核态
服务账户(NT AUTHORITY\SYSTEM、NetworkService、LocalService)默认持有 SeImpersonatePrivilege,这就是为什么「拿到一个以服务账户运行的 Web shell」往往等于「拿到 SYSTEM」——Potato 类工具正是利用这一特权,通过伪造一个由 SYSTEM 发起的认证并模拟它来完成提权。
2. 信息收集与提权面枚举
内网渗透的第一原则是「先枚举,再动手」。在不知道系统版本、补丁级别、服务列表、共享与委派关系的情况下盲目尝试提权,成功率极低。
主机侧的基础枚举命令:
# 本地教学:主机信息收集(自建靶场)
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" /C:"System Type"
whoami /all # 当前令牌:SID、组、特权、完整性级别
whoami /priv # 只看特权,判断能否 Potato / SeDebug
net user # 本地用户
net localgroup administrators # 管理员组成员
net share # 共享目录
wmic service get name,displayname,pathname,startmode | findstr /i "auto"
枚举的输出要按「提权价值」排序。高价值信号包括:当前账号是否已在特权组里(whoami /groups 里的 BUILTIN\Administrators);是否持有可利用特权(whoami /priv 里的 SeImpersonate、SeDebug、SeBackup);系统补丁级别(systeminfo 里的 Hotfix 列表,缺哪个补丁就对应哪个已知提权漏洞);以及非标准路径的服务(pathname 含空格且未加引号的路径是经典的「未加引号的服务路径」提权)。
自动化枚举工具能大幅提速,其中 WinPEAS 与 PowerUp 覆盖最全:
# 本地教学:自动化枚举(自建靶场)
.\winPEASx64.exe quiet # 输出按风险分级,直接看红色的项
Import-Module .\PowerUp.ps1; Invoke-AllChecks
# PowerUp 会直接标出可利用项:服务权限、未引号路径、AlwaysInstallElevated 等
域内枚举的起点是确认「我在不在域里」以及「域的基本结构」:
# 本地教学:域内信息收集(自建域)
echo %USERDNSDOMAIN%
nltest /dsgetdc:corp.local # 域控列表
net user /domain # 域用户
net group "Domain Admins" /domain # 域管成员
net group "Domain Controllers" /domain
nltest /dclist: 与 net group /domain 的组合能在几十秒内勾勒出域的骨架:有几个域控、域管是谁、有哪些特权组(Enterprise Admins、Schema Admins、Backup Operators)。其中 Backup Operators 常被低估——它能备份任意文件,包括域控的 NTDS.dit,等于变相的域管。
除了账号与组,还有两类资源值得优先枚举。共享目录(net view /domain 或 net share)常含运维脚本、部署包与配置文件,其中 SYSVOL 共享对所有域用户可读,里面的 GPO 脚本(\\<domain>\SYSVOL\<domain>\Policies\)可能含硬编码口令。会话与登录用户(net session、qwinsta)能告诉你哪些高权限账号正登录在哪台机器上,为「令牌窃取」指明目标。
# 本地教学:域内共享与 GPO 脚本排查(自建域)
net view /domain:corp.local
dir \\corp.local\SYSVOL\corp.local\Policies /s | findstr /i "bat ps1 vbs xml"
# 找含 cpassword 的组策略首选项(历史上是明文口令的著名案例)
findstr /s /i "cpassword" \\corp.local\SYSVOL\*.xml
3. 服务、计划任务与注册表提权
本地提权的经典路径中,服务相关的占了一半以上。
未加引号的服务路径:当服务的可执行路径含空格且未用引号包裹时,Windows 会按「从左到右、逐级尝试」的顺序解析,攻击者可在中间目录放一个同名程序抢先执行。例如路径 C:\Program Files\MyApp\svc.exe 会被依次尝试 C:\Program.exe、C:\Program Files\MyApp.exe。修复方式是给路径加引号,攻击方式是确认中间目录可写。
弱服务权限:若普通用户对某个服务的配置(SERVICE_CHANGE_CONFIG)或服务二进制文件有写权限,就能把服务改成执行自己的程序,重启后以服务的身份(常为 SYSTEM)运行。
# 本地教学:检查服务权限与二进制权限(自建靶场)
# 用 accesschk 检查当前用户对服务的权限
.\accesschk.exe /accepteula -uwcqv "Users" *
# 输出中若见 SERVICE_CHANGE_CONFIG 或 SERVICE_ALL_ACCESS,即可改服务配置
sc config VulnSvc binPath= "C:\Temp\payload.exe"
sc start VulnSvc
计划任务:与弱服务权限同理,若普通用户能修改某个以 SYSTEM 身份运行的计划任务(其二进制、触发条件或参数),就能借它执行代码。
AlwaysInstallElevated:这是一个注册表策略组合——HKLM 与 HKCU 下的 AlwaysInstallElevated 都设为 1 时,任何用户安装 MSI 包都会以 SYSTEM 权限执行。攻击方式是把 payload 打成 MSI 后 msiexec /i payload.msi:
# 本地教学:检查 AlwaysInstallElevated(自建靶场)
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
# 两处都为 0x1 时可用:msiexec /quiet /qn /i payload.msi
注册表自动运行项:HKLM\...\Run 下若普通用户可写,则任何登录都会触发其内容。凭据类注册表项:HKLM\SOFTWARE\...\Winlogon 里的 DefaultPassword(自动登录配置)常以明文存放管理员口令,这是「配置即漏洞」的典型。
SAM 与 SYSTEM 配置单元:若持有 SeBackupPrivilege 或已提权,可直接导出 HKLM\SAM、HKLM\SYSTEM、HKLM\SECURITY,离线提取本地账号哈希:
# 本地教学:导出并离线提取本地哈希(自建靶场)
reg save HKLM\SAM sam.hive
reg save HKLM\SYSTEM system.hive
# 离线侧:secretsdump.py -sam sam.hive -system system.hive LOCAL
4. 令牌、特权与驱动相关提权
Potato 系列是 SeImpersonatePrivilege 的经典利用。原理是:通过 COM 或命名管道诱使一个高权限账户(SYSTEM)向攻击者控制的端点发起认证,然后捕获该认证产生的令牌并模拟它。
Potato 家族演进(思路对照)
Hot Potato 早期版本,依赖 NBNS 欺骗 + WPAD,在新系统上已失效
Rotten Potato 用 COM 激活 + 令牌捕获,需 SeImpersonate
Juicy Potato 支持指定 CLSID,适配更多系统版本
Rogue Potato 用 OXID 解析器远程触发,绕过本地端口限制
PrintSpoofer 利用打印后台程序(Spooler)的命名管道,覆盖 Win10/Server2019
GodPotato 覆盖更广,包括 Server 2012 到 2022
# 本地教学:PrintSpoofer 提权(自建靶场,前提是持有 SeImpersonate)
.\PrintSpoofer64.exe -i -c cmd
# 输出 whoami 应为 nt authority\system
令牌窃取与模拟:若持有 SeDebugPrivilege,可打开高权限进程的句柄并复制其令牌,以该令牌创建新进程。这比 Potato 更直接,但需要更高的起始权限。
驱动与服务内核态:SeLoadDriverPrivilege 允许加载内核驱动,可加载一个「自带漏洞」的合法驱动(BYOVD,Bring Your Own Vulnerable Driver)进而获得内核态读写。这是近年真实攻击中增长最快的一类,因为它能绕过大部分用户态防护。
未打补丁的系统级漏洞:systeminfo 里的 Hotfix 列表是判断依据。经典的提权漏洞(MS16-032、CVE-2021-1732、CVE-2022-21882 等)都有公开的 PoC,但在 CTF 靶场外使用未公开或未授权的漏洞利用属于违法行为,本节仅作原理性说明。
UAC 绕过:对于已属于本地管理员组但进程运行在 Medium 完整性下的情形,有若干绕过 UAC 提示的技术(如 fodhelper、computerdefaults 的注册表劫持)。它们的共同思路是「劫持一个会自动以 High 完整性启动的系统程序所读取的注册表项」。防御侧的关键是把 UAC 调到最高档(始终提示),此时这类绕过基本失效。
5. AD 基础与 BloodHound 攻击路径
Active Directory 的核心对象与关系决定了攻击路径:
| 对象 | 含义 | 攻击价值 |
|---|---|---|
| User | 用户账户 | 凭据窃取的目标 |
| Computer | 加入域的机器 | 横向移动的落脚点 |
| Group | 安全组 | 成员关系即权限继承 |
| OU | 组织单元 | 组策略(GPO)的作用范围 |
| GPO | 组策略对象 | 可下发脚本与配置,是高价值目标 |
| Trust | 域信任关系 | 跨域攻击的通道 |
BloodHound 把这些对象与关系导入图数据库,用图查询找出「从当前身份到域管的最短路径」。它的价值在于把凭据之外的关系可视化——很多时候你不需要任何漏洞,只需要沿着 MemberOf、AdminTo、CanRDP、GenericAll、WriteDacl 这些边一路走过去。
# 本地教学:BloodHound 数据采集与查询(自建域)
.\SharpHound.exe -c All --zipfilename bh.zip
# 导入 BloodHound 后在界面里选当前身份为起点、Domain Admins 为终点
# 常用内置查询:Shortest Paths to Domain Admins / Find Principals with DCSync Rights
几类高频的 ACL 滥用路径:
GenericAll / GenericWrite 对某对象有完全/写权限 -> 可改其密码、改其 SPN 做 Kerberoasting
WriteDacl / WriteOwner 可改对象的 ACL / 所有者 -> 提权到完全控制
ForceChangePassword 可强制改某用户密码(无需知道原密码)
AddMember 可把任意用户加入某组
DCSync 可向域控请求复制凭据数据 -> 直接拿到所有域用户哈希
DCSync 是最致命的一条:若某账号对域对象持有 Replicating Directory Changes 权限(域管、Enterprise Admins、部分服务账户常有),就能伪装成一台域控向真域控请求复制用户凭据,直接获得所有账号的 NTLM 哈希,无需在域控上落地任何文件。它的隐蔽性极高(是合法协议行为),检测依赖对「非域控主机发起复制请求」的审计。
GPO 滥用:若对某个 OU 或 GPO 有写权限,可在 GPO 里下发一个立即执行的计划任务,让该 OU 下所有机器执行攻击者的代码——这是「一次写入、多点执行」的杠杆最大的手法。
域信任与跨域:域之间通过信任关系连接,信任的方向决定了跨域攻击的可行性。若存在「父域—子域」信任,子域的管理员天然对父域有 SID History 注入的机会(把父域 Enterprise Admins 的 SID 塞进子域账号的 SID History,用 extra-sids 即可在跨域访问时获得该组权限);若存在「外部信任」或「林信任」,则要检查信任是否开启了选择性认证与 SID 过滤。CTF 里的多域题目几乎都考这两条。
6. Kerberos 协议与 Kerberoasting
Kerberos 是 AD 的默认认证协议,理解它的票据流程是理解域内攻击的基础。简化流程:
1. AS-REQ / AS-REP 客户端用口令派生密钥向 KDC 请求 TGT(票据授予票据)
2. TGS-REQ / TGS-REP 客户端拿 TGT 向 KDC 请求某个服务的 ST(服务票据)
3. AP-REQ 客户端把 ST 交给目标服务完成认证
Kerberoasting 的原理是:任何域用户都可以向 KDC 请求任意「注册了 SPN 的服务账户」的服务票据,而这张票据是用该服务账户口令派生的密钥加密的。攻击者拿到票据后离线爆破,即可还原服务账户口令——无需任何特权,也无需接触目标机器。
# 本地教学:Kerberoasting(自建域,普通域用户即可)
# 1. 枚举有 SPN 的账户
setspn -T corp.local -Q */*
# 2. 请求服务票据并导出
.\Rubeus.exe kerberoast /outfile:hashes.txt
# 或 PowerShell:Get-DomainUser -SPN | Get-DomainSPNTicket
# 3. 离线爆破(服务账户口令常为弱口令且极少轮换)
hashcat -m 13100 hashes.txt wordlist.txt # -m 13100 = Kerberos 5 TGS-REP
AS-REP Roasting 是它的近亲:若某账户关闭了「需要 Kerberos 预认证」,任何人都能直接请求它的 AS-REP,同样可以离线爆破。区别在于 Kerberoasting 需要目标有 SPN,AS-REP Roasting 需要目标关闭预认证。
# 本地教学:AS-REP Roasting(自建域)
.\Rubeus.exe asreproast /format:hashcat /outfile:asrep.txt
hashcat -m 18200 asrep.txt wordlist.txt # -m 18200 = AS-REP
其余票据类攻击速查:
| 手法 | 前提 | 效果 |
|---|---|---|
| Kerberoasting | 任意域用户 | 离线爆破服务账户口令 |
| AS-REP Roasting | 目标关闭预认证 | 离线爆破用户口令 |
| 黄金票据 | 拿到 krbtgt 哈希 | 伪造任意用户的 TGT,长期控域 |
| 白银票据 | 拿到服务账户哈希 | 伪造特定服务的 ST |
| 票据传递(PtT) | 拿到有效票据 | 无需口令直接认证 |
| 委派滥用 | 存在非约束/约束委派 | 冒充用户访问后端服务 |
委派(Delegation) 值得单独警惕:非约束委派允许服务在被用户认证时捕获其 TGT,从而冒充该用户访问任意服务;约束委派若配置了「协议转换」,则可通过 S4U2Self/S4U2Proxy 冒充任意用户访问指定服务。这类配置错误在真实域里非常普遍,是 BloodHound 里最常出现的路径之一。
7. 横向移动与凭据转储
拿到一个立足点后,横向移动的三种手段按「隐蔽性」排序是:票据复用 > 哈希传递 > 口令登录。
凭据转储是横向的前提。LSASS 进程在内存里保存着登录会话的凭据(NTLM 哈希、Kerberos 票据、有时还有明文口令),因此读 LSASS 内存是最高价值的动作:
# 本地教学:LSASS 转储的三种方式(自建靶场,需管理员权限)
# 1. 任务管理器 / 进程管理器右键「创建转储文件」
# 2. comsvcs.dll 的 MiniDump 导出(常被用来绕过简单的工具检测)
rundll32.exe C:\Windows\System32\comsvcs.dll, MiniDump <lsass_pid> C:\Temp\lsass.dmp full
# 3. 直接读注册表配置单元(无需碰 LSASS,隐蔽性更高)
reg save HKLM\SAM sam.hive & reg save HKLM\SYSTEM system.hive
# 离线解析(Mimikatz / secretsdump)
# sekurlsa::minidump lsass.dmp -> sekurlsa::logonpasswords
哈希传递(Pass-the-Hash) 利用了 NTLM 认证的一个特性:认证过程只需要哈希而不需要明文口令。因此拿到 NTLM 哈希后,可以直接用它登录其他机器,无需破解:
# 本地教学:哈希传递(自建靶场)
.\mimikatz.exe "sekurlsa::pth /user:svc_sql /domain:corp.local /ntlm:<hash> /run:cmd.exe"
# 或用 Impacket(跨平台)
# psexec.py -hashes :<ntlm_hash> corp.local/svc_sql@10.0.0.20
票据复用:Kerberos 场景下,把拿到的 TGT/ST 注入当前会话即可直接认证(Overpass-the-Hash 是「用哈希换取 Kerberos 票据」的变体)。票据的隐蔽性最高,因为它完全是合法的 Kerberos 流量。
横向的落地方式:psexec(写入服务并启动,最易被检测)、wmiexec(通过 WMI 执行,较隐蔽)、winrm(PowerShell Remoting,需要目标开启)、smbexec(不落文件,只用服务控制)。选择依据是目标的开放端口与检测强度。凭据的长期管理原则可参考 凭据与密钥管理
。
凭据的复用价值排序(从高到低):域管账号 > 对域对象有 DCSync 权限的服务账号 > 本地管理员(若域内多机共用同一本地管理员口令,则一处失守全线失守)> 普通域用户。其中「本地管理员口令复用」是真实内网最常见的横向放大器。
8. 内网 CTF 的典型链路
把前面的手法串起来,内网 CTF 的标准链路是:
1. 外网入口 拿下边缘 Web / VPN -> 获得第一个低权限 shell
2. 主机枚举 whoami /priv、systeminfo、服务与共享列表
3. 本地提权 服务权限 / 未引号路径 / Potato / 补丁缺失 -> SYSTEM
4. 凭据提取 LSASS dump / SAM+SYSTEM / 配置里的明文口令
5. 域内枚举 BloodHound 采集 + 分析,找最短路径到域管
6. 横向移动 PtH / 票据复用,逐台推进到高价值主机
7. 域内提权 Kerberoasting / ACL 滥用 / 委派滥用
8. 夺取域控 DCSync 拿 krbtgt -> 黄金票据长期控制
每一跳之后都要重新枚举,因为身份变了、能看到的资源就变了。CTF 里判题通常是「拿到域控上的某个文件」或「以域管身份读到某个共享」,所以链路是有明确终点的。
实战中值得养成两个习惯。第一是每跳记录证据:当前身份、拿到的凭据、做了什么动作,否则链条一长就会迷失在「我到底在哪个主机上」。第二是优先找「不需要漏洞的路径」:BloodHound 里那些纯粹的 ACL 边(AdminTo、GenericAll)往往比任何漏洞利用都更快、更稳、更隐蔽。
从检测侧看,这条链路的每一跳都有对应的可观测信号:
| 阶段 | 主要日志来源 | 关键事件 |
|---|---|---|
| 本地提权 | Security 事件日志 | 4672(分配特权)、7045(安装服务) |
| 凭据转储 | Sysmon / EDR | 进程访问 lsass.exe(Event ID 10) |
| Kerberoasting | Security 事件日志 | 4769(请求服务票据)且加密类型为 RC4 |
| 横向移动 | Security 事件日志 | 4624 类型 3(网络登录)、4648(显式凭据) |
| DCSync | Security 事件日志 | 4662(目录服务访问)且属性含复制权限 |
| 黄金票据 | Security 事件日志 | 4769 的票据生命周期异常(如 10 年) |
把这些事件汇入 SIEM 与安全运营 并建立关联规则,就能在链路的中段而不是终点发现攻击——这是防御方唯一能抢回主动权的办法。
9. 检测与防御要点
从防守方视角,每条攻击路径都对应一条明确的加固要求:
- 本地提权:服务路径一律加引号;服务与计划任务的 ACL 收紧到最小;禁用
AlwaysInstallElevated;及时打补丁,特别是提权类漏洞。 - 特权管理:
SeImpersonatePrivilege只授予必须的服务账户;限制SeDebugPrivilege的持有者;定期审计whoami /priv的等价物(域内所有账号的特权清单)。 - 凭据保护:启用 LSA 保护(RunAsPPL)阻断对 LSASS 的直接读取;开启 Credential Guard 隔离凭据;部署 Windows Defender Credential Guard 后 PtH 的可用性大幅下降。
- 域内加固:服务账户口令长度 ≥ 25 位并定期轮换(让 Kerberoasting 的爆破在经济上不可行);禁用非必要的非约束委派;为高权限账户启用「受保护用户」组(禁止委派);启用分层管理模型(Tier 0/1/2)。
- 横向限制:禁止本地管理员口令跨机复用(用 LAPS 每台机器随机化);限制 SMB 与 WMI 的横向通道;启用 Windows 防火墙的入站规则基线。
- 监控与响应:开启 PowerShell 脚本块日志、命令行审计(4688 含命令行);对 LSASS 访问、
krbtgt相关操作、异常票据生命周期建立告警。
最关键的一条是 krbtgt 的轮换:黄金票据的危害在于 krbtgt 账户的口令哈希一旦泄露,攻击者就能伪造任意 TGT。防御上要求在怀疑失陷时连续轮换两次(因为 Kerberos 保留上一代密钥以兼容未过期的票据,一次轮换不足以让旧密钥失效)。
权衡取舍
| 场景 | 优先手段 | 理由 | 局限 |
|---|---|---|---|
有 SeImpersonate | PrintSpoofer / GodPotato | 一条命令到 SYSTEM | 需服务账户上下文 |
有 SeDebug | 令牌窃取 | 直接拿到高权限令牌 | 需先具备该特权 |
| 服务权限可写 | 改服务二进制 | 稳定、可重复 | 需重启服务或系统 |
| 系统缺补丁 | 已知提权漏洞利用 | 无需额外权限 | 仅在授权靶场可用 |
| 域内任意用户 | Kerberoasting | 无需特权,离线爆破 | 依赖服务账户弱口令 |
| 有 ACL 写权限 | BloodHound 找路径 | 无需漏洞,隐蔽 | 依赖采集的完整性 |
| 拿到域管会话 | DCSync | 一次拿到全域哈希 | 需复制权限且会留日志 |
| 需要长期控制 | 黄金票据 | 极难彻底清除 | 需 krbtgt 哈希,轮换即失效 |
选型的核心是「先看自己有什么,再决定怎么走」。whoami /priv 的输出决定了本地提权的路线,BloodHound 的图决定了域内的路线。跳过枚举直接套用某个具体漏洞,是内网渗透里最浪费时间的做法。
常见坑清单
- 枚举不充分就上手提权:
whoami /priv与whoami /groups没看,可能已经在特权组里,直接psexec即可。 - 把 UAC 当权限边界:已属管理员组的账号绕过 UAC 只是时间问题;防御应把 UAC 调到最高档而不是依赖提示。
- 服务路径未引号却不可写中间目录:路径解析漏洞需要中间目录可写,先
icacls确认写权限再投入时间。 - Potato 在目标系统上失效:不同版本对 CLSID 与命名管道的限制不同,要按系统版本选对应的 Potato 变体。
- Kerberoasting 拿到的票据解不开:服务账户若用了强口令(>25 位随机),爆破不现实;应转向 ACL 路径。
- 哈希传递失败却以为是哈希错:目标可能禁用了 NTLM 或开启了 SMB 签名,先确认认证协议可用性。
- LSASS dump 被 EDR 拦截:直接读 LSASS 是重点告警项,改用注册表导出 SAM/SYSTEM 或 DCSync。
- 横向移动后忘了清理工具体:留在目标机上的工具本身就是证据与检测点,授权测试中应在报告里列明所有落地文件。
- 忽略本地管理员口令复用:域内多机同口令时,一处失守等于全线失守,这是横向移动最常见的放大器。
- 在未授权环境复现:本文所有手法仅适用于自建域环境、公开靶场与书面授权的渗透测试;对真实网络使用属违法行为。
小结
内网渗透的知识结构是一条链而不是一堆点:权限模型是地基,枚举是方向,本地提权与域内攻击是两条主干,横向移动是把主干串起来的手段,检测与防御则是从链条中段截断它的办法。理解「访问令牌 + 安全描述符 + 特权」这条访问路径,就能把绝大多数提权手法归位——它们要么在改令牌(加组、加特权),要么在绕过 DACL(备份特权、所有权),要么在利用配置错误(服务权限、委派)。
工程上最值得投入的不是「记住更多漏洞利用」,而是枚举的自动化与路径的图化。BloodHound 之所以改变了这个领域,就是因为它把「凭经验猜测下一步」变成了「查图找最短路径」。同样的思路也适用于防守:把事件日志按攻击链的阶段组织,就能在链路中段发现异常,而不是等域控失守。
最后是合规与职业素养。内网渗透的能力天然具有双面性,本文全部内容面向自建环境与授权测试。真实工作中,一份合格的报告不仅要写「怎么打进去」,更要写「为什么能打进去」与「怎么修」,后者才是这份能力的正当用途。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。