Problem: [GHCTF 2025]mypcap
解题思路
解压题目附件得到一个流量包文件和一个python脚本
脚本内容如下:
import hashlib from Crypto.Cipher import AES # 问题1:请问被害者主机开放了哪些端口?提交的答案从小到大排序并用逗号隔开 PORT = "" # string of open port, like "8000,8888,9999,10000" # 问题2:mrl64喜欢把数据库密码放到桌面上,这下被攻击者发现了,数据库的密码是什么呢? PASSWORD = "" # string of password # 问题3:攻击者在数据库中找到了一个重要的数据,这个重要数据是什么? DATA = "" # string of important data # ---- ANSWER SHEET OVER ------ HASH = hashlib.blake2b() HASH.update(PORT.encode() + PASSWORD.encode() + DATA.encode()) D = HASH.digest() KEY = D[0:16] IV = D[16:32] cipher = AES.new(KEY,AES.MODE_GCM,IV) C_ = bytes.fromhex("39a7a41ddc95e651f0b217f8c542a84f79ddfb8276dafd739300ff09c0827759688d132932f8ab56c215aaf0") H = bytes.fromhex("fc809190d7e9cd8fdd0867841f923a68") FLAG = cipher.decrypt_and_verify(C_,H) print(FLAG.decode())
我们需要找到3个问题的答案,然后使用脚本计算FLAG

数据包有明显的扫描行为,是典型的nmap的SYN半开扫描,我们过滤SYN = 0的数据包:

可以看到开放的端口分别是22,3306,8080,第一问的答案就出来了。
继续查看流量,端口扫描后是目录扫描,然后是对tomcat的管理页面进行了登陆,追踪http流

可以看到上传了一个war包

应该是上传了木马之类的程序,war包的名称是t3st,查找访问该war包的流量
过滤所有POST请求来看看到底上传了些什么

冰蝎各版本流量特征
冰蝎2.0
- 默认长连接,请求头和响应头里会带有Connection: Keep-Alive
- accept固定为Accept: text/html, image/gif, image/jpeg, *; q=.2, /; q=.2
冰蝎3.0
- content-type固定为application/octet-stream(强特征)
- Accept&Cache-Control;默认设置:
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Cache-Control: no-cache Pragma: no-cache User-Agent: java/1.8
- 内置16个ua头(弱特征)
- content-length 请求长度
冰蝎4.0
- content-type固定为
application/x-www-form-urlencoded- accept字段固定为
Accept: application/json, text/javascript, */*;q=0.01- 默认ua头库
- 默认长连接,请求头和响应头里会带有Connection: Keep-Alive
- 固定的请求头和响应头
- 默认连接密码rebeyond,所有的webshell都有一串密钥,该密钥的值为连接密码MD5值的前16位
- 端口:客户端 与 服务端建立连接时,连接所使用本地端口分布在 49700 左右,每建立一次新的连接,端口就依次增加
哥斯拉流量特征
- ua头(弱特征)
- accept字段:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2(弱特征)
- cookie。请求包的Cookie中有一个非常致命的特征,分号;(强特征)
- 请求体特征 (较强特征):比较大的数据包,base64编码
- 响应体特征 (强特征):如果之前的请求体采用base64编码,响应体返回的也是base64编码Cache-Control: no-store, no-cache, must-revalidate
蚁剑
- 每个请求实体都存在
@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且后面存在base64等字符- 使用 随机数+响应内容+随机数使用base64加密的payload,数据包存在以下base加密的eval命令,数据包中的payload几个分段内容都是用了base加密,解密之后可以看到相关的路径和命令等。
菜刀
ⅰ. 请求包中 ua头为百度爬虫,火狐
ⅱ. 请求实体中存在eval,base64等特征字符
ⅲ. 请求实体中传递depayload为base64编码,并且存在固定的Base64编码
可以看到是冰蝎流量,通过导出HTTP对象可以提取出这个wenshell

保存出对象并解压得到jsp文件

有了冰蝎的密码就可以解码了,最后一个POST包中有数据库密码

于是第二问答案也得到了。
关于第三问,数据库中的重要信息,可以再流量中搜索关于数据库的操作,过滤协议mysql

这里可以逐条查看,也可以尝试搜索data,info等关键字

到此3个问题的答案都出来了,带入脚本,执行即可


关键代码(EXP)
结果与flag
NSSCTF{703663c4-1ff1-4c51-83b8-0f4303e82659}
