Kamis, 07 April 2011

password cracker

Konsep sederhana Joomla Password Cracker

Apa yang akan penulis jelaskan disini, begitu juga dengan apa yang telah penulis jelaskan pada tutorial sebelum-sebelumnya, mengenai hacking tentunya, di ibaratkan seperti pisau yang memiliki 2 sisi tajam, di satu sisi seorang admin web dapat menjaga ketat sitenya dengan aman, namun patut diketahui pula tidak ada sistem yang memiliki keamanan 100%, selalu saja ada bolong yang masih dapat di eksploitasi,tapi setidaknya dapat meminimalisir serangan yang ada, dan di sisi lain yang akan penulis terangkan nanti tentunya cenderung digunakan untuk kegiatan vandalisme/merusak oleh beberapa pihak. Ya, tidak heran jika teori tesis dan anti tesis kerapkali hadir dalam dunia perhackingan ini. Di satu sisi membangun tapi di sisi lain menghancurkan. Lantas yang harus di lakukan sekarang adalah, tetap waspada pada security risk yang ada, dan ketahuilah tamu tak diundang selalu menyempatkan waktunya untuk hadir memonitoring site anda, jika anda melakukan sedikit saja salah langkah akibatnya cukup fatal.
Waha… sepertinya intro tutorial harus dipisahkan sendiri dalam tutorial yang berbeda, jari penulis begitu asik menari-nari di atas tuts keyboard sampai-sampai lupa pada pokok pembahasan. :D.

Ya, berdasarkan artikel sebelumnya, betapa mudahnya seorang attacker mendapatkan username dan password sang administrator pada content management system seperti joomla, tapi masih terdapat satu masalah, dimana seorang attacker masih belum dapat melakukan eksploitasi lebih lanjut, dikarenakan password yang didapatkan itu masih dalam bentuk password yang terenkripsi, sehingga butuh perlakuan khusus lebih lanjut untuk mendapatkan password yang sesungguhnya. Di sinilah penulis akan mencoba menjelaskan sebuah konsep sederhana bagaimana mendapatkan suatu password asli yang terenkripsi, namun penulis hanya membatasi cracking password pada satu jenis hash saja, yaitu joomla hash password. Penjelasan yang akan penulis lakukan bukanlah mencoba membuat algoritma dekripsi password tetapi hanyalah penggunaan metode dictionary file, dimana untuk mendapatkan password asli cukup dilakukan pencocokan password dengan kamus data yang ada sehingga menghasilkan password yang sebenarnya. :D. Namun setiap aplikasi selalu saja memiliki kekurangan, penulis tidak menafikan hal itu. Karena kesempurnaan hanyalah milik sang Pencipta. ;) Kekurangannya adalah resource memori yang di butuhkan untuk metode seperti ini cenderung lebih besar dari ukuran biasanya.
Berikut adalah source code lengkap ‘simple joomla password cracker’ :
———————–// cut here
<HTML>
<HEAD>
<BASEFONT SIZE=3>
<TITLE>::: Joomla Password Cracker :::</TITLE>
</HEAD>
<BODY BGCOLOR=#000000 vlink=#0000FF>
<center>
<p align=”center”><font face=”Verdana” size=”1″><BR>
</B><BR>
  </font></p>
<p align=”center”> </p>
<p align=”center”> </p>
<TABLE BORDER=0 WIDTH=500 CELLPADDING=3 CELLSPACING=0>
<tr><td> <p align=”center” style=”margin-top: 0″><font color=”#FFFFFF” face=”Verdana” size=”2″><u><font size=”4″>Simple</font></u>
</font><font size=”4″><u><font face=”Verdana” color=”#00FF00″><strong>Joomla</strong></font> <font color=”#FFFFFF” face=”Verdana”>Password Cracker</font></u></font><font size=”2″><font color=”#FFFFFF” face=”Verdana”><br>
<font color=”#00FF00″>Developed by<strong> : ilmuwebsite.com </strong></font></font></font></p>
    </td>
</tr>
</table>
<!–  Demonstration –>
<BODY>
<center>
  <form action=index.php method=”POST”><p>
    <P>
