Post

I&M BANK 2025 CTF-Network Forensics Writeup

I&M BANK 2025 CTF-Network Forensics Writeup

Catch if you can

Network_Forensics

We were given this pcap file analyze.
Given this pcap file, the first thing I did was apply the filter frame contains “flag” to check if any packets contained references to a flag. Two packets appeared, each with a GET request—one for flag.txt and the other for flaggy.txt.

Network_Forensics

This looked like the right place to find the flag, so I followed each stream. I started with flag.txt and noticed a Base64-encoded string.

Network_Forensics Decoding it in CyberChef produced the message: “okay i tricked you, I’m not the flag, but the flag is on ‘ONYOURSIDE’.” This seemed like a clue, so I went back and applied the filter frame contains “on your side”.

Network_Forensics
I then followed the corresponding HTTP stream and found another Base64-encoded string, which, when decoded, revealed inm{iandm_we_are_on_your_side}.

Network_Forensics

I got the flag inm{iandm_we_are_on_your_side}

The Lost Transaction Ledger

Network_Forensics

We were given this pcap file analyze.
As in the previous question, I applied the filter frame contains “flag” to check whether any packets contained reference to the flag but oops no packet appeared. This meant I had to take a different approach. At this point, I decided to switch from the Wireshark GUI to tshark, the command-line version of Wireshark. I chose tshark because it allows for faster and more precise data extraction, especially when dealing with large packet captures or when I need to automate or script my analysis. Instead of manually scrolling through packets, tshark lets me apply filters, extract specific fields, and even pipe the output directly into other tools for decoding or processing. To start, I examined the UDP packets within the PCAP file using tshark to extract the data fields:

Network_Forensics

To make the output more readable, I converted the hex values into ASCII text using xxd:

Network_Forensics

The content looked random at first glance, but patterns like random_noise_data caught my attention.To isolate the meaningful parts, I used a sed command to remove all occurrences of the random_noise_data pattern:

Network_Forensics

The output became much shorter: 1lcr3mw33_lgaat_khrs}a{kb_nmfw1 The message looked scrambled—almost like the pieces were out of order. Remembering the challenge hint about “the order of events with time”, I suspected the packets needed to be rearranged chronologically.To reconstruct the correct order, I extracted both the epoch timestamp and the data field, then sorted the output numerically by time:

Network_Forensics

I got the flag flag{w3lc0m3_t0_1mbank_w1r3shark}

DNS Data Heist

We were given this pcap file analyze.

Network_Forensics For this challenge, I opted to use tshark since it can chain multiple commands together in a pipeline for streamlined analysis as well as automation. I filtered for DNS packets that are queries (response flag == 0) and printed the queried domain name field. Network_Forensics

This confirmed repeated queries to exfil.badactor.com with leftmost labels that look like NN-<base64>. The attacker encoded data in subdomain labels prefixed by a two-digit chunk index (00, 01, …). I extracted only those names and sorted them numerically to restore chunk order: Network_Forensics

I stripped away the domain structure to isolate only the encoded data: Network_Forensics

I then concatenated all the Base64 strings and decoded them: Network_Forensics

I found the flag flag{dNs_tunN3lng_1s_a_c0mm0n_exf1l_m3th0d}

This post is licensed under CC BY 4.0 by the author.