RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

En el post anterior analizamos el escenario vulnerable al que nos enfrentaremos y explicamos los motivos por los cuales las herramientas de búsqueda y explotación de vulnerabilidades no sirven (al menos no para este caso. Debido a lo explico, tocaba realizar un ataque con un análisis y herramientas personalizadas.

  • Realizar una solicitud a la página web del formulario para obtener la imagen que contiene el Captcha y descifrarlo.
  • Obtener la cookie de petición de la página web, la cookie se asocia con la imagen Captcha obtenida.

Sin mucho floro vamos a iniciar a explicar como hacerlo.

1. Obtener la imagen Captcha y la Cookie

Vamos a usar Python 2.7 y la librería URLLIB para obtener la imagen.

Voy a explicar rápidamente lo que realizamos en cada línea:

  • urllib.urlretrieve: Nos conectamos a la página y descargamos la imagen que contiene el Captcha y lo almacenamos como “captcha.png”
  • URLopen[1]['set-cookie']: Obtenemos la cookie, esto nos sirve debido a que el código Captcha está asociado a la sesión creada.

Los detalles restantes no lo voy a explicar, es decir, tendrán que de pronto entrar a la documentación para entender el total del código. Aunque creo que con lo que explico está súper claro.

 

2. Trabajando la imagen Captcha

Aquí podríamos explayarnos sobre como tratar imágenes, en especial porque depende de la imagen con la que nos encontremos. Hay todo tipo de imágenes que contienen un Captcha pero para nuestro ejercicio vamos a trabajar la imagen desde dos perspectivas: limpieza del lienzo, tamaño de la imagen y mejoramiento del mismo.

  1. Limpieza del lienzo y mejoramiento: Vamos a borrar el fondo de la imagen para que sólo queden sólo los números y además vamos a cambiarle el color a negro.
  2. Tamaño de la imagen: Vamos a aumentar su tamaño.

Lo primero que vamos a ejecutar es la función RESIZER ( ), obtenemos el tamaño de la imagen y la multiplicamos por 5 el alto y el ancho de la imagen original para finalmente volver a grabarla con el nombre captcha.png.

Lo segundo que vamos a ejecutar es la función MONOCROMO ( ), el objetivo de la misma y limpiar el fondo del lienzo y dejarlo limpio por completo. La estrategia para limpiar el lienzo (al menos de este Captcha) es encontrar un patrón en el fondo de la imagen para poder modificar cada pixel que cumple con ese patrón.

Para este caso en particular lo peculiar es que el color del fondo siempre es de un color más tenue que el color negro de los números, eso se puede traducir en  el modelo RGB para encontrar un patrón. El modelo RGB asigna un valor de intensidad a cada pixel, entre más claro sea el color, es decir, más se acerque al color blanco el valor RGB es superior y entre más se acerque al negro el valor RGB es valor tiende a cero.

En la imagen se muestra los tres (03) valores que componen el modelo RGB  y cada uno tiene un valor de 200, por lo que la suma de los tres valor siempre será un número superior a 400, obviamente he llegado a esa conclusión después de analizar varios pixeles del fondo de la imagen que estamos analizando.

7

Es por ese motivo que el script realizamos lo siguiente:

  1. pix = img1.load(): Utilizamos el método load para obtener acceso a cada pyxel.
  2. sum(pix[x,y])<400: Si la suma de los tres valores del modelo RGB es superior a 400 (es decir no es color negro del número), lo que vamos a realizar es que lo convertimos a color blanco y viceversa si es inferior a 400 cambiamos el pyxel en color negro de la siguiente manera: pix[x,y]=(0,0,0).

Después de trabajar la imagen podemos ver la importante diferencia entre el antes y el después, primero colocaré la imagen agrandada con el lienzo de fondo y la segunda imagen con el lienzo limpio, de esta manera la imagen queda más legible para luego ser reconocida.

 

9

 

8

Aquí vamos a dejar el segundo POST donde hemos trabajado la imagen a través de Python. Algunos detalles adicionales que me gustaría mencionar:

  1. El módulo Image de Python tiene muchas funciones y métodos. Pueden revisar la documentación aquí: [AQUÍ]
  2. Existen Captcha más complejos, por ejemplo con los números con cierto grado de inclinación y tocaría utilizar funciones matemáticas para encontrar el grado de inclinación y rotar la imagen, es decir, caracter por caracter.
  3. Toca trabajar con un script distinto según sea el tipo de imagen con los que nos encontremos, en otro post publicaré como manejar imágenes inclinadas y con líneas que cruzan la imagen principal, pero eso será en otro post.

Aquí dejo el script para que lo revisen con calma y vayan practicando.

Popularity: 21% [?]

Si te gusto este post, asegurate de suscribirte a mi RSS feed!

Omar Palomino

Hola mi nombre es Omar Palomino. Si te gustan las noticias de mi blog, no olvides suscribirte a la página. Puedes leer más en Acerca de MI, o bien ponerte en contacto conmigo al correo: omarc320@gmail.com

More Posts - Website

Post Relacionados

SI TE GUSTO ESTE ARTICULO, COMPARTELO!


Comments

There are 3 comments for this post.

  1. Gustavo on Reply to this comment Abril 24, 2014 7:55 am

    Es mi parecer o falta algo?

  2. oscar on Reply to this comment Mayo 7, 2014 10:07 pm

    Hola:
    Ahora que agrandamos la imagen, invertimos los colores para que es necesario hacer eso? que viene despues? que hago con todo ese codigo en phyton?
    Atte.

  3. ANÁLISIS CAPTCHA: INYECCIÓN DE CÓDIGO SQL–PARTE III | Blog de Omar on Reply to this comment Junio 16, 2014 1:33 am

    […] ANÁLISIS CAPTCHA: INYECCIÓN DE CÓDIGO SQL–PARTE II [AQUÍ] […]

Write a Comment

*

Spam Protection by WP-SpamFree