Captcha Cracking

Anda pasti sudah tau captcha. Yaa minimal pernah ketemu makhluk ini waktu register email atau waktu ngisi guestbook blog teman. Captcha merupakan metode security untuk memfilter botnet/scripting sehingga melindungi website dari tujuan tidak baik. Katakanlah ada botnet spesialis “nyampah komen 1000x dalam satu kali eksekusi” di form guestbook anda. Tinggal tambahkan captcha, jadi deh si scirpt tidak segampang itu nyampah di guestbook anda.

Cara kerja captcha dengan challenge-response, yaitu memberikan challenge berupa tebak gambar yang selalu berubah (ini contoh captcha yang umum), beberapa ditemui juga captcha soal hitungan, dsb. Kita sebagai manusia kemudian memberi input (response)-nya. Captcha merupakan cara yang sangat ampuh mengeliminasi robot yang tentu bakal kesusahan menebak huruf (ataupun mengenal angka kemudian menghitungnya). Sehingga efektifitas captcha menurut saya seharusnya ada 2 saja dan tidak neko-neko.. yaitu hanya:

  1. Menyulitkan robot
  2. Tidak menyulitkan manusia.

Captcha Gag
Captcha Gag

Nah bagaimana kalau malah sebaliknya? Kehadiran captcha di form guestbook nya justeru gampang ditebak oleh robot/scripting? Ini sama aja dengan gak usah pake captcha aja sekalian hehe, karena malah mbikin repot orang yang mau ngisi guestbook hahaha. Inilah yang terjadi di guestbook sebuah website yang saya temui di internet. Challenge captchanya hanya merupakan text biasa (bisa di drag seperti text lainnya). Apa akibatnya? Sangat mudah bagi saya untuk mengambil valuenya dan merespon challengenya dengan tingkat ketepatan 100%.

Guestbook Target
Guestbook Target

Cracking da Captcha

Yang dibutuhkan untuk break captcha di atas adalah mencari nilai pertama dan kedua itu kemudian dijumlahkan. Dalam contoh breaking captcha yang khususon dibuat teruntuk aplikasi web ini, saya menggunakan PHP sederhana dengan code seperti di bawah ini (mohon maaf kalo codenya belepotan, gegara coding mode FYWIWA –fuck yeah whatever, it works anyway!).

<?php
$url = "http://www.*******";
$str = file_get_contents($url);
$pos1 = strpos($str,"easycalccheck");
$pos2 = strpos($str,"<td>",$pos1);
$pos3 = strpos($str,"=",$pos2);
$equation = trim(substr($str,$pos2+10,$pos3-$pos2-11));
$equation = str_replace(" ", "", $equation);
eval("\$captcha=$equation;");
print $equation."=".$captcha."\n";
?>

Beginilah hasil eksekusi script PHP di atas. Yeah, walaupun ada 10 challenge captcha si target, semuanya dengan mudah di pecahkan oleh program.

Captcha Cracked
Captcha Cracked

Well, seperti yang sudah sering dibahas para praktisi IT, security berbanding terbalik dengan convenience (kenyamanan). Semakin banyak aspek security akan membuat kenyamanan user menurun katanya.. Untuk contoh di atas ini misalnya, ngisi guestbook aja harus ngitung dulu. Ribet ya ‘kan? Haha. Web target kita di atas ini adalah salah satu contoh web yang menggunakan “captcha salah kaprah” yang bisa di pecahkan oleh script sederhana.

Pemasangan captcha tetap perlu untuk menyaring robot tetapi dengan syarat tentu saja menggunakan captcha yang benar, bukan captcha asal-asalan. Seharusnya menggunakan image ditambah dengan noise atau variasi-variasi gaya huruf sehingga tidak bisa ditebak juga dengan menggunakan metode optical character recognition (OCR) script/robot. Di bawah ini contoh sederhana menebak captcha menggunakan metode OCR dengan bantuan tools linux GOCR. Percobaan dilakukan dengan challenge bernilai “kAMpr3t”, yang mana salah satunya tidak diberikan noise sedikitpun.

Challenge-1
Challenge-1
Challenge Terbaca dengan Baik oleh GOCR
Challenge Terbaca dengan Baik oleh GOCR

Untuk gambar di atas itu, sangat mudah ditemukan dengan teknik OCR… gak lebih dari 1 detik. Nama image file di atas ini adalah “welengsek1.png”. Nah.. kalau gambar di bawah ini “welengsek2.png”, adalah contoh terakhir kita, dimana hanya dengan menambahkan 1 garis noise pada latar kata “kAMpr3t” nya… bisa terbacakah pada program GOCR? Hehe..

Challenge-2
Challenge-2
Challenge Tidak Tertebak oleh GOCR
Challenge Tidak Tertebak oleh GOCR

3 thoughts on “Captcha Cracking

Leave a Reply

Your email address will not be published. Required fields are marked *