概述
Masks Off是来自于HTB(hackthebox.com)的一个困难级数字鉴识挑战,完成该挑战所需要掌握的知识点在于Linux下的代码分析及调试。
题目分析
该挑战提供了一个capture.pcap文件,其中是捕捉到的网络通讯数据,
解题过程
使用Wireshark打开capture.pcap,并列出所有的对话记录。 我们可以看到这些对话记录可以分成三个部分。 第一部分是HTTP下载ic2kp文件。
其后的第二部分是在端口1234上一系列的TCP/IP对话。
第三部分则是HTTP上传b12gb.zip文件。
导出ic2kp文件后,我们可以得知这是一个Linxu下的可执行文件。
使用Binary Ninja对其进行反编译
阅读反编译得到的C代码可以知道当该程序运行后,会在TCP端口1234上监听并接受连接,并使用其自定义的协议与远端进行通信,从而实现一个远程的shell。
下来使用Wireshark提供的Follow > TCP stream的功能,我们可以到处所有向端口1234发送的数据。
将这些数据保存到本地文件后,就可以使用如下的Python代码模拟通讯中的远端。
import socket
with open('client.bin') as f:
lines = f.read().splitlines()
HOST = "127.0.0.1"
PORT = 1234
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
i = 1
for line in lines:
line = line.strip()
input("Enter:")
print("Send line ", i)
s.sendall(bytes.fromhex(line))
data = s.recv(1024)
print(f"Received {data!r}")
i = i + 1
随后我们使用gdb对ic2kp进行调试。 最主要的断点是sub_6523下的write调用,从其入口参数可以得知远程shell所执行的命令。
跟踪调试过程,我们可以获得远程shell中zip命令行的各个参数,包括压缩密码。
获得压缩密码后,我们可以使用Wireshark导出b12gb.zip文件,并将其解压。
解压后得到的文件是Firefox的登录账号管理文件,将这些文件放入Firefox的profile目录之下,就可以得到其中的账户名与密码,其中的一个就是该挑战的flag。