【应急响应】某医院HIS系统被植入挖矿木马_cnblogs
前言
环境获取
离线环境(百度网盘):https://pan.baidu.com/s/1mBBpyNN3Kkps42UkiTR5xw?pwd=rpbh
在线环境(玄机靶场):https://xj.edisec.net/challenges/579
棉花糖靶场也已同步(在线环境)
青少年CTF靶场已同步(在线环境)
背景描述
某医院信息系统原部署于内网环境。一名开发人员为便于远程办公,私自通过端口映射
将该服务器暴露至公网。攻击者由此发现该暴露面并实施入侵,在服务器上植入并运行
了挖矿木马。
请作为应急响应人员,对本次安全事件进行溯源分析,定位攻击路径与失陷证据,并彻
底清除挖矿木马。
相关分析工具已放置于当前服务器桌面。
登录账号:administrator
登录密码:Solar2026
题目清单
1. 请提交攻击者暴力破解后,首次成功登录远程桌面的时间。
提交格式:flag{2026.1.1-13:14:01}
2. 请提交运维人员用于内网穿透的服务器地址,及其映射的远程桌面端口。
提交格式:flag{IP:端口}
3. 请提交挖矿主程序与守护进程所在的完整目录路径。
提交格式:flag{C:\xxx\xxx\xxx}
4. 请提交挖矿程序外联的矿池地址及端口。
提交格式:flag{xxxx:1234}
5. 请提交挖矿配置文件中记录的钱包地址与矿工名(格式:钱包地址.矿工名)。
提交格式:flag{xxxxxxx.xx}
6. 请提交挖矿主程序文件的 MD5 哈希值。
提交格式:flag{32位十六进制}
7. 终止挖矿程序及其守护进程,完成后在桌面 flag 目录下读取 1.txt 中的 flag 并提交。
8. 删除挖矿主程序与守护进程对应的程序文件,完成后读取 2.txt 中的 flag 并提交。
9. 清除挖矿程序写入的注册表自启动项,完成后读取 3.txt 中的 flag 并提交。
10. 删除挖矿程序创建的计划任务,完成后读取 4.txt 中的 flag 并提交。
11. 删除挖矿程序安装的系统服务,完成后读取 5.txt 中的 flag 并提交。
答案清单
1. flag{2025.7.30-8:28:31}
2. flag{115.28.208.215:13389}
3. flag{C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Update}
4. flag{stratum-ltc.antpool.com:8888}
5. flag{ltc1q0fake0training0wallet0000000000aaaaaaaaaa.rig0}
6. flag{5681DF140337A9B736CF8C62DFAC98FC}
7. flag{4249be0e3fefcb5ebebc40cb30d49f8e}
8. flag{3e5af0e0d8de0a1856a693ac353d1517}
9. flag{a32b7d2b1505d66bc919e27a0ac24a9d}
10. flag{2329d57242e18c42cea938e9f055d37b}
11. flag{43526de4594018e3c574b03cd1f64a22}
学习过程
任务一:请提交攻击者暴力破解后,首次成功登录远程桌面的时间
-
什么是his系统?
HIS(Hospital Information System,医院信息系统),简单说就是医院里用来支撑日常诊疗、收费、药品、住院、医保、财务等业务的一套大型计算机信息系统。它把医院各个科室、窗口和后台管理连接起来,实现信息共享和流程自动化。
首先打开靶机,这是一台winserver服务器
![]()
whoami,ipchofig,systeminfo一下了解一下基本信息
![]()
![]()
可以着手排查了
-
先执行执行netstat -nao,查看对网络进程排查
netstat -nao这条命令会以数字形式列出当前主机所有的网络连接和监听端口(-n不做域名解析、-a显示所有连接、-o附带进程 PID)
排查时重点看本地地址为0.0.0.0的条目:0.0.0.0表示监听在本机的所有网卡地址上,意味着只要网络可达,外部任何人都能连上这个端口;反之如果监听在127.0.0.1,则只允许本机自己访问,风险面完全不同。
![]()
了解到8008端口是医院门诊管理系统的前端界面,8000 端口则是这套系统的后端接口,3306端口是配套的数据库
![]()
事件描述中提到一名开发人员为便于远程办公,私自通过端口映射将该服务器暴露至公网。3389端口正是远程桌面连接的端口,重点排查这个。
同时注意到有外联ip 4.145.79.82,经查询是新加坡的ip,存疑,待会儿排查一下
![]()
TCP 192.168.247.138:49706 4.145.79.82:443 ESTABLISHED 876
TCP 192.168.247.138:49711 4.145.79.82:443 ESTABLISHED 3412
TCP 192.168.247.138:49714 4.145.79.82:443 ESTABLISHED 876
TCP 192.168.247.138:49718 4.145.79.82:443 ESTABLISHED 3412 -
查询登录日志
不同的登录协议和登录方式,对应的登录类型是不一样的
Windows登录类型及安全日志解析 - 心存善念 - 博客园
-
类型 2(交互式登录):人在电脑前,用物理键盘鼠标敲密码登录。
-
类型 3(网络登录):通过网络访问共享文件夹、远程执行命令(如
net use \\target\c$)等。不涉及桌面交互。 -
类型 10(RemoteInteractive,远程交互式):这就是 RDP(远程桌面)登录。 攻击者通过 3389 端口连进来,看到远程桌面,操作键鼠,就会产生这种类型。
主要关注登录类型10
作者在桌面为我们准备了工具文件夹,按照提示,我们使用FullEventLogView查日志
Windows 的登录成功事件记录在安全日志中,事件 ID 为 4624(对应的登录失败是 4625,爆破场景下通常会看到大量 4625 夹杂少量 4624)
所以我们使用高级筛选,筛选事件id为4624,事件为登录类型: 10。
![]()
筛选后只剩 2 个事件,按时间排序,最早的一次 RDP 登录成功时间为2025/7/30 8:28:31.469,登录账户为 Administrator。
双击打开
![]()
至此任务一”提交攻击者暴力破解后,首次成功登录远程桌面的时间“完成了
flag{2025.7.30-8:28:31}
原文中提到”但是值得注意的是,事件里记录的登录来源 IP 为 127.0.0.1,远程桌面登录的来源居然是本机回环地址,这显然不符合"攻击者从公网爆破进来"的直觉,“
推测是内网渗透反向代理,这边不熟,等接下来的排查解答
-
任务二:请提交运维人员用于内网穿透的服务器地址,及其映射的远程桌面端口
-
已知存在内网穿透映射3389端口
常见的内网穿透/端口映射程序有:frp、rathole、NPS、ngrok、花生壳等,它们的共同点是都会在受害机上留一个客户端程序和一份配置文件,配置文件中必然写有中转服务器的地址和映射规则。
排查思路:优先使用 Everything 做全局文件名搜索,把上述关键词挨个搜一遍,命中率很高;实在找不到的情况下,再根据可疑时间节点去取证 Amcache 日志(Amcache.hve 是 Windows 记录程序执行痕迹的注册表配置单元,能还原某段时间内跑过什么程序,即使程序后来被删掉也能留下影子)。
工具文件夹中也为我们提供了everything工具,这个工具很好用啊,一下子就查出来了
![]()
根据everything提供的路径直接找到frp配置文件,
![]()
几个字段逐一看:serverAddr = "115.28.208.215"即 frps 服务端(也就是运维自己的中转服务器)的 IP;serverPort = 7000是 frp 客户端与服务端之间建立控制连接的端口,属于 frp 的内部通信端口,并不是对外提供远程桌面的端口;auth.token是连接服务端的认证令牌。重点在[[proxies]]代理规则段:name = "rdp-windows"、type = "tcp",localIP = "127.0.0.1"、localPort = 3389表示把本机的远程桌面服务作为被转发对象,remotePort = 13389才是真正的关键,它表示在 frps 服务端 115.28.208.215 上开放 13389 端口,任何人访问115.28.208.215:13389,流量都会经隧道转发到这台服务器的 3389。也就是说,攻击者在公网上对着 115.28.208.215:13389 做 RDP 爆破,实际上打的就是这台内网服务器的远程桌面。
-
获得运维人员用于内网穿透的服务器地址,及其映射的远程桌面端口flag
任务三:请提交挖矿主程序与守护进程所在的完整目录路径。
-
最常用的方式是查看任务管理器
![]()
这个叫sysupdate.exe的模仿系统进程的名字,相信实战中不会这么明显地找到
询问ai后,得知可以wmic查,也有其他方式或者杀软,但wmic的输出对于人类来说有点难分析了
这路径伪装的很真,都是蹭的微软官方的路径
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Update
而且进入文件夹后就算选择了查看隐藏的文件也看不到其他文件,必须dir /a才能查到其他程序。
![]()
这个目录下实际藏着 4 个文件:config.json(挖矿配置)、sysguard.exe(守护进程)、sysupdate.exe(挖矿主程序)、sysupdate.log(运行日志)。
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Update>dir /a 驱动器 C 中的卷没有标签。 卷的序列号是 BCCD-B906 C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Update 的目录 2025/07/30 08:36 <DIR> . 2025/07/30 08:36 <DIR> .. 2025/07/30 08:36 756 config.json 2026/07/23 11:38 146,593 sysguard.exe 2026/07/23 11:38 146,593 sysupdate.exe 2026/09/21 17:02 77,545 sysupdate.log 4 个文件 371,487 字节 2 个目录 7,633,756,160 可用字节 -
获得挖矿主程序与守护进程所在的完整目录路径flag
任务四:请提交挖矿程序外联的矿池地址及端口
-
直接查看config.json
{ "api": { "id": null, "worker-id": "rig0" }, "http": { "enabled": false, "host": "127.0.0.1", "port": 0 }, "autosave": true, "background": false, "colors": true, "title": true, "randomx": { "init": -1, "mode": "auto", "1gb-pages": false }, "cpu": { "enabled": true, "huge-pages": true, "hw-aes": null, "priority": null, "yield": true, "max-threads-hint": 75 }, "opencl": { "enabled": false }, "cuda": { "enabled": false }, "pools": [ { "url": "stratum+tcp://stratum-ltc.antpool.com:8888", "user": "ltc1q0fake0training0wallet0000000000aaaaaaaaaa.rig0", "pass": "x", "nicehash": false, "keepalive": true, "enabled": true, "tls": false, "sni": false } ] }这是一份典型的 XMRig 风格配置(XMRig 是最常见的开源挖矿程序,市面上的挖矿木马大多基于它二次打包),其中 pools 段记录了矿池连接信息,从矿池域名中的 ltc 字样可以判断挖的是莱特币(LTC)
url字段的完整值为stratum+tcp://``stratum-ltc.antpool.com:8888。补充一个知识点:stratum+tcp是矿机与矿池之间通信的 Stratum 协议的传输方式标识,属于协议前缀,不算地址本体,所以矿池地址和端口就是 stratum-ltc.antpool.com:8888(antpool 即蚂蚁矿池)。
-
挖矿程序外联的矿池地址及端口
flag
任务五:请提交挖矿配置文件中记录的钱包地址与矿工名(格式:钱包地址.矿工名)
-
应急响应做到这一步,只把矿池地址抄下来还不够,还要趁配置文件在手,把这些字段的含义吃透,这对判断收益归属和攻击者画像很关键。url字段上一题已说过,是矿池目标地址;user字段类似于我们平常用的登录账号,矿池靠它来识别"这台矿机挖出来的收益算到谁头上",其值由钱包地址和矿工名两部分组成,中间以.分隔,矿工名(也叫矿工号、rig 名)是攻击者给每台矿机起的编号,方便在矿池后台区分多台肉鸡;pass字段是密码,对绝大多数公共矿池来说随便填即可,这里的"x"就是占位写法。
-
对照配置,user值为ltc1q0fake0training0wallet0000000000aaaaaaaaaa.rig0,.之前是莱特币钱包地址,之后的 rig0 即矿工名。
-
钱包地址与矿工名
flag
任务六:请提交挖矿主程序文件的 MD5 哈希值(大写)
-
之前提到在勾选"隐藏的项目"后也不显示,这里却依然隐身,大概率是攻击者用 attrib 命令给程序叠加了"系统+隐藏"双重属性,带系统属性的文件会被资源管理器当作受保护的操作系统文件继续隐藏
attrib:它是 Windows 自带的文件属性管理命令,可以给文件/目录设置或清除只读(R)、存档(A)、系统(S)、隐藏(H)四种属性,+表示添加属性、-表示去除属性,木马加属性一般用的是attrib +s +h 文件名。
在终端中直接执行attrib命令
![]()
从回显中可以看到 sysguard.exe 和 sysupdate.exe 这两个程序都被打上了 SH(系统+隐藏)属性
-
使用attrib命令
-s -h -r分别去除系统、隐藏、只读属性;"%APPDATA%\Microsoft\Windows\Update*."是目标路径,其中%APPDATA%是环境变量,等价于C:\Users\Administrator\AppData\Roaming,.*通配目录下所有文件;末尾的/s表示递归处理子目录、/d表示同时处理目录本身。
attrib -s -h -r "%APPDATA%\Microsoft\Windows\Update\*.*" /s /d![]()
可以看到隐藏的两个文件显示出来了
-
本体文件到手后计算md5,注意在power中执行命令,不是cmd
Get-FileHash -Algorithm MD5 ./sysupdate.exe
Get-FileHash -Algorithm MD5 "C:\路径\到你的\file.exe"。Get-FileHash是 PowerShell 自带的哈希计算 cmdlet,无需安装任何第三方工具,Algorithm参数还支持 SHA1、SHA256 等算法
D5 值相当于文件的"指纹",同一文件全球唯一(这里不展开抗碰撞问题),应急响应中用它做样本的精准标识和情报匹配,把哈希丢到微步、VT 等威胁情报平台就能立刻知道这个样本有没有被标记过。
![]()
-
挖矿主程序文件的 MD5 哈希值
flag{5681DF140337A9B736CF8C62DFAC98FC}
我们在微步社区中搜索该md5值,可以看到被标记为木马
![]()
任务七:终止挖矿程序及其守护进程,完成后在桌面 flag 目录下读取 1.txt 中的 flag 并提交
-
按照顺序删除守护进程,挖矿程序即可
根据进程名杀进程树
taskkill /IM sysupdate.exe /F
![]()
有许多命令都能杀,图形化界面中也可以杀
taskkill /PID 4992 /F taskkill /IM sysupdate.exe /F taskkill /IM sysguard.exe /T /F wmic process where "ProcessId=4992" delete Stop-Process -Id 4992 -Force Stop-Process -Name "sysupdate" -Force Get-Process | Where-Object { $_.CPU -gt 1000 } | Stop-Process -Force -
杀完之后flag文件夹中就有flag1了
flag
任务八:删除挖矿主程序与守护进程对应的程序文件,完成后读取 2.txt 中的 flag 并提交
-
上面杀掉两个守护进程后,直接shift+delete删掉文件就可以
-
flag
任务九:清除挖矿程序写入的注册表自启动项,完成后读取 3.txt 中的 flag 并提交
-
文件删了不代表万事大吉,挖矿木马为了能开机复活,几乎必然做了权限维持,注册表自启动项是最经典的一种。这里就要用到桌面工具目录中的 Autoruns64 了。简单介绍一下:Autoruns 是微软 Sysinternals 套件中的自启动项审计工具(64 位系统用 Autoruns64.exe),它能把系统里所有"开机/登录自动运行"的位置一网打尽:注册表 Run 键、启动文件夹、计划任务、服务、驱动、Winlogon 劫持等等,比系统自带的 msconfig 全面得多,是应急排查权限维持的标配。打开后直接在上方搜索框搜索sysguard或者sysupdate关键词(即前面确认的恶意程序名,看是哪个程序被写了自启动),快速定位相关条目。
工具文件夹中也为我们提供了autoruns工具方便我们删除注册表
![]()
对比文件路径,是我们之前根据挖矿进程找到的文件
WindowsUpdateHelper File not found: C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Update\sysguard.exe
右键删除即可
删完之后发现flag4、5都爆出来了,flag3没有,挨个查
![]()
发现在scheduled tasks中还有一个,但是删除失败了?
![]()
重启之后,挖矿程序也没有重启,但是这个计划任务也找不到了,flag3也没有爆出
任务十、删除挖矿程序创建的计划任务,完成后读取 4.txt 中的 flag 并提交。十一、删除挖矿程序安装的系统服务,完成后读取 5.txt 中的 flag 并提交。
flag{2329d57242e18c42cea938e9f055d37b}
flag
重启之后,原来的4条连接变成了2条,

我一次taskkill了这两个pid,kill 2056后直接黑屏了
按Ctrl + Shift + Esc 打开任务管理器,点击 文件 → 运行新任务。输入 explorer.exe,回车修回来了。
回来ip又换成了57.155.142.113
在最后,关掉远程桌面服务,关掉3389端口,给frpc.exe也删了
w+r 输入wf.msc
滑到最底部给远程桌面关了

检查后没问题,就这样吧。

也不知怎得,那几个新加坡ip也死了,不管了,杀干净了,flag3始终没弹出来,可能是靶场判定问题。因为挖矿程序一直也没有重启。





















浙公网安备 33010602011771号