---
# System prepended metadata

title: Guessing
tags: [KMA CTF 2025]

---

# Guessing

![Pasted image](https://hackmd.io/_uploads/r1-yjMyZgg.png)

## Step 1

Trước tiên thì ta cần biết ta được cung cấp những file gì và nó đến từ đâu:

1. **Thư mục `PackageHelp`**
   – Chứa hàng loạt file `.exe` (ví dụ `nmap.exe`, `ncat.exe`, `nping.exe`), cùng các thư viện `.dll` như `libcrypto-3.dll`, `libssl-3.dll`… → đây chính là bản phân phối **Nmap/Zenmap** dành cho Windows (kèm theo Python, GTK, icon, licences…) .
   – Bên trong có cả thư mục `zenmap` với các file Python (`python.exe`, `.pyc`) và thư viện GTK → đây là giao diện đồ họa **Zenmap** chạy trên Python 3.11 trong Windows .

2. **Thư mục `W3SVC1`**
   – Chứa các file log với tên kiểu `u_ex230516.log`, `u_ex230517.log`, … → định dạng log **Microsoft IIS** (Internet Information Services) trên Windows Server, thông thường nằm dưới `C:\inetpub\logs\LogFiles\W3SVC1` .
   
Ngoài ra ta còn được tác giả cung cấp thêm bức ảnh nì nữa:
![webshell](https://hackmd.io/_uploads/SJgWgQJ-ex.png)

`webshell.png` là một **screenshot của thư mục webroot trên server** sau khi webshell đã được upload lên. Tác giả dùng nó để:

1. **Lộ danh sách các trang .aspx** có thể bị lợi dụng để upload (ví dụ `NhanVienPro.aspx`, `Thuvien.aspx`, `Thu_vien2.aspx`, `Donvi.aspx`) — chính là những ứng cử viên ta sẽ tìm trong log để biết page nào chứa chức năng upload.
2. **Cho thấy các binary đã được up lên** (`ncat32.exe` cùng hai thư viện SSL, file `p.exe`) để mở reverse-shell.

Tóm lại, hình này chỉ để **nhìn lỏm cấu trúc thư mục**, từ đó biết được:

* Phần **part2** của flag: ta sẽ tìm tên đúng của trang .aspx đã bị lợi dụng để upload.
* Phần **part1**: xác định thời điểm kẻ tấn công upload thành công webshell

## Step 2

`IIS log` sẽ được đặt tên theo định dạng `u_exYYMMDD.log` → với ngày `15/05/2024` ta tìm `u_ex240515.log`.

Và đây sẽ là dòng log ta cần quan tâm:
```
2024-05-15 02:40:39 192.168.199.28 POST /ThuVien.aspx - 80 - 113.171.248.53 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/122.0.6261.112+Safari/537.36 http://actvn.edu.vn/ThuVien.aspx 200 0 0 39
```
Ý nghĩa: đây chính là lần đầu hacker POST file (webshell) lên endpoint upload ThuVien.aspx, và server đã chấp nhận (HTTP 200).

```
2024-05-15 02:40:43 192.168.199.28 GET /Thu_Vien/k.aspx - 80 - 113.171.248.53 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/122.0.6261.112+Safari/537.36 http://actvn.edu.vn/ThuVien.aspx 200 0 0 927
```
Ý nghĩa: ngay sau khi upload, attacker GET vào k.aspx để khởi chạy webshell, chuẩn bị nhận lệnh hoặc tương tác tiếp.

# Flag
```
KMACTF{2024-05-15_02:40:43_ThuVien.aspx}
```

# perfect day

![image](https://hackmd.io/_uploads/BJM-ItgWxe.png)

```python
#!/usr/bin/env python3
from pwn import *
from Crypto.Util.number import bytes_to_long, inverse

HOST, PORT = "36.50.177.41", 5001

# 1) Danh sách bài hát & giá trị m (đệm kiểu '0xff')
songs = [
    b"House Of The Rising Sun",
    b"the Dock of the Bay",
    b"(Walkin' Thru The) Sleepy City",
    b"Redondo Beach",
    b"Pale Blue Eyes",
    b"Brown Eyed Girl",
    b"Feeling Good",
    b"Aoi Sakana",
    b"Perfect Day"
]
M = [bytes_to_long(s + b"0xff" * (256 - len(s))) for s in songs]

io = remote(HOST, PORT)

for _ in range(32):
    io.recvuntil(b"p = ")
    p = int(io.readline().strip())
    io.recvuntil(b"hint = ")
    hint = int(io.readline().strip())

    t = ((hint - 1) // p) % p                    # t = m*k mod p
    residues = [m % p for m in M]                # pre‑compute m mod p

    # 2) brute k ∈ [1..4096]
    for k in range(1, 4097):
        m_mod = (t * inverse(k, p)) % p
        if m_mod in residues:
            song_idx = residues.index(m_mod)
            io.sendline(songs[song_idx])         # gửi đúng tiêu đề
            break
    else:
        print("Không tìm thấy k!?")
        exit()

print(io.recvall().decode())                     # Flag ở đây
```

# Flag
```
KMACTF{did_you_enjoy_soundtrack_perfect_days}
```