Windows应急响应之命令行排查
SpiritM0nK3y 发表于 江苏 企业安全 230浏览 · 2024-12-13 15:00

如果因为各种原因没法通过可视化界面操作,那就只能命令行检查

排查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"
0 条评论
某人
表情
可输入 255