<b>
<font size=”2″ face=”Verdana” color=”#FFFFFF”><u>Masukkan  </u></font></b><u><font size=”2″ face=”Verdana” color=”#FFFFFF”>password hashnya disini :</font></u><font size=”2″ face=”Verdana” color=”#FFFFFF”></font><font color=”#00FF00″ size=”1″ face=”Verdana”><br>
<BR>
<input type=”text” name=”hash” size=55 style=”font-family: Verdana; font-size: 8pt; color: #00FF00; border: 1px solid #00FF00; background-color: #000000″>
<input type=”submit” name=”send” value=”Cari !!!” style=”font-family: Verdana; font-size: 8pt; color: #00FF00; border: 1px solid #00FF00; background-color: #000000″>
</font>
<P><br>
</form>
 
<?php
$hashes=array();
$i=0;
$parts=explode(“:”,$_POST['hash']);
$hashes[$i][0]=$parts[0]; 
$hashes[$i][1]=$parts[1];
if (ISSET($_POST['hash']))
{
$str = ” “;
echo “<font size=2 face=Verdana color=#FFFFFF><u>Started: </u>”;
echo date(“F j, Y, g:i:s a”);
$lines = file(‘kamus2.txt’);
foreach ($lines as $line_num => $line)
{
check($line);
}
$lines = file(‘kamus1.txt’);
foreach ($lines as $line_num => $line)
{
check($line);
}
echo “<br><font size=2 face=Verdana color=#FFFFFF><u>Finished : </u>”;
echo date(“F j, Y, g:i:s a”);
}
function check($a)
{   
global  $i;
$a=rtrim($a) ;
for($x=0;$x<=$i;$x++)
{
global  $hashes;
if (md5($a.$hashes[$x][1]) === $hashes[$x][0])
{
echo “<font size=2 face=Verdana color=#FFFFFF><br><br><u>The password is : </u></font><font size=2 face=Verdana color=#00FF00><h1>$a</h1></font>”;
echo “<u>Ended: </u>”;
echo date(“F j, Y, g:i:s a”);
}
}
        
}
?>
<font size=”2″ face=”Verdana” color=”#FFFFFF”><u><br><br>Tolong di kembangkan ya ?! :D </u></font>
</center>
</body></html>
———————–// cut here
Untuk menjalankan script ini di localhost anda perlu merubah konfigurasi php.ini, yaitu dengan mengganti baris ini :
memory_limit = 32M ;










menjadi > 32, penulis menggantinya menjadi :
memory_limit = 256M ;
Ya, sebelum berlanjut, penulis akan membahas struktur password joomla yang terenkripsi terlebih dahulu, enkripsi password joomla biasanya terdiri dari hash dan salt.  Standar enkripsi joomla biasanya berbentuk seperti ini :
b51498faae03f7cf533e3ed97fc00116:9VrQpQzdNQHhtieK
Hashnya itu terdapat pada bagian yang pertama yaitu b51498faae03f7cf533e3ed97fc00116, dan saltnya itu ada di bagian akhir 9VrQpQzdNQHhtieK, keduanya terlihat di pisahkan dengan titik dua “:”. Salt bagi seorang attacker berfungsi untuk membantu dalam pencarian password sesungguhnya.
Yang ditemukan disini adalah jika password berbentuk plain text di gabung dengan saltnya maka akan menghasilkan hash password joomla. Dengan kata lain jika : x + salt = hash joomla. Sehingga jika di implementasikan melalui enkripsi md5 :
md5(x + salt) = hash
maka :
md5(x + 9VrQpQzdNQHhtieK) = b51498faae03f7cf533e3ed97fc00116
berapakah x ? ( pak Mamat guru matematika di SMAN 4 Bogor kayanya tau. :D huehuehuehehe…  )
Ya seperti pada baris kalimat ini :

