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:

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

Khai Thác#

Cấu Trúc Payload#

python
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