如果因为各种原因没法通过可视化界面操作,那就只能命令行检查
排查Windows日志命令
PowerShell Get-WinEvent命令
列出所有事件Get-WinEvent -ListLog *
获取Security.evtx的日志:Get-WinEvent -FilterHashtable @{LogName='Security'}
获取事件ID为4624的Security日志:Get-WinEvent -FilterHashtable @{LogName='Security';ID='4624'}
powershell今天操作日志的最近10条,注意这里的logname必须是loglist中得到的:Get-WinEvent @{logname='Microsoft-Windows-PowerShell/Operational';starttime=[datetime]::today } -MaxEvents 10
powershell日志中4104和4100事件:Get-WinEvent -LogName Microsoft-Windows-PowerShell/Operational | Where-Object {$_.ID -eq "4100" -or $_.ID -eq "4104"}
即
指定时间内的日志,注意end hour不能超过23
$StartTime=Get-Date -Year 2023 -Month 1 -Day 1 -Hour 00 -Minute 00
$EndTime=Get-Date -Year 2023 -Month 1 -Day 30 -Hour 23 -Minute 59
Get-WinEvent -FilterHashtable @{LogName='System';StartTime=$StartTime;EndTime=$EndTime}
一些其他但是少见的用法见文档
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-eventlog?view=powershell-5.1
基本都可以用Microsoft Message Analyzer代替,可能在内网机子现场应急的时候需要用Get-WinEvent
排查Windows用户命令
lusrmgr.msc
打开本地用户组查看,用户名后面如果有$是隐藏用户
net user
列出用户账户简单信息
wmic UserAccount get
,列出系统所有账户详细信息
regedit
打开注册表找:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
通过ProfileImagePath确认
当前在线用户:query user
查看用户上次登录时间:net user lenovo
查看本地管理员组用户net localgroup administrators
powershell的Get-LocalUser
排查网络及端口状态命令
基本服务的端口:C:\Windows\System32\drivers\etc
netstat -ano
- -a :显示所有连接和侦听端口
- -b :显示在创建每个连接或侦听端口时涉及的可执行程序
- -n :以数字形式显示地址和端口号
- -o :显示每个连接关联的进程 ID
- -r :显示路由表
findstr配合netstat -ano | findstr "172.24.16.1"
查看网络连接状态netstat -ano | find "ESTABLISHED"
,后面是pid
powershell命令Get-NetTCPConnection
保持链接的Get-NetTCPConnection -State Established
排查防火墙规则命令
显示所有规则:netsh advfirewall firewall show rule all
显示指定规则:netsh advfirewall firewall show rule
Apache的基本入站规则信息:netsh advfirewall firewall show rule name = "Apache HTTP Server"
Apache的详细入站规则信息netsh advfirewall firewall show rule name = "Apache HTTP Server" verbose
排查进程信息命令
列出所有进程:tasklist
,可以加/svc
配合findstr
列出用法TASKLIST /?
检查pid为10004的进程:tasklist | findstr "10004"
tasklist /m
查询调用uxtheme.dll的进程:tasklist /m uxtheme.dll
筛选器
eq是等于、ne是不等于、gt是大于、lt是小于、ge是大于等于、le是小于等于
用法:tasklist /fi "PID eq 9480"
获取父进程:wmic process where ProcessId=14000 get ParentProcessId
wmic process where Name="javaw.exe" get ParentProcessId
powershell下的get-process
获取进程完整信息wmic process list full
列出进程和父进程:wmic process get name,parentprocessid,processid
详细的进程的名字,跟直接tasklist差不多:wmic process where ‘ProcessID=PID’ get CommandLine
,这个services是最终的父进程,在这里notepad++的上一级父进程是explorer,再上一级是svchost,再上一级是services
dll关联:tasklist -M
杀死进程:
wmic process where name = "" call terminate
wmic process where processid = "PID" delete
排查本机服务命令
已开启的服务:net start
每个服务对应的进程:tasklist /svc
排查计划任务命令
schtasks.exe
当然也可以在可视化的任务管理器,双击可查看详细信息
排查开机启动项命令
wmic startup
共有一下几个字段
Caption、Command、Description、Location、Name、SettingID、User、UserSID
wmic startup get Name,Command
自启任务的user和Location:Get-CimInstance Win32_StartupCommand | Select-Object Name, command, Location, User | Format-List
排查共享服务命令
Get-SMBShare
net share
也是同样
排查可疑文件相关命令
下载目录、回收站、应用程序打开历史、快捷方式、驱动等
%TEMP%: C:\Users\lenovo\AppData\Local\Temp
%UserProfile%\Recent: C:\Users\lenovo\Recent
%WINDIR%: C:\WINDOWS
%LOCALAPPDATA%: C:\Users\lenovo\AppData\Local
%APPDATA%: C:\Users\lenovo\AppData\Roaming
C:\WINDOWS\Temp
%SystemBoot%\appcompat\Programs\amcache.hve: C:\Windows\appcompat\Programs\amcache.hve 应用程序执行路径、上次执行时间
%SystemBoot%\Prefetch 预读取文件
驱动:driverquery
按时间排查命令
forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]]
下表列出了在 /c Command 命令字符串中能够使用的变量。
变量 描述
@file 返回匹配项的名称,双引号。
@fname 返回匹配项的基名(没有文件扩展名),双引号。
@ext 返回文件扩展名,双引号,没有前导点。如果文件有多个扩展名,则只返回最后一个。如果文件没有扩展名,则返回带引号的空字符串。
@path 返回匹配项的完整路径,双引号,包括驱动器号和文件扩展名(如果有)。
@relpath 返回匹配项的相对路径,双引号和相对于起始目录(由/ P给出)。每个路径以点和反斜杠(.\)开头。
@isdir 如果文件类型是目录,返回 TRUE,否则返回 FALSE。
@fsize 返回用字节表示的文件大小
@fdate 返回文件上次修改的日期,采用当前用户的本地化日期格式。
@ftime 返回文件上次修改时间,采用当前用户的本地化时间格式。
/D date 选择文件,其上一次修改日期大于或等于 (+),
或者小于或等于 (-) 用 "yyyy/MM/dd" 格式指定的日期;
或选择文件,其上一次修改日期大于或等于 (+)
当前日期加 "dd" 天,或者小于或等于 (-) 当前
日期减 "dd" 天。有效的 "dd" 天数可以是
0 - 32768 范围内的任何数字。如果没有指定,
"+" 被当作默认符号。
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe
/C "cmd /c echo @path 0x09 在 30 前就被更改。"
FORFILES /D 2001/01/01
/C "cmd /c echo @fname 在 2001年1月1日就是新的。"
FORFILES /D +2024/12/13 /C "cmd /c echo @fname 今天是新的。"
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"