news 2026/7/29 13:36:43

Windows内网信息收集:从基础命令到自动化脚本的防御实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows内网信息收集:从基础命令到自动化脚本的防御实践

1. 项目概述:内网信息收集的核心价值与边界

在任何一个稍具规模的企业或组织的内部网络中,都运行着成百上千台Windows计算机。对于系统管理员和安全工程师而言,全面、准确地掌握这些资产的信息,是进行日常运维、漏洞修复、策略合规性检查乃至应急响应的基石。这就像一位船长必须清楚自己船队的每一艘船的位置、状态和载货情况。我们今天要深入探讨的“内网信息收集”,正是这样一个旨在系统性地盘点、梳理和记录内网Windows主机所有关键信息的实践过程。

它的核心价值在于“看见”。在安全领域,你无法保护你看不见的东西。一次成功的攻击往往始于攻击者对目标内网细致入微的信息刺探。同样,一次有效的防御也始于防御者对自身资产的清晰认知。因此,这个项目并非一个攻击性工具的简单罗列,而是一套系统性的、以防御和资产管理为出发点的技术方法学。它涵盖了从主机基础信息、用户与权限、网络配置、运行服务与进程,到已安装软件、计划任务、共享资源、日志痕迹等方方面面。掌握这些方法,意味着你能够构建起一张动态的、详细的内网资产地图,无论是为了加固自身防线,还是在进行授权的渗透测试(如红队评估)时模拟攻击者的侦察行为,都至关重要。

需要明确的是,本文所讨论的所有技术、命令和工具,其正当用途仅限于授权的安全评估、内部资产审计和合法的系统管理。任何未经授权对他人或组织网络进行信息收集的行为,都可能违反法律法规。我们的目标是提升安全从业者的“看见”能力,从而更好地构建防御。

2. 信息收集的总体思路与分层模型

进行内网信息收集,最忌讳的就是毫无章法地运行一堆命令,然后面对海量的输出不知所措。一个高效的收集过程应该是结构化、分层级的。我通常将其分为四个层次,由表及里,由基础到深入。

2.1 第一层:主机自身信息画像

这是收集的起点,目标是回答“这是一台什么样的电脑?”这个问题。我们需要获取的信息包括:

  • 系统标识:计算机名、所属工作组或域。
  • 系统配置:操作系统版本、架构(x64/x86)、安装日期、最后启动时间。
  • 硬件概要:CPU型号与核心数、物理内存总量、磁盘空间与分区情况。
  • 关键位置:系统目录路径、用户目录路径、临时文件夹路径。

这一层的信息最为基础,也最容易获取,它们为后续更深入的收集提供了上下文环境。例如,知道了操作系统是Windows Server 2016还是Windows 10,会直接影响你后续查找漏洞和配置错误的方向。

2.2 第二层:身份、权限与网络配置

在明确了“谁”之后,接下来要弄清“谁在用”以及“如何连接”。这一层聚焦于访问控制与连通性。

  • 用户与组:当前登录用户、本地用户列表、本地管理员组成员、最近登录过的用户历史。
  • 网络接口:所有网卡的IP地址、子网掩码、默认网关、DNS服务器、MAC地址。
  • 网络连接:当前活跃的网络连接(TCP/UDP),包括本地和远程地址、端口、状态,这对于发现异常外联或内部横向移动迹象非常关键。
  • 防火墙状态:Windows防火墙是否启用,有哪些入站/出站例外规则。

注意:在域环境中,用户和组的信息收集会扩展到域层面,这通常需要相应的域用户权限。本地收集是基础,域内收集是进阶。

2.3 第三层:运行态与持久化配置

这一层关注系统正在“做什么”以及被设定为“定期做什么”。这是发现恶意活动或配置问题的关键。

  • 进程与服务:所有正在运行的进程列表及其路径、所有者、命令行参数;所有已安装的系统服务及其状态(运行中/已停止)、启动类型(自动/手动/禁用)、可执行文件路径。
  • 自启动项:注册表(RunRunOnce等)、启动文件夹、计划任务、服务中所有配置为开机或定时自动启动的程序。
  • 计划任务:所有已创建的计划任务的详细配置,包括触发器、执行的操作(运行的程序)、执行身份等。
  • 已安装软件:通过注册表和Win32_ProductWMI类枚举系统内安装的所有应用程序及其版本、安装时间。

2.4 第四层:敏感数据与痕迹

