内网安全攻防这个话题,我在实际项目里碰过不少次,但真正系统地把思路捋清楚,还是在读完《内网安全攻防:渗透测试实战指南》这本书之后。很多人做渗透测试,Web 端打点一打一个准,拿到一个 webshell 就觉得「拿下了」,结果进了内网才发现两眼一抹黑——不知道下一步该往哪走、不知道内网里还有什么、更不知道域控到底藏在哪个角落。这本书恰好把这块补上了,从内网渗透测试的基础概念讲起,逐步铺开到信息收集、提权、横向移动和权限维持,是一本能让人从「外网打点选手」过渡到「内网渗透选手」的实战型读物。
这篇笔记我会站在一个从业者的角度,把书里第一部分「内网渗透测试基础」的内容掰开揉碎来讲,同时结合我自己在靶场和授权项目里踩过的坑、验证过的思路来做补充。适合已经接触过渗透测试、但对内网环境还比较陌生的人,也适合准备系统学习内网安全攻防的新手。如果你刚接触这个领域,这篇文章能帮你把「内网渗透测试到底在干什么」这件事彻底搞清楚。
1. 为什么内网渗透测试成了安全从业者的「必修课」
1.1 真实的攻击链:从边界突破到域控沦陷
先摆一个我在实际项目中反复见到的场景。某次授权测试,目标是一个中型企业,外部资产是一套官网和一个 OA 系统。Web 渗透比较顺利,最后通过一个未授权接口拿到了应用服务器权限。到这里,很多经验不足的测试人员会觉得「可以收工了」,但实际上这只是整个攻击链的起点。
内网渗透测试要解决的核心问题,恰恰是这条链路的后面半段:拿到一台边界主机的立足点之后,怎么摸清内网的拓扑结构、怎么找到域控、怎么从普通用户权限提升到管理员权限、怎么横向移动到更多机器、最终把整个域环境拿下来。用书里的话说,内网渗透测试是「以被攻陷的内网主机为跳板,进一步深入内网并最终获取核心业务系统权限的过程」。这个过程不是随缘乱撞,而是有一条清晰的路径依赖——先立足,再收集,再提权,再横移,最后收网。
所以别再以为渗透测试就是 Web 漏洞挖掘。真正决定一次红队演练价值的,往往是内网这一段的深度和效率。你从外网打进一台机器可能只需要一天,但如果在内网里迷路三天还没找到域控,那这次测试的含金量就会大打折扣。这也是为什么现在企业招安全工程师,越来越看重内网渗透相关的项目经验。
1.2 读完这一章,你应该建立起来的内网威胁模型
内网渗透测试基础这部分,书里其实在用一整章的篇幅帮你建立一个威胁模型。我的理解是,你要时刻记住三个关键对象:普通终端、服务器、域控。普通终端是你拿到立足点之后的第一个落脚点,服务器(尤其是文件服务器、数据库服务器)是攻击者最想碰的目标,域控则是整个 Windows 域环境的「根」,控制了域控就等于控制了域内所有机器的账号认证和管理策略。
这三个对象之间不是孤立的,而是靠信任关系串起来的。用户账号在域里被统一认证,管理员在某个终端上登录过,凭据就可能留在那台机器的内存或缓存里;某台服务器被配置了开机自启动脚本,脚本里的明文口令可能就是横向移动的钥匙。我在实操中最大的体会是:内网渗透与其说是在打机器,不如说是在打信任关系。你每找到一段被复用的凭据、一个被信任的通道,就等于在内网里多开了一扇门。这本书在基础篇就把这个模型反复强调,后面的章节全是围绕它展开的,所以基础一定要打牢。
2. 动手前的硬前提:授权、边界和靶场
2.1 授权永远是第一道「技术门槛」
说句不太好听但必须讲清的话:内网渗透测试和公网 Web 渗透在授权上有很大区别。公网资产相对容易界定,域名、IP 段写清楚就行;内网则复杂得多,一个内网里可能跑着几十套业务系统、几百台终端,甚至还有和第三方互联的网段,测试范围稍微划不清楚,就容易出问题。
我接项目时有个习惯:授标书里必须写清楚目标域名的 NetBIOS 名称、IP 网段、允许测试的时间窗口,以及明确禁止触碰的系统(比如备份域控、生产数据库主库)。这些边界条件不是法律团队抠字眼,而是真会影响到你测试时的操作选择。比如说,授标只允许测办公网段,结果你通过横向移动摸进了生产网段,哪怕是好心发现的严重漏洞,报告也很难写,客户还会质疑你的职业操守。
所以在「内网渗透测试基础」这个阶段,我建议你养成一个习惯:每次动手前,把授权范围打印出来放在手边或存到手机里,测试过程中每横移到一个新网段,先停下来问自己一句「这个网段在不在授权范围内」。这不是胆小,而是这个行业的基本生存法则。
2.2 用虚拟机快速搭出一套 AD 靶场
那新手怎么练内网渗透?我的建议是别一上来就打真实目标,老老实实搭一个域环境靶场。书里虽然没有手把手教搭建,但后面所有章节的案例都跑在 Windows 域环境里,所以这一步躲不开。
最简单的拓扑是三台虚拟机:一台 Windows Server 2019 当域控(AD),一台 Windows 10 当普通域成员机,一台 Kali Linux 当攻击机。VMware 或 VirtualBox 都可以,网络模式全设成 NAT 或者自定义的 Host-Only 网段,保证三台机器能互通就行。域控上装好 Active Directory 域服务,把 Windows 10 加进域,再在域控上创建一个普通域用户和一个域管理员账户。这套环境搭下来,一小时左右,花费为零,但几乎能覆盖书里七八成的实操场景。
我踩过最大的坑是快照。一开始练习的时候,权限被打烂、域策略被改坏,想恢复只能重装系统,效率极低。后来学乖了——域控打完一个阶段就做一个快照,客户现场测试也类似,哪怕不能打快照,也要提前确认备份策略。这不是怂,是保证自己随时可以重来。
3. 基础信息收集:内网渗透的第一生命线
3.1 本机信息收集:先搞清「我是谁、在哪、能访问谁」
书里把信息收集分成本机信息收集和域内信息收集,这个划分非常实用,因为我见过太多人拿到 shell 之后第一件事是急着跑提权工具,结果对目标机器一无所知。
本机信息收集要回答的问题有几个。第一,当前用户是谁、在哪个组里,whoami /all能告诉你当前用户的 SID、权限令牌以及所属的用户组,如果当前用户已经在 Administrators 组里,很多提权步骤可以直接跳过。第二,这台机器是什么系统、打了哪些补丁,systeminfo能看到系统版本和 Hotfix 列表,内核提权方向基本就看它。第三,这台机器上跑着哪些进程和服务,tasklist /svc和wmic service list full能帮你识别杀软、数据库服务、运维 agent,这些信息决定了你哪些操作会被拦截、哪些服务可以利用。
还有几个命令我每次都会跑:ipconfig /all看 IP 地址、网关和 DNS,arp -a看内网里最近通信过的主机,route print看路由表——尤其是有多网卡的机器,路由表能直接暴露内网的其他网段。以及netstat -ano看当前机器的网络连接,很多时候你能从连接列表里直接看到数据库端口、远程桌面端口甚至域控的 389 端口,这就等于给了你一张现成的内网关系图。记住,内网渗透里最不值钱的是exploit,最值钱的是情报。
3.2 域内信息收集:锁定域控和服务器的关键命令
当确认当前主机已经加入域环境之后,就要切换到域内信息收集的思路上来。这时候最核心的目标是回答三个问题:域控在哪、谁是域管理员、还能访问哪些机器。
先说找域控。net time /domain可以尝试获取域时间,同时也能间接确认域控地址;nltest /dclist:域名可以直接列出域控列表;最直白的还是ping -n 1 -a 域控IP,有时候能直接解析出域名。在我实际的测试过程中,最快的方式是看当前机器 DNS 配置,域环境内网机器的 DNS 服务器通常就是域控本身,ipconfig /all里那行 DNS 地址基本就是域控 IP,然后再用nltest去确认。
再说找域内机器和域管理员。net view /domain可以列出域列表,net view /domain:域名能列出该域内的计算机列表,net group "domain admins" /domain能列出域管理员组成员。这类命令是传统的 SMB 枚举方式,在真实域环境里由于权限问题并不一定都能成功,但它们足够快,适合在信息收集初期跑一遍,能拿到多少算多少。书里在这个章节讲得比较克制,但我的经验是:把这些基础命令练到肌肉记忆,比一上来就上 BloodHound 这类自动化工具更重要,因为你得先理解数据从哪来,才能理解工具报出的路径到底意味着什么。
3.3 网络拓扑探测:把碎片信息拼成一张网
信息收集做到后期,你手上会有很多碎片:某个 IP 开了 445,某一台机器连着数据库端口,某个网段里活跃主机特别多。下一步就是把这些碎片拼起来,形成一张内网拓扑图。手工拼图的方法很简单,就是不断用arp -a、ping扫描、netstat连接列表去补全主机之间的通信关系。比如你在一台应用服务器上netstat -ano看到大量连往 10.10.10.0/24 网段的 1433 端口(SQL Server 默认端口),基本可以推断出那个网段存在数据库集群。
在靶场里练这一步有个特别好用的技巧:把书里每一章出现的命令集中整理成一个备忘录,按信息收集、提权、横移、持久化分类,后面做实验的时候直接对照着跑。我第一次跟着书做实验,就是因为中途去翻命令格式,思路断开,导致后面收集到的信息乱七八糟。预先整理备忘录能让你在读案例的同时,手里始终有把「兵器谱」,效率会高很多。
4. 凭据获取与权限提升:从普通用户到管理员
4.1 提权≠一开始就要打内核漏洞
很多初学者一说到提权就想到内核漏洞 exploit,这其实是个误区。真实的 Windows 域环境里,像 PrintNightmare、Zerologon 这类高危漏洞在补丁更新及时的网络上往往根本打不通,而运维配置上的问题却屡见不鲜。书里虽然列举了常见的 Windows 提权手段,但我在实际项目中见得最多、成功率最高的反而是三类:服务配置错误、明文凭据泄露和令牌劫持。
服务配置错误里典型的是非管理员权限可以修改某个 Windows 服务的可执行文件路径,然后通过重启服务来执行任意程序。这类问题在第三方软件装得多、运维规范差的机器上非常常见。我在一次授权测试里就遇到过某台终端上装着一个第三方备份 agent,安装目录 Everyone 有完全控制权限,直接替换同名 exe 就能在服务账户权限下执行命令。这就是典型的「技术含量不高,但真的很实用」的提权方式。
明文凭据泄露则更直白——脚本文件、配置文件、计划任务、甚至回收站里的 txt,都可能躺着明文口令。内网渗透测试基础这一章讲的重点是建立一种「凭据无处不在」的意识:每次拿到一台新机器,先把所有配置文件翻一遍,把dir /s /b *password*、*config*、*pass*这类检索命令养成习惯。自动化工具能帮你,但手工翻文件建立的判断力是工具给不了的。
4.2 常见提权路径和判断顺序
我建议你给提权阶段排一个顺序,按照成本从低到高去试。第一步永远是查当前用户权限,whoami /all看令牌,如果当前用户是本地管理员组成员,很多内核提权都不需要碰。第二步是系统信息和补丁信息,systeminfo输出里的补丁列表要和公开漏洞对应;第三步是查服务权限和可写目录,用 accesschk 这类工具去看常见服务目录和服务对象的 ACL;第四步再看能不能想办法拿到更高权限用户的凭据,比如从内存抓取、从浏览器保存的密码里翻、或者看有没有域管的计划任务脚本可以被滥用。
这样的顺序背后有个简单的逻辑:内核提权爆炸性强但成功率不稳定,有时候还会把目标系统打蓝屏;而凭据类、配置类的提权虽然看起来「土」,但每次成功都能直接让你在目标网络里站稳脚跟。书里说「渗透测试的本质是信息收集,而不是漏洞利用」,放到提权阶段同样成立。你收集到的信息越充分,选提权路径就越有把握,而不是一个个 exp 盲目去试。
5. 横向移动:一台机器如何演变成整个域失守
5.1 横向移动的本质是信任关系复用
关于横向移动,书里的核心观点是:内网中一台机器的失陷,不应该是终点,而应该是通往更多主机的起点。横向移动的本质,就是利用已经获得的某个账号或某台机器的权限,去访问更多的主机,不断扩展你在内网中的控制范围。
为什么这个环节如此重要?因为在一个标准的域环境里,普通终端之间的访问控制往往并不严格,同一网段的机器之间可能开了很多共享和远程管理端口。攻击者拿到一台终端后,如果能在这台机器的内存、文件、浏览器记录里翻出别的账号凭据,那么他就可以尝试用这份凭据去连接下一台机器。这样一路复用凭据、一路寻找更接近域控的目标,最终就能一台接一台地逼近核心系统。我在读这本书的基础章时,最大的顿悟就在这——原来横向移动并不需要什么高科技,大多数时候靠的就是管理员重复使用密码、以及内网信任关系被滥用。
5.2 哈希传递、PsExec 和计划任务的实操要点
这一节想展开讲几个最常用的横向移动手法,都是书里文字不多、但实战价值极高的点。
第一是哈希传递(Pass-the-Hash,PtH)。在 Windows 环境里,你拿到某个用户的 NTLM 哈希之后,很多时候不需要破解出明文密码,直接拿着哈希就能进行远程认证。经典的工具有 impacket 套件里的psexec.py、wmiexec.py,也可以使用 mimikatz 的sekurlsa::pth。前提条件主要有两个:目标主机开启了 445 或 135/139 端口,且目标用户具备远程访问权限(比如本地管理员组成员)。靶场里我用psexec.py的成功率比直接 RDP 高得多,因为 RDP 往往需要明文口令和受限的登录策略,而 PtH 在不少环境里畅通无阻。
第二是通过计划任务或服务进行命令执行。Windows 内置的计划任务(schtasks)和远程服务工具(如 SC)都可以用来在远程主机上执行命令。这类方式的好处是流量特征相对常规,不太容易被基础的安全设备单独拦下来。实战中我会优先尝试 WMI 执行,因为它走的是 135 端口,在不少环境里过滤规则比 445 宽松。但我必须强调,这些手法只应在授权范围内的靶场环境中验证,生产网络上的操作务必提前确认规则边界。
第三是关于抓取哈希和明文口令。mimikatz 的sekurlsa::logonpasswords在拿下本地管理员权限后经常能抓到当前机器上缓存的口令哈希,有时候还能直接抓到明文口令。实操中这一步经常是横向移动的转折点——因为只要有一台机器上有域管理员登录过的痕迹,你从这台机器上抓到的凭据就可能直接把你送到域控面前。这里的经验是:不要一上来就在所有机器上跑抓取工具,先挑那些业务高峰期有人活跃的、运维人员常登录的机器,成功率会高很多。
6. 权限维持与痕迹清理:攻击者为什么「删不掉」
6.1 常见持久化手段与其工作原理
很多人看内网渗透的书籍,注意力全放在打点上,忽略了权限维持这一块。其实在真实的红队演练里,权限维持往往决定了你能不能在目标网络里待足够长的时间,来完整地摸清资产和核心数据。书里列举的常见手段包括:创建隐藏账号、修改服务、计划任务、注册表自启动、以及域级别的持久化技巧,例如在域控上伪造黄金票据等。
我在基础篇学到的最重要的理念是:持久化不只是「留个后门」,而是要尽量隐蔽、尽量稳定。比如创建一个隐藏账号这个操作,看起来最简单,但在真实环境中很容易被发现,因为域控上但凡有日志审计,新增账号的告警基本都会触发。相比之下,计划任务和注册表自启动这类方式更贴近正常业务行为,存活时间往往更长。还有一个思路是利用域环境的合法机制——比如在域控上配置一个看起来正常的计划任务来周期性地执行某条命令,这种操作在监控体系不完善的环境里确实很难被发现,但同样只应在授权测试的靶场里验证。
6.2 日志清理的正确理解:影响评估优先
再聊痕迹清理。我在读书笔记里专门记了一句话:「不要一上来就删日志,先想想哪些日志会被审计,哪些操作本身就不该留下。」乱删日志在授权测试里其实是高风险动作,因为一旦客户要求排查,你删掉的日志可能包含攻击路径的完整记录,反而给溯源制造了麻烦。
我的习惯是分两类处理。一类是常见的执行类日志,比如 PowerShell 操作记录、计划任务创建记录,这些在测试结束时可以通过协商由客户或测试方统一处理;另一类是工具落地产生的文件本身,比如上传到目标机器的 exe、脚本、工具包,测试结束前必须彻底清理干净,避免给目标系统留下持久后门风险。在靶场练习时,我还会刻意做一遍完整的「清理前后对比」——记录哪些位置会生成日志、哪些文件和注册表项会被工具修改,这样到了真实项目里才会心里有底,知道哪些步骤需要格外小心,哪些步骤可以大胆操作。
7. 这本书没展开讲的「暗坑」:我踩过的和替你避开的
7.1 靶场和实战最大的差距在哪里
书里大量案例跑在域环境靶场里,步骤干净利落,但真实环境的复杂度远不止如此。第一个差距是流量监控。靶场里没有真正的大型 EDR、态势感知设备和全流量审计系统,横移的时候想怎么连就怎么连;但真实内网里,内网安全设备和流量审计一旦部署到位,大量扫描动作和横移行为都会产生告警。所以从读这本书开始,就要养成「少扫描、多利用已有凭据、走正常管理通道」的习惯,而不是一上来就全网段扫端口。
第二个差距是业务噪音。靶场里主机数量少,你能很清楚地判断哪台是域控、哪台是文件服务器;真实内网里可能有上千台机器,大量主机名随意、业务归属不明,光靠net view根本分不清重点目标在哪。这个阶段我建议多利用书里强调的信息收集思路,把「凭据收集」放在主动扫描之前,通过主机间已有的连接关系去推导重要资产,而不是盲目去扫。
7.2 后续学习路线与前置知识清单
如果你刚把书的第一部分读完,想继续深入,我给一个比较务实的路线参考。首先,把 Windows 域环境本身学明白——域用户、组策略、Kerberos 认证流程、SMB 协议,这些底子不牢,后面看横向移动和域渗透的章节会非常吃力。其次,至少掌握一种脚本语言,PowerShell 排第一,Python 其次,因为内网渗透里大量工具和利用代码都依赖这两种语言,你不一定要写得很好,但至少要看得懂、改得动。第三,多练内网靶场,把经典实验反复做熟,比如先打一台普通域成员机,再通过哈希传递横移到域控,最后做权限维持和清理,整套流程能独立走完,再考虑接触真实环境。
有一点书里没有强调,但我自己在带人时经常强调:记录和复盘。每次靶场实验,把命令行、输出、踩坑点、成功路径全部记下来。对照书里的思路检查自己哪里跑偏了,久而久之就会形成自己的内网渗透方法论。做安全这行,经验非常重要,而经验很大程度来自高质量的复盘,不只是跑通了多少个 exploit。
最后再分享一个小技巧:内网渗透测试的关键不是手里有多少 0day,而是你多了解目标环境本身。书里第一部分把基础概念和信息收集讲得很扎实,这部分多花点时间反复读、反复练,后面学横向移动、域渗透时你会发现自己比别人快很多。安全这条路没有捷径,但你走的每一步,只要方向对了,都会算数。