Joven hacker sonriendo
Formulario de autenticación con captcha

Captcha misteriosa

Solución al reto captcha 2 de ChallengeLand
Los captchas son filtros que tienen como objetivo verificar que el usuario de una aplicación es un humano y no un robot, sin embargo a través de programación y librerías especializadas en tratamiento de imágenes es posible sobrepasar estos filtros, aquí mostramos un ejemplo de aplicación.

Las captchas son los test o pruebas digitales que determinan si el usuario es un humano o un robot. Este test es controlado por una máquina que se encarga de generar una imagen distorsionada de un texto, y pide al usuario ingresar el texto de la imagen distorsionada.

En teoría el humano y no el robot es capaz de identificar el texto de la imagen distorsionada.

catpcha
Imagen 1. Captcha de Wikipedia "smwm"

Captchas y seguridad

Las captchas se implementan corrientemente con el fin de evitar que robots digitales malintencionados accedan a ciertos servicios en la web, como por ejemplo crear cuentas falsas en sitios web y enviar correos basuras o "spam", o que puedan participar en encuestas y foros con propósitos no adecuados.

OCR

OCR del inglés Optical Character Recognition o reconocimiento de caracteres, es en informática el proceso de procesar una imagen que contiene algún tipo de texto, identificar los caracteres de ese texto y generar digitalmente un texto con estos caracteres. Es muy común la utilización de inteligencia computacional en los programas OCR y se podría decir con certeza que estos programas son el principal enemigo de los Captchas.

Reto ChallengeLand Captcha 02

Este reto consiste en diseñar un programa capaz de resolver un test Captcha.

Se va a utilizar el lenguaje Python para diseñar este programa y se va implementar la librería OCR Pytesser para transformar una imagen a texto.

EL captcha del reto, es una imagen con un texto de alrededor de 10 caracteres, el cual es generado aleatoriamente, además se encuentra rotado:

reto
Imagen 2. Captcha del reto

El objetivo del reto es enviar el texto de la imagen en un lapso no mayor a 3 segundos.

El programa queda de la siguiente manera:

1.Se importan las librerías necesarias:

test.py
1
2
3
4
5
from PIL import Image
from StringIO import StringIO
from pytesser import *
import requests
import urllib

2.Se carga la información necesaria para ejecutar una sesión http con la página web:

1
2
3
4
5
cap = 'Captcha'
sol = 'Solve'
url = 'http://challengeland.co/Challenges/Captcha/60e9d06ada'
cookie = {'ci_session':'c225fd80a7d5223526b8ddda84d91c04b5502e3c'}
solution = 'GOSO'

3.Se abre una sesión http para abrir la imagen:

1
2
3
s = requests.Session()
page_image = s.get(url+cap, cookies=cookie)
im = Image.open(StringIO(page_image.content))

4.Se rota la imagen y se guarda:

1
2
3
4
5
dst_im = Image.new("RGBA", (200,200), "white" )
im = im.convert('RGBA')
rot = im.rotate( -70, expand=1 )
dst_im.paste( rot, (0, 00), rot )
dst_im.save('cap.png')

Nota: La imagen derecha quedaría:

rotacion
Imagen 3. Imagen rotada

5.Se abre esta imagen y se transforma a texto con la ayuda de la librería pytesser (esta librería debe estar disponible en la carpeta de este código):

1
2
3
image_file = 'cap.png'
text = image_file_to_string(image_file)
solution = text.strip()

6.Finalmente imprimimos por pantalla el texto-solución, luego hacemos una petición post con el texto-solución al link de la solución del reto (con los parámetros indicados por el reto):

1
2
3
4
print solution
payload = {"solve": solution}
posted = s.post(url+sol, data=payload)
print posted.content

El programa anterior no se demora mas de 1 segundo en realizar todo el proceso, por esto esta Captcha es demasiado insegura y muy vulnerable al ataque por parte de robots automatizados, el único verdadero problema que se enfrentó fue el de rotar la imagen para que esta quedara derecha y que para el software OCR fuera mas fácil reconocer el texto.

Debido a lo anterior es importante siempre utilizar Captchas seguras, para prevenir que robots mal intencionados entren a nuestros sitios web y roben información o inyecten información basura (spam).


Foto del autor

Alejandro Aguirre Soto

Ingeniero mecatrónico, Escuela de Ingeniería de Antioquia, Maestría en Simulación de sistemas fluidos, Arts et Métiers Paristech, Francia, Java programming specialization, Duke University , USA

Apasionado por el conocimiento, el arte y la ciencia.


Relacionado





Haz un comentario

Estado de los servicios - Términos de Uso