From 84d2d4cbada5075cb8988330d0bb4ed87e424dbe Mon Sep 17 00:00:00 2001 From: David Westgate Date: Thu, 30 May 2024 19:58:57 -0700 Subject: [PATCH] fix script for hw4 --- hw4/app.py | 26 ++++++++++---------------- hw4/hashes.png | Bin 0 -> 28177 bytes hw4/hw4.md | 6 +++++- 3 files changed, 15 insertions(+), 17 deletions(-) create mode 100644 hw4/hashes.png diff --git a/hw4/app.py b/hw4/app.py index 62b70b5..7720830 100644 --- a/hw4/app.py +++ b/hw4/app.py @@ -25,7 +25,6 @@ def main(): if len(sys.argv) > 1: try: bpf: str = 'tcp and src host 192.168.86.228 and src port 5000 and dst host 192.168.86.167' - #bpf = 'host 192.168.86.167 or 192.168.86.228 and port 5000' packets: PacketList = sniff(offline = sys.argv[1], filter=bpf, session = TCPSession) except: print("File read failure: %s not found" % sys.argv[1]) @@ -34,25 +33,20 @@ def main(): print("Need a pcap file to read!") sys.exit(1) raw_packets: PacketList = packets[Raw] - byte_accum: bytearray = bytearray(b'') + byte_accum = b'' count = 0 - print("Total packets matching BPF: ",len(packets)) - print("Total raw packets matching BPF: ",len(raw_packets)) - for r in raw_packets: - raw_packet: Packet = r + for i in range(0, len(raw_packets)): + raw_packet: Packet = raw_packets[i] if b"Content-Type" in raw_packet[Raw].load: - payload: bytes = raw_packet[Raw].load.split(b'\r\n')[-1] - #print('Packet: ', raw_packet) - #print("Packet Raw: ", raw_packet[Raw].load ) - #print() - #print('payload: ', payload) - #input() - #print() + top_payload: bytes = raw_packet[Raw].load.split(b'\r\n')[-1] + bottom_payload: bytes = b'' + if i+1 < len(raw_packets): + raw_packet_2: Packet = raw_packets[i+1] + bottom_payload: bytes = raw_packet_2[Raw].load count += 1 - byte_accum = byte_accum + bytearray(payload) - result_bytes: bytes = base64_bytes(bytes(byte_accum).decode('ascii')) + byte_accum = byte_accum + base64_bytes(top_payload + bottom_payload) file = open('download.bin','wb') - file.write(result_bytes) + file.write(byte_accum) print('done: ' ,count, ' packets decoded and packets written to download.bin') compute_checksums('download.bin') diff --git a/hw4/hashes.png b/hw4/hashes.png new file mode 100644 index 0000000000000000000000000000000000000000..472c55e3b973a23039cbde8f54879a98c960fc21 GIT binary patch literal 28177 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 X@)r?iUD%~>aBwn`iW22w#^3%2KB#Zt literal 0 HcmV?d00001 diff --git a/hw4/hw4.md b/hw4/hw4.md index 52b0f84..b3ec3ca 100644 --- a/hw4/hw4.md +++ b/hw4/hw4.md @@ -22,12 +22,16 @@ A starting point of a BPF might look like `tcp and src host 192.168.86.228 and s As a wireshark filter, this would be `tcp && ip.src == 192.168.86.228 && tcp.srcport == 5000 && ip.dst == 192.168.86.167` ### Scapy -I wrote a python scapy script will help us work with this capture file to assemble the .bin from the raw response of the relevant TCP packets. This script is shown in `./app.py`. Our script will confirm the extracted binary matches the following checksums +I wrote a python scapy script will help us work with this capture file to assemble the .bin from the raw response of the relevant TCP packets. This script is shown in [./app.py](./app.py). Our script will confirm the extracted binary matches the following checksums ``` MD5: 7aa6a7ebcbd98ce19539b668ff790655 SHA256: 2a7719719aa4f869586a7043f532e01ed4985e5c25b9a54979ac7d50c67820ec61c2805d6169b9c95a98104b8fb1d4f9ec698d23881360e99f5232a4f3cf12d4 ``` +When writing this script I had to dig deeper into the packet capture to understand how the content was being transmitted. As it turns out, in the interesting response packets noted above, base64 encoded data was contained accross a pair of TCP responses for every HTTP request in the session. The first packet of this pair contained content after `\r\n\r` bytes were appear in the raw data. The second packet of the pair was the immediete next packet in the TCP session, and all of its raw data comprised the rest of this chunk. I wrote a loop on the filtered packet list which was able to extract and compound the overall payload with this technique. As we see, we produce a `download.bin` with the proper hash and we can move on to exploring it + +![hashes](./hashes.png) + ## Questions 1) What architecture is the firmware intended to run on? 2) What OS is the firmware running?