网络安全实战 - HTB Masks Off

2,930 阅读2分钟

概述

Masks Off是来自于HTB(hackthebox.com)的一个困难级数字鉴识挑战,完成该挑战所需要掌握的知识点在于Linux下的代码分析及调试。

题目分析

该挑战提供了一个capture.pcap文件,其中是捕捉到的网络通讯数据,

解题过程

使用Wireshark打开capture.pcap,并列出所有的对话记录。 我们可以看到这些对话记录可以分成三个部分。 第一部分是HTTP下载ic2kp文件。

forensics_013_HTB_Masks Off_01.png

其后的第二部分是在端口1234上一系列的TCP/IP对话。

forensics_013_HTB_Masks Off_02.png

第三部分则是HTTP上传b12gb.zip文件。

forensics_013_HTB_Masks Off_03.png

导出ic2kp文件后,我们可以得知这是一个Linxu下的可执行文件。

forensics_013_HTB_Masks Off_04.png 使用Binary Ninja对其进行反编译

forensics_013_HTB_Masks Off_05.png

阅读反编译得到的C代码可以知道当该程序运行后,会在TCP端口1234上监听并接受连接,并使用其自定义的协议与远端进行通信,从而实现一个远程的shell。

forensics_013_HTB_Masks Off_06.png

下来使用Wireshark提供的Follow > TCP stream的功能,我们可以到处所有向端口1234发送的数据。

forensics_013_HTB_Masks Off_07.png

将这些数据保存到本地文件后,就可以使用如下的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

随后我们使用gdbic2kp进行调试。 最主要的断点是sub_6523下的write调用,从其入口参数可以得知远程shell所执行的命令。

forensics_013_HTB_Masks Off_08.png

forensics_013_HTB_Masks Off_09.png

跟踪调试过程,我们可以获得远程shell中zip命令行的各个参数,包括压缩密码。

获得压缩密码后,我们可以使用Wireshark导出b12gb.zip文件,并将其解压。

forensics_013_HTB_Masks Off_10.png

解压后得到的文件是Firefox的登录账号管理文件,将这些文件放入Firefox的profile目录之下,就可以得到其中的账户名与密码,其中的一个就是该挑战的flag。

forensics_013_HTB_Masks Off_11.png