内网渗透测试这个方向,这几年热度一直没降过。不管是做蓝队防守、红队评估,还是刚入行安全没多久的新人,都会发现一个现实问题:拿到一台公网服务器的权限,只是开胃菜,真正考验功力的是进入内网之后怎么走、怎么打、怎么守。我之前整理过不少实战笔记,这次专门把“内网渗透测试基础”这部分从头捋一遍,从最底层的概念讲起,到信息收集、权限提升、横向移动,再到常见问题的排查,尽量用大白话把这条技术链路讲透。文章会比较长,适合先收藏再慢慢啃,也适合在实战前翻一遍当查漏补缺的清单。
1. 内网渗透测试的底层逻辑与核心价值
1.1 为什么内网渗透测试越来越重要
很多刚接触安全的朋友会有一个惯性思维:渗透测试嘛,就是找漏洞、打漏洞、拿权限,拿到服务器就完事了。但放到真实的企业环境里,这种思路远远不够。现代企业的网络架构极少是“一台裸奔服务器”,而是由办公网、生产网、测试网、数据中心等多个区域组成的复杂网络。公网入口通常只是最外层的壳,真正有价值的业务系统、核心数据、用户数据库,都在内网深处。
打个比方,公网渗透像是在小区门口测试保安认不认得出你,而内网渗透是进了小区之后,还要看你能否顺利穿过单元门、电梯、房门,最终走进某一户人家。开发商不会把保险柜放在大门口,企业也不会把核心数据库挂在公网上。所以,内网渗透测试的本质,是模拟攻击者突破边界后,在内部网络中的活动能力评估。
从防守方的角度更直白:现在很多企业的安全建设已经覆盖了边界防御,WAF、IPS、防火墙该上的都上了,但内网一旦失守,内部的东西能不能扛住攻击者的下一步动作?内网渗透测试就是来回答这个问题的。它验证的是“假设边界已经被攻破,内网是否还能兜得住”。
1.2 内网渗透与常规渗透的本质区别
常规渗透测试的逻辑比较线性:信息收集、漏洞扫描、漏洞利用、拿权限、写报告。目标是从外到内,突破一层防线就完事。但内网渗透的逻辑完全不同,它更像是一场“内部战争”,有几个显著区别。
第一,攻击面完全不同。公网渗透面对的是暴露在外的服务,端口扫描基本集中在常见端口;内网渗透面对的是整个内部网络的所有主机、服务、协议,包括平时根本不会暴露到公网的SMB、RDP、WinRM、内部Web系统、数据库服务等。攻击面大了好几个量级。
第二,身份和认证成为核心。公网渗透主要靠漏洞打,内网渗透则大量依赖“身份”这个东西。内网里的系统互相信任的基础是域账户、本地账户、Kerberos票据,攻击者拿到一台主机后,第一件事往往不是继续打漏洞,而是翻内存、翻注册表、翻配置文件,找账户口令和凭据。
第三,检测与逃逸的对抗强度不同。公网上的攻击行为,防守方主要靠流量监测;内网里的攻击行为,防守方还会叠加主机层面的监控,比如日志审计、进程监控、文件完整性校验。攻击者在内网的动作稍大一点就可能暴露,所以内网渗透更讲究“低噪声”。
理解了这三点,再看内网渗透的整个知识体系,就不会觉得它是零散的技巧堆砌,而是一套有内在逻辑的方法论:进得来(边界突破)、待得住(权限维持)、找得到(信息收集)、拿得下(权限提升)、走得远(横向移动)。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内网信息收集:渗透的第一步,也是最容易被忽略的一步
2.1 内网拓扑与资产盘点:先画地图,再打仗
我见过不少新人拿到一台内网主机后,第一反应就是“赶紧提权”,结果提了半天,连自己的主机在哪个网段、同一网段有哪些机器都没搞清楚。这就像进了迷宫不画地图,只会横冲直撞。信息收集在内网渗透里是决定成败的关键环节,没有之一。
内网信息收集的第一个任务,是搞清楚自己处于什么位置。最基础的三件事:本机IP地址与网段、网关地址、DNS服务器地址。在Windows上可以用 ipconfig /all 查看,Linux上用 ip addr 和 cat /etc/resolv.conf。拿到这些信息后,至少能判断出当前主机所处的子网规模。
接下来是探测同网段存活主机。常见做法是ping扫描,但在内网环境里,很多主机禁ping,所以要用ARP扫描或者TCP端口探测的方式来辅助判断。常用的工具包括nmap的 -sn 参数进行ping扫描、arp-scan 做二层发现,或者用fscan、goby这类综合工具直接跑一遍网段,效率更高。
这里有个实操经验:内网扫描一定要控制速率和并发。有些业务系统对网络延迟敏感,扫描太快容易把生产环境搞出问题。一般建议先用ping扫描快速过一遍整个网段,再对存活主机做端口识别,不要一上来就对整个大网段做全端口扫描。稳妥的节奏是:先确定网段范围,然后跑一轮存活探测,再针对存活主机做重点端口检查。
资产盘点还要关注非标准端口。很多内网系统的Web服务并不会跑在80和443上,8080、8888、8081、7001、9200这些端口都可能是业务系统的入口。所以资产盘点阶段的端口扫描,至少要覆盖常用服务端口和常见Web管理端口。
2.2 主机信息与账号策略排查:搞清楚你现在是谁
拿到一台主机的权限后,要先搞清楚“我是谁”。这里说的不是哲学问题,而是几个非常具体的点:当前用户是谁、属于哪些本地组、有没有管理员权限、主机最近被谁登录过。
在Windows环境下,需要依次确认这些信息:
- 当前用户名和权限:
whoami /all,这一步能看当前用户的SID、权限以及所在组。 - 系统版本和补丁情况:
systeminfo,提权的时候能不能打补丁漏洞,全靠这个信息。 - 网络连接状态:
netstat -ano,看当前主机与哪些IP存在连接,这往往能暴露出内网里的关键系统。 - 本地管理员组:
net localgroup administrators,确认哪些账户在本地管理员组里,这决定了后续横向移动时能用哪些账号。 - 登录历史:
query user和net session,看看当前有哪些用户在线、共享连接来自哪里。
Linux环境下的排查思路类似:id 看当前用户和组,cat /etc/passwd 看系统用户列表,history 翻历史命令,cat /home/xxx/.bash_history 看其他用户的操作记录。很多内网服务器上,运维人员会在命令行里直接写账号口令,这在内网渗透里是拿分点,也是最容易被忽略的“信息宝藏”,刚拿到权限的第一时间就要把这些痕迹翻一遍。
账号策略排查同样重要。如果你拿到一个普通域用户,先看看它是否隶属于某些高权限组,比如Domain Admins、Enterprise Admins、Account Operators。很多企业的运维习惯不好,会把普通业务账号直接加到Domain Admins组里,这种错误配置在内网里非常普遍,也是最容易利用的突破口之一。
2.3 域环境信息收集:理解内网的心脏
很多内网渗透的进阶技术,都是围绕“域”展开的,因为域是Windows内网的核心管理架构。进入域环境后,信息收集的重点就变了,不再是单纯看本机,而是要摸清整个域的脉络。
首先要确认当前主机是否在域内:systeminfo 里看“域”那行,或者用 net config workstation 确认。如果在域内,接下来要依次收集:
- 域控制器地址:
nltest /dclist:域名,这个信息很重要,域控是整个域内权限最高的系统,是内网渗透的最终目标。 - 当前域的名称和功能级别:
net view /domain查看域的列表,dsquery可以查询域内对象。 - 域信任关系:
nltest /domain_trusts,多域环境里,域信任关系决定了从一个域打到另一个域的可能性。 - 域内用户和组:有权限的话,用
net group "domain admins" /domain查看高权限组成员;用net user /domain列出域内用户;PowerShell环境下可以用Get-ADUser -Filter *做更细致的查询。
域信息收集有一条很重要的原则:能用普通查询,就不要用高权限操作。比如查询域内用户的命令,只要当前用户是合法域用户就能执行,不需要管理员权限。在这个阶段,尽量避免做任何可能触发告警的操作,比如批量密码喷洒、异常的大量查询。动作越轻,越能留到最后关键的时刻再发力。
3. 权限提升与横向移动的核心思路
3.1 常见提权路径:从普通权限到管理员权限
拿到一台主机的普通用户权限后,下一步就是提权,核心目标有两个:获得本机管理员权限、获得高权限域账户。这里只讲思路,不讲具体的漏洞利用细节,因为提权的本质是“找到一个系统信任你的点”。
Windows环境下的提权路径,可以分成几大类:
一是补丁漏洞提权。通过 systeminfo 拿到系统版本和补丁信息后,在漏洞库里匹配是否存在可用的本地提权漏洞。这类方法见效快,但有不确定性,需要环境满足漏洞条件。
二是服务配置错误提权。这是最经典的路径,Windows服务如果配置成以系统权限运行,而且在可写目录下面,普通用户可以替换服务程序,重启后服务就会以系统权限执行。检查思路是:wmic service get name,displayname,pathname,startmode,找PathName路径在可写目录里的服务。
三是计划任务提权。当系统存在以高权限运行的计划任务,且任务指向的脚本或程序路径可写,就可以替换任务执行的文件来提权。
四是凭据窃取类提权。这类路径靠的是一句话:系统中的高权限凭据往往比漏洞更容易获取。比如从内存中读取明文口令、从注册表里找自动登录密码、从配置文件里翻数据库连接串。
Linux环境的提权思路殊途同归:找SUID文件是基本功(find / -perm -4000),sudo配置错误也是高频问题(sudo -l查看当前用户免密能执行哪些命令),还有内核漏洞、可写脚本被root定时执行等路径。
这里要特别说一个观点:提权不是越复杂越好,而是越简单越好。很多时候,系统的某个目录对所有用户可写,某个脚本以root权限被周期执行,这种看似“低级”的配置错误,在实际环境里远比内核漏洞提权更常见也更好用。
3.2 横向移动:从一台机器到整个网络
内网渗透里有个很贴切的比喻:拿到第一台机器的权限,就像拿到了进入大楼的门禁卡,但这个门禁卡只能打开某一个房间。横向移动要做的事情,是用这张卡做跳板,打开更多的门。
横向移动的基础,是前面信息收集阶段掌握的凭据和网络拓扑。有了凭据后,常见的横向移动方式包括:
- 利用SMB协议的计划任务远程执行:传统方式是
at或schtasks在目标主机上创建计划任务,执行命令。 - 利用WinRM远程管理:条件允许的话,用
winrs或PowerShell的Invoke-Command在目标主机上执行命令。 - 利用WMI远程调用:
wmic /node:目标IP process call create "命令",这种方式不依赖额外服务开放,很多内网环境可用。 - 利用远程桌面协议:拿到目标主机管理员凭据后,直接RDP登录。
在域环境里,横向移动还有一个进阶玩法:利用Kerberos认证机制的特性。比如拿到域用户的哈希值后,可以构造票据来冒充该用户访问服务。再比如拿到域控的哈希值后,可以直接构造管理员票据,对整个域实现完全控制。这类技术现在已经是内网渗透考试和实战的常考内容,理解原理比背命令重要得多。
横向移动在选择目标时,有一个优先级参考:优先打域控,因为域控是身份认证的中心;其次打数据库服务器,因为数据最有价值;然后打运维管理机,因为运维机上通常有大量服务器的管理凭据。这背后的逻辑是“找枢纽”,而不是随机乱打。
3.3 权限维持:攻防对抗的温度计
内网渗透测试中,权限维持往往被新手忽略,但在攻防演练里,这一项非常关键。拿到权限之后,如果没有做任何维持手段,防守方杀掉进程、改了密码、打了补丁,攻击链路就断了。权限维持的意义是:即使部分防御措施生效,攻击者仍能在关键时刻重新获得访问能力。
常见的权限维持思路有:
- 在系统层面创建隐藏账户或后门账户,注意不是简单的
net user添加账户,这种方式容易被发现。更隐蔽的做法是修改注册表,或在账户属性上做手脚。 - 在服务层面注册一个伪装的开机自启服务,服务名和中英文名尽量伪装成系统服务。
- 在计划任务层面创建一个低频次、无规律的任务,合法业务任务的伪装效果更好。
- 在Web应用层面植入后门文件,但这种方式容易被WebShell扫描工具查杀,所以要做好免杀处理。
我个人的提醒是:在授权的内网渗透测试项目中,权限维持的力度要和测试目标匹配。如果目标是以验证检测能力为主的蓝队演练,那权限维持的方式可以激进一些,给蓝队充分的“挑战”;如果目标是评估业务风险,那权限维持点到为止就好,重点是把整个攻击链路的分析和风险讲清楚。
4. 内网渗透测试实操流程解析
4.1 测试前的准备:授权、范围与规则
内网渗透测试和任何安全测试一样,第一原则永远是“有授权才动手”。没有授权的内网渗透测试,不管技术多好,都是违法行为,这不仅是职业操守问题,更是法律红线。实操之前,一定要拿到书面授权,并且明确测试范围,包括哪些网段可以测、哪些主机不能碰、哪些时间窗口允许操作。
测试规则的约定也很重要。我一直建议在项目启动前和客户确认四件事:
一是数据安全边界,测试过程中发现的高度敏感数据(如明文密码、个人隐私)不要拷贝出测试环境,记录在报告里即可。
二是业务影响容忍度,渗透测试过程中可能会对业务造成影响,比如扫描导致服务异常、测试账号被锁定,需要提前约定好哪些操作需要事先报备。
三是应急响应联系人,测试过程中如果发现真实攻击痕迹,要有明确的对接人,避免“自己人打自己人”的乌龙事件。
四是报告交付物的格式要求,不同客户对报告的要求完全不一样,有的需要描述性报告,有的需要整改建议,这一点在进场前就要对齐。
4.2 完整攻击链路:从边界入口到域控
一个典型的内网渗透测试项目,攻击链路大致可以分成五个阶段,这里我把每个阶段的关键动作和标志性结果列出来:
| 阶段 | 核心动作 | 标志性结果 |
|---|---|---|
| 边界突破 | 对公网IP段做资产发现、指纹识别、漏洞利用 | 拿到一台主机权限,能够进入内网网段 |
| 内网探测 | 网段存活扫描、端口服务识别、资产梳理 | 掌握内网拓扑、确认域控和关键服务器 |
| 权限提升 | 本机提权、获取管理员权限 | 本地管理员权限或域用户权限 |
| 横向移动 | 凭据收集、远程执行、批量横向 | 控制多台主机,向域控靠近 |
| 域控拿下 | 高权限凭据利用、域控权限获取 | 域级管理员权限,证明内网防线失效 |
这五个阶段不是固定顺序,实战中经常会在“横向移动”和“权限提升”之间反复循环,拿到新的凭据后,再回头扩大信息收集的范围。整个过程的控制原则是:每一步操作都要有明确目的,每一次扫描都要能回答“为什么扫这里”。
4.3 一个典型场景的演练:拿到Webshell之后的路
为了把前面的理论串起来,我们模拟一个常见场景:某企业的办公网段为172.16.1.0/24,内部有ERP系统、文件服务器、OA系统。外网边界有一台Web服务器,跑着某CMS系统,渗透测试通过CMS的已知漏洞拿到了WebShell权限。
此时,攻击者的处境是:拥有一台位于DMZ区主机的WebShell权限,运行身份是IIS的应用程序池账户,权限很低,网络访问策略限制了DMZ区只能访问内网的特定端口。
基于这个场景,后续的实操链路可能是这样:
第一步,确认当前主机的网络位置和权限边界。执行 ipconfig /all 查看IP和DNS信息,这也顺便确认了出网链路。执行 whoami /groups 查看当前用户是否有内网访问权限,执行 systeminfo 看补丁情况,为提权做准备。
第二步,判断能否直接访问内网网段。如果DMZ区能访问内网的445端口,那就可以直接开始横向移动的尝试;如果只能访问特定端口,就要先做端口转发,打通进入内网的通道。
第三步,提权拿系统权限。通过系统补丁漏洞或服务配置错误进行提权,从IIS应用程序池账户提升到系统权限。这一步完成后,才有能力读取管理员密码哈希或内存中的明文口令。
第四步,收集凭据,准备横向移动。用工具抓取内存中缓存的凭据,如果有明文口令,直接用来尝试登录内网的其他服务器;如果只有哈希,则考虑哈希传递的方式。对办公网段172.16.1.0/24做一次存活扫描,锁定内网关键服务器。
第五步,逐步逼近域控。通过收集到的管理员凭据登录OA服务器,发现OA服务器已加入域,而且本地管理员密码和域管理员密码相同,这种情况下基本上等于直接拿到了整个域的访问权。接着在域控上验证高权限账户,整个内网的核心防线就此突破。
这个过程看似顺利,但在真实环境中每一步都可能遇到阻碍,比如杀毒软件拦截、日志审计触发告警、目标主机做了加固策略等。正因如此,每一项技术都要准备“备选方案”,比如抓取凭据的方式至少准备两套、端口转发的工具至少会两种,这样在遭遇对抗时才有周旋的余地。
5. 常见问题与排查技巧实录
5.1 内网渗透中的经典“翻车”场景
这几年我自己做项目带新人,发现内网渗透里有一些错误是高频出现的,几乎每期培训都会有人踩。记录下来,当成避坑指南帮大家省些时间。
第一个坑是扫描拖垮内网。我曾经见过一个新手对一个大网段跑了全端口全速扫描,直接把对方的交换机CPU打满了,业务系统卡了十分钟。这个事故带来的教训是:内网渗透的第一步不是扫描,而是先判断网络规模、业务重要性,然后分级扫描。办公网可以用较快的速率,生产网和数据库区域必须用低速扫描,必要时宁可舍弃一些信息,也不能把业务搞挂。
第二个坑是凭据使用不当导致账号锁定。在密码喷洒的时候,有人会用同一密码去尝试大量账户,结果触发了域控的账号锁定策略,导致整个网段的用户都登录不了。这种事故在授权测试中非常严重,因为它直接影响业务。规避方法很简单:在测试前先确认域账户锁定策略的阈值,如果锁定阈值是5次,那每次尝试都控制在阈值以下,宁可多跑几轮,也不能一次扫猛了。
第三个坑是不会看日志。很多安全问题在事后复盘的时候,日志里的线索都是明摆着的,但当时就是没看懂。比如安全事件日志ID4625表示登录失败,4624表示登录成功,4672表示特殊权限登录成功。如果内网里有一台主机尝试被大量登录失败,这本身就是异常信号。做内网渗透的人,不仅要会发起攻击,更要会看防守方的日志,这样才能理解自己的操作会不会被发现。
第四个坑是工具落地被查杀。很多开源渗透工具在内网新一代终端上跑不动,原因很简单:杀毒软件和EDR的查杀特征已经很成熟。解决办法不是去研究免杀,而是在测试早期就用“能过检的工具”和“原生的技巧”组合。比如说,Windows自带PowerShell可以做很多事情,不必一上来就传exe;Linux自带的 curl、wget、perl 也能完成不少操作。越是环境自带的能力,越少触发告警。
第五个坑是信息收集不完全就动手。最常见的情况是,只收集了当前主机的基本信息,没有看内网中其他主机的开放端口,就急着去打域控,结果在域控上碰了一鼻子灰,还暴露了踪迹。内网渗透是一场信息战,信息收集越充分,后面对抗的容错率就越高。
5.2 问题排查速查表
内网渗透的实战过程中,有些问题是反复出现的。为了方便查阅,我整理了一个速查表,把典型问题的现象、可能原因、排查思路列在一起,实操的时候可以直接对照。
| 问题现象 | 可能原因 | 排查思路 |
|---|---|---|
| 内网扫描出网慢 | 网段范围大或存在网络限速策略 | 先缩小扫描范围;使用低并发多线程;分网段分时间段扫描 |
| 某些端口看着开放,连接却失败 | 防火墙策略仅允许特定IP访问 | 确认目标主机ACL策略;尝试从已控主机发起连接 |
| 域用户查不到域内信息 | 当前账户权限不足,或本地策略限制了查询 | 检查当前账户是否真的是域用户;尝试以域用户身份运行命令 |
| 抓取的哈希无法用于远程登录 | 被拉黑的账户或系统开启了受限管理 | 用其他管理员账户尝试;确认目标是Win10/Server2016以上版本并启用Credential Guard |
| 计划任务执行无回显 | 执行权限过低或被杀软拦截 | 先确认任务创建成功;换成写入文件再读取结果的方式 |
| 内网HTTP代理不通 | 代理配置错误或目标端口未被允许 | 检查代理监听地址和端口;看目标是否开放出网访问 |
| 攻击过程中突然掉线 | 目标主机扫描或测试行为触发了监控 | 冷静间隔一段时间,尝试从备用通道重新建立连接 |
这张表没办法覆盖所有情况,但提醒大家一个底层原则:内网渗透的排查,不是靠猜,而是靠日志和状态。每做一个操作之前,都问自己一句“如果这个操作失败了,我去哪里查原因”,提前把排查路径准备好,就算真出了状况也不会手忙脚乱。
5.3 被忽视的“后渗透验证”:从攻击路径到防护建议
很多内网渗透测试做完,报告一交就觉得功成身退。但真正的价值输出,其实是最后一步:把攻击路径转化为防护建议。这步做得好不好,直接决定了客户觉得你是在“炫技”还是在“解决问题”。
我一般会在报告的每个关键节点上,都写出两个内容:一是攻击者为什么能成功,二是防守方应该在哪个环节切断这条路径。举例来说,如果攻击者是通过“弱口令+横向移动”打穿了整个内网,那防护建议一定不是“打补丁”这种空话,而是明确要改哪些口令策略、哪些账号需要从管理员组移除、哪些共享端口需要做ACL限制。
有没有体系化的参考框架?可以借鉴Cyber Kill Chain的思路,把内网渗透的每个阶段和相应的防护手段对应起来。侦察阶段对应网络流量审计和端口监控;武器化阶段对应文件完整性监控和进程白名单;横向移动阶段对应账户异常登录检测和管理员组变更审计;影响阶段对应数据备份和业务连续性计划。这样写出来的报告,才真正有落地价值。
做内网渗透测试这么些年,我最大的体会是:这个领域看起来很技术、很酷炫,但真正拉开差距的,往往不是某个工具用得有多溜,而是做事情的方法够不够系统。把信息收集做扎实,把每一步操作的理由想清楚,把可能的风险提前预判到,这种“笨功夫”才是内网渗透里最值钱的能力。
最后再分享一个小技巧,也是我带项目时每次都会强调的:每次做完一个内网渗透测试,都别急着交付报告,先把自己从入口到最终目标的整个操作流程回放一遍,用防守方的视角想想“如果我看到了这样的流量,会不会引起警觉”。用这种攻防互换的方式去复盘,你的内网渗透水平会进步得比想象中快得多。
