# Week 3 ## Time Chaos >File: Time_chaos.pcap Khi mở file lên trong Wireshark, thấy toàn những packet với protocol ICMP. ![image](https://hackmd.io/_uploads/Hy7pyg-_lg.png) Khi so sánh các packet với nhau, thấy có mỗi trường checksum và data là có thay đổi ![image](https://hackmd.io/_uploads/SJGSexZ_xx.png) Vì checksum dùng để phát hiện lỗi, nên tập trung vào trường data Thử dùng tshark để extract trường data của các packet ra ![image](https://hackmd.io/_uploads/Hyitexbuxg.png) Ném output lên CyberChef và chọn recipe là From Hex vì trường data là dưới dạng mã hex ![image](https://hackmd.io/_uploads/BkNCegZuel.png) Có vẻ đã gần ra flag nhưng không đúng lắm, quay lại nhìn vào tiêu đề challenge, Time Chaos, sự hỗn độn thời gian ![image](https://hackmd.io/_uploads/SyvrWxb_xl.png) Và đúng như thế, mục Time của các packet bị sắp xếp lộn xộn Dùng tshark để extract cả trường time và data, sau đó sắp xếp time trước ![image](https://hackmd.io/_uploads/S15FblZOxe.png) `awk -F'\t' '{print $2}'`: để không in ra trường time cho đỡ rối Khi ném lên CyberChef thì ra được flag ![image](https://hackmd.io/_uploads/BJlJzlZuxg.png) ``` FLAG: KMACTF{C0d3_cun9_du0c_t0Ol_Cun9_DuOc_nHun9_h1_v0n9_b4n_kh0n9_l@m_m0t_c4cH_tHu_C0nG} ``` ## sit ![image](https://hackmd.io/_uploads/SyHmk4bOxx.png) Sau khi giải nén được các file như sau ![image](https://hackmd.io/_uploads/BJ-B1NZugx.png) Vì đề bài bảo là vừa mở máy tính lên thì tài liệu bị mã hóa, cần phải xem những ứng dụng tự khởi động khi mở máy Đến `C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` Thấy các file sau ![image](https://hackmd.io/_uploads/SkDMg4W_xe.png) Thấy có file `NEWSHO~1.LNK` khá lạ nhưng vì nó 0 byte, empty nên bỏ qua Ngoài ra thì thấy file UnikeyNT.lnk, thử export ra và kiểm tra ![image](https://hackmd.io/_uploads/SylhgEbugx.png) Rõ ràng đây không phải là file Unikey mà là file mã độc giả dạng Unikey, là shortcut dẫn đến `C:\Users\admin\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content\datahost.exe` Ngoài ra, khi cat file này còn tìm được path của file tài liệu đã bị mã hóa ![image](https://hackmd.io/_uploads/rybZbE-del.png) Tiếp theo, extract file `datahost.exe` từ `C:\Users\admin\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content` Sử dụng [Detect It Easy](https://github.com/horsicq/Detect-It-Easy) để xem file này được viết bằng gì ![image](https://hackmd.io/_uploads/BJ9zmibdgx.png) Language là python, thử strings kiểm tra xem có python trong file đó không ![image](https://hackmd.io/_uploads/SJ3ib4Zdex.png) Như vậy là có, tiếp tục dùng [pyinstxtractor](https://github.com/extremecoders-re/pyinstxtractor) ![image](https://hackmd.io/_uploads/Sy5GME-deg.png) Sau khi extract thấy có `datahost.pyc`, tiếp tục dùng [pylingual](https://pylingual.io/) để reverse file đó, ra được kết quả ```python # Decompiled with PyLingual (https://pylingual.io) # Internal filename: datahost.py # Bytecode version: 3.7.0 (3394) # Source timestamp: 1970-01-01 00:00:00 UTC (0) import os import sys import random import platform from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Hash import SHA256, MD5 def encryption(file, key, iv): with open(file, 'rb') as enc: data = enc.read() cipher = AES.new(key, AES.MODE_CBC, iv) ciphertext = cipher.encrypt(pad(data, AES.block_size)) write = ciphertext enc.close() with open(file + '.huhu', 'wb') as data: data.write(write) data.close() while True: filename = sys.argv[1] sed_ = int(os.path.getctime(filename)) random.seed(sed_) key = SHA256.new(str(random.randint(1, 13374953)).encode('utf-8')).digest() iv = MD5.new((platform.node() + '-' + os.path.dirname(os.path.abspath(filename))).encode('utf8')).digest() encryption(filename, key, iv) os.remove(filename) break ``` Có thể thấy cách file mã độc này hoạt động + Mở file + Tạo mã AES CBC mode dựa vào `key` và `iv` + Thêm extension `.huhu` vào file + Pad data vào AES block size + Mã hóa + Xóa file gốc và lưu file mới với extension `.huhu` Để decrypt thì cần dựng lại cách đoạn mã này vận hành, cùng với đó là cần những thông tin cần thiết như path của file, tên máy và thời gian file được tạo Path như đã tìm được từ trước: `C:\Program Files\Common Files\Microsoft Shared\TextConv` Tên máy thì dùng Registry Explorer, mở SYSTEM và tìm được computer name là `KTMM` Thời gian tạo file thì mở MFT, thấy thời gian tạo của file gốc đã bị đoạn mã xóa đi ![image](https://hackmd.io/_uploads/B1UlNVW_ex.png) Convert sang là ![image](https://hackmd.io/_uploads/BJHMV4W_gg.png) Từ đó, viết được script để decrypt như sau ```python from Crypto.Cipher import AES from Crypto.Util.Padding import unpad from Crypto.Hash import SHA256, MD5 import random # === CONFIG === filename = "tailieu.huhu" output_file = "tailieu_decrypted.txt" created_time = 1692896933 # 🎯 Machine name (platform.node()) computer_name = "KTMM" # 🎯 Full path (dirname of the file) original_path = r"C:\Program Files\Common Files\Microsoft Shared\TextConv" # === KEY & IV generation === random.seed(created_time) key = SHA256.new(str(random.randint(1, 13374953)).encode('utf-8')).digest() iv_input = computer_name + "-" + original_path iv = MD5.new(iv_input.encode('utf8')).digest() # === DECRYPT === with open(filename, 'rb') as f: ciphertext = f.read() cipher = AES.new(key, AES.MODE_CBC, iv) plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size) # === SAVE OUTPUT === with open(output_file, 'wb') as f: f.write(plaintext) print(f"[+] Decryption complete. Output saved to {output_file}") ``` Sau khi chạy code, ra được file output ![image](https://hackmd.io/_uploads/HyXKEVWOxg.png) Đây là file pdf nên cần chuyển về extension `.pdf` Sau khi mở lên thì hiện ra mã QR, quét mã và có được flag ![image](https://hackmd.io/_uploads/SyQp4Ebuxe.png) ``` FLAG: KMA{Wh3n_Pl4y1n9_CTF,_pl@Y_w1tH_4ll_Ur_h34r7} ```