这是最深入的一层,目标是发现可能存储敏感信息的位置和系统留下的各种日志痕迹。

  • 文件与共享:本地各磁盘的目录结构浏览(寻找特定名称的文件夹如backupconfpassword等)、所有设置的网络共享列表及其权限。
  • 密码相关痕迹:保存的RDP连接凭据、浏览器中保存的密码(需特定工具且涉及伦理法律,仅限授权测试)、各类配置文件(如web.config*.ini*.env)中的明文密码。
  • 日志分析:安全日志(登录/注销、特权使用)、系统日志、应用程序日志。虽然实时分析日志量很大,但收集关键日志的存储位置和筛选方法本身是信息收集的一部分。

这个分层模型就像一个检查清单,确保你的收集工作没有遗漏。在实际操作中,我们通常使用一系列命令和工具来逐层获取这些信息。

3. 核心命令与工具实战解析

我们将主要依赖Windows自带的强大命令行工具,辅以一些轻量级、免安装的Sysinternals工具集来完成绝大部分收集工作。所有操作均假设你已在目标主机上获得了至少一个命令行会话(如CMD或PowerShell)。

3.1 基础信息收集命令

1. 系统信息 (systeminfo)这是你的“起手式”。一条命令能获取大量一、二层信息。

systeminfo

这条命令的输出包括主机名、OS名称、版本、制造商、系统启动时间、物理内存总量、网卡列表等。为了更聚焦,可以配合findstr进行过滤:

systeminfo | findstr /B /C:“OS Name” /C:“OS Version” /C:“System Boot Time” /C:“Total Physical Memory” /C:“Host Name”

2. 网络配置 (ipconfignetstat)ipconfig /all是查看所有网络接口详细配置(IP, 网关, DNS, MAC)的标准命令。netstat用于查看网络连接和监听端口,是发现异常连接的利器。

# 查看所有活动的TCP连接,并显示进程ID(需要管理员权限) netstat -ano | findstr ESTABLISHED # 查看所有监听端口 netstat -ano | findstr LISTENING

-a显示所有连接和监听端口,-n以数字形式显示地址和端口(更快),-o显示关联的进程ID。结合任务管理器或tasklist命令,你可以定位到是哪个程序在对外通信。

3. 用户与权限 (whoaminet usernet localgroup)

# 当前用户身份 whoami whoami /priv # 查看当前用户的特权 whoami /groups # 查看当前用户所属的组 # 枚举本地用户 net user # 查看指定用户详情 net user [username] # 枚举本地管理员组 net localgroup administrators

4. 进程与服务 (tasklistscwmic)

# 查看进程列表 tasklist /v # 详细信息模式 tasklist /svc # 显示进程与服务关联 # 使用WMIC获取更详细的进程信息(包括路径) wmic process get name,processid,executablepath,commandline # 查看服务 sc query state= all # 查看所有服务 sc qc [service_name] # 查看某个服务的详细配置

5. 计划任务 (schtasks)

# 查询所有计划任务(格式较友好) schtasks /query /fo LIST /v

6. 已安装程序 (wmic或 PowerShell)

# 使用WMIC wmic product get name,version

实操心得wmic product get命令只列出通过Windows Installer安装的程序,可能会漏掉很多。更推荐使用PowerShell命令Get-WmiObject -Class Win32_Product或直接查询注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall和其下的Wow6432Node(32位程序)。

3.2 PowerShell:更强大的信息收集引擎

对于Windows 7及以上系统,PowerShell是更现代、更强大的选择。你可以将多条命令组合成一个脚本,一次性收集所有信息并输出到文件。

一个简单的收集脚本框架如下:

