应急响应
应急响应概述
Windows入侵排查
Windows日志分析
Linux入侵排查
Linux日志分析
Windows入侵排查【详细版】
Linux入侵排查【详细版】
蚁剑流量分析
冰蝎流量分析
中国菜刀流量分析
Webshell管理工具流量特征
-
+
首页
Windows入侵排查
Windows的入侵排查主要针对持久化配置项的排查。 ## 机器的基本情况 > CMD命令:winver-系统的版本  > CMD命令:msinfo32-系统的详细信息  在其中关注的重点为环境变量  ## 环境变量排查 Windows 的环境变量是操作系统中用于存储配置信息的动态键值对,类似于系统和应用程序的 “全局配置表”。 > CMD中打开环境变量信息:set  > 命令对应应用程序 为什么在cmd中输入ipconfig可以输出当前机器的IP配置???因为每一条命令对应一个应用程序。 ```txt C:\Users\root>ipconfig Windows IP 配置 以太网适配器 Ethernet0: 连接特定的 DNS 后缀 . . . . . . . : localdomain 本地链接 IPv6 地址. . . . . . . . : fe80::d07c:5ecf:6439:81e%8 IPv4 地址 . . . . . . . . . . . . : 192.168.181.128 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : ``` 如何查找对应命令所在的应用程序呢? ```cmd C:\Users\root>where ipconfig C:\Windows\System32\ipconfig.exe ``` > 搜索优先级 如果在本地的当前文件夹下创建了一个ipconfig.exe,会执行吗?  为什么没有打印当前机器的IP配置呢? ---- 搜索优先级 环境变量的搜索优先级(尤其是针对命令 / 程序的查找)遵循一套明确的规则,决定了系统如何定位并执行你输入的命令。 当你在 CMD/PowerShell 中输入一个命令(如python、notepad)时,系统按以下**从高到低**的顺序查找对应的可执行程序: 1. 内部命令(最高优先级):CMD/PowerShell 自带的命令(如dir、cd、echo、set)无需依赖外部文件,由解释器直接执行,优先级最高。 2. 绝对路径的命令:若输入的命令包含绝对路径(如C:\Windows\notepad.exe),系统会直接访问该路径,跳过后续所有搜索步骤。 3. 当前工作目录:若命令没有绝对路径,系统会先在你当前所在的目录(即 CMD 中显示的路径,如C:\Users\用户名>)中查找匹配的程序。 4. PATH环境变量中的路径:若当前目录未找到,系统会按PATH变量中从左到右的顺序依次搜索每个路径,找到第一个匹配的程序后立即执行。 左侧路径优先级高于右侧,若不同路径下有同名程序(如cmd.exe),左侧路径的程序会被优先执行(这是环境变量劫持的核心利用点)。 5. PATHEXT 环境变量:系统会自动为命令补充扩展名,补充顺序由PATHEXT变量定义(从左到右)。 **当用户变量与系统变量同名时,优先规则如下:**  普通变量(如JAVA_HOME、TEMP):用户变量覆盖系统变量。例:系统变量TEMP=C:\Windows\Temp,用户变量TEMP=D:\MyTemp,则实际生效的是D:\MyTemp。 PATH 变量:用户 PATH 与系统 PATH 会合并,但**用户 PATH 的路径排在系统 PATH 之前**(不同 Windows 版本可能有细微差异,但大体遵循此规则)。 例:用户 PATH 为D:\MyTools,系统 PATH 为C:\Windows\System32,合并后实际搜索顺序为D:\MyTools;C:\Windows\System32,即用户路径优先。 > 环境变量劫持 其核心是通过篡改环境变量配置,使系统或应用程序优先执行攻击者植入的恶意代码,而非预期的合法程序。 **PATH变量前置劫持** :利用 PATH 变量 “从左到右” 的搜索顺序,将恶意程序路径添加到 PATH 左侧,使系统优先执行恶意文件。 例如:攻击者在 C:\Temp 目录下放置伪装成系统工具的恶意程序(如 notepad.exe,实际是后门程序);通过命令或注册表修改 PATH 变量,将 C:\Temp 添加到最左侧;当用户在任何目录输入 notepad 时,系统会优先执行 C:\Temp\notepad.exe(恶意程序),而非默认的 C:\Windows\notepad.exe。 **系统变量替换劫持** :篡改系统核心变量(如 SYSTEMROOT、WINDIR),这些变量被系统工具或程序用于拼接路径,替换后会指向恶意目录。 例如:正常情况下,%SYSTEMROOT%\System32\cmd.exe 指向合法的命令提示符;攻击者将 SYSTEMROOT 改为 C:\Malicious;C:\Windows,系统解析后会优先执行 C:\Malicious\System32\cmd.exe(恶意程序)。 **临时目录(TEMP/TMP)劫持** :部分程序会在 TEMP 目录生成临时可执行文件(如 .exe、.bat)并执行,篡改 TEMP 变量指向恶意目录可诱导程序执行恶意代码。 例如:攻击者修改用户级 TEMP 变量为 C:\Attacker\Temp;某软件运行时在 %TEMP%\update.exe 生成临时更新程序并执行;攻击者提前在 C:\Attacker\Temp\恶意的 update.exe,软件会误执行该文件。 **软件安装路径劫持** :部分软件依赖环境变量(如 JAVA_HOME、PYTHONPATH)定位自身组件,篡改这些变量可让软件加载恶意模块。 例如:合法 JAVA_HOME 为 C:\Program Files\Java\jdk1.8,攻击者将其改为 C:\Malicious\Java;依赖 JAVA_HOME 的程序会加载 C:\Malicious\Java\bin 下的恶意 java.exe 或库文件。 > PATH变量前置劫持演示 首先使用cs创建一个Beacon,取名为ipconfig.exe    将当前ipconfig.exe,所在路径添加到环境变量中,。且通过上移到最顶部,点击确定。  打开命令提示符,输入ipconfig  CS上线成功  ## 网络 排查 > netstat概述 netstat(Network Statistics)是 Windows 系统自带的**命令行网络工具**,用于查看系统当前的网络连接状态、端口监听情况、路由表、网络接口统计数据等。 netstat的核心价值为可视化系统的网络服务,主要用于以下场景: - 排查端口占用问题(如 “端口 8080 被占用,无法启动服务”); - 检测异常网络连接(如未知 IP 的 ESTABLISHED 连接,可能是恶意程序通信); - 查看服务监听状态(如确认 Web 服务是否在端口 80/443 正常监听); - 分析路由表(排查 “无法访问某网段” 的路由配置问题); - 统计网络流量(如 TCP/UDP 的发送 / 接收数据包数量)。 > 语法结构 ```txt netstat [参数1] [参数2] ... ``` 无参数运行时:默认显示所有已建立的 TCP 连接(不包含监听端口和 UDP 连接)。 权限要求: - 普通用户:可查看当前用户进程的网络连接,但可能无法查看系统进程(如 System、服务)的连接。 - 管理员权限:可查看所有进程的网络连接(包括系统服务),建议排查问题时以 “管理员身份” 运行 CMD/PowerShell。 **基础参数** | 参数 | 全称 / 含义 | 功能说明 | 使用示例 | | ---- | ----------- | ------------------------------------------------------------ | -------------------------------------------- | | -a | All | 显示所有连接和监听端口(包括 TCP/UDP 的 LISTENING 状态、已建立连接等) | netstat -a (显示所有连接和监听端口) | | -n | Numerical | 以数字形式显示 IP 和端口(不解析域名,加快输出速度) | netstat -n (数字形式显示已建立的 TCP 连接) | | -o | Owner | 显示每个连接对应的进程 ID(PID),用于定位占用端口的程序 | netstat -o (显示连接及对应 PID) | | -p | Protocol | 指定协议类型,仅显示该协议的连接(支持 tcp/udp/tcpv6/udpv6) | netstat -p tcp (仅显示 TCP 连接) | **统计信息参数** | 参数 | 全称 / 含义 | 功能说明 | 使用示例 | | ---- | ----------- | ------------------------------------------------------------ | ------------------------------- | | -e | Ethernet | 显示**以太网接口的统计数据**(发送 / 接收字节数、数据包、错误数等) | netstat -e (查看网卡流量统计) | | -s | Statistics | 按协议显示**详细统计数据**(TCP/UDP/ICMP/IP 的数据包数量、重传、错误等) | netstat -s (所有协议统计) | | | | 可结合协议筛选:-st(仅 TCP)、-su(仅 UDP)、-si(仅 IP) | netstat -st (仅显示 TCP 统计) | **路由与接口参数** | 参数 | 全称 / 含义 | 功能说明 | 使用示例 | | ---- | ----------- | ------------------------------------------------------------ | ------------------------- | | -r | Route | 显示**系统路由表**(目标网络、网关、子网掩码、接口等),等同于 route print | netstat -r (查看路由表) | **高级参数(适用于特定场景)** | 参数 | 含义 | 功能说明 | 使用示例 | | ---- | ----------------------- | ------------------------------------------------------------ | -------------------------------------- | | -t | TCP Offload State | 显示当前连接的**TCP 卸载状态**(仅对支持 TCP 卸载的网卡有效,用于性能分析) | netstat -t (查看 TCP 卸载状态) | | -x | NetworkDirect | 显示**NetworkDirect 连接、侦听器和共享端点**(用于高性能网络场景) | netstat -x (查看 NetworkDirect 连接) | | -y | TCP Connection Template | 显示所有连接的**TCP 连接模板**(包含拥塞控制、窗口大小等参数) | netstat -y (查看 TCP 连接模板) | > 常见组合 **netstat -ano** 功能:显示所有连接(-a)、数字形式 IP / 端口(-n)、对应进程 PID(-o)。 用途:排查端口占用、检测异常连接(必用组合)。 **netstat -anp tcp** 功能:仅显示TCP 协议(-p tcp)的所有连接(-a),数字形式输出(-n)。 用途:监控 TCP 服务(如 Web、远程桌面)的连接状态。 **netstat -ano | findstr ":8080"** 功能:筛选8080 端口的所有连接及对应 PID(结合findstr进行端口过滤)。 用途:快速定位占用特定端口的程序。 **netstat -s | findstr "重传"** 功能:查看 TCP 重传相关统计(结合findstr筛选关键字)。 用途:分析网络丢包或连接稳定性问题。 > 对于Windows的入侵排查而言,优先检查【established】状态的可疑连接 > 查看网卡信息 ```txt C:\Users\root>ipconfig /all Windows IP 配置 主机名 . . . . . . . . . . . . . : security 主 DNS 后缀 . . . . . . . . . . . : 节点类型 . . . . . . . . . . . . : 混合 IP 路由已启用 . . . . . . . . . . : 否 WINS 代理已启用 . . . . . . . . . : 否 DNS 后缀搜索列表 . . . . . . . . : localdomain 以太网适配器 Ethernet0: 连接特定的 DNS 后缀 . . . . . . . : localdomain 描述. . . . . . . . . . . . . . . : Intel(R) 82574L Gigabit Network Connection 物理地址. . . . . . . . . . . . . : 00-0C-29-2D-C4-31 DHCP 已启用 . . . . . . . . . . . : 是 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::d07c:5ecf:6439:81e%8(首选) IPv4 地址 . . . . . . . . . . . . : 192.168.181.128(首选) 子网掩码 . . . . . . . . . . . . : 255.255.255.0 获得租约的时间 . . . . . . . . . : 2025年10月14日 9:33:47 租约过期的时间 . . . . . . . . . : 2025年10月14日 13:33:47 默认网关. . . . . . . . . . . . . : DHCP 服务器 . . . . . . . . . . . : 192.168.181.254 DHCPv6 IAID . . . . . . . . . . . : 100666409 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-30-07-DD-7F-00-0C-29-2D-C4-31 DNS 服务器 . . . . . . . . . . . : 192.168.181.1 TCPIP 上的 NetBIOS . . . . . . . : 已启用 ``` > 查看路由 ```txt C:\Users\root>netstat -rn =========================================================================== 接口列表 8...00 0c 29 2d c4 31 ......Intel(R) 82574L Gigabit Network Connection 1...........................Software Loopback Interface 1 =========================================================================== IPv4 路由表 =========================================================================== 活动路由: 网络目标 网络掩码 网关 接口 跃点数 127.0.0.0 255.0.0.0 在链路上 127.0.0.1 331 127.0.0.1 255.255.255.255 在链路上 127.0.0.1 331 127.255.255.255 255.255.255.255 在链路上 127.0.0.1 331 192.168.181.0 255.255.255.0 在链路上 192.168.181.128 281 192.168.181.128 255.255.255.255 在链路上 192.168.181.128 281 192.168.181.255 255.255.255.255 在链路上 192.168.181.128 281 224.0.0.0 240.0.0.0 在链路上 127.0.0.1 331 224.0.0.0 240.0.0.0 在链路上 192.168.181.128 281 255.255.255.255 255.255.255.255 在链路上 127.0.0.1 331 255.255.255.255 255.255.255.255 在链路上 192.168.181.128 281 =========================================================================== 永久路由: 无 IPv6 路由表 =========================================================================== 活动路由: 接口跃点数网络目标 网关 1 331 ::1/128 在链路上 8 281 fe80::/64 在链路上 8 281 fe80::d07c:5ecf:6439:81e/128 在链路上 1 331 ff00::/8 在链路上 8 281 ff00::/8 在链路上 =========================================================================== 永久路由: 无 ``` ## 进程排查 > tasklist tasklist 是 Windows 系统自带的命令行进程管理工具,用于列出当前系统中所有运行的进程信息(包括进程名称、PID、内存占用、所属用户等),相当于 “任务管理器” 的命令行版本。 语法格式: ```txt tasklist [参数] ``` 无参数运行时:默认显示本地计算机的所有进程,包含图像名称(进程名)、PID、会话名、会话号、内存使用,5 列基本信息。 ```txt C:\Users\root>tasklist 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 8 K System 4 Services 0 9,140 K Registry 148 Services 0 61,560 K smss.exe 552 Services 0 1,736 K csrss.exe 748 Services 0 7,648 K wininit.exe 820 Services 0 9,772 K csrss.exe 828 Console 1 26,448 K winlogon.exe 892 Console 1 16,216 K services.exe 964 Services 0 11,984 K ``` 权限要求:普通用户可查看当前用户的进程;管理员权限可查看所有用户(包括系统)的进程,以及远程计算机的进程。 > 筛选进程 /fi(filter)用于按条件筛选进程,支持多种筛选规则(如进程名、PID、状态等),格式为: ```txt tasklist /fi "筛选条件" ``` | 筛选条件 | 说明 | 示例命令 | 作用 | | ------------------- | ------------------------------------- | ---------------------------------------- | ---------------------------------------- | | imagename eq 进程名 | 按进程名称筛选(eq表示等于) | tasklist /fi "imagename eq notepad.exe" | 查找所有记事本进程(notepad.exe) | | pid eq 进程ID | 按 PID 筛选 | tasklist /fi "pid eq 1234" | 查找 PID 为 1234 的进程 | | status eq 状态 | 按状态筛选(RUNNING/STOPPED等) | tasklist /fi "status eq RUNNING" | 只显示正在运行的进程 | | memusage gt 内存值 | 按内存占用筛选(gt表示大于,单位 KB) | tasklist /fi "memusage gt 102400" | 显示内存占用超过 100MB(102400KB)的进程 | | username eq 用户名 | 按所属用户筛选 | tasklist /fi "username eq administrator" | 显示管理员用户运行的进程 | 多条件筛选: ```txt tasklist /fi "imagename eq chrome.exe" /fi "status eq RUNNING" ``` 例如:通过netstat -ano定位到状态为【established】状态的可疑连接,拿到PID号,用tasklist进行筛选。 ```txt C:\Users\root>netstat -ano | findstr "ESTABLISHED" TCP 192.168.181.128:51468 192.168.181.129:8000 ESTABLISHED 5988 C:\Users\root>tasklist /fi "pid eq 5988" 映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ 360ChromeX.exe 5988 Console 1 35,240 K ``` > 显示进程关联的服务 /svc 用于显示每个进程关联的**服务名称**(适用于服务进程,如 svchost.exe 会关联多个系统服务)。 语法格式: ```txt tasklist /svc ``` ```txt C:\Users\root>tasklist /svc 映像名称 PID 服务 ========================= ======== ============================================ System Idle Process 0 暂缺 System 4 暂缺 Registry 148 暂缺 smss.exe 552 暂缺 csrss.exe 748 暂缺 wininit.exe 820 暂缺 csrss.exe 828 暂缺 winlogon.exe 892 暂缺 ``` > 显示详细的进程参数 /v(verbose)显示进程的详细信息,包括**所属用户、CPU 时间、窗口标题**等(比默认输出多 7 列信息)。  > 显示进程加载的 DLL 模块(参数:/m) /m [DLL名] 用于显示进程加载的动态链接库(DLL),可指定 DLL 名称筛选(不指定则显示所有加载的 DLL)。 ```txt tasklist /m kernel32.dll # 显示所有加载了kernel32.dll的进程 tasklist /m # 显示所有进程加载的所有DLL(输出内容较多) ``` > 远程查询其他计算机的进程(参数:/s) /s 计算机名/IP 用于查询远程计算机的进程(需远程计算机开启管理员共享,且本地用户有远程管理员权限)。 ```txt tasklist /s 192.168.1.100 /u administrator /p 密码 ``` > 导出进程列表到文件(重定向输出) ```txt tasklist /fi "imagename eq *.exe" > D:\process_list.txt ``` > 找到恶意进程号之后使用taskkill杀死进程 ```txt PS C:\Users\root> tasklist /v | findstr "ipconfig" ipconfig.exe 3116 Console 1 16,480 K Unknown security\root 0:00:00 ?? ipconfig.exe 2436 Console 1 16,108 K Unknown security\root 0:00:00 ?? PS C:\Users\root> taskkill /pid 3116 /f 成功: 已终止 PID 为 3116 的进程。 ``` > wmic wmic(Windows Management Instrumentation Command-line)是 Windows 系统自带的**命令行管理工具**,基于 WMI(Windows 管理规范)技术,可用于查询和控制系统硬件、软件、进程、服务等几乎所有系统资源。 语法结构: ```txt wmic [全局参数] <别名> <操作> [筛选条件] [输出格式] ``` - 全局参数:控制整体行为(如远程连接、输出编码等),如/node:远程IP(指定远程计算机)、/user:用户名(指定用户)。 - 别名(Alias):对应系统资源的 “类别”(如process表示进程、service表示服务),是wmic操作的核心对象。 - 操作:对资源执行的动作(如get获取属性、list列出信息、delete删除对象)。 - 筛选条件:通过where子句筛选结果(如where "name='notepad.exe'")。 > 检查是否存在wmic  windows11已移除,可进入系统进行安装  或者以管理员身份运行 ```txt DISM /Online /Add-Capability /CapabilityName:WMIC~~~~ ``` > wmic 常用别名 **进程管理** 用于查询、结束、创建进程,对应任务管理器中的 “进程”。 | 操作示例 | 说明 | | ---------------------------------------------------------- | --------------------------------------------------- | | wmic process get name,processid | 列出所有进程的 “名称” 和 “PID” | | wmic process where "name='notepad.exe'" get name,processid | 筛选名称为notepad.exe的进程,显示名称和 PID | | wmic process where "processid=1234" delete | 结束 PID 为 1234 的进程(等效于taskkill /pid 1234) | | wmic process call create "notepad.exe" | 创建新进程(启动记事本) | **服务管理(service 别名)** 用于查询、启动、停止系统服务(对应 “服务” 管理界面)。 | 操作示例 | 说明 | | --------------------------------------------------- | ------------------------------------------------------------ | | wmic service get name,state,startmode | 列出所有服务的 “名称”“状态”(运行 / 停止)“启动类型”(自动 / 手动) | | wmic service where "name='wuauserv'" get name,state | 查看 Windows 更新服务(wuauserv)的状态 | | wmic service where "name='wuauserv'" call start | 启动 Windows 更新服务 | | wmic service where "name='wuauserv'" call stop | 停止 Windows 更新服务 | **操作系统信息(os 别名)** 查询操作系统的基本信息(版本、安装日期、启动时间等)。 | 操作示例 | 说明 | | --------------------------------------------------------- | ------------------------------------------------------------ | | wmic os get caption,version,installdate | 显示系统版本(如Microsoft Windows 11 Pro)、版本号、安装日期 | | wmic os get lastbootuptime | 查看系统最后一次启动时间 | | wmic os get totalvisiblememorysize,freespaceinpagingfiles | 查看总物理内存、分页文件可用空间(单位:KB) | **硬件信息查询** ```txt wmic cpu get name,numberofcores,numberoflogicalprocessors # 查看CPU型号、核心数、逻辑处理器数(线程数) wmic memorychip get capacity,manufacturer # 查看物理内存容量(单位:字节)、制造商(如三星、金士顿) wmic diskdrive get model,size,interfacetype # 查看硬盘型号、总容量(单位:字节)、接口类型(如SATA、NVMe) wmic nic get name,macaddress,netconnectionid # 查看网卡名称、MAC地址、连接名(如“以太网”) ``` **已安装软件(product 别名) **查询或卸载系统中通过 Windows Installer 安装的软件(部分绿色软件可能不显示)。 | 操作示例 | 说明 | | -------------------------------------------------------- | --------------------------------------------------- | | wmic product get name,version,vendor | 列出所有已安装软件的名称、版本、厂商 | | wmic product where "name='Google Chrome'" call uninstall | 卸载名称为 “Google Chrome” 的软件(需准确匹配名称) | > 实用场景 批量结束进程(如所有记事本) ```txt wmic process where "name='notepad.exe'" delete # 结束所有名为notepad.exe的进程 ``` 查询系统安装日期与运行时间 ```txt # 安装日期(转换为易读格式) wmic os get installdate # 运行时间(当前时间 - 最后启动时间) wmic os get lastbootuptime ``` 查看主板与BIOS信息 ```txt wmic baseboard get manufacturer,product # 主板制造商和型号 wmic bios get serialnumber,version # BIOS序列号和版本 ``` > 使用wmic 进行进程排查,用于查询系统中**所有进程的全部属性** ```txt wmic process get */value ```  > CommandLine CommandLine 指的是进程启动时的完整命令行参数,包括可执行文件的路径、启动参数、打开的文件 / URL 等信息。它比进程名称(Name)或可执行路径(ExecutablePath)更详细,能直观反映进程的启动方式和目标。 可以通过cobalt strike制作无文件落地的powershell。   将exe文件中的代码复制到cmd中执行。  那么通过这种方式的入侵,该如何排查呢?就可以通过查询CommandLine的方式。 ```txt wmic process get commandline /value ```  很明显,相较于其他的commandline值,过于复杂。 再通过tasklist 寻找powershell的PID号,通过taskkill /pid pid号/f 强制停止进程。 ```txt C:\Users\admin>tasklist /v ```  ```txt C:\Users\admin>taskkill /pid 9724 /f 成功: 已终止 PID 为 9724 的进程。 ```  目标机器掉线。 ## 恶意用户排查 恶意用户常通过创建隐藏账户、提升权限或篡改现有账户实现持久化控制。 > 隐藏账户 隐藏账户:除了通过net user命令看不见之外,其他方式都可以看见,用户名的后面有一个$。 Windows 中,$符号最初用于标识隐藏共享资源(如C$、ADMIN$、IPC$),这些共享默认不显示在 “网络邻居” 中,仅用于管理员远程管理。 这种设计被延伸到了用户账户:系统默认在 “常规用户列表” 中不显示名称以$结尾的账户,以此区分 “普通可见账户” 和 “系统 / 隐藏用途账户”。 ```txt C:\Windows\system32>net user \\DESKTOP-HT2RN40 的用户帐户 ------------------------------------------------------------------------------- admin Administrator DefaultAccount Guest WDAGUtilityAccount 命令成功完成。 C:\Windows\system32>net user /add test1$ 123456 命令成功完成。 C:\Windows\system32>net user \\DESKTOP-HT2RN40 的用户帐户 ------------------------------------------------------------------------------- admin Administrator DefaultAccount Guest WDAGUtilityAccount 命令成功完成。 ``` 通过左下角的注销按钮可以看到隐藏账户:  通过wmic命令可以发现隐藏账户。   通过计算机管理-本地用户组可以发现隐藏账户。  > 注册表 Windows 注册表(Registry)是系统核心数据库,用于存储 Windows 操作系统、硬件设备、应用程序的配置信息,以及用户偏好设置等关键数据。它是 Windows 系统运行的 “中枢”,几乎所有软件安装、硬件驱动、系统设置的变更都会被记录到注册表中。 命令符号:【regedit】  | 根键全称 | 简写 | 核心作用 | | ------------------- | ---- | ------------------------------------------------------------ | | HKEY_CLASSES_ROOT | HKCR | 存储文件关联(如.docx对应 Word)、COM 组件注册信息,是HKLM\Software\Classes的映射 | | HKEY_CURRENT_USER | HKCU | 存储当前登录用户的配置(如桌面设置、浏览器偏好),仅对当前用户生效 | | HKEY_LOCAL_MACHINE | HKLM | 存储本地计算机的全局配置(如硬件驱动、系统服务、所有用户共享的软件设置),权限最高 | | HKEY_USERS | HKU | 存储所有用户的配置信息(包括默认用户DEFAULT和已创建的用户),HKCU是其分支 | | HKEY_CURRENT_CONFIG | HKCC | 存储当前硬件配置文件的信息(如显示器分辨率、打印机设置),是HKLM的映射 | > 隐藏账户 在 Windows 系统中,“克隆账户” 通常指通过技术手段创建一个与目标账户(尤其是管理员账户)权限相同的隐藏账户,或通过篡改系统配置将普通账户的权限 “复制” 为管理员权限。 这种操作常被恶意用户用于获取持久化管理员权限,且不易被发现,属于典型的权限提升和持久化攻击手段。 Windows 的用户账户信息存储在**SAM 数据库**(%SystemRoot%\system32\config\SAM)中,包含用户名、密码哈希、安全标识符(SID)、权限等关键信息。 克隆账户的本质是: - 复制管理员账户的**安全标识符(SID)** 或**权限配置**到目标账户(通常是新建的隐藏账户); - 使系统误认为克隆账户拥有与原管理员账户相同的权限,同时隐藏该账户的存在(如名称后加$)。 SAM文件在注册表的: ```txt 计算机\HKEY_LOCAL_MACHINE\SAM\ ```  为什么为空呢,因为这个文件非常重要,即便是管理员权限,默认情况下也是看不见的,需要手动添加权限。  再刷新页面,即可看到。  克隆方式: - 方式一:利用注册表克隆(通过 SAM 数据库备份与恢复),通过替换克隆账户在 SAM 中的权限配置,使其继承管理员的 SID 和权限。 - 方式二:利用工具自动化克隆(如 mimikatz),mimikatz可直接操作 SAM 数据库实现账户克隆。 > 攻击者可能会创建的用户名名称为krbtgt ```txt C:\Windows\system32>net user /add krbtgt 123456 命令成功完成。 C:\Users\admin>net user \\DESKTOP-HT2RN40 的用户帐户 ------------------------------------------------------------------------------- admin Administrator DefaultAccount Guest krbtgt WDAGUtilityAccount 命令成功完成。 ``` 为什么? 在 Windows 活动目录(Active Directory,AD)环境中,krbtgt 是一个极其特殊的内置账户,专门用于 Kerberos 认证协议的核心操作(生成、加密和解密 Kerberos 票据)。 攻击者之所以会创建伪装成 krbtgt 的账户(或名称相似的账户),核心原因是利用该账户的系统关键性、权限特殊性和管理员对其的 “默认信任”,以实现隐蔽的持久化控制和权限提升。 > 一把梭 不管是克隆账户还是隐藏账户都可以使用wmic一把梭。 ```txt wmic useraccount get */value ```  ## 持久化排查 在 Windows 系统中,“启动项” 指的是系统启动(或用户登录)时**自动运行的程序、服务、脚本等**。恶意程序(如病毒、木马、后门)常通过添加异常启动项实现 “持久化”(即每次开机自动运行),因此启动项排查是系统安全检查的核心环节。 > 注册表下的RUN子键、RUNONCE子键 regedit 注册表中的 RUN 子键是控制程序启动的核心配置项,用于指定系统启动(或用户登录)时自动运行的程序路径。它是恶意软件实现 “开机自启” 最常用的位置之一,也是系统启动项排查的重点对象。 RUN 子键分布在注册表的不同位置,作用范围和权限要求不同。 **系统级 RUN 子键(对所有用户生效)** 存储在 HKEY_LOCAL_MACHINE(HKLM)根键下,修改需管理员权限,对系统中所有用户(包括新创建的用户) | 注册表路径 | 说明 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run | 系统启动时自动运行,每次开机都会执行(最常用的系统级启动项) | | HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce | 仅在**下次系统启动时运行一次**,执行后自动删除该配置(常用于软件安装后的 “首次启动配置”,也可能被恶意程序临时利用) | | HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run | 64 位 Windows 系统中,32 位程序的系统级启动项(64 位程序通常存于上面的Run路径) |  **用户级 RUN 子键(仅对当前用户生效)** 存储在 HKEY_CURRENT_USER(HKCU)根键下,**无需管理员权限**即可修改,仅对当前登录的用户生效。 | 注册表路径 | 说明 | | ------------------------------------------------------ | ------------------------------------------------------------ | | HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run | 当前用户登录时自动运行(如用户的聊天软件、桌面工具等) | | HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce | 仅在**当前用户下次登录时运行一次**,执行后自动删除(如用户安装的软件首次配置) | **子键的内容**  名称:通常是程序的标识; 数据:程序的完整路径。 类型:指定了数据的存储格式,常见有三种类型: - REG_SZ:字符串类型,通常用于存储固定文本; - REG_EXPAND_SZ:可扩展字符串类型,支持环境变量格式; - REG_MULTI_SZ:多字符串类型,存储多个字符串(以空字符分隔)。 **示例** 将cobalt strike的Beacon文件放入HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run子键中。   重启计算机,等待自动上线。  > 服务文件,services.msc 服务文件不需要用户进行登录,但是向服务文件中新创建服务,需要管理员权限。getshell时,会直接获取system权限。  这么多服务,那么攻击者能否去创建一个服务呢? **攻击者创建恶意服务** 创建服务的时候,也可以增加描述。 需要管理员权限运行以下命令: ```txt sc create 服务名称 binPath="恶意文件路径" displayname="服务显示的名称" depend=Tcpip start=auto sc description 服务名 "对服务的描述" ``` 使用cobalt strike创建针对服务的恶意文件。    再增加描述: ```txt sc description mathias "启用检测、下载和安装 Windows 和其他程序的更新。如果此服务被禁用,这台计算机的用户将无法使用 Windows 更新或其自动更新功能, 并且这些程序将无法使用 Windows 更新代理(WUA) API。" ```   启动服务: ```txt sc start mathias ```   > 本地组策略启动项,gpedit.msc 组策略(Group Policy)是 Windows 系统中用于**集中管理计算机和用户配置**的核心工具,通过统一设置规则(如安全策略、软件部署、桌面环境等),确保企业或组织内的系统配置一致性、安全性和可管理性。  > 计划任务,schtasks 之前的计划任务为at,但是现在已经被替换为schtasks。 schtasks 是 Windows 命令行中用于**创建、查询、修改、删除计划任务**的工具,功能与图形化的 “任务计划程序”(taskschd.msc)一致。   **基础语法** ```txt schtasks [命令] [/参数] 核心命令: create:创建新计划任务; query:查询现有任务; run:立即运行指定任务; end:终止正在运行的任务; delete:删除任务; change:修改任务属性。 ``` ```txt schtasks /create /tn "计划任务名称" /tr "恶意文件路径" /sc minute /mo 1 每一分钟执行某个程序 /sc #触发频率 ```     ## 技巧 > 确定恶意程序的名称 当确认恶意程序的名称时,可以去注册表进行搜索。 例如:目前只知道恶意程序的名称为ipconfig.exe,点击任意一个根键,进行数据的搜索。   > 如何去寻找恶意程序的名称? 时间线,确定事件发生的事件,确定时间后,通过Windows自带的时间搜索直接一把梭。  ## 工具排查 火绒的安全分析工具。 
毛林
2025年10月16日 00:09
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码