if (md5($a.$hashes[$x][1]) === $hashes[$x][0])
{
echo “<font size=2 face=Verdana color=#FFFFFF><br><br><u>The password is : </u></font><font size=2 face=Verdana color=#00FF00><h1>$a</h1></font>”;

Dan hasilnya adalah …















:D~~
Penulis yakin anda cukup familiar dengan source di atasnya. Dan algoritmanya pun cukup mudah. Script lengkap dan kamus passwordnya dapat di download di sini
Selamat mencoba. Selamat mengembangkan ! :D

Selasa, 29 Maret 2011

kriptografi hibrid

3. Algoritma Hibrida
Algoritma hibrida adalah algoritma yang memanfaatkan dua tingkatan kunci, yaitu kunci rahasia (simetri) – yang disebut juga session key (kunci sesi) – untuk enkripsidata dan pasangan kunci rahasia – kunci publik untuk pemberian tanda tangan digital serta melindungi kunci simetri.

Gambar Algoritma Hibrida
Algoritma kriptografi yang beroperasi dalam mode bit dapat dikelompokkan menjadi dua kategori:
1. Cipher aliran (stream cipher)
Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk bit tunggal, yang dalam hal ini rangkaian bit dienkripsikan/didekripsikan bit per bit. Stream chiper atau stream encryption merupakan suatu teknik enkripsi data dengan cara melakukan transformasi dari tiap bit secara terpisah berdasarkan posisi tiap bit dalam aliran data yang biasanya dikendalikan menggunakan operasi XOR. Enkripsi aliran data merupakan hasil dari operasi XOR antara setiap bit plaintext dengan setiap bit kuncinya. Pada stream chiper bila terjadi kesalahan selama transmisi maka kesalahan pada teks enkripsi penerima akan terjadi tepat di tempat kesalahan tersebut terjadi. Dalam praktek pertimbangan kesalahan yang mungkin terjadi sangatlah penting untuk penentuan teknik enkripsi yang akan digunakan.

2. Cipher blok (block cipher)
Algoritma kriptografi beroperasi pada plainteks/cipherteks dalam bentuk blok bit, yang dalam hal ini rangkaian bit dibagi menjadi blok-blok bit yang panjangnya sudah ditentukan sebelumnya.
Misalnya panjang blok adalah 64 bit, maka itu berarti algoritma enkripsi memperlakukan 8 karakter setiap kali penyandian (1 karakter = 8 bit dalam pengkodean ASCII).
Rangkaian bit yang dipecah menjadi blok-blok bit dapat ditulis dalam sejumlah cara bergantung pada panjang blok.
Contoh: Plainteks 100111010110 dibagi menjadi blok bit yang panjangnya 4
menjadi 1001 1101 0110
Setiap blok menyatakan bilangan bulat dari 0 sampai 15, yaitu 9 13 6
Bila plainteks dibagi menjadi blok-blok yang berukuran 3 bit, maka rangkaian bit di atas menjadi 100 111 010 110
Setiap blok menyatakan bilangan bulat dari 0 sampai 7, yaitu 4 7 2 6
Bila panjang rangkaian bit tidak habis dibagi dengan ukuran blok yang ditetapkan, maka blok yang terakhir ditambah dengan bit-bit semu yang disebut padding bits.
Misalnya rangkaian bit di atas dibagi menjadi blok 5-bit menjadi
10011 10101 00010
Blok yang terakhir telah ditambahkan 3 bit 0 di bagian awal (dicetak tebal) agar ukurannya menjadi 5 bit. Padding bits dapat mengakibatkan ukuran plainteks hasil dekripsi lebih besar daripada ukuran plainteks semula.
Cara lain untuk menyatakan rangkaian bit adalah dengan notasi heksadesimal (HEX). Rangkaian bit dibagi menjadi blok yang berukuran 4 bit dengan representasi dalam HEX adalah: 0000 = 0 0001 = 1 0010 = 2 0011 = 3
0100 = 4 0101 = 5 0011 = 6 0111 = 7
1000 = 8 1011 = 9 1010 = A 1011 = B
1100 = C 1101 = D 1101 = E 1111 = F
Misalnya, plainteks 100111010110 dibagi menjadi blok bit yang panjangnya 4 menjadi 1001 1101 0110 yang dalam notasi HEX adalah 9 D 6
*Operator XOR
Operator biner yang sering digunakan dalam cipher yang yang beroperasi dalam mode bit adalah XOR atau exclusive-or.
Notasi matematis untuk opeartor XOR adalah ⊕ (dalam Bahas C, operator XOR dilambangkan dengan ^).
Operator XOR diperasikan pada dua bit dengan aturan sebagai berikut:

0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0
Operator XOR identik dengan penjumlahan modulo 2.
Misalkan a, b, dan c adalah peubah Boolean. Hukum-hukum yang terkait dengan operator XOR:
(i) a ⊕ a=0
(ii) a ⊕ b = b ⊕ a (Hukum komutatif)
(iii) a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c (Hukum asosiatif)
Jika dua rangkaian dioperasikan dengan XOR, maka operasinya dilakukan dengan meng-XOR-kan setiap bit yang berkoresponden dari kedua ramngkaian bit tersebut.
Contoh: 10011 ⊕ 11001 = 01010
yang dalam hal ini, hasilnya diperoleh sebagai berikut:
1 0 0 1 1
1 1 0 0 1 ⊕
1 ⊕ 1 0 ⊕ 1 0 ⊕ 0 1⊕ 0 1 ⊕ 1
0 1 0 1 0
Algoritma enkripsi sederhana yang menggunakan XOR adalah dengan
meng-XOR-kan plainteks (P) dengan kunci (K) menghasilkan cipherteks:
C = P ⊕ K (6.1)
Karena meng-XOR-kan nilai yang sama dua kali menghasilkan nilai semula, maka proses dekripsi menggunakan persamaan:
P = C ⊕ K (6.2)
Contoh: plainteks 01100101 (karakter ‘e’)
kunci 00110101 ⊕ (karakter ‘5’)
cipherteks 01010000 (karakter ‘P’)
kunci 00110101 ⊕ (karakter ‘5’)
plainteks 01100101 (karakter ‘e’)
Program komersil yang berbasis DOS atau Macintosh menggunakan algoritma XOR sederhana ini. Sayangnya, algoritma XOR sederhana tidak aman karena cipherteksnya mudah dipecahkan.

Kamis, 24 Maret 2011

Kriptografi Simetris


Algoritma Simetris (Algoritma Sandi Kunci Rahasia)

Algoritma simetris, sering juga disebut dengan algoritma kunci rahasia atau sandi kunci rahasia. Adalah algoritma kriptografi yang menggunakan kunci enkripsi yang sama dengan kunci dekripsinya. Algoritma ini mengharuskan pengirim dan penerima menyetujui suatu kunci tertentu sebelum mereka saling berkomunikasi. Keamanan algoritma simetris tergantung pada kunci, membocorkan kunci berarti bahwa orang lain dapat mengenkripsi dan mendekripsi pesan. Agar komunikasi tetap aman, kunci harus tetap dirahasiakan.

Sifat kunci yang seperti ini membuat pengirim harus selalu memastikan bahwa jalur yang digunakan dalam pendistribusian kunci adalah jalur yang aman atau memastikan bahwa seseorang yang ditunjuk membawa kunci untuk dipertukarkan adalah orang yang dapat dipercaya. Masalahnya akan menjadi rumit apabila komunikasi dilakukan secara bersama-sama oleh sebanyak n pengguna dan setiap dua pihak yang melakukan pertukaran kunci, maka akan terdapat sebanyak (n-1)/2 kunci rahasia yang harus dipertukarkan secara aman.

Contoh dari algoritma kriptografi simetris adalah Cipher Permutasi, Cipher Substitusi, Cipher Hill, OTP, RC6, Twofish, Magenta, FEAL, SAFER, LOKI, CAST, Rijndael (AES), Blowfish, GOST, A5, Kasumi, DES dan IDEA.

Kriptografi Asimetris

RSA merupakan algoritma kriptografi asimetris. Ditemukan pertama kali pada tahun 1977
oleh Ron Rivest, Adi Shamir, dan Leonard Adleman. Nama RSA sendiri diambil dari inisial nama
depan ketiga penemunya tersebut. Sebagai algoritma kunci publik, RSA mempunyai dua kunci,
yaitu kunci publik dan kunci pribadi. Kunci publik boleh diketahui oleh siapa saja, dan digunakan
untuk proses enkripsi. Sedangkan kunci pribadi hanya pihak - pihak tertentu saja yang boleh
mengetahuinya, dan digunakan untuk proses dekripsi. Algoritma RSA masih digunakan hingga
pada saat ini seperti yang diuraikan M. Zaki Riyanto dan Ardhi Ardhian:
Keamanan sandi RSA terletak pada sulitnya memfaktorkan bilangan yang besar. Sampai
saat ini RSA masih dipercaya dan digunakan secara luas di internet. (Kriptografi Kunci Publik:
Sandi RSA, 2008).

Gambar 1 Skema Kunci Asimetris
Skema algoritma kunci publik Sandi RSA terdiri dari tiga proses, yaitu proses
pembentukan kunci, proses enkripsi dan proses dekripsi. Sebelumnya diberikan terlebih dahulu
beberapa konsep perhitungan matematis yang digunakan RSA (RSA and Public Key
Criptography, 2003, hlm 61).
Algoritma Pembentukan Kunci:
1. Tentukan p dan q bernilai dua bilangan Prima besar, acak dan dirahasiakan.
p ≠ q, p dan q memiliki ukuran sama.
2. Hitung n = pq
Dan hitung ı(n) = (p-1)(q-1).
Bilangan integer n disebut (RSA) modulus.
3. Tentukan e bilangan Prima acak, yang memiliki syarat:
1 < e < ı(n) GCD(e, ı(n)) = 1, disebut e relatif prima terhadap ı(n), Bilangan integer e disebut (RSA) enciphering exponent. 4. Memakai algoritma Euclid yang diperluas (Extended Eucledian Algorithm). Menghitung bilangan khusus d, syarat 1 < d < ı(n) d ≡ e-1 mod ı(n) ed ≡ 1 (mod ı(n)) ed ≡ 1 + k.ı(n) untuk nilai k integer. Bilangan integer d disebut (RSA) deciphering exponent. 5. Nilai (n,e) adalah nilai yang boleh dipublikasi. Nilai d, p, q, ı(n) adalah nilai yang harus dirahasiakan. Pasangan (n,e) merupakan kunci publik. Pasangan (n,d) merupakan kunci rahasia. Keterangan · Fungsi ı(n) Phi-Euler merupakan fungsi terhadap bilangan bulat positif n yang meyatakan banyaknya elemen Zn yang mempunyai invers terhadap operasi pergandaan. Zn belum tentu merupakan grup terhadap operasi pergandaan, dengan kata lain, ı(n) adalah banyaknya elemen {x, 0 ≤ x < n | gcd(x,n) = 1} · Algoritma Euclid digunakan untuk mencari nilai GCD (Greatest Common Divisor) atau sering disebut FPB (Pembagi Persekutuan terbesar) dari dua bilangan bulat. Algoritma ini didasarkan pada pernyataan gcd (r0, r1) = gcd(r1, r2) ... gcd(rn-1, rn) = gcd(rn, 0) = rn Contoh: Akan dihitung gcd(40,24) Jawab: 40 = 1.24 + 16 40 mod 24 = 16 24 = 1.16 + 8 24 mod16 = 8 16 = 2.8 16 mod 8 = 0, stop Jadi gcd(40,24) = 8. Dua buah bilangan bulat a dan b akan dapat dikatakan relatif prima jika gcd(a,b) = 1. · Enkripsi: c = me mod n · Dekripsi: m = cd mod n Contoh enkripsi: Untuk mengenkripsi, dilakukan langkah – langkah sebagai berikut ini: - Ubah tiap karakter teks terang menjadi bilangan bulat 01 - 26 (A = 01, B = 02, … , Z = 26), dan bagi teks menjadi beberapa blok b yang besar tiap bloknya lebih kecil dari n. - Untuk tiap blok, hitung c = be (mod n). c menjadi blok teks sandi yang dikirimkan. Untuk mendekripkan kembali teks sandi, dilakukan langkah-langkah sebagai berikut : 9 JURNAL INFORMATIKA, VOLUME 5 NOMOR 1, APRIL 2009 - Hitung bilangan bulat d sedemikian hingga de = 1 (mod (p-1)(q-1)). Pasangan (n, d) merupakan kunci rahasia. - Untuk setiap blok sandi c yang diterima, hitung b = cd (mod n). Bagi pembuat sandi, dengan memilih 2 buah bilangan prima p dan q, tidaklah sulit untuk menghitung kunci publik n = pq, serta mendekripkannya kembali. Contoh Perhitungan: Andaikan B memilih p = 13 dan q = 17. Maka n = pq = 221. Berikutnya, misalkan secara acak B memilih e = 5 yang merupakan bilangan yang relatif prima dengan (p-1)(q-1) = 192. Maka kunci publik (n, e) = (221, 5). A hendak mengirim teks “TAMAN”, maka ia harus mengubahnya menjadi barisan angka - angka sebagai (A = 01, B = 02 , …): 20 01 13 01 14. Misalkan A mengambil blok dengan panjang 3 digit, maka ia memiliki 4 blok untuk disandikan, masing - masing adalah 200, 113, 011, 4 200 disandikan menjadi (200)5 (mod 221) = 200 113 disandikan menjadi (113)5 (mod 221) = 146 011 disandikan menjadi (11)5 (mod 221) = 163 4 disandikan menjadi (4)5 (mod 221) = 140 B yang menerima pesan sandi dari A harus mencari kunci rahasia yang didapat dari relasi ed = 5d = 1 (mod192). Didapat d = 77. Maka : didapat pesan asli 200 113 011 4 yang jika dikelompokkan dalam 2 digit menjadi 20 01 13 01 14 atau teks “TAMAN” seperti pesan semula. blok sandi 200 didekrip menjadi (200)77 (mod 221) = 200 blok sandi 146 didekrip menjadi (146)77 (mod 221) = 113 blok sandi 163 didekrip menjadi (163)77 (mod 221) = 11 = 011 (karena 3 digit) blok sandi 140 didekrip menjadi (140)77 (mod 221) = 4

Senin, 21 Maret 2011

H2C


Tak kuasa rasanya memikul beban Cinta ini terlalu dalam
apakah sia-sia aku menanti sepatah kata Cinta darimu...
hanya sepi yang memagut dan ruang kosong

Karena hadirmu mampu menyulam sepi yang terus menggerogoti hariku
seperti pagi yang selalu memberikan benderang untuk bumi
Hanya karena cintaku jualah
aku terus bertahan memangkul beban asa yang setia ku bakuan untukmu...

Berharap kamu datang dan membawa kabar cinta untukku...

Tergores Luka


Awalnya,yang kulihat adalah cahaya terang merona diwajahmu
betapa kurasa lepas semua bebanku bila kau ajakku tertawa
apalagi yang bisa aku lakukan selain memanjatkan ribuan doa tuk kekuatan hatimu....

Samar bayangmu tak lagi bisa ku sentuh
cahaya kulihat semakin pudar
hari-hariku mulai berjalan dalam aliran detak jantung yang gelisa
aku tengadah layangkan seribu bertanya
apa lagi yang kamu cari hingga meninggalkanku begini saja
Cintamu berlalu menyisakan pedih
hanya kecewa yang mendera
Rasanya,tak ingin kulihat lagi waktu berputar esok hari tanpamu....

Lov


Aku telah jatuh cinta saat pertama kita bertemu
Wajahmu selalu menghantui malam-malamku
seindah pula rasa cinta yang bersemayang dalam dadaku
saat mata,senyum dan tawamu tumpah tanpa beban
aku telah sampai satu keputusan
yang aku tahu,aku mencintaimu....
itu yang aku rasakan

dan apa lagi yang harus ku sembunyikan
kalau kenyataanya jatung ini masih mengeja namamu di setiap hentakan nafas
andai saja ada kekuatan, kata-kata cinta akan ku persembahkan untukmu.........

mungkin yang paling membahagiakan dalam hidupku saat pertama kali aku katakan padamu
meski aku tak tahu, apakah kau akan menerima CINTAKU....