Cryptography
Easy
100 points

Baby Pad

Recuite 2025 - HCMUS
6 tháng 10, 2025
Padding Oracle
AES-CBC
Cryptanalysis
Recuite 2025 - HCMUS
Cryptography

Baby Pad - Write-up#

Thông Tin Challenge#

  • Danh mục: Cryptography
  • Độ khó: Trung bình - Khó
  • Lỗ hổng: Padding Oracle Attack trên AES-CBC

Tổng Quan#

Challenge này implement một AES-CBC encryption oracle với lỗ hổng nghiêm trọng: server leak thông tin về tính hợp lệ của padding. Đây là cuộc tấn công Padding Oracle kinh điển.

Lỗ Hổng: Padding Oracle#

Server cung cấp:

  1. Encrypted flag (IV được thêm vào đầu)
  2. Oracle service để decrypt bất kỳ ciphertext nào
  3. Quan trọng: Cho biết padding có hợp lệ hay không

Response từ oracle:

  • Valid padding → "Message received!"
  • Invalid padding → "Can't read that"

Phân Tích Toán Học#

Giải Mã CBC Mode#

P[i] = Decrypt_key(C[i]) ⊕ C[i-1]

Nguyên Lý Tấn Công#

Bằng cách kiểm soát IV (hoặc previous ciphertext block), ta có thể thao tác plaintext sau khi decrypt để tạo ra valid padding, từ đó khôi phục toàn bộ plaintext từng byte một.

Chiến Lược Khai Thác#

Thuật Toán Khôi Phục Từng Byte#

python
Với mỗi ciphertext block C[i]:
    intermediate[16] = mảng rỗng
    
    Với byte_pos từ 15 xuống 0:
        padding_value = 16 - byte_pos  # 1, 2, 3, ..., 16
        
        # Set các byte đã biết để tạo valid padding
        Với k từ (byte_pos+1) đến 15:
            fake_iv[k] = intermediate[k] ⊕ padding_value
        
        # Brute force byte hiện tại
        Với guess từ 0 đến 255:
            fake_iv[byte_pos] = guess
            
            Nếu oracle(C[i], fake_iv) trả về True:
                intermediate[byte_pos] = guess ⊕ padding_value
                break
    
    # Khôi phục plaintext block
    plaintext = intermediate ⊕ C[i-1]

Phân Tích Độ Phức Tạp#

  • Queries mỗi byte: Trung bình ~128 (tệ nhất 256)
  • Queries mỗi block: ~2048 (16 bytes × 128)
  • Tổng cho flag: ~6000-8000 queries (hoàn toàn khả thi!)

Flag#

BPCTF{Just_a_simple_padding_oracle_attack_to_warm_up_49fab148518a}

Bài Học Rút Ra#

Chiến Lược Phòng Chống#

  1. Không bao giờ leak tính hợp lệ của padding - trả về lỗi chung cho mọi thất bại
  2. Sử dụng authenticated encryption - AES-GCM hoặc ChaCha20-Poly1305
  3. Thao tác constant-time - ngay cả timing cũng có thể leak thông tin

Insights về Tấn Công#

  • Padding oracle attacks vẫn có liên quan sau 20+ năm
  • Một bit information leak có thể phá vỡ toàn bộ hệ thống mã hóa
  • CBC mode không có authentication rất nguy hiểm
  • Mã hóa hiện đại cần sử dụng AEAD modes

Tài Liệu Tham Khảo#

100
Points
Easy
Difficulty
Cryptography
Category