# 定义输出文件路径 $reportPath = “$env:USERPROFILE\Desktop\SystemInventory_$(Get-Date -Format ‘yyyyMMdd_HHmmss’).txt” “=== 系统信息收集报告 $(Get-Date) ===`n” | Out-File -FilePath $reportPath # 1. 系统信息 “`n[1] 系统信息:” | Out-File -FilePath $reportPath -Append systeminfo | Out-File -FilePath $reportPath -Append # 2. 网络信息 “`n[2] 网络适配器配置:” | Out-File -FilePath $reportPath -Append Get-NetIPConfiguration -All | Out-File -FilePath $reportPath -Append “`n[3] 网络连接:” | Out-File -FilePath $reportPath -Append netstat -ano | Out-File -FilePath $reportPath -Append # 3. 用户信息 “`n[4] 当前用户及特权:” | Out-File -FilePath $reportPath -Append whoami /all | Out-File -FilePath $reportPath -Append “`n[5] 本地用户:” | Out-File -FilePath $reportPath -Append Get-LocalUser | Format-Table -AutoSize | Out-File -FilePath $reportPath -Append “`n[6] 本地管理员组成员:” | Out-File -FilePath $reportPath -Append Get-LocalGroupMember -Group “Administrators” | Out-File -FilePath $reportPath -Append # 4. 进程与服务 “`n[7] 运行进程(带路径):” | Out-File -FilePath $reportPath -Append Get-WmiObject Win32_Process | Select-Object Name, ProcessId, ExecutablePath, CommandLine | Format-Table -AutoSize | Out-File -FilePath $reportPath -Append “`n[8] 系统服务:” | Out-File -FilePath $reportPath -Append Get-Service | Where-Object {$_.Status -eq ‘Running’} | Select-Object Name, DisplayName, Status, StartType | Format-Table -AutoSize | Out-File -FilePath $reportPath -Append # 5. 自启动项 “`n[9] 自启动程序(注册表):” | Out-File -FilePath $reportPath -Append Get-ItemProperty -Path “HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”, “HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run” -ErrorAction SilentlyContinue | Out-File -FilePath $reportPath -Append # 6. 计划任务 “`n[10] 计划任务:” | Out-File -FilePath $reportPath -Append Get-ScheduledTask | Where-Object {$_.State -ne ‘Disabled’} | Select-Object TaskName, TaskPath, State | Format-Table -AutoSize | Out-File -FilePath $reportPath -Append Write-Host “收集完成,报告已保存至:$reportPath”

这个脚本将关键信息输出到桌面一个带时间戳的文本文件中,便于归档和分析。你可以根据需要增删模块。

3.3 Sysinternals 工具集:瑞士军刀

微软Sysinternals套件中的工具在内部信息收集中不可或缺,它们通常不需要安装,直接运行即可。

  • PsExec:最著名的工具之一,可用于在远程系统上执行命令。但在非授权环境中使用需极度谨慎,因为它功能强大。
  • PsInfo:类似于systeminfo,但能以更灵活的格式输出,并支持远程查询。
  • Autoruns:这是查看自启动项的“终极工具”。它比检查注册表和启动文件夹全面得多,涵盖了几乎所有操作系统和应用程序设置自启动的位置(包括服务、驱动、计划任务、浏览器插件等)。图形界面和命令行版本(Autorunsc.exe)都有。
  • Process Explorer:增强版的任务管理器,可以查看进程的详细属性、加载的DLL、句柄、网络连接等,是分析可疑进程的神器。
  • TCPView:图形化的netstat,实时显示所有TCP和UDP端点,并可以方便地关闭连接或结束进程。

注意事项:首次运行某些Sysinternals工具时,会弹出许可协议窗口,这在自动化脚本中可能造成中断。可以通过添加/accepteula参数来静默接受协议,例如:Autorunsc.exe /accepteula

4. 自动化收集脚本的构建与优化

手动运行命令只适用于单台或少量主机。面对成百上千台内网机器,自动化是唯一可行的路径。这里分享一个我常用的、更健壮的PowerShell自动化收集脚本思路。

4.1 脚本设计要点

  1. 错误处理:网络不通、权限不足、命令不存在等情况必须被妥善处理,避免整个脚本因一台主机失败而中止。使用Try-Catch-Finally块或检查命令的返回值($LASTEXITCODE)。
  2. 结果结构化:将结果输出为结构化的格式(如CSV, JSON)比纯文本更利于后续分析。PowerShell的Export-CsvConvertTo-Json命令非常好用。
  3. 并行执行:对于多台主机,使用Invoke-Command配合-ComputerName参数(需要WinRM启用)或Start-Job/ForEach-Object -Parallel(PS 7+)进行并行收集,大幅提升效率。
  4. 日志记录:脚本自身应有运行日志,记录开始、结束时间,以及每台主机的收集状态(成功、失败及原因)。

4.2 一个进阶脚本示例框架

这个脚本假设你已在域环境中有足够的权限,并且WinRM(PowerShell Remoting)已在目标主机上启用。

