Pre-Windows 2000 computers
当一个计算机账户在 AD 中被“预创建”(即在机器实际加入域之前,由管理员在 ADUC 中手动创建)并勾选了 “允许 Windows 2000 之前的计算机使用此账户” 选项时:其默认密码就是其计算机名字(不带$)
1. 利用
1.1. 枚举
查找那些"预创建"(即在 ADUC 中手动创建,而非机器加入域时自动添加)但从未使用过的计算机账户,可以通过筛选所有计算机账户的 UserAccountControl 属性并寻找值为 4128(32|4096)的记录来实现(可通过 UserAccountControl 标志推导得出)
1.2. 利用工具
1.2.1. nxc
用nxc的pre2k模块 一键枚举+利用
┌──(root㉿kali)-[~/Desktop/htb/Pirate] └─# nxc ldap 10.129.124.28 -u pentest -p 'p3nt3st2025!&' -M pre2k LDAP 10.129.124.28 389 DC01 [*] Windows 10 / Server 2019 Build 17763 (name:DC01) (domain:pirate.htb) (signing:None) (channel binding:Never) LDAP 10.129.124.28 389 DC01 [+] pirate.htb\pentest:p3nt3st2025!& PRE2K 10.129.124.28 389 DC01 Pre-created computer account: MS01$ PRE2K 10.129.124.28 389 DC01 Pre-created computer account: EXCH01$ PRE2K 10.129.124.28 389 DC01 [+] Found 2 pre-created computer accounts. Saved to /root/.nxc/modules/pre2k/pirate.htb/precreated_computers.txt PRE2K 10.129.124.28 389 DC01 [+] Successfully obtained TGT for ms01@pirate.htb PRE2K 10.129.124.28 389 DC01 [+] Successfully obtained TGT for exch01@pirate.htb PRE2K 10.129.124.28 389 DC01 [+] Successfully obtained TGT for 2 pre-created computer accounts. Saved to /root/.nxc/modules/pre2k/ccache
2. 介绍
2.1. 基本介绍
背景与用途:这是属于AD中的遗留配置,是一个内置的安全组,最初是为了确保 Windows 2000 之后的 AD 环境能与旧版 Windows NT 系统兼容
权限机制:该组被授予了对域内所有用户和组对象的读取 (READ) 权限,包括各种细粒度的属性(如描述、职位、组成员关系等)
风险:过度枚举
在任何新的 Active Directory 部署中, Pre-Windows 2000 Compatible Access 组都会预先填充 Authenticated Users (所有已认证用户)组,即使现在的winserver 2025也是如此。这意味着任何拥有普通域账号的人都能查阅整个域的详细目录。
特别是,如果 Anonymous Logon被错误的配置在该组中,攻击者甚至无需任何账号即可进行未经身份验证的枚举。
3. 常见的枚举漏洞
因为pre2k组具有对域内所有用户和组的READ权限。所以很容易受到下面这些枚举的利用
3.1. SMB Null Session
3.1.1. 介绍
SMB 空会话可用于从活动目录中检索数据,例如所有用户的列表和密码策略
以下是此漏洞的在不同版本下的默认配置
| Windows 版本 | SMB 空会话默认启用? | 备注 |
|---|---|---|
| Windows NT 4.0 | 是 | 传统默认设置 |
| Windows Server 2000 | 是(如果在安装 AD 时选择了与 Windows 2000 之前版本兼容的权限) | 管理员在 DCPROMO 期间选择 |
| Windows Server 2003 | 是(如果在安装 AD 时选择了与 Windows 2000 之前版本兼容的权限) | 管理员在 DCPROMO 过程中选择 |
| Windows Server 2008 及更高版本 | 默认情况下未启用 | 必须手动启用让 Everyone 权限应用于匿名用户的组策略,并视需要修改 Pre-Win 2000 组 |
| 域控制器升级 (2003 -> 2008 -> 2012 等) | 是(如果先前已启用,除非被移除,否则将保持原状) | 空会话配置在就地升级期间会被保留,除非被清理 |
注: 如果这个设置之前被开启过,哪怕是 20 年前开启的,即使域控制器随着时间的推移进行了迭代升级,除非手动移除,否则该设置仍会保留
3.1.2. 修复:
通常从从 Pre-Windows 2000 Compatible Access 组中移除 Everyone 组即可解决问题。
此外还应该检查组策略中的 Default Domain Controllers Policy ,并确保 Network access: Let Everyone permissions apply to anonymous users 已禁用
检查流程: Computer Configuration --> Windows Settings --> Security Settings --> Local Policies --> Security Options 然后 gpupdate
3.2. LDAP Anonymous Bind
3.2.1. 介绍
LDAP 匿名绑定是攻击者无需认证即可从 Active Directory 域获取信息的另一种方法。
这在 Windows Server 2000 域控制器上是默认开启的,之后的版本就不再默认开启了
但由于 Pre-Windows 2000 Compatible Access 组的缘故。从之前的版本迭代升级的域控仍然会保留之前的配置
3.2.2. 修复:
清除 AD 中目录服务对象内的 dsHeuristics 属性值。当该值设置为 0000002 时,允许匿名绑定。移除即可禁用匿名绑定
此外,还应确保 ANONYMOUS LOGON 对 Users CN 或其他对象(包括域对象本身)没有读取权限。
下面是一个修复脚本
# Obtain domain name, build LDAP path to the Directory Service object, connect as an ADSI object
$Dcname = Get-ADDomain | Select-Object -ExpandProperty DistinguishedName
$Adsi = 'LDAP://CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,' + $Dcname
$AnonADSI = [ADSI]$Adsi
# Clear the dSHeuristics attribute
$AnonADSI.Properties["dSHeuristics"].Clear()
$AnonADSI.SetInfo()
# Remove ANONYMOUS LOGON read access on CN=Users
$ADSI = [ADSI]('LDAP://CN=Users,' + $Dcname)
$Anon = New-Object System.Security.Principal.NTAccount("ANONYMOUS LOGON")
$SID = $Anon.Translate([System.Security.Principal.SecurityIdentifier])
$adRights = [System.DirectoryServices.ActiveDirectoryRights] "GenericRead"
$type = [System.Security.AccessControl.AccessControlType] "Allow"
$inheritanceType = [System.DirectoryServices.ActiveDirectorySecurityInheritance] "All"
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $SID,$adRights,$type,$inheritanceType
$ADSI.PSBase.ObjectSecurity.RemoveAccessRule($ace) | Out-Null
$ADSI.PSBase.CommitChanges()
- 获取域 DN,构建指向配置分区中 CN=Directory Service 的 LDAP 路径,并以 ADSI 对象身份连接以实现读写访问
- 清除
dSHeuristics属性 - 移除 CN=Users 上
ANONYMOUS LOGON的显式GenericRead权限,以防止从未经身份验证的角度进行匿名 LDAP 绑定以读取用户对象
3.3. RID_Cycling
3.3.1. 介绍
RID 暴力破解是从未认证角度枚举 AD 用户和组列表的另一种技术。如果 Everyone 组被添加到 Pre-Windows 2000 Compatible Access 组(这种情况经常发生)
这通常在server 2000、2003上都有效,从2008开启就不再默认配置了。但仍会保留历史遗留配置
#利用案例
nxc smb 192.168.3.142 --rid-brute
这可以在默认域控制器策略的组策略级别进行设置,特别是当 Network access: Allow anonymous SID/name translation 启用时
3.3.2. 修复
在组策略编辑器的默认域控制器策略中将 Network access: Allow anonymous SID/name translation 设置为 disabled(优先,并确认应用与林中的所有域控制器)
或将注册表项 HKLM\SYSTEM\CurrentControlSet\Control\Lsa\RestrictAnonymous 的值设为 1 或 2
4. 常见利用方式
4.1. LLMNR/NBT-NS Response Spoofing
4.1.1. 原理
LLMNR 和 NBT-NS(NetBIOS)欺骗/投毒是众所周知的内网攻击手段,至今仍在许多环境中有效。LLMNR 代表链路本地多播名称解析,而 NBT-NS 代表 NetBIOS 名称服务,NetBIOS 是网络基本输入/输出系统的缩写。这些遗留协议默认启用,并且像许多其他问题一样,即使在域控制器/域功能级别升级后,它们仍可能保留在网络中。
LLMNR 协议允许主机与同一内部网段上的其他主机进行名称解析,无需依赖 DNS。当 DNS 名称服务器请求失败时,如果未禁用 LLMNR 和 NBT-NS 协议,Windows 系统将尝试使用这两种协议进行备用名称解析。
LLMNR 和 NBT-NS 在内部网络广播的主要问题在于:如果 DNS 名称解析失败,客户端(系统)会向整个本地网段发送未经身份验证的 UDP 广播,询问网段内是否有其他系统拥有其正在查找的名称。由于此广播过程未经身份验证即向整个网络发送,网络上的任何机器都可以代替被请求的机器进行响应。
攻击者可以使用诸如 Responder 之类的工具监听 LLMNR/NBT-NS 广播,并伪装成客户端试图进行身份验证的目标机器来发送欺骗性响应。在此身份验证过程中,客户端机器会发送 NTLMv2 密码哈希(如果网络中启用了此传统协议,有时也可能是 NTLMv1)
4.1.2. 利用场景
| 滥用案例 | 描述 |
|---|---|
| 用户输入错误 | 用户误输入 UNC 路径或主机名(如 \fileservr),当 DNS 解析失败且启用了 LLMNR/NBT-NS 广播时,恶意 Responder 服务器会响应,从而捕获 NTLMv2 哈希。 |
| Windows 代理自动检测 (WPAD) | 默认情况下,Windows 尝试通过 WPAD 发现代理。若 DNS 中未定义代理主机,客户端会通过 LLMNR/NBT-NS 请求 WPAD,Responder 响应后导致哈希被捕获。 |
| Chrome 浏览器 | 在地址栏输入搜索词时,Chrome 会同时进行主机名解析。启动时解析随机主机名的行为也会激活名称解析,常导致密码哈希被捕获。 |
| 配置不当的应用程序/服务 | 某些程序自动发现网络资源(如打印机或文件共享)。若缺少正确 DNS 记录且启用了 LLMNR/NBT-NS,系统将回退使用这些协议。 |
| 未受管理/遗留设备 | 这些设备可能触发回退名称解析机制,使其容易受到欺骗性回复的影响,进而导致凭据泄露。 |
| DNS 服务器配置错误 | 客户端或服务器端的 DNS 配置错误可能导致名称解析问题,从而使通过这些协议实施的投毒攻击获得成功。 |
4.1.3. 缓解措施
LLMNR 与 NBT-NS 响应欺骗攻击可通过禁用这两种协议相对容易地进行修复。若仅禁用 LLMNR,Windows 系统将转而依赖 NBT-NS 进行名称解析,因此攻击仍可能发生。
禁用LLMNR:
可以通过组策略禁用 LLMNR。理想的做法是创建一个新的 GPO,而不是通过默认域策略禁用它。创建一个专用的 GPO,例如 Disable LLMNR ,将使其更易于审计、更容易针对特定 OU、更容易回滚,并避免编辑域级基线策略。
禁用 NBT-NS
与 LLMNR 不同,NBT-NS 没有可全局应用的特定组策略对象设置,因此必须在主机级别进行配置
NBT-NS 可以通过每台主机的网络连接设置来禁用
4.2. mDNS Response Spoofing
4.2.1. 介绍
响应欺骗攻击的另一个潜在目标是多播 DNS(mDNS),
mDNS 随 Windows 10 1703 版本引入。是由苹果公司开发的,此协议旨在实现无需 DNS 服务器或用户交互的本地网络名称与服务发现。 它通过 UDP 端口 5353 应用于智能电视、打印机、机顶盒、无线音箱、无线屏幕镜像等领域
4.2.2. 修复 mDNS 响应欺骗
因为任何操作系统都可能同时运行多个 mDNS 解析器,且 mDNS 使用 UDP而非 TCP,因此可能有多个服务同时监听该端口。再加上很多第三方程序不依赖windows自带的mDNS,实现自己的mDNS堆栈,用于发现对等设备、共享内容、支持跨设备同步或投屏等。
所以即使禁用了windows内置的mDNS解析器,但其他应用程序仍可能发送 mDNS 查询或接受 mDNS 回复,只要其中任何一个执行 .local 查找并接受伪造的回复,它们仍然容易受到攻击(例如 Chrome)
微软的官方建议是使用防火墙。
- 在 Windows Defender 防火墙中为所有配置文件(公共、专用、域)禁用入站 mDNS。这将阻止所有入站 mDNS 流量,但可能会给远程工作人员带来问题。
- 仅在域配置文件中禁用 mDNS,这样不会影响远程工作人员,但会阻止企业网络内的 mDNS
- 在 Windows Defender 防火墙中禁用出站流量的 mDNS。这仅在需要高安全性的情况下才必要,因为通常阻止入站 mDNS 流量已足够。
与 LLMNR/NBT-NS 不同,mDNS 通常是设备和服务正常运行所必须之物。现代计算机环境下,很多设备都使用mDNS,完全阻止入站mDNS流量是不可取的,他会影响如chrome、屏幕共享、协同办公等软件的正常工作
一种折衷方案可以是结合使用 Windows Defender 防火墙配置文件、应用程序白名单以及一些缓解措施,使得响应欺骗攻击难以或几乎不可能达成目标。这包括启用 SMB 签名、LDAP 签名、LDAP 通道绑定、强密码策略、网络分段、网络访问控制(使恶意设备难以接入网络)、最小权限原则、确保特权用户(如域管理员)拥有独立账户且不使用特权账户登录工作站、健全的监控和警报机制等。
4.3. 基于 IPv6 的 DNS 欺骗
4.3.1. 介绍
在 Windows 环境中,IPv6 默认启用且优先级高于 IPv4,但通常未被使用或配置。每当 Windows 计算机启动或连接到网络时,它会广播 DHCPv6 请求以获取 IPv6 地址。与 LLMNR 类似,DHCPv6 是一种多播协议,因此位于同一网段的攻击者可以通过称为 DHCPv6 欺骗的攻击来响应这些 DHCPv6 查询。攻击者的主机为客户端提供特定的 IP 配置,其中包括恶意 DNS 服务器的地址。一旦完成此操作,攻击者就可以通过强制每个客户端在每次 DNS 解析时查询攻击者的恶意 DNS 服务器来执行 DNS 欺骗。攻击者主机随后将这些客户端重定向到其他恶意服务器(如 ntlmrelayx),这些服务器随后用于捕获 NTLMv1/NTLMv2 密码哈希或将这些身份验证尝试中继到 SMB、LDAP 等。
这是一种很容易被忽略的攻击手段
4.3.2. 修复
修改以下注册表键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\ 并将 DisabledComponents 设置为 0xFF 以禁用IPv6
下面是一个检测脚本
$regPath = "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters"
$key = "DisabledComponents"
try {
$val = Get-ItemProperty -Path $regPath -Name $key -ErrorAction Stop
if ($val.$key -eq 0xFF) {
Write-Host "✅ IPv6 is fully disabled (DisabledComponents = 0xFF)" -ForegroundColor Green
} else {
Write-Host "⚠️ IPv6 is partially enabled (DisabledComponents = $($val.$key))" -ForegroundColor Yellow
}
} catch {
Write-Host "⚠️ DisabledComponents not set — IPv6 is likely fully enabled" -ForegroundColor Yellow
}
禁用命令
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name "DisabledComponents" -Value 0xFF
注意: 禁用IPv6有可能会破坏网络中依赖IPv6的一些功能
更多知识:




