RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Nos vemos en el CONEISC 2014…

logoDe hecho este es un post súper pequeño, sólo quería invitarlos al Congreso Nacional de Estudiantes de Ingeniería de Computación y Sistemas  (CONEISC) que se realizará en la ciudad de la eterna primavera, Trujillo, donde estaré dando una charla de seguridad de información: “Importancia de la Seguridad Digital” y dos talleres: “Ataques Web con Python”.

El congreso se ve muy chévere, espero que todos puedan ir y ser parte de este congreso anual. Además – y como siempre -  está muy chévere ir a Trujillo para volver a ver sol ya que en Lima la gris el sol no se asoma hace muchas semanas.

Nos vemos en Trujillo, los detalles de todas las ponencias, ponencias especializadas, talleres y turismo lo pueden ver [AQUÍ].

ponencias especializadas

 

 

talleres (1)

Popularity: 2% [?]

Post Relacionados

Triglicéridos, colesterol y otros exámenes médicos expuestos

Cuando tenía 16 años, cuando estaba por terminar el último año de colegio y cuando algunos de mis compañeros de aula lloraban ridículamente en medio de un mar de abrazos de despedida causados por el tan -  pero tan – esperado y épico viaje de promoción, a mi me dolía la cabeza. Siempre creí que tales escenas causaban nauseas en mi, desencadenando un pequeño, continuo y desesperante dolor de cabeza, no paso mucho tiempo para darme cuenta que el verdadero origen era otro, uno que me perseguiría por el resto de mi vida, triglicéridos.

Si señores, triglicéridos, y es que en ese momento a parte de no saber que carajos era eso,  no pude advertir lo jodido que sería llevar esa bendita enfermedad por el resto de mi vida. La verdad, he aprendido a cargar con los triglicéridos, tuve que darle una temprana despedida a las hamburguesas, papas fritas, pollo a la brasa y demás comida grasienta y rica de la  monumental gastronomía peruana, supongo que debe ser algún castigo de los dioses nacer en el país que se dice tener la comida más sabrosa del mundo y no poder disfrutarla en su totalidad.

Nunca se me hubiera ocurrido confesar mi dolencia en el blog, jamás!!! porque va en contra de lo que siempre predico, ya saben …. entre menos sepan de uno es mejor, les estás dando menos armas a todos aquellos que se la pasan jodiendo y pegándosela de valientes detrás de un blog, a todos esos estafadores que gastan su tiempo llamando a mi casa con menos ideas en cada intento (ya inventen otra cosa a parte de que estoy en arrestado en una comisaría por favor) y en general a todo aquel retrasado con problemas y complejos de inferioridad que está dispuesto a joder y a vociferar sus traumas en contra de otros por internet.

He decidido confesar mi enfermedad no porque haya renunciado a mi ideal de seguridad de información, sino porque lo que creí  hasta hace poco una enfermedad conocida sólo por mis padres, familiares y amigos muy cercanos es en realidad de conocimiento de todo el Perú, de los 30 millones de habitantes peruanos, de los casi 15 millones de ecuatorianos, de los 17.5 millones de chilenos, 47.2 millones de colombianos y de los 1,351 miles de millones de chinos que muy probablemente – y para suerte mía – no entienden ni una pisca de español.

Si señores con mucho pesar debo decirles que mis datos, nuestros datos, vuestros datos de análisis clínicos lo puede ver “cualquier hijo de vecino” sin tener mucho -  o casi nada – conocimiento informático.

¿Las vulnerabilidades?

1. El muy “difícil” formulario de ingreso

*************************************************************************************************************
- Haga puño su mano por favor -  dijo la enfermera
- ¿No me va doler, verdad? – dijo el chico temeroso
- Listo, ya terminé, sus resultados estarán en Internet por la tarde. Ingrese a esta página web, su usuario es la primera letra de su nombre más su primer apellido.
- ¿Y la contraseña? – pregunté ansioso, esperando un error escandaloso, un error que me permita escribir un post y me generará una mueca de felicidad.
- La contraseña es simple, coloque su número de DNI y ya está.

*************************************************************************************************************

Así terminó la corta, escueta pero fructífera conversación con la enfermera. Es como sacarse la “Tinka” (lotería peruana que nunca ganaré por simple estadística), que te faciliten la contraseña de todos los usuarios del sistema en tan sólo 02 minutos de conversación. ¿Se dieron cuenta del error, verdad? Si no se dieron cuenta aquí lo explico:

A. ¿Ustedes creen que los usuarios cambian las contraseñas por defecto? Mentira, las personas no lo cambian y menos de sistemas que utilizan sólo una (01) o dos (02) veces al año. La gente es perezosa, tiene tiempo para escribir en Twitter todo el puto día pero no tienen tiempo para buscar el enlace de cambio de contraseña.

B. Tenemos un perfecto patrón de contraseñas, el usuario de acceso es SIEMPRE la primera letra del nombre del cliente sumado a su apellido paterno. No se hagan los santos ahora, acaso no es lo primero que ustedes prueban cuando hacen auditorías y análisis de vulnerabilidades, los patrones más comunes a probar son:

- Nombre de la empresa + año actual. Por ejemplo: Empresa2014.
- Nombre de la empresa + 01. Por ejemplo: Empresa01, a veces también se suele probar: Empresa02
- Nombre de usuario + año actual. Por ejemplo: Opalomino2014.
- Y obviamente están las contraseñas más estúpidas de todos los tiempos: [AQUÍ]

C. ¿De dónde sacamos el nombre y los números de DNI?

Se me ocurren muchos pero muchos lugares donde encontrar números de DNI con sus respectivas personas, voy a colocar sólo dos (02) sitios donde encontrarlos:

Nuestra querida red social: Facebook

Facebook es la versión moderna de la caja de Pandora, entrar a Facebook por la mañanas al despertar es encontrarse con un mundo de sorpresas: relaciones que inician, relaciones que terminan, relaciones que habían terminado y que vuelven a iniciar por décima vez, uno se encuentra con despechados, despechadas, con psicólogos frustrados, con acomplejados que reniegan porque pierden licitaciones, gente que no puede contener sus sentimientos, uno más estúpido que el anterior. Gracias Facebook, eres una fuente inagotable de entretenimiento.

Y claro, en Facebook también podemos encontrar números de DNI con sus respectivos nombres, allí están, listos para ser secuestrados por todo aquel que esté mediamente atento. Si no me creen… miren:

image image

El concurso de una camiseta colombiana presentada por “Jimmy Santi” a través de un programa deportivo y miles de peruanos hambrientos de mundial colocando todos sus datos en Internet. Yo se, yo se, Colombia ha hecho un espectacular mundial pero de allí a que los peruanos se aloquen por una camiseta extranjera me parece -  por decir lo menos – bochornoso y penoso.

Los datos los he cubierto con una barra de color negro pero están en la página de Facebook del programa televisivo, así como estos hay miles de concursos realizados por estos señores y por otros programas y siempre dejan todos los DNI expuestos al terminar el concurso.

En el centro comercial “Wilson”

Peruano que se respeta o al menos limeño que se respeta, ha caído en ese cementerio de computadores malogrados, computadores descuartizados, computadores que han sido rearmados tantas veces como un transformer, computadores utilizados (vendidos como nuevos)  y es que todo  aquel componente informático que busquemos será encontrado en el centro comercial Wilson.

image

Pero no sólo se venden computadores, todos saben que ese rinconcito antiguo y de arquitectura colonial también provee a cualquier – sí escuchaste bien a “cualquier” – transeúnte armado de 40 nuevos soles en su billetera todos los datos financieros, datos de identificación personal y de estado civil de todos los peruanos. Sólo es necesario ir con cara de despistado, preguntarle de manera sigilosa al morenaje que está parado como vigilante en la puerta de la casona, mostrarle con recelo el dinero, negociar el mejor estilo peruano y brindarle tu memoria USB para obtener los datos necesitados.

Hace como un año el amigo de un amigo estuvo por esos lares, no es que haya querido comprar algo de lo que venden, jamás!!! digamos que estuvo  haciendo algo de turismo extremo y le copiaron unos archivos, de hecho le copiaron unas carpetas a su memoria USB, todo por la módica suma descrita arriba. La imagen está distorsionada por obvias razones.

 

dnis

 

 

 

Lo alucinante de esto  es que todo ocurre a vista y paciencia de todos,  además, todos en el Perú sabe que esta información la comercializan sin ningún pudor y nadie hace nada, la ley contra delitos informáticos (Ley Beingolea) y la ley de protección de datos personales, ley 29733, son un saludo a la bandera. 

¿Y como exploto la vulnerabilidad?

De hecho, ya todos los que leen esto deben imaginárselo, cojan el IDE  que más les guste y desarrollen un script que coja los nombres, los números de DNI y utilícenlo como usuarios y contraseña. HTTPLib, URLib y CURL son buenas librerías a utilizar con python y php respectivamente. Allí lo voy a dejar. 

¿Soluciones?

De hecho hay varias y todas muy factibles de aplicar:

  • Generación de clave aleatoria para el primer ingreso. Nadie debería poder adivinar esta contraseña, deberían entregarte la contraseña en un sobre cerrado por ejemplo.
  • Forzar el cambio de contraseña tras el primer ingreso al sistema. (a mi  no me solicitó el cambio de contraseña).
  • Complejidad de contraseñas: caracteres alfanuméricos, por lo menos una mayúscula y por lo menos un caracter extraño.
  • Y, obviamente en la actualidad con todo el malware y mecanismos de hacking que existen, esto no basta pero créanme con eso ya estamos haciendo bastante.

 

2. Mala gestión de sesiones

Aquí no acaba todo, por si no fuera suficiente con todo lo explicado líneas arriba, me terminé yendo de narices al entrar al sistema y revisar mis resultados médicos, que por cierto esta vez tenían buenas nuevas para mí, es decir, los triglicéridos se habían ido a tomar un descanso y yo estaba muy bien. Encontré errores garrafales, me encontré en el terreno de lo incierto no sabía cuantos errores más podría encontrar, errores que bordeaban muy claramente la pelotudez y que hacen que todos los datos con información sensible sean vulnerables.

Iniciemos rápidamente, el análisis:

  • Cualquiera puede cambiar la contraseña de otro usuario

Obviamente lo primero que tocaba realizar después de encontrar ese fallo de seguridad era cambiar mi contraseña, ponerle una contraseña respetable, una contraseña tediosa, rimbombante y que contrastara con la primera ridícula contraseña entregada. Sin embargo me di cuenta que en la parte superior, la URL contenía un código de usuario, entonces supuse que ese era el código interno que me había generado el sistema, un código de cliente. Obviamente estoy tapando la URL (en la imagen inferior) y sólo dejo parte de mi código de usuario.

pass

 

Entonces, se me ocurrió editar la URL y colocar otro código de usuario, sólo seguir la secuencia, es decir, si mi código de usuario termina en 74095 que tal si prueba con un código que termine en 740976 o 74097 y ver que ocurre. Al parecer los desarrolladores  pensaron que utilizando un poco de JavaScript podían evitar que otra persona cambie las contraseñas de otro usuario, de hecho utilizaron el método OPEN del objeto WINDOW pero obviamente esto es fácilmente de bypassear.

 

pass2

Así que decidí cambiar el código de usuario y listo, sistema vulnerable. Resulta que cualquier usuario podría cambiar la contraseña de cualquier otro usuario.

pass4

 

  • Cualquiera puede ver mis exámenes médicos

Al final esto es lo más grave, el error descrito arriba se debe a una mala gestión de sesiones, es decir, al cambiar de página web no existe un pedacito de código de programación que valide si existe una sesión creada por cada usuario logueado en el sistema y que restrinja las opciones de acceso. Entonces, sólo tocaba verificar si los resultados de mi examen los podía ver cualquier usuario o peor aún cualquier persona SIN NECESIDAD de ingresar al sistema.

Abrí otro navegador, copié la URL de mi examen médico y lo pegue con ansias, lo correcto hubiera sido que me redirija a una página de ingreso de credenciales pero lamentablemente mi examen médico y mis triglicéridos son expuestos a cualquiera.

En conclusión, cualquier persona  – sin necesidad de tener un usuario en el sistema – puede ver los exámenes médicos de cualquier otro, dicho de otra manera, todos pueden ver de que enfermedades puede uno sufrir. Malaso!

examen2

 

¿Y , ¿cómo lo hago?

De hecho es demasiado simple, toca coger la URL que tiene una estructura como esta: “http://www.pagina.com/resultado.php?orden=2014000001”, copiarlo en cualquier browser y listo, tienes los resultados médicos sin requerir un usuario y contraseña. Para ver los resultados médicos de otra persona sólo toca ir modificando la serie, es decir, sería algo así: “?orden=2014000002” y luego “?orden=2014000003”, si se dan cuenta los primeros 04 dígitos corresponden al año y luego los siguientes al número de la orden (miren la imagen en la parte inferior) que es un número secuencial.

image

Descargar la página web de resultados con algún script es sumamente sencillo, de hecho aquí les dejo un script de como descargar páginas – en internet abunda información –, obviamente con el script que está en la parte inferior no van a poder descargar realizar ningún ataque, estaría loco si publico algo así.

 

 

Google Hacking

También me pregunte si el crawling de Google había visitado alguno de los sitios web, la imagen en la parte inferior evidencia que Google también conoce el resultado de algunos exámenes médicos, pero lo más grave de todo es que ahora si alguien que encuentra estas URL se dará cuenta que no hay una gestión de sesiones adecuada.

google

 

 

Ley de Protección de Datos Personales, 29733

Mi tesis de maestría es sobre la Ley de Protección de Datos Personales y en la empresa donde trabajo – Kunak Consulting – brindamos consultoría sobre la implementación y adecuación de las empresas a esta ley. La vulnerabilidad encontrada y descrita en este post está totalmente relacionada a este tema, así que toca explicar algunos detalles sobre la misma:

Fuentes:

  • Reglamento de Ley de Protección de Datos Personales: [AQUÍ]
  • Directiva de Seguridad de la Información dada por la Autoridad Nacional de Protección de Datos Personales: [AQUÍ]

Datos sensibles:

La ley indica como datos sensibles lo siguiente:

image

Categorización:

Además, los requisitos como las medidas de control varían dependiendo del tipo de la clasificación de los datos personales, la directiva de seguridad de información indica lo siguiente en este caso (ver imagen inferior) y la clasificación del tratamiento para estos datos personales caen perfectamente en COMPLEJO y CRÍTICO en algunos casos. Por ejemplo, cuando se habla de “en múltiples localizaciones” se hace referencia a la TRANSFERENCIA de información, tema tratado ampliamente en la ley y cuando se habla de “respaldada por una norma legal”, pues como sabrán es obligatorio por las empresas que los empleados de una organización sean sometidos a exámenes preventivos anuales y finalmente los datos sensibles, hacen referencia a información sobre la salud.

 

image

 

Datos finales:

  1. Como verán no se ha utilizado ninguna herramienta de búsqueda de vulnerabilidades, todo lo realizado fue a través de un browser y un teclado.
  2. Reporté el error a la empresa en cuestión (que no ha sido mencionada), indicándoles que como un cliente de ellos y que almacenan mis exámenes médicos tenían una grave vulnerabilidad, sin embargo, hasta la fecha no hay respuesta al correo enviado ni a la llamada telefónica realizada.
  3. Ojala identifiquen su vulnerabilidad porque me imagino que exponer triglicéridos como en mi caso no es tan grave pero estoy seguro que puede haber información extremadamente sensible.

 

********************

Me encontré con una canción muy buena hace poco, la comparto porque cuando se tiene triglicéridos pareciera que uno sólo quiere “Vacaciones permanentes”.

Popularity: 4% [?]

Post Relacionados

ANÁLISIS CAPTCHA: INYECCIÓN DE CÓDIGO SQL–PARTE III

Vamos a terminar esta serie de post sobre las inyecciones de código a través de imágenes CAPTCHA. Habíamos desarrollado en los post anterior:

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

  • Identificación de la vulnerabilidad
  • Explicación de los mecanismos de explotación

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

  • Descarga de la imagen captcha a través de python
  • Tratamiento de la imagen captcha descargada con python

Sería buena idea que revisaran estos post  para poder entender este último con más claridad. En esta última parte toca realizar siguiente:

  1. Explicación del ataque a través de Blind SQLi
  2. Automatización del ataque con un script en Python

Explicación del ataque a través de Blind SQLi

Cuando uno realiza un ataque del tipo Blind SQLi, tenemos dos manera de poder explotarla: inyecciones “Boolean Based” y “Time Based”, como nos encontramos con un formulario que ingresa comentarios en la base de datos, es decir nos enfrentamos a un INSERT, vamos a utilizar las inyecciones del tipo “Time Based”.

Para realizar las inyecciones de este tipo y obtener información de este tipo el flujo de acciones realizadas por una herramienta como SQLMAP es mas o menos el siguiente:

 

image

 

Sin embargo, ahora que tenemos que descifrar la imagen captcha del formulario el flujo cambia ligeramente, aunque el cambio no es muy grande toca tenerlo presente para entender finalmente como funciona el script desarrollado. El nuevo flujo es el siguiente:

 

image

 

Como lo habrán notado, las características principales de que debe cumplir este script son acciones recurrentes: descargar el captcha, procesar la imagen (identificar las letras) y finalmente verificar si la imagen descargada es la correcta. Estas características no son soportadas por SQLMap por lo que tienen que ser características primordiales implementadas en el script.

Descifrado de la imagen captcha