# 定义目标计算机列表(可以从文件读取,或通过AD查询获取) $computers = @(“PC01”, “PC02”, “SRV01”) # 或从文本文件读取:$computers = Get-Content -Path “C:\temp\computers.txt” # 定义收集函数 function Invoke-SystemInventory { param([string]$ComputerName) $result = [PSCustomObject]@{ ComputerName = $ComputerName CollectionTime = $null OSInfo = $null LocalAdmins = $null ListeningPorts = $null # ... 添加更多你需要的属性 Error = $null } try { $session = New-PSSession -ComputerName $ComputerName -ErrorAction Stop $result.CollectionTime = Get-Date # 通过会话远程执行命令 $result.OSInfo = Invoke-Command -Session $session -ScriptBlock { systeminfo | findstr /B /C:“OS Name” /C:“OS Version” } $result.LocalAdmins = Invoke-Command -Session $session -ScriptBlock { net localgroup administrators } $result.ListeningPorts = Invoke-Command -Session $session -ScriptBlock { netstat -ano | findstr LISTENING } # ... 执行其他收集命令 Remove-PSSession -Session $session } catch { $result.Error = $_.Exception.Message } return $result } # 并行收集(PS 7+) $collectionResults = $computers | ForEach-Object -Parallel { Invoke-SystemInventory -ComputerName $_ } -ThrottleLimit 10 # 控制并发数 # 输出结果到CSV $collectionResults | Export-Csv -Path “C:\Reports\Full_Inventory_$(Get-Date -Format ‘yyyyMMdd’).csv” -NoTypeInformation

这个框架展示了自动化、并行化和结构化输出的核心思想。在实际使用中,你需要根据网络环境和权限情况调整远程连接方式(WinRM, WMI over DCOM等)。

5. 信息整理、分析与报告呈现

收集到海量数据只是第一步,从中提炼出有价值的信息才是目的。

5.1 数据整理技巧

  • 标准化:确保所有主机的同类信息格式一致。例如,服务状态统一用“Running”/“Stopped”,避免混用“运行中”、“已停止”。
  • 关键信息提取:编写脚本或使用Excel/文本编辑器的查找功能,快速筛选出你关心的内容。例如:
    • 找出所有启动类型为“自动”但状态为“停止”的服务(可能配置错误或服务崩溃)。
    • 找出所有监听在非标准端口(如不是80, 443, 3389, 445等常见端口)上的进程。
    • 对比所有主机的已安装软件列表,找出缺失关键安全补丁或安装了非授权软件的机器。
    • 检查所有本地管理员组,是否存在不应存在的普通用户或通用账户(如“test”, “admin”)。

5.2 常见风险模式识别

通过分析收集的信息,可以快速定位一些常见的安全风险:

检查项风险描述排查方法(基于收集信息)
弱口令或空口令账户容易被暴力破解。检查net user输出中是否有“密码永不过期”或“用户下次登录须更改密码”为否的账户,结合其他手段验证(注意:不能直接获取密码)。
多余的管理员权限权限过大,增加攻击面。检查net localgroup administrators, 除默认管理员和必要的服务账户外,不应有普通用户。
可疑的自启动项可能是持久化后门。使用Autoruns对比基线,查找陌生的、路径异常(如Temp目录下)的启动项。
异常网络监听可能开放了未授权的服务。分析netstat -ano输出,识别非业务需要的监听端口,并定位对应进程。
过时或存在漏洞的软件是攻击的主要入口。整理已安装软件列表,对比已知漏洞库(如NVD),识别出存在高危漏洞的软件版本。
共享权限过大可能导致信息泄露或横向移动。检查net share和共享文件夹的NTFS权限,确保没有配置“Everyone”完全控制等宽松权限。

5.3 报告生成建议

一份好的资产/安全评估报告不应是原始数据的堆砌,而应包含:

  1. 执行摘要:一两句话说明检查的范围、时间和核心发现。
  2. 资产概览:统计主机数量、操作系统分布、关键服务器列表等。
  3. 详细发现:按风险等级(高、中、低)或按检查类别(账户安全、配置安全、软件安全等)列出发现的问题。每个问题应包含:主机名、问题描述、证据(截图或命令输出)、风险分析、整改建议
  4. 附录:可以附上完整的原始数据或部分关键数据的汇总表格,供技术人员深入查阅。

6. 高级场景与防御视角

从防御者(蓝队)的角度看,内网信息收集不仅是攻击者的专利,更是日常安全运营(SecOps)的重要组成部分。

6.1 用于持续监控与基线建立

你可以将自动化收集脚本设置为定期(如每周)运行的任务。通过对比历次收集的结果,你可以:

  • 建立资产基线:了解内网“正常”状态下应该有什么样的服务、进程、账户。
  • 检测异常变更:任何偏离基线的变化都可能是安全事件的信号。例如,突然新增了一个管理员账户、一个陌生的服务被安装并设置为自动启动、一个非业务端口开始监听。
  • 合规性检查:定期检查是否所有主机都安装了指定的安全软件、补丁是否及时更新、是否存在违规安装的软件等。

6.2 与SIEM/SOC平台集成

将收集到的结构化数据(如进程列表、服务列表、网络连接)通过Syslog或API发送到安全信息与事件管理(SIEM)平台或安全运营中心(SOC)。这样,这些资产数据就能和网络流量日志、终端检测与响应(EDR)告警等数据关联分析,极大地提升威胁检测和事件调查的效率。

