Binary Exploitation
Easy
100 points

Buffer Overflow Intro

Recuite 2025 - HCMUS
6 tháng 10, 2025
Buffer Overflow
RIP Control
Stack
Recuite 2025 - HCMUS
Binary Exploitation

Buffer Overflow Intro - Write-up

Thông Tin Challenge

  • Danh mục: Binary Exploitation
  • Độ khó: Intro/Dễ
  • Bảo vệ: PIE, NX, IBT/SHSTK enabled; Không có Stack Canary

Phân Tích

Hành Vi Binary

  1. In địa chỉ hàm win (PIE enabled, thay đổi mỗi lần chạy)
  2. In stack layout
  3. Nhận 256 bytes input vào buffer 16-byte → Buffer Overflow!

Stack Layout

Offset  | Nội dung
--------|------------------
0x00    | Buffer (16 bytes)
0x10    | Saved RBP (8 bytes)
0x18    | Return Address (8 bytes)

Hàm Win

Tại offset 0x1209, thực thi /bin/sh qua execve:

void win() {
    char *args[] = {"/bin/sh", NULL};
    execve(args[0], args, NULL);
}

Khai Thác

Cấu Trúc Payload

payload = b"A" * 24          # Lấp đầy buffer + RBP
payload += p64(win_addr)     # Return address → win

Các Bước Khai Thác

  1. Parse địa chỉ hàm win từ output
  2. Xây dựng payload: 16 bytes buffer + 8 bytes RBP + 8 bytes win_addr
  3. Gửi payload
  4. Khi hàm return, nhảy đến win() → shell!
  5. Gửi lệnh cat flag.txt

Lưu Ý Quan Trọng

  • IBT enabled → Chỉ có thể return đến hàm có instruction endbr64
  • Không cần RET gadget cho alignment (win xử lý)
  • Shell được spawn sau khai thác, cần gửi lệnh

Flag

BPCTF{noi_tinh_yeu_bat_dau_4130218ceb6f154233bfd7c7fab262d7}

Bài Học Rút Ra

  • Buffer overflow cơ bản: ghi đè return address
  • PIE không ngăn khai thác nếu địa chỉ bị leak
  • IBT giới hạn jump targets đến valid function entries
  • Stack canaries chỉ hiệu quả nếu không bị leak
100
Points
Easy
Difficulty
Binary Exploitation
Category