Windows 信息收集是网络安全领域中一个至关重要的前置环节,无论是对于防御方的安全运维、应急响应,还是对于授权测试方的渗透测试,都具有决定性的作用。
简单来说,信息收集就是"摸清家底"和"绘制地图"的过程,其核心目的不是盲目行动,而是为了后续的精准决策和高效操作。
为什么要进行 Windows 信息收集?
信息收集的根本目的是为了降低盲目性、提高成功率、规避风险。在对一个 Windows 环境(无论是单台主机还是整个企业内网)进行任何操作之前,全面了解其状况是至关重要的。
- 识别攻击面: 找出系统中可能存在的漏洞和弱点,例如未修补的系统、配置错误的服务或弱口令账户。
- 制定精准策略: 基于收集到的信息,可以制定最有效的行动方案,避免无效尝试和触发安全警报。
- 评估风险等级: 判断系统的重要性、敏感数据的位置以及潜在安全事件的影响范围。
信息收集有什么用?
信息收集的用途广泛,主要可以归纳为以下几个层面:
-
系统层面:
- 操作系统与补丁: 通过
systeminfo等命令了解系统版本、架构和已安装的补丁,从而判断是否存在如"永恒之蓝"(MS17-010)等已知漏洞。 - 进程与服务: 使用
tasklist、wmic等工具查看运行的进程和服务,识别潜在的后门、恶意程序或可利用的脆弱服务。 - 已安装软件: 检查注册表或程序列表,发现可能存在漏洞的第三方应用(如旧版数据库、Web服务器等)。
- 操作系统与补丁: 通过
-
网络层面:
- 网络拓扑: 通过
ipconfig /all、route print和netstat -ano等命令,可以绘制出内网的IP地址分布、网段划分、路由关系以及主机间的活跃连接,为横向移动指明方向。 - 存活主机: 探测同一网段或其他可达网段中的其他主机,寻找下一个目标。
- 网络拓扑: 通过
-
用户与权限层面:
- 账户信息: 使用
net user、whoami /all等命令,可以列出本地及域用户、用户所属的组(特别是管理员组),从而识别高价值账户。 - 权限配置: 检查用户的特权(
whoami /priv)和组策略,寻找权限提升或配置不当的机会。
- 账户信息: 使用
-
敏感信息层面:
- 凭据与配置: 查找系统中可能明文存储的密码、哈希值、SSH密钥、数据库连接字符串等,这些信息往往能直接用于权限提升或横向移动。
- 共享资源: 使用
net share命令查看本地或网络共享文件夹,可能发现包含敏感数据的未授权访问路径。
对应后续行动有什么用?
信息收集的成果直接决定了后续行动的效率和成败,是连接"发现"与"利用/处置"的桥梁。
在渗透测试或攻击模拟场景中:
-
权限提升 (Privilege Escalation):
- 利用系统漏洞: 如果信息收集发现系统缺少关键补丁(如通过
systeminfo),攻击者可以直接使用对应的漏洞利用程序(Exploit)来获取更高权限(如 SYSTEM 权限)。 - 利用配置错误: 如果发现某个以高权限运行的服务其文件路径可被普通用户修改,攻击者可以替换服务程序来实现提权。
- 利用系统漏洞: 如果信息收集发现系统缺少关键补丁(如通过
-
横向移动 (Lateral Movement):
- 凭证复用: 如果在A主机上收集到了某个用户的明文密码或哈希值,并且发现该用户在B主机上也有登录权限(通过
net user /domain等发现),攻击者就可以使用"哈希传递"(Pass-the-Hash)等技术直接登录B主机。 - 定位关键目标: 通过收集域信息(如
net group "Domain Admins" /domain),攻击者可以精准定位域控制器(DC)和域管理员,从而将攻击矛头直指内网核心。
- 凭证复用: 如果在A主机上收集到了某个用户的明文密码或哈希值,并且发现该用户在B主机上也有登录权限(通过
在安全运维或应急响应场景中:
-
威胁定位与清除:
- 发现异常进程: 通过
tasklist或Process Explorer发现可疑进程,并根据其路径、网络连接等信息判断是否为恶意软件,进而将其终止并删除。 - 分析入侵痕迹: 通过检查系统日志(
eventvwr.msc)、计划任务(schtasks)和启动项(注册表),可以追溯攻击者的入侵时间、方式和持久化手段,为彻底清除威胁提供依据。
- 发现异常进程: 通过
-
安全加固:
- 修复漏洞: 根据收集的补丁信息,有计划地为系统打上缺失的安全更新。
- 优化配置: 根据发现的弱口令、不必要的开放端口或服务,进行针对性的安全策略调整,关闭高风险服务,强化账户密码策略。
那么接下来是常用的windows信息收集的命令
1. 查看系统版本号:ver

2.查看系统架构信息
有两个命令{
wmic os get osarchitecture(cmd和powershell通用)
echo %PROCESSOR_ARCHITECTURE%
}

3.服务信息枚举
3.1.1获取系统中所有服务的详细配置信息
sc query state=all
获取系统中所有服务的详细配置信息,包括服务名(SERVICE_NAME)、显示名(DISPLAY_NAME)、类型(TYPE)、当前状态(STATE)以及退出代码(WIN32_EXIT_CODE)等。

3.1.2获取服务的简要列表:wmic service list brief(powershell和cmd通用)

3.1.3获取服务名称及其执行文件路径(powershell)命令

4进程信息枚举
4.1.1
命令:tasklist(powershell和cmd通用)
用途:快速查看当前系统里跑了哪些程序,以及它们占用了多少内存。
后续行动意义:
发现杀毒软件:通过进程名(如 360tray.exe, avp.exe 等),攻击者可以判断目标机器安装了什么杀毒软件,从而决定是否需要绕过或关闭它。
寻找高权限程序:查看是否有数据库、ERP 等业务软件正在运行。

4.1.2查看进程与服务的对应关系:tasklist /svc(powershell和cmd通用)

4.1.3. 使用 WMIC 获取更详细的进程信息

4.1.4高级进程信息枚举(查看进程所有者)(powershell)命令
ps

4.1.5用途:精准识别进程权限
Get-WmiObject -Query "Select * from Win32_Process" | where {_.Name -notlike "..." } \| Select Name, Handle, @{Label="Owner";Expression={_.GetOwner().User}} | ft
后续行动意义:
提权判断:如果你看到一个进程(比如 sqlservr.exe 或 tomcat.exe)的运行用户是 SYSTEM 或 Administrator,那么攻击这个进程(例如通过 DLL 注入)就能直接获得系统最高权限。
横向移动线索:如果看到某个进程是特定域用户(如 DOMAIN\Bob)运行的,这可能意味着 Bob 刚刚登录过,或者这个服务是用 Bob 的账号配置的,这为后续的密码抓取或票据传递提供了线索。

5.1驱动信息枚举
cmd和powershell通用
driverquery
用途:列出系统中安装的所有驱动程序,包括驱动名称、显示名称、驱动类型(如内核驱动、文件系统驱动)、链接日期和路径。
后续行动的意义(非常重要):
内核提权(Kernel Exploitation):驱动程序运行在操作系统的最高特权级别(Ring 0)。如果系统中安装了存在漏洞的第三方驱动程序(例如旧版本的显卡驱动、杀毒软件驱动、或者某些硬件的老旧驱动),攻击者可以利用这些驱动漏洞编写 exploit,直接攻破内核,实现从普通用户到 SYSTEM 权限的跨越。
识别安全软件:通过驱动名,往往能识别出安装了哪些底层的安全防护软件(如卡巴斯基、火绒等),因为杀软通常会加载内核驱动来监控系统的行为。

1. 获取磁盘概览信息
cmd和powershell命令通用
wmic logicaldisk get caption,description,providername

1.1获取目录结构树
用途:以图形化的树状结构展示文件夹层级





2.获取系统已经安装的补丁信息
方法一很慢(至少需要2秒)systeminfo
核心命令:systeminfo
这是 Windows 下最经典的信息收集命令。
- 命令 :
systeminfo - 作用 :它会生成一份极其详细的系统报告,包含:
- 主机名:电脑的名字。
- OS 信息:系统版本(如 Windows 11 Pro)、安装时间、启动时间。
- 硬件配置:处理器(CPU)型号、内存总量、网卡信息。
- 补丁信息:列出了已安装的更新(Hotfix)。
- 用途:通常用于快速评估一台电脑的整体性能和环境。
进阶用法:配合 findstr 筛选(图 4-15)
因为 systeminfo 输出的内容太多,有时我们只需要看关键信息。
- 命令 :
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本" - 作用 :
|(管道符):把前一个命令的结果传给后一个命令。findstr:查找字符串。- 这个组合命令的意思是:只显示"OS 名称"和"OS 版本"这两行。


方法2使用 PowerShell 来专门筛选出补丁信息
推荐:更快更精准
Get-HotFix

基础命令
基础命令:hostname
作用:直接显示当前计算机的名字(例如图中显示的 hehexsecurity)。
用途:在网络连接或远程控制时,用来确认当前操作的是哪台机器。

重点:获取应用程序信息
方法一:通过注册表查询(PowerShell)
Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
但是可以看到非常多

方法二,通过文件夹查询(文件系统)
Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)'

方法三:通过 WMI 对象查询
这是利用 Windows 管理规范(WMI)来获取信息,专门针对通过正规安装包(MSI)安装的软件。
Get-WmiObject -Class Win32_Product
Get-CimInstance -ClassName Win32_Product

方法四:利用攻击工具查软件、专门查 .NET 版本、专门查 PowerShell 版本。


6.获取计划任务信息
这个一下出来巨量信息,不推荐
schtasks /query /fo LIST /v


方法二:筛选非微软任务
这个也很多
schtasks /query /fo LIST /v | findstr /v "Microsoft"
方法三:使用 PowerShell
Get-ScheduledTask | Where-Object {$_.TaskPath -notlike "\Microsoft*"} | Select-Object TaskName, State, Author

查看电脑开机时会自动运行哪些程序
对于系统管理员来说,这是为了优化开机速度;但对于安全人员(或黑客)来说,这是寻找"后门"的最佳位置------因为恶意软件通常会把自己藏在这里,确保电脑一重启它就能自动运行。
wmic startup get caption,command,location

查看"当前用户"的启动文件夹
dir "%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

查询注册表中的启动项
这是最经典的"藏身之处"。很多软件(包括病毒)会修改注册表来实现自启动。
reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Run

查看环境变量
set


Get-ChildItem Env: | ft Key,Value

7网络信息枚举
ipconfig /all

8.查看端口信息
netstat -ano
参数详解
-a:显示所有连接和监听端口。
通俗点说:不仅看"正在通信"的连接,还要看"开着门等别人来连"的端口。
-n:以数字形式显示地址和端口号。
通俗点说:不把 IP 地址翻译成域名(比如不把 192.168.1.1 翻译成 router.local),这样速度更快,也更直观。
-o:显示与每个连接关联的进程 ID(PID)。
通俗点说:告诉你"是哪个程序(比如 Chrome、QQ、或者某个病毒)在占用这个端口"。

9(获取路由表信息)的主要目的,是搞清楚这台电脑在网络中的"导航地图"和"交通流向"。
方法一:使用 route print 命令(图 4-33)
这是最经典、最通用的方法,在 CMD 或 PowerShell 中都可以使用。
输出解读
网络目标 / 网络掩码:定义了这条路由规则适用于哪些 IP 地址范围。例如,0.0.0.0 和 0.0.0.0 的组合,就是"默认路由",意思是"所有其他地址都走这条路"。
网关:数据包要发往的"下一跳"地址。对于默认路由,这通常就是你的路由器 IP(比如 192.168.0.1)。
接口:数据包从哪个网卡发出。比如,你的电脑有多个网卡(Wi-Fi、以太网、VPN),系统会根据路由表决定用哪个网卡。
跃点数:可以理解为"优先级"或"成本"。数字越小,优先级越高。系统会优先选择跃点数低的路由。

方法二:使用 PowerShell 的 Get-NetRoute 命令
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix, NextHop, RouteMetric, ifIndex

10.用户信息枚举(非常重要)
实战意义
判断账户是否活跃:通过"上次登录"时间,可以判断这个账户是否经常使用。如果一个账户很久没登录,可能已经废弃,攻击价值较低。
判断密码策略:通过"密码过期"、"密码可更改"等信息,可以判断这个账户的密码策略,从而制定爆破策略。
发现特殊权限:通过"允许的工作站"、"登录脚本"等信息,可以判断这个账户是否有特殊权限,比如只能从特定工作站登录,或者有特殊的登录脚本。
1. 核心命令:net user
命令:net user
作用:列出当前系统中所有的用户账户。
- 进阶命令:net user 用户名

3.更深度的用户信息枚举
"如何发现那些不想被你发现的用户"。
- 使用 PowerShell 获取详细用户状态
Get-LocalUser | ft Name, Enabled, LastLogon

- 通过注册表查找"隐藏"用户
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"
3. 根据 SID 反查用户名-从上文可以看出来用户sid,然后拼接上去

通过"旁门左道"来发现用户,也就是不直接查系统账户列表,而是通过查看"用户留下的痕迹"来反推有哪些人
1. 方法一:查看 C:\Users 目录(图 4-41)
原理
Windows 系统默认会给每个在电脑上登录过的用户,在 C:\Users(或者老系统的 C:\Documents and Settings)目录下创建一个以用户名命名的文件夹,用来存桌面、文档等数据。
命令
- CMD 方式 :
dir C:\Users 
- PowerShell 方式 :
Get-ChildItem C:\Users -Force | select Name 
实战意义
这招非常"稳"。有些黑客会创建隐藏账户,让 net user 查不出来,但系统为了让他能存文件,必须得建文件夹。
- 如果你看到
Administrator、Public,这是正常的。 - 如果你看到
Test、Backup、SQL_User这种奇怪的文件夹名,那里面大概率藏着一个对应的用户账户。
方法二:查看本地用户组
原理
用户不是孤立存在的,通常会被分到不同的"组"里(比如管理员组、远程桌面组、来宾组)。通过查看组里的成员,能发现被遗漏的账户。
命令
列出所有组:
CMD:net localgroup

PowerShell:Get-LocalGroup

查看特定组的成员(这是关键):
命令:net localgroup "组名"
例如:net localgroup Administrators(查看谁是管理员)
实战意义
找大佬(管理员):执行 net localgroup Administrators,能看到谁拥有最高权限。如果看到除了 Administrator 之外还有别的用户(比如 dev_admin),那这个用户就是你的重点攻击目标。
找入口(远程桌面用户):执行 net localgroup "Remote Desktop Users",能看到谁有权远程登录这台电脑。这些人通常是活的管理员或员工。
核心目的就是为了"找到最高权限的账户,并发现其弱点"。
先用 net localgroup 看看有哪些组。
再用 net localgroup <组名> 看看组里有哪些人(特别是管理员组)。
最后用 net user <用户名> 看看具体某个人的详细情况(比如密码多久没改了)。
你总结得非常到位,这其实就是一套标准的**"权限侦查逻辑"**。
之所以要按这个顺序操作,核心目的就是为了**"找到最高权限的账户,并发现其弱点"**。
我们可以把这个过程比作"潜入一栋大楼":
-
第一步:
net localgroup(看有哪些部门)- 目的 :摸清架构。
- 解释 :你刚进大楼,不知道谁说了算。这一步是为了找到哪个组是"核心管理层"(比如
Administrators)或者哪个组有"大门钥匙"(比如Remote Desktop Users)。
-
第二步:
net localgroup <组名>(查部门里有哪些人)- 目的 :锁定高价值目标。
- 解释:知道了"核心管理层"在哪,这一步就是站在门口看看到底谁在里面办公。
- 关键点 :如果管理员组里除了默认的
Administrator,还有像john、sarah这种普通名字,那他们通常比管理员账户更容易攻破,是绝佳的突破口。
-
第三步:
net user <用户名>(查某个人的底细)- 目的 :寻找弱点(攻击面)。
- 解释 :锁定了目标(比如
john),现在要查他的档案。 - 关键点 :
- 看**"密码最后设置时间"**:如果显示是"2018年",说明这人好几年没改密码,很可能用的是弱口令(如
123456或john123)。 - 看**"账户是否启用"**:别费劲去爆破一个被禁用的账户。
- 看**"所属组"**:再次确认他的权限级别。
- 看**"密码最后设置时间"**:如果显示是"2018年",说明这人好几年没改密码,很可能用的是弱口令(如
总结一句话:
这一套连招下来,就是为了从茫茫多的账户中,精准定位到**"那个权限最大、且最容易攻破的账户"**。
这一页主要讲的是如何查看系统的"动态状态"和"安全规则"。简单来说,前几页是在查户口,这一页是在看监控和安保手册。
你需要掌握的两个核心命令如下:
query user (或简写 quser)
- 目的:查看当前谁在线。
- 实战用途 :
- 判断"活人":看有没有管理员正坐在电脑前操作。如果有人在线且空闲时间短,你搞破坏容易被发现。
- 寻找机会:看有没有闲置的会话可以接管。
- 踢人下线 :配合
logoff <ID>命令,可以把当前在线的用户踢掉,让自己顶上去(慎用,动静很大)。 
net accounts
- 目的:查看密码策略和账户锁定策略。
- 实战用途 :
- 评估爆破风险:这是最重要的!看**"锁定阈值"**。如果是"无"或"Never",说明你可以无限次尝试猜密码,不用担心把号锁死;如果是"5次无效登录",那你猜密码就得小心翼翼。
- 判断密码复杂度:看**"最小密码长度"**。如果要求8位以上,暴力破解就很难了;如果没要求,可能就是一两位或者弱口令。
- 看密码时效:看**"密码最长使用期限"**。如果很久没改(比如90天),管理员可能因为懒得记而设置了简单的规律密码。

11.查看防火墙状态
命令:netsh advfirewall show allprofiles
目的:看路通不通。
实战意义:
查看防火墙是否开启。如果防火墙全关,你后面开端口、传工具都很方便。
查看不同网络环境(域网络、专用网络、公用网络)下的策略。通常"公用网络"管得最严。
查看日志位置(图中显示的 LogFilePath),有时候为了不留痕迹,攻击者会去清除这些日志。
列出防火墙阻止的端口
New-Object -ComObject HNetCfg.FwPolicy2; f.rules \| where {_.action -eq "0"} | select name, applicationname, localports
目的:找被堵住的门。
实战意义:
你想知道哪些端口是不通的。比如你想反弹一个 4444 端口,结果发现防火墙有一条规则明确禁止了 4444,那你得赶紧换个端口(比如 80 或 443)。
了解哪些程序被限制了联网,方便你做"白名单"绕过(比如利用允许联网的程序来带你的恶意流量)。
查看 Windows Defender 状态
这是查杀软的状态。
命令:Get-MpComputerStatus
目的:看有没有"狗"在咬人。
实战意义:
AntivirusEnabled:杀毒软件开没开?如果是 False,那简直是天堂,你传什么文件都没人管。
RealTimeProtectionEnabled:实时监控开没开?如果开了,你上传一个 .exe 后门可能瞬间就会被删掉。
AMServiceEnabled:反恶意软件服务开没开?


通过查看进程,判断这台机器上装了哪家杀软。


一键排查命令
tasklist | findstr /i "360tray 360sd ZhuDongFangYu QQPCRTP avcenter wsctrl usysdiag SafeDogGuardCenter D_Safe_Manage avp Mcshield FrameworkService egui ekrn ccSvcHst TMBMSRV RavMonD"


总结:进去后按照优先级优先执行的命令/程序


总结:优先级金字塔
最高级: 查杀软(保命,防止工具被杀)。
次高级: 查权限(whoami)和 查系统(systeminfo),决定下一步是提权还是横向。
普通级: 查网络、查用户、查软件(为了收集信息和长期控制)。
口诀: 先看来没来保安(杀软),再看自己多大官(权限),最后看屋里有什么宝(信息)。







