ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Windows应急响应实战:日志分析+Webshell查杀还原攻击路径

2026/9/26 3:21:27 拓冰建站 浏览量
Windows应急响应实战:日志分析+Webshell查杀还原攻击路径 搞应急响应的人桌上一般都会摆着几套靶场。玄机应急响应靶场里的 0x401-TECI是我最近完整复盘过的一题整套做下来感觉非常“应急”。题目本身不算难但信息密度很高考的是 Windows 日志分析、Webshell 查杀、以及攻击路径还原这三件事。你要是正在练应急响应或者已经做过几个 Linux 侧靶场、想来点 Windows 侧的案件这道题很适合拿来当第七八个练习目标。它不会像 CTF 那样考脑洞而是模拟真实被黑场景一台被入侵的 Windows 主机交到你手里你需要从日志、文件、进程、启动项里找出攻击者的全部动作。这道题最让我满意的地方是“没有为了出题而出题”很多痕迹都是真实攻击里会出现的而不是故意把 flag 塞在奇怪角落里。做完以后你对 Windows 上应急响应的排查顺序、日志筛选、以及常见持久化手法的理解会变得非常立体。下面把我完整走一遍的过程和踩过的坑写出来希望能帮你少走弯路。1. 接手0x401-TECI之前先搞清楚这道题在考什么1.1 靶场编号背后的出题逻辑“0x401”看起来像十六进制编号换算过来是 1025但在玄机这套体系里它更像是一个题目的顺序号。真正值得关注的是“TECI”这串字母。官方没有给过明确解释按我自己的理解它大概率是 Threat Event Comprehensive Investigation 的缩写也就是说这道题偏“威胁事件综合调查”。实际做下来也确实如此它不是单一只考日志也不是单一只考 Webshell而是需要你把系统日志、Web 日志、文件系统、进程信息全部串成一条时间线。这类题目在真实应急里非常常见。客户不会告诉你“攻击者用蚁剑传了一个 shell”只会告诉你“服务器最近很卡网站被人挂马了”。你需要自己从一堆看似正常的数据里找出异常。TECI 的定位就是模拟这种状态信息是给的但需要你自己挖掘。整个题目的核心考点可以拆成四块Windows 安全日志中的登录、账户创建、计划任务、进程创建记录。Web 服务器访问日志中的攻击请求与 Webshell 访问痕迹。文件系统里 Webshell、恶意脚本、可疑文件的定位。把以上信息组合成完整的攻击链。所以你在做题前就要调整心态不要急着找“那个明显可疑的文件”而是先建一张“边界示意图”把攻击者可能进来的入口、可能留下的东西、可能隐藏的位置都列在脑子里。1.2 这道题适合谁以及你需要的基础0x401-TECI 不是一个零基础友好的入门题。如果你完全没接触过 Windows 事件日志直接上手会有点懵。但反过来说它的门槛也没有高到需要你精通二进制逆向。我认为合适的准备状态是能用事件查看器或 PowerShell 查看日志。知道常见的登录事件 ID比如 4624、4625、4720。会看 Web 访问日志能区分 GET/POST 和常见扫描特征。知道 Web 目录大概长什么样比如C:\inetpub\wwwroot或 Apache 的 htdocs 目录。如果以上你只会一两个也没关系边做边补。我就是一边翻日志一边查事件 ID 含义做完以后记忆特别牢。整个过程差不多需要完整的一段空闲时间建议至少留出 2 到 3 个小时别想着半小时速通那样你会漏掉很多细节。2. 环境准备与观察思路先摸清战场再动手2.1 拿到环境后的第一件事拿到靶场环境后我的习惯是先做“三查”而不是直接去翻日志。所谓三查就是查账号、查进程、查网络连接。原因很简单如果攻击者此刻还连着机器你翻日志的功夫他说不定已经把你踢出去了。虽然是靶场但这个习惯必须养成。具体操作上我会先确认自己拿到的连接方式。TECI 给的是 Windows 靶机一般通过远程桌面连接连接后用whoami、ipconfig、systeminfo看基础信息。接着马上打这三条命令net user net localgroup administrators Get-Process | Sort-Object -Property StartTime | Select-Object -First 20第一条看账户第二条看管理员组第三条看启动时间最新的进程。这里面有一个非常实用的判断正常情况下一个刚开机的 Windows 系统里不应该有大量“启动时间特别新”的微软自带进程之外的东西。如果看到cmd.exe、powershell.exe以很新的时间出现而且不是你自己开的那十有八九是攻击者留下的。网络连接也不能漏netstat -ano | findstr ESTABLISHED把本地 IP 和端口、远程地址记下来。如果发现某个进程监听在奇怪的端口下一步用tasklist /svc /fi PID eq 端口号找到对应进程。这套组合拳做完靶机当前是否还活着、攻击者是否还在线基本就清楚了。2.2 用“入侵假设”倒推排查优先级我在做 TECI 的时候没有按照日志默认顺序一条条翻而是先根据题目描述做了个“入侵假设”。题目提示这台机器被人通过 Web 服务入侵那么最常见的攻击路径就是扫描器发现漏洞 → 利用漏洞上传 Webshell → 通过 Webshell 执行命令 → 提权、创建账户、留后门。有了这个假设排查优先级自然就出来了先看 Web 访问日志找出最早的攻击请求定位入口。再找 Web 目录下的 Webshell确认攻击者拿到了什么权限。然后看安全日志里的登录事件特别是创建账户、计划任务、远程登录。最后查文件系统和启动项确认有没有持久化。这个顺序和“拿到机器就乱扫”完全不同。乱扫的问题在于你会被大量无关信息淹没。比如 Windows 安全日志一天可能有几万条 4624尤其是域环境或开了网络共享的机器每条都看会直接崩溃。带着假设去排查你只会筛选符合攻击特征的记录效率高很多。当然假设也可能不对。所以我在排查过程中会不断修正。比如如果发现攻击者是通过数据库入侵的那重点就变成数据库日志而不是 Web 访问日志。TECI 这道题的提示相对明确但你还是得保持警惕不要看到第一条 Webshell 就收工。3. Windows 日志分析实战TECI 题的核心战场3.1 安全日志中的登录痕迹先找“谁进来的”Windows 安全日志是 TECI 的重点。我们在事件查看器里看 Windows 日志 → 安全或者用 PowerShell 筛选。做题时我不太建议在图形界面里一条条点因为日志量太大。直接用Get-WinEvent筛效率最高。先看登录失败记录这个几乎每道应急题都要用。登录失败表示攻击者可能在跑密码爆破。Get-WinEvent -FilterHashtable {LogNameSecurity; Id4625} -MaxEvents 1000 | ForEach-Object { $_.Properties[18].Value } | Group-Object | Sort-Object Count -Descending | Select-Object -First 10 Count, Name这段代码把 1000 条 4625 事件里的源 IP 字段提取出来按出现次数排序。跑完以后你会看到若干 IP 地址那些次数最多的基本就是爆破来源。TECI 里这个特征应该很明显至少会有一个 IP 出现了成百上千次。接下来看登录成功记录 4624。登录成功比失败更关键因为它可能意味着攻击者爆破成功了。但 4624 里大量是系统服务、网络共享的登录需要过滤登录类型。常见的登录类型登录类型含义应急中关注点2本地交互登录有人坐在机器前或通过模拟登录3来自网络的登录通常是 SMB、共享访问也可能是攻击工具连接10远程交互登录RDP 登录重点排查4批处理登录计划任务执行配合 4698 查看5服务登录服务启动一般不用管我在 TECI 里主要看类型 10 和类型 3。RDP 登录事件会记录源 IP如果某个陌生 IP 在凌晨 2 点成功登录那基本就是攻击者进场了。筛选命令可以这样写Get-WinEvent -FilterHashtable {LogNameSecurity; Id4624} | Where-Object { $_.Properties[8].Value -eq 10 -and $_.Properties[18].Value -notlike - } | Select-Object TimeCreated, {NameSourceIP;Expression{$_.Properties[18].Value}}, {NameAccount;Expression{$_.Properties[5].Value}}注意中间属性位置可能会因为系统版本不同有误差我在做题时也会先随便抽一条 4624 用$_.Properties看看内容避免筛错字段。这个习惯很重要不同语言版本、不同 Windows 版本下事件属性的排布有细微差别。除了登录事件还要看账户创建事件 4720 和管理员组成员变更事件 4728、4732。攻击者提权后通常会创建一个新账户或者把已有账户加入管理员组。筛一遍Get-WinEvent -FilterHashtable {LogNameSecurity; Id4720,4728,4732}如果有这类事件立刻记下时间、操作账户、被操作账户然后去net user里对照。TECI 里十有八九有一个你没见过的用户名比如support、adminx之类。3.2 进程和命令执行记录攻击者在机器上干了什么看完了“谁进来”接下来要看“进来以后干了什么”。这里主要靠进程创建事件 4688。不过 4688 有个前提系统的审核策略必须开了“审核进程创建”。默认情况下很多 Windows 服务器是不开的。如果靶场刻意开了你就会在日志里看到一堆进程命令行记录。如果你发现 4688 很少不要慌先检查审计策略auditpol /get /subcategory:进程创建如果结果是“无审核”那 4688 的记录就不可用。这时候得靠 PowerShell 日志来补也就是事件 ID 4104。4104 是 PowerShell 记录脚本块执行的日志只要系统启用了模块日志攻击者通过 PowerShell 执行的命令都会被记录下来。筛选命令Get-WinEvent -FilterHashtable {LogNameMicrosoft-Windows-PowerShell/Operational; Id4104}TECI 里如果出现 4104多半是攻击者在用 PowerShell 下载恶意文件、添加计划任务或者进行内网扫描。逐条看脚本内容时重点关注Invoke-WebRequest、DownloadString、New-ScheduledTask、Add-LocalGroupMember这类高危命令。另一个容易被忽略的是“服务创建”事件 7045。攻击者想把木马做成系统服务持久化时会留下这个事件。在系统日志中搜索Get-WinEvent -FilterHashtable {LogNameSystem; Id7045}7045 会记录服务名称、可执行文件路径。如果发现某个服务指向了C:\Users\Public\或者C:\Temp下的 exe那基本就是后门。这里我想特别强调一点不要只看事件 ID还要看时间线。单独一个 4720 可能说明有人建用户单独一个 4688 可能说明有进程跑起来但把时间排序后如果发现“先 4624 登录成功 → 5 分钟后又 4720 建用户 → 又 3 分钟来了 4698 计划任务”这就是一条完整的攻击链。做题和真实应急一样时间线比单个事件更有说服力。3.3 计划任务、服务与启动项持久化痕迹持久化是应急响应的老朋友。攻击者拿到权限后最怕的就是重开机权限没了所以一定会想方设法留后门。TECI 里也藏了好几个持久化点需要仔细盘。计划任务事件 ID 是 4698。攻击者常用计划任务执行反弹 shell 或者启动木马Get-WinEvent -FilterHashtable {LogNameSecurity; Id4698}4698 事件里会给出任务名称、要执行的命令。但注意如果攻击者清除过日志你未必能看到这条。更好的方式是直接在系统里枚举当前计划任务schtasks /query /fo LIST /v重点看“运行任务”里是不是有 PowerShell 或 cmd 调用的可疑命令。我在 TECI 里就遇到了一个名字看起来非常正常、但命令行里写着下载远程脚本的计划任务不仔细看真的会漏掉。启动项排查我习惯用 Autoruns 这款工具。靶场环境允许你传工具上去的话直接跑一下它会列出自启动程序、计划任务、服务、驱动等所有开机自启项。没有条件传工具就用注册表手动查几个关键位置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run如果注册表项指向一个 exe先看看这个文件是否存在、创建时间是否可疑。真实应急里很多老练的攻击者会把后门藏在服务里并用“系统服务”作为伪装名称比如“Windows Defender Update”但路径却是C:\Windows\Temp\svchost.exe。这个伎俩在 TECI 中也复现了所以我建议把服务列表也全部过一遍wmic service get name,displayname,pathname,startmode | findstr /i temp public users或者用 PowerShellGet-CimInstance Win32_Service | Select-Object Name, State, PathName发现路径不在系统目录下的服务优先怀疑。3.4 日志导出与快速筛选命令有时候图形界面看不过来或者你想本地慢慢分析需要把日志导出成 evtx 文件。这里给几个我常用的命令wevtutil epl Security C:\tmp\security.evtx wevtutil epl System C:\tmp\system.evtx wevtutil epl Windows PowerShell C:\tmp\ps.evtx wevtutil epl Microsoft-Windows-PowerShell/Operational C:\tmp\ps_op.evtx导出后可以在自己机器上用事件查看器打开也可以用 Log Parser 或 Hayabusa 来分析。Hayabusa 是个很不错的工具内置了大量的检测规则直接跑一遍就能把可疑事件标出来适合快速定位。不过工具只是辅助你最好还是明白每条规则背后的逻辑否则连误报都区分不了。事件 ID 速查表我整理了一张做题时直接对照事件 ID含义应急排查重点4624登录成功查看登录类型、源 IP、账户4625登录失败统计源 IP判断暴力破解4672特殊权限登录管理员登录结合 4624 分析4720创建用户发现未知账户4728 / 4732添加组成员发现提权行为4698创建计划任务持久化后门4104PowerShell 脚本块恶意命令执行4688进程创建查看了命令行参数才有效7045服务安装服务型后门1102安全日志清除说明攻击者反取证1104事件日志自动备份可能包含被清除前的数据看到 1102 的时候不要直接绝望日志清除不意味着没有证据。系统日志里可能还有其他记录比如 104 事件会把日志文件路径记录下来卷影副本里也可能有旧日志。靶场里的情况一般是“清除了一部分但其他位置的副本还在”。所以养成习惯看到 1102 反而要更兴奋因为说明你离真相更近了。4. Web 日志与 Webshell 查杀从访问记录里还原攻击路径4.1 Web 访问日志里的攻击请求TECI 这道题既涉及 Windows 日志也涉及 Web 入侵。网站被挂马是最常见的应急场景而 Web 访问日志是整个事件的起点。拿到靶机后先确认 Web 服务类型常见的是 IIS 和 Apache。我的经验是直接看进程和目录结构IIS 日志通常在C:\inetpub\logs\LogFiles\W3SVC1\Apache 日志通常在C:\Program Files\Apache Group\Apache\logs\access.log先找到日志文件然后用Select-String筛可疑请求。可靠的做法是先看 POST 请求因为 Webshell 通常通过 POST 传递命令Select-String -Path C:\inetpub\logs\LogFiles\W3SVC1\*.log -Pattern POST然后根据文件修改时间挑出攻击发生的日期再针对那天做更细的筛选。如果日志量太大建议把可疑请求写到单独文件里慢慢看。除了 POST还要关注常见的 Webshell 特征关键词eval、execute、cmd、whoami、id、%00、.jsp、.aspx等。TECI 里应该会有一两条特别扎眼的日志比如某个 POST 请求带了一长串 base64 或者包含cmdwhoami。跟踪这条日志的 IP 和第一时间Webshell 访问路径的线索就出来了。这里有一个非常关键的思路Web 访问日志不只是用来发现 Webshell还要用来判断攻击者具体利用了哪个漏洞。比如日志里出现大量%27或union select那就是 SQL 注入如果出现../../etc/passwd那就是目录穿越如果出现multipart/form-data上传到脚本目录那就是上传漏洞。TECI 的入口大概率是上传漏洞加一个解析漏洞所以你会看到攻击者先上传了一个图片马然后访问它的 URL。这个 URL 就是你找 Webshell 的坐标。4.2 Webshell 文件排查不只看后缀还要看时间Webshell 查杀是实操性很强的一步。很多新人在 Web 目录里直接搜.php、.jsp、.aspx然后看到一个shell.php就觉得找到了。真实情况是攻击者会起一个看起来人畜无害的文件名比如favicon.ico、readme.txt、1.jpg。所以查杀不能只看后缀。我的做法分三步走第一步按修改时间排序找新文件。TECI 给了攻击时间范围的话直接筛这个时间段内新增或修改过的文件Get-ChildItem -Path C:\inetpub\wwwroot -Recurse | Where-Object { $_.LastWriteTime -gt 2025-01-01 } | Sort-Object LastWriteTime -Descending | Select-Object FullName, LastWriteTime, Length那段时间里出现的文件都需要看内容。攻击者上传的 Webshell 经常会混在正常图片里用时间排序是最快的缩小范围方式。第二步用工具扫描。D 盾和河马查杀是我用的比较多的直接指定网站目录让工具扫一遍。工具会报出可疑文件的路径和可疑程度。但工具不是万无一失有时候混淆得厉害的 Webshell 工具扫不出来所以最终还是要人工看。第三步人工看关键文件。把文件内容打开搜索这些特征eval、assert、base64_decode、system、exec、passthru。加密混淆函数比如eval(gzinflate(base64_decode(...)))。随机字符串函数名比如$_0x、$_GET拼接。TECI 里应该藏着不止一个 Webshell。我找到第一个后没有停下继续沿着 Web 日志里出现的可疑 URL 逐个访问路径去找最后发现攻击者还在子目录里留了一个伪装成图片的马。所以做题一定要“跟踪访问日志目录”而不是“只扫一遍就完事”。4.3 把 Web 痕迹和系统日志串成完整时间线找到 Webshell 只是起点还需要回答“攻击者用 Webshell 做了什么”。这时候要把第 3 章里看到的 Windows 日志和第 4 章里的 Web 日志结合起来。比如 Web 日志里看到某 IP 在 14:30 访问了shell.aspx?cmdwhoami系统安全日志里同一个 IP 在 14:31 产生了一次 4624 登录成功再往后 4698 创建了计划任务。这三条记录一拼攻击路径就非常清晰了。我在做 TECI 时特意建了一张时间线表格每一行记录时间、事件源、事件描述、关联证据。这张表不仅是解题的关键也是以后写应急处置报告的基础。很多新人忽视这一步导致最后报告写不出来或者把攻击顺序说反了。应急响应不是“找到恶意文件”就结束而是要把攻击者的整个动作序列还原出来这样才能给防守方真正有用的修复建议。5. 常见问题与排查技巧实录5.1 我踩过的三个坑做 0x401-TECI 时我踩了几个印象很深的坑写出来大家引以为鉴。第一个坑是日志被清理了。我做到一半发现安全日志里有一段空白时间正好覆盖了攻击者入驻的时间。当时有点慌以为是靶场环境缺日志。后来查了系统日志才看到有 1102 事件说明攻击者已经清理过日志。解决办法是切换到其他日志源比如 Microsoft-Windows-PowerShell/Operational 日志还在计划任务的服务日志也还在。所以碰到日志清除不要只盯着安全日志多翻几个日志源往往能拼出被撕掉的碎片。真实应急也一样攻击者清除的通常只是安全日志系统日志和应用日志经常被忽略。第二个坑是时区问题。Web 日志默认是 UTC 时间Windows 安全日志默认是本地时间。我发现两条看似相距好几个小时的事件其实发生在同一分钟。一开始没注意还以为是两个独立的入侵事件。后来把时区统一以后时间线瞬间就顺了。建议大家拿到环境后先确认靶机时区再看日志是用 UTC 还是本地时间记录最好直接把时间转换成同一个时区再分析。第三个坑是 4688 进程创建事件不完整。我本想着靠 4688 拿到完整命令行结果发现系统只开了部分审计很多进程只有进程名没有命令行参数。这意味着我无法直接从 4688 看到攻击者的具体命令。最后是靠 PowerShell 4104 日志补上了这块。所以工具链要多元不能把希望全压在一个事件源上。5.2 排查技巧速查表把这次 TECI 以及类似 Windows 应急题的做法整理成一张速查表你下次遇到可以直接照着走排查阶段核心操作参考命令/位置当前状态查账户、进程、连接net user、Get-Process、netstat -ano登录痕迹筛选登录失败/成功Get-WinEvent过滤 4624 / 4625账户变化查新增用户/组变更4720 / 4728 / 4732进程命令查进程创建/命令行4688、4104、Sysmon EventID 1持久化查计划任务/服务/启动项4698、7045、schtasks /query、注册表 RunWeb 入口查访问日志IIS / Apache 日志POST 和可疑关键词文件查杀找新文件、扫 WebshellGet-ChildItem D盾/河马反取证查日志是否被清1102、104 事件、卷影副本时间线统一时区记录事件序列建议使用 Markdown 表格这条流程在大多数 Windows 应急题里都通用。你甚至可以把它做成一个自己的“应急响应 checklist”每次拿到环境都按顺序勾一遍避免漏项。5.3 后续还能怎么练做完 TECI 以后我建议你用同样的流程去复盘其他靶场。比如 Log4j 漏洞利用后的应急、勒索病毒事件、或者内网中毒事件它们的排查起点可能不同但整体思路是相通的先隔离现场、再收集证据、然后分析日志、定位恶意文件、最后还原时间线。每多练一种场景你对异常特征的敏感度就会高一截。我个人在做完这道题后又去补了一遍 Sysmon 的部署和常见事件 ID 分析。TECI 里有部分信息是依赖系统自带日志如果靶场环境装了 Sysmon很多分析会更快。真实企业中Sysmon 的价值非常大它能记录进程创建、网络连接、文件创建时间等更细的痕迹。建议你花点时间把 Sysmon 的事件 ID 也过一遍尤其是事件 ID 1、3、11、13、22。这样以后再遇到类似的 Windows 应急题你会多好几条取证通道。最后再分享一个小技巧做题过程中我会给每个可疑文件、每个可疑事件都截个图或者复制一份文本存到一个临时文件夹里。最后整理报告时这些材料能帮你快速把逻辑顺一遍。应急响应最忌讳的就是“感觉找到了但说不清为什么”。练习时养成的记录习惯会比任何工具都更早地帮你建立专业能力。