6.3 攻击者视角的模拟与狩猎

在红队演练或威胁狩猎中,防御者可以主动模拟攻击者的信息收集行为。

  • 部署诱饵:在关键服务器上放置一些伪装成敏感文件(如passwords.txtbackup_config.xml)的“蜜罐”文件,并监控对这些文件的访问。攻击者在进行文件搜索时很容易触发告警。
  • 监控敏感命令:通过Sysmon等高级审计工具,监控net usernet groupsysteminfonetstattasklist等命令的执行。在非管理员或非特定维护时段,大量、频繁地执行这些命令是明显的横向移动和侦察迹象。
  • 分析日志:仔细审查安全日志中的账户登录事件(特别是失败登录)、进程创建事件(特别是来自可疑父进程或路径的cmd.exepowershell.exewhoami.exe等)。

6.4 权限与边界的思考

最后,必须反复强调权限的重要性。本文展示的绝大多数命令都需要在目标主机上具备一定的执行权限。在真实的防御体系中:

  • 实施最小权限原则:确保普通用户账户没有不必要的本地管理员权限。
  • 加强本地管理员密码:避免所有机器使用相同的本地管理员密码(“横向密码”),这曾是很多大规模内网失陷的根源。
  • 限制远程管理协议:严格控制RDP, WinRM, WMI等远程管理协议的访问来源(IP白名单)和使用账户。
  • 启用并细化审计策略:在组策略中启用详细的进程创建、账户管理、策略更改等审计项目,为事后追溯留下足够证据。

内网信息收集是一把双刃剑。攻击者用它来寻找弱点,而我们防御者学习它,是为了更好地理解攻击者的思路,从而查漏补缺,构建更立体、更主动的防御体系。掌握这些方法,意味着你不仅能看到自己网络里的每一台设备,更能理解它们应该如何被正确地配置和保护。这才是这项技术在现代安全运维中的真正价值所在。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/29 13:36:15

Sketch MeaXure终极指南:3分钟掌握智能设计标注自动化

Sketch MeaXure终极指南:3分钟掌握智能设计标注自动化 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 想要告别繁琐的手动设计标注工作吗?Sketch MeaXure就是你的救星!这款基于TypeSc…

作者头像 李华
网站建设 2026/7/29 13:34:20

AI 创作不用多平台,胜算云一套搞定批量出图与视频

一、AI创作不用多平台!透明计费新模型免费极速体验 AI创作无需切换多个平台、重复订阅付费!胜算云一套平台全覆盖,采用按秒、按张精准按需计费模式,费用透明可控,零隐形消费、零重复订阅成本。全网爆款AI新模型秒速上…

作者头像 李华
网站建设 2026/7/29 13:24:32

图形化编程集成ChatGLM:让AI对话零门槛的Mind+扩展库开发实践

1. 项目概述:当图形化编程遇上大语言模型 最近在折腾Mind的Python模式,发现一个挺有意思的事儿:怎么把当下火热的ChatGLM这类大语言模型,集成到图形化编程的环境里,让中小学生或者编程初学者也能玩转AI对话&#xff1f…

作者头像 李华
网站建设 2026/7/29 13:20:06

基于Matlab的饮料自动化检测系统设计与实现

1. 项目概述 在饮料生产流水线和零售场景中,如何快速准确地检测饮料质量、识别类别并获取价格信息一直是个痛点问题。传统人工检测方式效率低下且容易出错,而基于计算机视觉的自动化解决方案正在改变这一现状。这个项目通过Matlab实现了一套完整的饮料检…

作者头像 李华
网站建设 2026/7/29 13:19:55

STM32 9位SPI驱动LCD:原理、配置与调试避坑指南

1. 项目缘起:当8位SPI遇上“指令数据”的LCD 最近在做一个基于STM32的便携式设备,主控是STM32F103,显示部分选了一块小巧的1.8寸TFT LCD,控制器是常见的ILI9341。为了节省IO口,自然选择了SPI接口。前期用标准8位SPI驱动…

作者头像 李华
网站建设 2026/7/29 13:19:15

MySQL注入提权实战:从数据库漏洞到系统权限的完整攻防解析

1. 从注入到提权:一次完整的权限跃迁实战搞安全测试或者渗透的朋友,对SQL注入肯定不陌生。我们经常能通过一个注入点拿到数据库里的数据,比如管理员账号密码、用户手机号,这就算告一段落了。但很多时候,目标远不止于此…

作者头像 李华