Forensics
Medium
180 points

Leak

Recuite 2025 - HCMUS
6 tháng 10, 2025
PCAP
SQL Injection
Blind SQLi
Database Leak
Recuite 2025 - HCMUS
Forensics

Leak - Writeup#

Challenge Information#

  • Category: Forensics
  • Files: capture.pcap (6.5MB)
  • Hint: "Hacker leaked my website database. Recover what was leaked!"

Analysis#

Attack Vector#

Các yêu cầu HTTP POST tới /login chứa payload blind SQL injection nhắm vào cơ sở dữ liệu SQLite.

sql
userid=123" OR [SQL_INJECTION_PAYLOAD]-- &userpassword=123

Injection Technique#

Tìm nhị phân (binary search) sử dụng SUBSTR() và so sánh với CHAR():

sql
SUBSTR((SELECT CAST(userid AS TEXT) FROM users LIMIT 0,1), 1, 1) != CHAR(97)

Câu lệnh kiểm tra xem ký tự đầu tiên của userid trong hàng đầu tiên có phải là 'a' (CHAR(97)) hay không.

Extraction Process#

Kẻ tấn công lần lượt trích xuất:

  1. Schema của bảng từ sqlite_master
  2. Số lượng dòng trong bảng users
  3. Trích xuất từng ký tự của useriduserpassword
  4. Nhiều hàng được trích theo LIMIT (LIMIT 0,1; LIMIT 1,1; LIMIT 2,1; ...)

Decoding Leaked Data#

Python script dùng để phân tích các truy vấn SQL injection trong pcap:

python
import subprocess, re, urllib.parse

result = subprocess.run(['tcpdump', '-r', 'capture.pcap', '-A'], 
                       capture_output=True, text=True)

# Extract SQL patterns
pattern = r'userid=(.+?)&userpassword'
leaked_data = {}

for line in result.stdout.split('\n'):
    match = re.search(pattern, line)
    if match:
        payload = urllib.parse.unquote(match.group(1))
        # Parse CHAR() values where != comparison used
        parse_successful_matches(payload)

(Ghi chú: parse_successful_matches(payload) là chỗ bạn thêm logic phân tích cụ thể — ví dụ trích các biểu thức CHAR(n) và ghi nhận phép so sánh thành công để tái tạo ký tự.)

Leaked Database#

RowUser IDPassword
0adminguest
1aliceBPCTF{w4it_wh4t!!1_1_h4v3_b33n_3xf1ltr4t3d_XD}
2bobalice123
3charliebob123
4guestcharlie123

Flag#

BPCTF{w4it_wh4t!!1_1_h4v3_b33n_3xf1ltr4t3d_XD}

Key Takeaways#

  1. Blind SQLi Detection: Truy vấn kiểm tra từng ký tự (character-by-character) được sử dụng một cách hệ thống.
  2. PCAP Analysis: Cuộc tấn công được giấu trong các HTTP POST trông bình thường.
  3. URL Decoding: Payloads được mã hóa URL — cần decode trước khi phân tích.
  4. Pattern Recognition: So sánh ký tự bằng CHAR() được dùng cho tìm nhị phân.
  5. Data Reconstruction: Dựng lại dữ liệu dựa trên các phép so sánh thành công/không thành công.

Mitigation#

  • Sử dụng truy vấn tham số / prepared statements.
  • Áp dụng rate limiting cho endpoint đăng nhập.
  • Thiết lập quy tắc WAF để chặn các pattern SQL đáng ngờ.
  • Giám sát logs để phát hiện các pattern SQL bất thường.
  • Áp dụng principle of least privilege cho database user.
180
Points
Medium
Difficulty
Forensics
Category