Como habíamos tratado en la segunda parte de este post, primero toca descargar y trabajar la imagen lo mejor posible para finalmente descifrarlo e identificar los valores que tiene la imagen. Para poder analizarlo en este caso vamos a utilizar un software de “Reconocimiento Óptico de Caracteres” (OCR), Google ha desarrollado un software de reconocimiento óptico llamado Tesseract-OCR y para este caso nos vale muy bien poder utilizarlo.

Podríamos utilizarlo de diversas maneras: la primera que se me ocurre es analizando letra por letra trabajada previamente y la segunda que se me ocurre es analizando todas las letras en una sola acción; creo que dependería de la situación a la que nos enfrentemos, por ejemplo, si tuviéramos caracteres inclinados sería mejor utilizar el análisis de caracter por caracter, en este caso no es necesario esto por lo que vale analizar toda la imagen a la vez.

Utilizar Tesseract-OCR de Google no es nada complicado, tiene versiones para Windows y para Linux y puede ser llamado desde un script Python con facilidad, lo pueden descargar desde [AQUÍ].

 

SNAGHTML31942f8

 

SNAGHTML2d489c6

 

Desarrollo del Script en Python

En base a lo explicado arriba lo último que toca realizar es el script en python según al segundo flujo mostrado, para el desarrollo del script he utilizado parte del script que alguna vez me compartió  “ALGUIEN” pero ha tocado modificarlo para agregarle la nueva lógica explicada.

Popularity: 4% [?]

Post Relacionados

ANÁLISIS CAPTCHA: INYECCIÓN DE CÓDIGO SQL–PARTE II

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: 11% [?]

Post Relacionados

Análisis Captcha: Inyección de Código SQL–Parte I

Después de 09 meses de inactividad en el Blog, me he decidido volver a escribir. De hecho existen muchos motivos por los cuales no he escrito pero de eso no pienso escribir – al menos no en este POST – pero hoy domingo de resurrección resucitamos el Blog también. 

Hace poco más de dos (02) meses empecé a investigar un nuevo tema de seguridad, lo inicié ya que me encontré con la vulnerabilidad realizando un servicio de Ethical Hacking que me contrataron y me pareció muy interesante; interesante para postearlo, interesante para explicarlo detalladamente y más interesante aún, explicar como automatizar un ataque de este tipo. ¿Y qué fue lo que me encontré? me encontré con una Inyección SQL a través de un Captcha, así que de eso va tratar este POST.

Antecedentes

  • Sería buena idea que revises los POST de inyecciones que he publicado antes: Clase 1, Clase 2, Clase 3, Clase 4
  • Vamos a utilizar MySQL como motor de Base de Datos pero como ya saben, las inyecciones de código SQL nada tiene que ver con el motor de BD.
  • Vamos a utilizar Python para automatizar el ataque

 

1. Identificando la vulnerabilidad

Primero vamos a situarnos en el escenario, he replicado el escenario vulnerable y sobre este nos vamos a situar. Es un formulario de envío de comentarios, el formulario cuenta con un código CAPTCHA de seis (06) caracteres que obviamente varia cada vez que se accede a la página que contiene el formulario.

1

A) No funcionan las herramientas de Vulnerabilidades

Repito, no funcionan las herramientas de búsquedas de vulnerabilidades, EXACTO no funcionan ni van a funcionar.

¿Por qué no funciona?

  • El formulario envía el comentario y genera en background un query SQL sólo si se ingresa adecuadamente el código Captcha.
  • Si se ingresa o se envía por el método POST cualquier otro caracter que no coincida con lo que muestra la página, no se genera el INSERT y por consecuencia no hay forma de interactuar con la BD.
  • Si no interactuamos con la base de datos  no se puede identificar INYECCIONES SQL (eso debería estar claro si estas leyendo este post)

A continuación les pongo los resultados del análisis de vulnerabilidades que realicé con dos herramientas conocidas: Acunetix y W3AF, como verán no detectan ningún tipo de inyección SQL.

2

3

 

B) Pruebas Manuales de Identificación

Gran parte de las pruebas que se realizan en un proceso de Ethical Hacking son pruebas manuales. No se puede pretender o menos creer que las herramientas van hacer nuestro trabajo e identificar todas las vulnerabilidades que pueden haber en una página web.

Las herramientas sólo nos ayudan a identificar vulnerabilidades, lean bien por favor, “AYUDAN” y este post es un buen ejemplo para hacerlo notar.

