
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 administrators4. 進程與服務 (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 /v6. 已安裝程序 (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和其下的Wow6432Node32位程序。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 腳本設計要點錯誤處理網絡不通、權限不足、命令不存在等情況必須被妥善處理避免整個腳本因一臺主機失敗而中止。使用Try-Catch-Finally塊或檢查命令的返回值$LASTEXITCODE。結果結構化將結果輸出為結構化的格式如CSV JSON比純文本更利于后續分析。PowerShell的Export-Csv或ConvertTo-Json命令非常好用。并行執行對于多臺主機使用Invoke-Command配合-ComputerName參數需要WinRM啟用或Start-Job/ForEach-Object -ParallelPS 7進行并行收集大幅提升效率。日志記錄腳本自身應有運行日志記錄開始、結束時間以及每臺主機的收集狀態成功、失敗及原因。4.2 一個進階腳本示例框架這個腳本假設你已在域環境中有足夠的權限并且WinRMPowerShell 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 報告生成建議一份好的資產/安全評估報告不應是原始數據的堆砌而應包含執行摘要一兩句話說明檢查的范圍、時間和核心發現。資產概覽統計主機數量、操作系統分布、關鍵服務器列表等。詳細發現按風險等級高、中、低或按檢查類別賬戶安全、配置安全、軟件安全等列出發現的問題。每個問題應包含主機名、問題描述、證據截圖或命令輸出、風險分析、整改建議。附錄可以附上完整的原始數據或部分關鍵數據的匯總表格供技術人員深入查閱。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白名單和使用賬戶。啟用并細化審計策略在組策略中啟用詳細的進程創建、賬戶管理、策略更改等審計項目為事后追溯留下足夠證據。內網信息收集是一把雙刃劍。攻擊者用它來尋找弱點而我們防御者學習它是為了更好地理解攻擊者的思路從而查漏補缺構建更立體、更主動的防御體系。掌握這些方法意味著你不僅能看到自己網絡里的每一臺設備更能理解它們應該如何被正確地配置和保護。這才是這項技術在現代安全運維中的真正價值所在。