
1. 内网信息收集之前先定边界再谈命令1.1 授权范围决定了你能做什么做内网安全评估这些年我最大的一个体会是信息收集这条线最容易被误解的就是拿到命令就能用。刚入行的时候我也犯过这个错误觉得手里攒了一大堆命令到哪个环境都能拿出来敲一遍结果后来参与正规的安全评估项目才真正理解——所有内网信息收集手段必须建立在明确授权的前提下。无论是渗透测试、红蓝对抗还是等保测评里的漏洞扫描每一类操作都要有书面授权而且要清楚授权范围是哪个网段、哪批资产、允许用哪些手段。超出授权边界的命令哪怕只是多扫了一个IP也可能给自己和项目方带来巨大麻烦。所以我想先把话说在前面这篇文章里的命令适用场景是你在受委托的安全评估项目里或者是在自己负责维护的网络环境中做资产梳理与安全检查。如果在客户现场开工前务必拿到授权文档、确认评估范围并且按照项目管理要求保留完整操作记录。这不是走流程而是真正保护自己的职业安全。见过太多因为顺手扫了一下客户没授权的一台机器导致项目中断的案例这种低级错误真的会毁掉一个测试工程师的前途。1.2 信息收集到底在收什么三个层级一条主线我习惯把内网信息收集分成三个层级。第一个层级是网络层主要回答内网长什么样包括本机IP配置、子网掩码、网关、路由走向、DNS解析关系、哪些主机在线。第二个层级是主机层主要回答这台机器是什么角色包括操作系统类型与版本、补丁情况、主机名、当前用户权限、是否加入域、工作组信息。第三个层级是服务层主要回答机器上开了哪些端口和服务包括端口开放状态、服务指纹、版本信息、远程管理入口。这三个层级不是割裂的而是层层递进的关系。网络层的判断决定下一步该探测哪些主机网段主机层的判断决定该重点看哪些服务类型服务层的指纹信息又反过来验证主机层的猜测。很多人看信息收集方法论的文章觉得命令太杂记不住就是因为缺少这条主线。先在心里记住网络层→主机层→服务层这个递进关系再回头看具体命令逻辑会顺很多。1.3 命令执行环境先分清Windows还是Linux还要多说一句关于在哪台机器上执行命令的问题。很多命令参考手册默认你坐在一台Linux攻击机前面操作但真实的内网评估过程中你能拿到的入口主机往往是Windows可能是办公终端、跳板机、应用服务器。所以下面我的整理方式不是按攻击机和目标机来分而是按我当前手上是什么系统来分Windows主机的排查命令、Linux主机的排查命令以及两种系统都能用的网络层命令。这样做的好处是你在现场拿到什么环境翻到对应段落就能直接用不用先在一堆命令里找哪条适合我现在这台机器。2. 网络层命令三步把内网拓扑摸清楚2.1 本机网络指纹ipconfig 与 ifconfig 的完整解读拿到一台主机之后我执行的第一条命令永远是查看本机网络配置。Windows下用ipconfig /allLinux下用ifconfig或ip addr。多数人敲完命令看一眼IP就关了窗口实际上这里面的关键信息远不止IP地址。先看Windows的ipconfig /all输出。除了IPv4地址、子网掩码、默认网关这三件套之外我会优先确认DHCP是否启用。如果输出里写着DHCP 已启用 : 是说明这台机器通过DHCP动态获取地址它的IP可能是变动的如果写着DHCP 已启用 : 否则是静态IP这种机器通常承担固定的业务角色比如文件服务器、打印服务器、某个开发环境。DNS服务器列表同样值得留意内网里的DNS服务器往往同时承担域控制器角色把这个IP记下来后面主机层收集时很可能用得上。主机名也别忽略。ipconfig /all第一行就是主机名比如app-server-01、file-srv、db-test这种命名格式一眼就能看出机器功能定位。很多公司的命名规范很有规律同一批次部署的机器命名风格一致这对判断你是落在哪一类资产上有直接帮助。Linux这边我更喜欢用ip addr而不是ifconfig原因是新版系统中ifconfig可能没有默认安装而ip命令几乎一定存在。ip addr输出里的inet字段是IP地址后面带/24这种前缀长度可以直接换算子网范围。再看ip route或者route -n确认默认网关指向哪以及本机是否存在额外的静态路由。这里我的习惯是顺手把本机所有网卡都看一遍因为有些机器有多块网卡分别连接办公网和管理网多网卡本身就是一个值得记录的资产特征。2.2 连通性测试与ARP表判断内网哪些主机在线网络配置看完下一步是探活。最原始也最稳定的手段是 ping但用 ping 循环扫一个网段很费时间而且容易触发目标设备的日志告警所以我的做法分两步走。第一步先探活几个关键地址。ping 一下网关确认本机到网关的链路正常再 ping 一下内网DNS服务器确认解析链路正常。这两个地址如果都不通问题很可能出在基础网络配置上后面做再多探测都没什么意义。如果通了说明当前主机跟外界的通信链路是完整的可以继续往下走。第二步查看ARP缓存。Windows 执行arp -aLinux 执行ip neigh会列出本机近期通信过的设备IP和MAC地址。ARP缓存在没有主动扫描的情况下等于一份天然的被动情报——能出现在这里的IP说明它刚刚和当前机器发生过通信至少是一个真实存在的活跃地址。MAC地址的前六位是厂商标识可以查OUI库反查设备厂商比如是Intel网卡、Realtek网卡还是某个网络设备的虚拟MAC。有时候你会在ARP表里发现一些扫描工具都扫不到的设备比如打印机、无线AP管理端口、物联设备网卡这些资产往往被运维人员遗忘但恰恰是内网评估中需要记录的对象。有一点需要提醒ARP缓存会老化不是一次就能看全所有设备的。我的习惯是隔几分钟查一次并且在这期间主动访问几个常见的内网地址让系统产生新的通信记录这样ARP表里的条目会更完整。2.3 路由表与DNS理解内网分段和解析关系如果说IP和子网是静态的地图那路由表和DNS解析就是活地图。通过它们才能理解内网不同网段之间是怎么打通的。Windows下route printLinux下ip route。重点看两类条目第一是默认路由也就是0.0.0.0/0条目它指向的网关决定对外通信的出口第二是非直连网段的路由条目。如果一台本应在办公网里的主机路由表里却写着通往某个内网网段的静态路由那这台机器非常可能承担跨网段通信的角色甚至就是一台跳板机或者边界设备。这个线索对理解内网拓扑极有价值我通常会单独记下来。DNS解析这边Windows和Linux都可以用nslookup。先用nslookup无参数执行查看本机当前使用的DNS服务器再指定内网DNS服务器解析几个已知主机名验证解析是否正常。深一层还可以用nslookup -typeSRV _ldap._tcp.域名这类查询方式了解域内服务的分布不过这类查询要用在已经确认处于授权范围内的场景里而且输出信息可能比较多需要结合目标环境的属性来判断是否必要。常规内网评估里只要搞清楚DNS服务器地址和基本解析关系就够了重点是记下哪些主机名解析到哪些网段地址这个映射关系直接反映内网资产的组织方式。3. 主机层命令从操作系统信息里挖线索3.1 Windows 主机信息收集systeminfo 的读法到了具体主机上Windows环境我第一个执行的命令是systeminfo。它一次性输出操作系统版本、补丁级别、主机名、域信息、网卡信息、系统启动时间等一大串内容是Windows主机信息收集的基石命令。systeminfo输出很长但真正关键的是这几个字段。第一个是OS 名称和OS 版本判断系统是Windows 10、Server 2016、Server 2019还是其他版本不同的系统版本对应不同的已知漏洞和应对思路这个信息在后续评估阶段直接决定关注点。第二个是系统制造商和系统型号如果显示VMware、VirtualBox、KVM相关字样说明这台机器是虚拟机如果是Dell、HP、联想这类实体机型就是物理机。虚拟机还是物理机的判断决定了资产重要性的不同权重。第三个是系统启动时间启动时间距离现在越久说明这台机器越可能是长期运行的常驻服务设备这类设备通常不建议在评估中做任何可能影响稳定性的操作。第四个是域:字段如果显示一个真正的域名而不是WORKGROUP说明机器已加入域环境后面的思路要切换到域环境视角。第五个是网卡信息这里会列出多个IP地址和DNS后缀注意区分哪些IP属于业务网段、哪些属于管理网段管理网段地址往往是后续进一步查看的重点。systeminfo的输出真的非常长如果滚动查看很容易漏掉前半部分的内容。我的习惯是执行systeminfo sysinfo.txt把完整结果保存到文件再打开文件慢慢看后续整理报告时直接翻记录就行。同样的思路也适用于其他输出比较多的命令凡是结果可能超过一屏的都建议重定向保存。3.2 Linux 主机信息收集uname 与系统文件Linux主机上的第一站是uname -a它能显示内核版本、主机名、机器架构。但有一个很容易踩的坑内核版本并不等于发行版本。比如同样是CentOS 7.9和Ubuntu 20.04内核版本可能很接近但包管理和服务配置差异巨大。所以执行完uname -a后我还会查看/etc/os-release文件确认当前系统到底是CentOS、Ubuntu、Debian、Rocky还是其他发行版以及具体的主版本号。再往下细化可以查看这些文件/proc/cpuinfo看CPU型号和核心数/proc/meminfo看内存总量/etc/hostname看主机名/etc/resolv.conf看DNS配置。这里我最喜欢也最容易被人忽略的是/etc/fstab它记录了系统启动时自动挂载的文件系统能显示本地磁盘分区、文件系统类型也能看到是否有NFS这类远程网络存储挂载。如果发现一台Linux服务器挂载了远程NFS目录说明它和存储网络有关系资产重要性和评估切入点都会不一样。除了静态信息运行状态也值得关注。uptime看系统运行时长和负载w看当前登录用户和他们在干什么last看历史登录记录。尤其是在评估场景下了解谁在这台机器上有过登录行为可以辅助判断业务角色和协作关系也方便你向项目方确认这些账号是否属于授权范围内的测试对象。注意登录记录属于用户行为痕迹查看之前同样先过一遍授权边界。3.3 当前用户与权限视角whoami、id 的细节查看当前用户信息Windows和Linux都有whoami但输出内容和信息量差别很大。Windows下执行whoami默认只输出账号名如果是域用户会显示成域名\用户名的格式。加上/all参数之后输出内容会详细很多能看到当前用户所属的所有本地组和域组。这一步非常关键因为不同的组成员关系直接决定了你在当前系统上的操作能力范围。比如是否属于Administrators本地管理员组、是否属于Remote Desktop Users远程桌面用户组、是否属于域管理员相关组。这些信息在Windows主机的权限状态判断上是硬指标看一眼就明白头上的权限天花板在哪里。Linux下用的是id命令它会输出当前用户的uid、gid和所属的组列表。单独看一条id可能没什么感觉但配合/etc/sudoers文件里对当前用户的 sudo 权限配置就能判断这台机器上能走多远。另外history命令可以查看当前用户最近执行过的命令记录里面往往藏着之前管理员调试这台机器时留下的蛛丝马迹比如安装过什么软件、配置过什么服务、访问过哪些目录。这些历史痕迹在评估中属于高价值参考但同时也是很敏感的操作记录查看前必须确认自己处在授权评估环境。4. 服务层收集内网资产指纹库是怎么建起来的4.1 netstat最常用的连接与端口查看命令服务层信息收集我的第一个命令永远是netstat。它在Windows和Linux下都有参数略有不同但核心逻辑一致。Windows下我常用netstat -ano。-a 显示所有连接和监听端口-n 不做反向域名解析直接显示IP和端口数字这样速度快、输出精简-o 显示进程PID。拿到PID之后再用tasklist或任务管理器反查这个PID对应的进程名就能把端口和程序关联起来。这一步是端口→服务→资产绑定关系的关键。比如看到某个IP的3389端口处于LISTENING状态说明这台机器开了远程桌面看到8080、8888这类高位端口在监听用PID反查多半是Tomcat、Nginx或者其他Web服务。Linux下netstat和ss都能用我更推荐ss -tlnp。ss是新一代网络工具速度比netstat快输出也更规整。-t 只看TCP连接-l 只看监听状态-n 不做解析-p 显示进程名和PID。一条命令下来所有监听的端口和对应进程一目了然。另外ss -s可以看全局连接统计不在监听状态而是统计TIME_WAIT、ESTABLISHED、SYN_SENT等连接数量用来判断这台主机是否出现大量外连或者异常连接对发现问题很有帮助。4.2 轻量端口探测telnet 与 nc 的适用场景当你不能确定目标主机是否开放某个端口时端口连通性测试是必要的补充手段。在Windows的命令提示符里执行telnet 目标IP 端口如果很快进入一个空白界面说明端口开放如果提示无法打开到主机的连接或者直接退回到命令提示符说明端口不通或防火墙拦截了。不过现在Windows系统默认不安装telnet客户端经常提示telnet 不是内部或外部命令。如果你要用脚本化方式做端口检查我更推荐PowerShell的Test-NetConnection用法是Test-NetConnection -ComputerName 192.168.1.10 -Port 80输出结果里会明确显示TcpTestSucceeded : True清晰明了也方便写进自动化脚本。Linux环境下ncnetcat比 telnet 更灵活。我常用的形态是nc -vz -w 3 目标IP 端口范围-v 显示详细信息-z 表示只做端口检查不发送数据-w 3 是超时3秒。这条命令可以快速探测一段端口区间比如nc -vz -w 3 192.168.1.10 1-1024就是探测目标机器1到1024端口的开放情况。但我要多说一句这种批量端口探测行为在对方有入侵检测设备的环境里会产生大量连接日志很容易触发告警。所以使用之前一定要确认授权范围并且控制探测频率和范围不要在非授权场景下乱敲。4.3 使用 nmap 做端口扫描时的合规和细节服务层信息收集绕不开nmap。nmap 功能强大但对内网信息收集这个阶段来说我通常只用它做两件事存活主机发现和端口服务识别。存活主机发现常用形态是nmap -sn 192.168.1.0/24。-sn 参数只做主机发现发送Ping请求和ARP请求不对端口进行扫描产生的流量较小适合一开始的大范围网段摸底。跑完一轮你会得到一张哪些IP是活着的清单后面的扫描都基于这份清单展开。端口服务识别我常用nmap -sT -sV -p 1-1024 目标IP或者用-sS替换-sT。-sT 是TCP全连接扫描-sS 是SYN半开扫描-sV 是服务版本探测。这里有个细节版本探测会向目标端口发送一些特定的探测数据行为比普通端口扫描更明显所以在特别敏感的网络环境里做版本识别要格外谨慎确认授权范围内确实包含这项操作。关于 nmap我有几条实测经验。第一小范围精确扫描比大范围粗糙扫描有价值得多——先扫描存活主机清单里的地址不要一上来就对整个网段做全端口扫描否则时间成本和告警数量都会爆炸。第二扫描结果一定要保存-oN result.txt保存普通文本格式-oX result.xml保存XML格式方便后续脚本处理。第三不要一上来就扫全端口先用默认常用端口列表快速摸底再根据业务类型挑重点端口做二次扫描。很多新手一拿到nmap就nmap -sS -p-全端口扫结果跑一两个小时只得到一份又大又难分析的报告性价比非常低。5. 从命令到报告把信息收集结果真正用起来5.1 信息收集记录表的结构化思路命令执行完如果只是把终端输出截个图保存信息收集只能算完成了一半。另一半同样重要的工作是整理成结构化记录让后续评估阶段能直接引用也让项目团队其他人能看懂你收集到了什么。我的习惯是整理一张内网资产清单表每一行代表一台主机或一项服务主要字段包括IP地址、主机名、操作系统、开放端口、主要服务、域名或工作组、备注。如果主机数量比较多我还会加上一列资产重要性评级把核心业务服务器标记为高办公终端标记为中阶段性的测试设备标记为低。这张表既是我做进一步评估的工作底稿也是最终测试报告的重要数据来源。整理过程本身有二次验证的作用。你经常会发现有些信息对不上比如主机名显示是某台文件服务器但端口列表里看不到SMB相关端口或者系统信息显示装了数据库服务但端口探测里找不到对应端口。这时候通常有三种可能防火墙拦截了探测请求、服务实际没启动、或者端口是动态端口。不要跳过这些矛盾点它们往往能帮你发现真正重要的线索。5.2 实测经验信息收集阶段的几个常见误区最后聊几条我在这一阶段踩过坑之后沉淀下来的经验。第一条命令敲得越多不代表收集越充分。信息收集的价值在于组合分析而不在命令数量。有针对性的端口扫描加系统信息确认比盲目的大网段全端口扫描更有价值也更安全。真正有经验的工程师往往用十几条命令就能把一台主机的画像勾勒清楚。第二条执行命令的同时要注意操作留痕。在客户现场做完评估过一段时间对方安全团队可能会问你某条命令当时为什么执行。所以我在工作目录里会保留一份简短的命令执行日志按时间顺序记录执行了哪些命令、目的是什么配合测试报告一起归档。这既是专业表现也是保护自己。第三条别忘了清理临时文件。信息收集阶段经常会在目标主机或跳板机上产生临时文件比如sysinfo.txt、result.txt这类扫描结果文件。这些文件在转存到工作机之后要及时从现场环境清理掉。这既是评估规范的要求也是测试人员的职业操守尤其是在客户现场留下的每一份文件都是潜在的信息泄露风险。注意文章里出现的所有命令都应当在已获得明确授权的内网安全评估、渗透测试或自有资产管理环境中使用。未授权环境下执行这些命令可能违反法律和合同约定这一点请务必牢记。说实话内网信息收集这件事真正拉开差距的从来不是命令记忆量而是对信息的理解深度。把网络层、主机层、服务层三个视角结合起来看问题很多判断会自然清晰起来。这也是我最想对正准备踏入安全评估方向的新手强调的一点命令是工具理解才是核心竞争力。