RSS |

Blog de Omar

Just another WordPress weblog

Advertisement

Posts Tagged ‘ sql ’

image

 

Las inyecciones  de código SQL (aquí pueden ver el TOP 10 – 2013 de OWASP) son una vulnerabilidad muy conocida, a pesar de eso no sorprende aun encontrarse con diversas páginas web que tengan esta vulnerabilidad. Lo que aun me sorprende es que me escriban correos pidiendo ayuda para realizar acciones de dudosa “legalidad” con la efímera y absurda esperanza que yo me juegue el pellejo por alguien que no conozco, por alguien que no me interesa y peor aún me juegue la cárcel por alguien que no tuvo las ganas de estudiar el ciclo de la universidad. Así que aquellos que están cursando la universidad con esfuerzo, aquellos que son bachilleres y los que ya son ingenieros, siéntanse orgullosos de su título que mucho esfuerzo ha costado.

Créanme que hay gente que me pide cambiar las notas, es decir, que hackee a la universidad y cambie un “09” por un “11” para que sean felices; les muestro sólo algunos ejemplos que mas recuerdo:

image

30

 

Oferta y demanda: la economía y el mercado se mueve

Ya saben, toda demanda tiene una oferta, gracias a este principio nuestra economía se mueve. Obviamente el mundo del hacking no es ajeno a esto, basta con buscar en Internet si alguien ofrece realizar “trabajitos” de hacking para cambiar nuestras calificaciones. Me llamó la atención una página web donde encontré una persona seria, que nos ofrecía un trabajo serio, garantizado, discreto y sobre todas las cosas “profesional”, porque eso es lo que necesitamos en este país, Perú, profesionales de alta calidad que cambien notas para obtener más profesionales de alta calidad. WTF!!!!

Como no soy especialista en temas de derecho, habrá que preguntarle a Erick (@coyotegris) de que tipo de delito estamos hablando y supongo que tanto el que realiza estos “trabajitos” como el que los solicita están cometiendo un delito.

 

image

 

Entonces…. ¿ se puede ser profesional sin haber estudiado?

De pronto si, obviamente de manera trucha, ilícita e ilegal. Es aquí donde me pregunté “¿Qué tantas instituciones educativas han sido hackeadas en el Perú?”, pues como sabrán nadie lleva un registro exacto de estas cosas y tampoco es que cada vez que alguien hackee a una universidad pues se promocione por internet diciendo que lo ha logrado, de hecho, a mi me han contratado universidades para realizarles un “Ethical Hacking” y las cosas que se pueden lograr, son alucinantes!!!

¿Entonces, no hay donde saberlo? pues… aquí nos puede ayudar “ZONE-H”, como ya sabrán cada vez que algún “super hacker” logra un defacement lo publica en esta página para crear un mirror de como quedó la página después de haber sido hackeada. Mayúscula fue mi sorpresa cuando encontré, 1444 páginas hackeadas que tienen el dominio EDU.PE. WTF!! hasta una página de la Universidad Nacional de San Marcos(UNMSM) se encuentra allí. Si no me creen miren aquí:

 

image

 

Parece ser que el ilícito negocio no es tan complicado como parece  – habiendo tantas páginas educativas que han sido hackeadas – , de pronto hasta el negocio les resulta bastante atractivo habiendo un mercado tan grande de estudiantes, ese es un motivo para que las universidades se preocupen por la seguridad de su información, además, siendo las universidades donde se forman profesionales en ingeniería creería que deberían dar el ejemplo de un buen desarrollo y seguro de sistemas de información, ¿no creen?

Ahora sí, las inyecciones sobre SQL SERVER

La idea de este post es mostrar las diferencias entre las inyecciones SQL sobre MySQL y sobre otro motor de base de datos, por ejemplo, SQL SERVER. Para poder entenderlo mejor les recomiendo haber visto antes estos posts:

Debido a que explicar las diferencias se puede hacer extenso, he decidido realizar un video tutorial con las principales particularidades de realizar inyecciones sobre Microsoft SQL Server. El video contiene las siguientes partes:

  1. Ejecución de funciones básicas sobre MSSQL para obtener información: usuario utilizado, base de datos actual, versión de la base de datos.
  2. Listado del total de bases de datos
  3. Listado de tablas de una base de datos específica
  4. Listado de registros de una tabla
  5. Concatenación  de “querys” y alteración de información a través de inyecciones (muy importante)

 

 

