# Guessing

## 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.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

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