Mungkin anda akan terkejut bila
mengetahui bahwa ada banyak website yang berhasil dihack/dideface hanya
karena sebuah kesalahan “konyol”. Tidak dibutuhkan keahlian programming,
SQL atau jurus njelimet lainnya, cuma membuka sebuah direktori yang
berisi file-file sensitif, maka sebuah website akan bertekuk lutut. Ya
benar, ini adalah fakta yang seringkali terjadi.
Direktori Sensitif
Semua direktori atau file yang
mengandung informasi berguna buat hacker untuk mendeface website anda,
maka direktori itu termasuk sensitif. Beberapa direktori atau file yang
tergolong sensitif antara lain:
Hal yang biasanya dibackup adalah
database dan source script webnya. Bayangkan apa yang terjadi bila
hacker berhasil mendapatkan seluruh file php dan “database dump” dalam
satu file zip? Kalau anda berpikir itu tidak mungkin terjadi, anda salah
besar, karena saya sering menemukan file backup berekstensi zip,
tar.gz, atau sql berserakan di websitenya.
Ada banyak macam halaman login, umumnya
adalah halaman login untuk mengelola isi website, yaitu CMS
Administrator. Selain CMS, halaman login yang lain adalah phpMyAdmin,
cpanel, Tomcat Admin Page, AXIS2 Admin Page dll. Tomcat dan AXIS2 adalah
Java based webserver dan web service platform.
Kenapa halaman login termasuk sensitif?
Karena dengan mengetahui URL untuk menjadi Administrator website,
seorang hacker bisa melakukan serangan SQL Injection, password guessing,
dictionary attack dan brute force attack untuk membuat dirinya menjadi
seorang administrator di website anda. Celakanya banyak website yang
halaman login adminnya tidak menggunakan password yang kuat, bahkan
menggunakan password default.
Log file biasanya dipakai untuk tujuan
debugging atau penelusuran kesalahan oleh web developer. Karena itu
tidak heran bila dalam log file banyak mengandung informasi sensitif
yang bisa dimanfaatkan hacker. File log ini berbeda-beda tergantung dari
web aplikasi yang dipakai karena web developer punya kebebasan untuk
membuat atau tidak membuat file log.
Salah satu contoh log file yang biasa
ditemukan di web adalah WS_FTP.LOG, file ini dibuat oleh program WS_FTP,
yaitu FTP Client. Setiap kali memakai program ini untuk upload ke web
anda, WS_FTP akan otomatis memasukkan file WS_FTP.LOG ke dalam folder
website anda. Dalam file WS_FTP.LOG ini seorang hacker bisa mendapatkan
banyak informasi sensitif: antara lain IP address web server anda
(banyak web yang menyembunyikan IP address sebenarnya dibalik NAT), full
path lokasi document root web anda, username account hosting anda (bila
dalam full path mengandung nama seperti /home/username/…./).
WS_FTP.LOG juga bisa membocorkan isi
sebuah direktori bila anda sudah mematikan fitur “Directory Indexing”
atau membuat file index.html kosong. Seorang hacker yang tidak bisa
melihat isi direktori karena directory index dimatikan atau ada file
index.html kosong, bisa mencoba membuka WS_FTP.LOG di direktori itu.
Bila ternyata file WS_FTP.LOG ada, maka file log itu akan membocorkan
isi file dalam direktori tersebut.
Pesan
error di atas umumnya dijumpai pada direktori yang ada, tapi directory
indexing tidak diaktifkan, sehingga anda harus menebak nama file yang
ada di direktori tersebut. Bila directory indexing diaktifkan, maka anda
akan menemukan halaman dengan title “Index of /”.
Terkadang ketika sebuah website diupdate
ke versi baru, file-file script lama disimpan dalam satu direktori
bernama oldversion, version1 dan versi barunya dalam direktori /new/
atau /ver2/ atau /beta/. Menemukan beragam versi suatu web adalah
kesempatan emas untuk menemukan celah keamanan karena biasanya web versi
terbarunya memang tidak mengandung kelemahan, namun bila kita berhasil
menemukan versi lamanya, akan ditemukan banyak celah keamanan.
Saya pernah menemukan sebuah website
yang securitynya bagus, saya tidak menemukan vulnerability di sana,
namun ternyata dia lupa membuang versi lama dari web tersebut. Namun
ternyata web versi lama yang mengandung banyak bug dari SQL injection
sampai local file injection masih bisa diakses di direktori lain.
Walaupun web versi terbaru securitynya bagus, namun jadi tidak berarti
apa-apa karena hacker bisa menyerang dari web versi lamanya.
Berburu Direktori dan File Sensitif
Nama direktori atau file bisa ditemukan dengan 2 cara:
Crawling ini adalah cara yang dipakai
oleh search engine untuk mendapatkan isi website anda. Ini adalah cara
yang “sopan”, karena kita hanya mencari apa yang memang disediakan oleh
pemilik webnya. Search engine crawling akan mengikuti direktori apa yang
boleh dan apa yang tidak boleh diambil dalam file /robots.txt. Jadi
bila ada direktori sensitif yang bisa di-search di Google, maka itu
terjadi karena di suatu situs ada pointer ke obyek itu berupa link. Bila
di seluruh jagat internet ini tidak ada satupun link ke direktori itu,
maka tidak mungkin direktori itu muncul di Google.
Kita bisa memanfaatkan Google Hacking
untuk mencari direktori sensitif yang sengaja atau tidak sengaja
ter-index oleh Google. Kita juga bisa membuat script atau memakai
program semacam wget untuk melakukan crawling website (tidak
memanfaatkan Google index). Menjalankan crawler sendiri terkadang
diperlukan bila kita ingin melakukan crawling direktori yang search
engine dilarang untuk masuk (diblacklist di /robots.txt).
Bila dengan cara sopan tidak mendapatkan direktori sensitif, maka
kita terpaksa pakai cara “kasar”. Mendapatkan direktori sensitif dengan
cara ini sama dengan menebak password. Ada dua cara yang bisa dipakai:
- Pure Brute Force Attack
Cara ini adalah cara yang paling kasar.
Kita mencoba semua kemungkinan kata yang muncul dari huruf , angka dan
karakter lain sebagai nama direktori atau nama file. Contoh: request
/aa/, lalu /ab/, lalu /ac/, lalu /ad/, demikian seterusnya sampai semua
kemungkinan yang ada dicoba. Cara ini membutuhkan waktu yang sangat
lama, jadi kurang efektif. Tapi kelebihannya adalah tidak ada direktori
yang lolos, karena semua kemungkinan akan dicoba.
- Dictionary Attack
Ini adalah cara yang lebih sopan
dibanding pure brute force. Kita menggunakan kamus, yaitu kumpulan nama
yang akan kita pakai untuk request ke web server. Efektif tidaknya cara
ini tergantung dari bagaimana kualitas kamus yang dipakai. Semakin baik
kualitas kamusnya, semakin besar kemungkinan berhasil mendapatkan
direktori sensitif. Kamus yang baik adalah kamus berisi kata yang memang
benar-benar pernah dipakai untuk nama direktori, jadi bukan nama fiktif
atau karangan.
DirBuster dari OWASP
Dalam artikel ini saya akan menggunakan tools gratisan,
DirBuster
yang dibuat oleh OWASP (Open Web Application Security Project), sebuah
kelompok non-profit yang berfokus pada keamanan web. Seperti yang sudah
saya katakan sebelumnya, kekuatan tools semacam ini tergantung pada
kualtias kamus yang dimilikinya.
DirBuster memiliki kamus yang sangat
lengkap, bukan nama fiktif yang tidak pernah dipakai, tapi memang
benar-benar nama yang pernah dipakai sebagai nama direktori. Kumpulan
nama ini didapatkan dari internet dengan cara melakukan crawling
terhadap situs-situs internet lalu mengelompokkannya. Kumpulan nama yang
dipakai minimal 3 situs berbeda ditaruh di file dengan akhiran
small.txt, kumpulan nama yang dipakai minimal 2 situs berbeda ditaruh di
file dengan akhiran medium.txt, dan semua nama yang ditemukan ditaruh
dalam file berakhiran big.txt.
Bila anda membutuhkan daftar nama
direktori saja untuk dipakai di program lain, anda juga bisa mendownload
kamusnya saja tanpa harus mendownload DirBuster.
Tools ini sangat mudah digunakan, jadi silakan saja langsung
download DirBuster. Sebelumnya pastikan dulu komputer anda sudah terinstall Java, karena tools ini dibuat dengan Java.
Scanning Type
Ada dua jenis scanning yang bisa
dilakukan, pure brute force atau dictionary based attack. Bila anda
memilih memakai teknik pure brute force, maka anda harus menentukan
character set (kumpulan karakter) yang akan dijadikan nama direktori dan
tentukan juga panjang minimal dan maksimalnya. Semakin besar populasi
dari character set yang anda pilih dan semakin panjang max length yang
anda pilih, semakin besar kumpulan kata yang dihasilkan, itu artinya
dibutuhkan waktu yang semakin lama untuk mencoba semuanya. Gambar di
bawah ini adalah screenshot ketika memilih pure brute force.
Bila memilih list based brute force, maka
kita harus memilih file berisi daftar nama direktori. DirBuster sudah
menyediakan banyak dictionary yang bisa dipilih sesuai kebutuhan:
- directory-list-2.3-small.txt (87650 words) : Minimal dipakai di 3 situs berbeda.
- directory-list-2.3-medium.txt (220546 words) : Minimal dipakai di 2 situs berbeda.
- directory-list-2.3-big.txt (1273819 words) : Minimal pernah dipakai.
- directory-list-lowercase-2.3-small.txt (81629 words) : Versi case insensitive dari directory-list-2.3-small.txt
- directory-list-lowercase-2.3-medium.txt (207629 words) : Versi case insensitive dari directory-list-2.3-medium.txt
- directory-list-lowercase-2.3-big.txt (1185240 words) : Versi case insensitive dari directory-list-2.3-big.txt
- directory-list-1.0.txt (141694 words) : Daftar awalnya, tidak terurut
- apache-user-enum-1.0.txt (8916 usernames) : Dipakai untuk user enumeration, mendapatkan valid username di sebuah server
- apache-user-enum-2.0.txt (10341 usernames) : Dipakai untuk user enumeration
Dalam list yang disediakan DirBuster
juga menyediakan daftar username yang dipakai untuk user enumeration,
yaitu mendapatkan nama user yang valid di sebuah server. Dalam web
server Apache yang mengaktifkan mod_userdir, bisa dilakukan user
enumeration dengan cara menggunakan ~namauser sebagai nama direktori.
Gambar di bawah ini adalah screenshot ketika kita memilih menggunakan dictionary attack.
Starting Options
Pilihan lain yang harus dipilih adalah
starting options, yaitu di mana titik mulainya DirBuster mencari
direktori. Pilihannya adalah standard start point, atau URL Fuzz.
Standard start point adalah pilihan yang paling banyak digunakan karena
pilihan ini berarti kita meminta DirBuster untuk menggunakan nama
direktori sebagai titik awal.
Pilihan yang ada ketika kita memilih
Standard Start Point adalah checkbox Brute Force Dirs yang bisa
dimatikan bila kita tidak ingin ingin membrute Direktori. Brute Force
Files bisa dimatikan bila kita tidak ingin mencari file. Dua pilihan
tersebut bisa diatur sesuai kebutuhan, apakah ingin mencari direktori
dan nama file, atau direktori saja, atau nama file saja.
Pilihan File extention bisa diisi dengan
ekstensi file yang ingin dicari, misalnya bisa kita isi dengan php,
zip, gz, tar.gz. Namun bila kita tidak ingin menggunakan ekstensi, kita
bisa centang pilihan Use Blank Extention.
Pilihan Be Recursive digunakan untuk
membuat DirBuster melakukan pencarian secara mendalam (Deep First
Search), yaitu mencari subdirektori dalam sebuah direktori, mencari
sub-subdirektori dalam subdirektori dan seterusnya sampai kedalaman
tertentu.
Ada
kalanya kita harus membrute force nama direktori yang merupakan bagian
dari parameter URL. Dalam kasus seperti itu kita bisa memakai pilihan
URL Fuzz. Salah satu contoh kasusnya adalah ketika kita ingin melakukan
scanning melalui sebuah web based proxy seperti
PHPProxy.
Ketika
kita ingin scanning website internal dengan IP address private dari
website public yang sudah berhasil kita susupi, kita bisa gunakan
PHProxy. URL PHProxy biasanya berbentuk
http://somewebsite/myproxy/?q=http://situstarget/{dir}. Dalam kasus
seperti ini, pilihan URL Fuzz bisa sangat berguna. Gambar di bawah ini
menunjukkan skenario tersebut. Setelah seorang hacker berhasil menguasai
web server public, dia akan mengupload web based proxy seperti PHProxy.
Dengan proxy tersebut hacker bisa melebarkan serangannya ke arah dalam
dengan menyerang web server internal yang tidak bisa dijangkau dari
internet.
Walaupun tools ini sangat sederhana,
tapi jangan remehkan keampuhannya. Silakan coba saja sendiri, mungkin
nanti anda akan terkejut melihat banyaknya webmaster yang sembrono
menaruh file/direktori sensitif di websitenya.
Thanks To : I
lmu Hacking