Finalmente, ¿ alguien podría realmente cambiar las notas de cursos en la universidad?

Como esa pregunta me seguía dando vueltas en la cabeza y sentía que no podía vivir con esa duda existencial, decidí probar en la página web de una universidad que no estaba en listado de “Zone-H” e identificar si son tan descuidados como para permitir inyecciones de código SQL. Obviamente no voy a decir que universidad he probado, sólo que es una universidad Nacional del Perú y que la manera que he probado es colocando la super-archi conocida comilla simple (‘) y una UNION para observar que comportamiento de la página web, no he ahondado más porque mi objetivo es sólo verificar que es vulnerable y no hackear la página, de hecho la he reportado con la esperanza de que solucionen el problema. Es importante mencionar que utiliza Microsoft SQL Server y que eventualmente se podrían modificar los registros, es decir, es muy probable que si se puedan cambiar las notas de la universidad y ser profesionales de dudosa reputación.

image

 

image

 

 

Conclusiones:

  1. Existe una demanda grande de “alumnos” que desean aprobar o modificar calificaciones estudiantiles muy grande y los centros de estudio deben preocuparse por la seguridad de la información para evitar incidentes de seguridad. Obviamente los que se publicitan por Internet es muy probable que sean estafadores.
  2. Es posible modificar información de manera remota a través de vulnerabilidades del tipo Microsoft SQL Server
  3. Existe un alto número de páginas web de centros educativos que han sido hackeados en el Perú, los registrados en ZONE-H suman 1444 páginas web hackeadas con el dominio .EDU.PE.
  4. Las buenas prácticas de desarrollo a través de APIs son la mejor solución para el desarrollo seguro de aplicaciones web. Revisen ESAPI del proyecto OWASP.
  5. Los controles a nivel de acceso a las bases de datos y tener logs de monitoreo sobre las bases de datos nos permiten identificar posibles fraudes realizados muchas veces por personal de confianza como los mismos DBA.

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

Popularity: 7% [?]

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

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

sqli_clase4

Esta es la última entrada de la primera serie de videotutoriales sobre INYECCIONES SQL basadas en uniones. Hasta aquí hemos visto todo lo básico, desde aprender algo del lenguaje SQL hasta extraer la información de las tablas, lo siguiente que vamos a analizar son las inyecciones SQL a ciegas o conocidas como Blind SQLi. Para terminar esta primera parte voy a publicar el último video y el script desarrollado en Python para automatizar los ataques.

Gracias a todos por sus comentarios enviados a mi correo, de alguna manera se siente bien que haya personas que lean este humilde blog.

Temario de la Clase 04:

  1. Automatizar ataques de SQLi con Python
  2. Ataques a páginas web con nuestro script

El material utilizado:

  1. El código de la aplicación web:  [DESCARGAR AQUÍ]
  2. La base de datos de la aplicación: [DESCARGAR AQUÍ]
  3. La presentación en PREZI: [DESCARGAR AQUÍ]

Saludos,

Omar

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

Aquí les dejo el script desarrollado para el videotutorial.

Popularity: 22% [?]

1052485_10151493036042666_45904221_oPrimero lo primero:

Gracias a todos los que están siguiendo estos videotutoriales, hay muchos que me están escribiendo para que siga con los videos y haciendo hasta pedidos alucinantes, pedidos como:

- “Hey brother hackeame esta página por favor”
- “Ayúdame a encontrar el password de esta aplicación”
- “Te pago 500 dólares si me hackeas esta página brother”

Obviamente otros me escriben para agradecerme y felicitarme por los videos, muchas gracias a todos los escriben Risa y disculpen si no puedo contestarles a todos pero realmente es humanamente imposible poder hacerlo, dicho esto, continuemos con el tercer videotutorial.

Temario de la Clase 03:

1. Obtener información(registros) de las Bases de Datos
2. Obtener información de la Base de Datos MYSQL
- Tabla User
- Doble SHA1, funcion password
3. Craking de contraseñas
- Rainbow tables
4. Ataques con SQLMAP

El material utilizado:

  1. El código de la aplicación web:  [DESCARGAR AQUÍ]
  2. La base de datos de la aplicación: [DESCARGAR AQUÍ]
  3. La presentación en PREZI: [DESCARGAR AQUÍ]

Aquí el videotutorial. Saludos a todos.

Popularity: 19% [?]