En este caso vamos a realizar una inyección del tipo BLIND SQLi (inyección sql a ciegas) a través del método POST en la variable “nombre” del formulario, para identificar un BLIND SQLi se hace uso de sentencias condicionales del tipo OR, AND, IF u otra palabra reservada y observar el comportamiento de la página web, además, BLIND SQLi no arroja errores de sentencia en el query.

Nuestro PAYLOAD a colocar en la variable “nombre” es el siguiente: [ omar'|| (if(2>1, sleep(10),0)) ||' ], lo que debe ocurrir si es que el query se ejecuta es que la página demora más de 10 segundos en volver a cargar, debido a que la función SLEEP hará que la base de datos tarde 10 segundos en ejecutar el query.

Es importante remarcar que el PAYLOAD correcto no sirve si es que no se ingresa el Captcha correcto, si no me creen inténtelo.

 

4

 

Aquí dejo los HEADERs de la petición que se envía, en la cuadro inferior se muestran las variables en formato urlencoded.

5

 

2. Realizando y explicando el ataque

Ahora que ya sabemos a los que nos enfrentamos -  un formulario con Captcha – y que sabemos que es vulnerable con un Blind SQLi, debemos automatizar el ataque y extraer información de la(s) base(s) de dato(s), tablas y registros del servidor web a los que tengamos permisos.

A) ¿Por qué no podemos utilizar SQLMap?

Muy bien, entonces utilizaremos la herramienta por excelencia verdad? SQLMap es la solución para las inyecciones. Si pensaste que SQLMap sería la solución debes dejar este blog de inmediato – no mentira es broma – pero toca analizar un poco porque no se podría utilizar SQLMap ni ninguna herramienta que automatiza las inyecciones de código SQL. Vamos a analizarlo paso por paso para que se entienda.

image

 

La imagen superior resume el motivo por el cual no podemos utilizar SQLMap para realizar el ataque, si es que no se entendió la imagen superior aquí lo vuelvo a resumir:

  • SQLMap realiza múltiples envíos consecutivos con las variables que le indiquemos a través de la opción  “- – data”.
  • En cada envío que hace SQLMap debería enviar el código Captcha para realizar la inyección SQL.
  • SQLMap no tiene como saber cual es el código Captcha, ya que este varía después de cada envío realizado previamente
  • Además, algunos formularios realizan un cierre de sesión después de cada envío (creando uno nuevo) y eso dificulta la inyección porque cada sesión esta asociada al código captcha.

Listo!!! con eso queda totalmente explicado el motivo porque el cual no podemos utilizar SQLMap.

 

B) Realizando el ataque de Inyección

Después de lo explicado, nos toca analizar como realizar el ataque si es que hasta ahora ninguna herramienta parece que nos va servir. De pronto, alguien se puede estar preguntando que no es necesario automatizar el ataque ya que con el siguiente PAYLOAD [ omar'|| (if(2>1, sleep(10),0)) ||' ] queda totalmente evidenciado que la página web es vulnerable pero aquí les dejos algunos motivos por los cuales debemos buscar la forma de automatizar el ataque:

  • Evidenciar y mostrar evidencia clara de que la página es vulnerable, de hecho me pagan por eso y toca hacerlo. No es lo mismo decir: “la página es vulnerable y hemos identificado N cantidad de usuarios” versus “la página es vulnerable pero no hemos podido obtener información”. El riesgo de seguridad queda explicado mejor en el primer caso.
  • Automatizar el ataque es el único camino, hacerlo manualmente tardaría tanto como tardaría la selección peruana de futbol en llegar a un Mundial. Además no me pagan por horas, sino por resultados.
  • Y el motivo más importante, porque me da la gana y es un buen reto. En especial cuando toca analizar diversas imágenes Captcha con diferentes tipos de complejidad.

Entonces lo que vamos a realizar para resolver este problema es un script en Python que realice lo siguiente:

  • Realizar una solicitud a la página web del formulario para obtener la imagen que contiene el Captcha y descifrarlo.
  • Obtener la cookie de la petición de la página web, la cookie se asocia con la imagen Captcha obtenida.
  • Enviar las  variables obtenidas por el método post, las variables enviadas incluyen: la cookie, el captcha descifrado y el PAYLOAD identificado.
  • Realizar la inyección Blind SQLi para obtener caracter por caracter.
  • El script debe ser interactivo y realizar todos los pasos previos en cada solicitud, es decir, lo que SQLMap no hace.

6

 

Hasta el próximo post!!! y saludos a todos.

Popularity: 6% [?]

Post Relacionados