Blind SQL injection en sitio médico naturista.

Luego de haber finalizado con el sitio en veracruz, decidí continuar con un demo más  de inyección por SQL, en donde se ejemplificó como un fallo de seguridad (security flaw) como lo es la validación correcta de la entrada de datos en un campo puede llevará a la fuga/perdida/robo de información.

Ahora, en esta ocasión se tratará de un supuesto sitio que vende productos médicos de orígen botánico, como lo fue en el post anterior con el dumping  (descarga) de información acerca de alumnos y personal de la institución, esta vez trata de Admins (con passwords), mails, fedbacks de clientes o usuarios registrados explicando sus situaciones (enfermedades/padecimientos), nombres, etc… El error que se halló en este lugar fue que el ingreso de datos en el campo que se involucra al hacer la consulta a las bases de datos no autentica de forma adecuada el ingreso de caracteres, ocasionando un error en la sintaxís del SGBD, ahora siendo tipo Blind SQL Injection, llevandonos a lo siguiente.

El sitio del que hablo es http://www.herbalclinics.com

sitio

Siendo este el enlace en el que hice pruebas, pasé a la sección de productos en donde  me topé con el mismo error que en la enterior vez, agregar el caractér de la comilla simple, dando como resultado un error de sintaxis al hacer la consulta con cierto valor en el gestor de base de datos. Sin embargo, tambien decidí intentar con la ejecución de comandos dentro de este campo o parámetro, por ejemplo » ‘ or’1=’1 » l momento de realizar la petición, en donde no recibí error alguno al parecer, solo una ventana vacía, mostrando en la parte superior la conversion de mis consultas a entidad HTML:

blind1

blind2

Lo primero que supuse fue que se trataba de una inyección SQL tipo Blind, ya que es común que no te arroje «ningun error», simplemente no muestre «output» alguno.

¿A que se debe esto?

 Bien, «Blind SQL Injection» es una variante de este ataque en donde se le consulta a la BD preguntas tipo «true o false» y se determina la respuesta en base al «response» del sitio o aplicación web. Cuando se explota una vulnerabilidad de inyeccion SQL, la mayoría de veces el sitio muestra errores que indican un a sintaxís errónea en el Query de SQL. Los casos de «Blind SQL Injection» son algo parecidos al anterior, la diferencía esta en el resultado al momento de probar con los parámetros vulnerables  la base de datos no muestra output alguno en la aplicación web, entonces la forma de atacar será mediante preguntas «true o false» o mediante la ejecución de comandos.

Unos ejemplos antes de continuar son:

URL:

http://herbalclinics.com/items.php?id=2

sends the following query to the database:

SELECT title, description, body FROM items WHERE ID = 2

Aquí se intentará hacer una consulta que arroje un ‘false’:

http://herbalclinics.com/items.php?id=2 and 1=2

Ahora la consulta lucirá así:

SELECT title, description, body FROM items WHERE ID = 2 and 1=2

Si el sitio es vulnerable a inyeccion SQL, es muy posible que no salga output alguno, para cerciorase de esto, se hace una consulta de este tipo en el parámetro:

http://herbalclinics.com/items.php?id=2 and 1=1

Cuando terminé de probar esto manualmente en el sitio, pasé a usar SQLMAP de nuevo, ya que en este se pueden explotar ambos tipos de inyección (Error-Based y Blind), al igual que la sintaxis en el demo anterior, basta con colocar el parámetro vulnerable y la configuración que deseas obtener al final, siendo esta la base de datos actual y el usuario actual sobre esta, quedando así:

sqlmap –u “http://www.herbalclinics.com/product.php?cat_id=11’” –p cat_id  –current-user –current-db

Donde:

  • sqlmap –u: Hace uso de la herramienta mediante la opción de URL
  • -p: Es el parámetro vulnerable
  • –current-user: Si se realiza la inyección exitosamente conseguirá el usuario actual sobre la DB existente.
  • –current-db: Obtendrá el nombre de la base de datos existente.

Al hacer esto, sqlmap iniciará los “Testing Protocols” antes de intentar/realizar una inyección, como lo es el checking de la existencia de algún WAF, IPS, IDS y comprobar si el enlace es estable.

Lo primero que mostró fue que el parámetro indicado puede no ser vulnerable «inyectable», imnmediatamente de eso, comienza a realizar el testing en este parámetro con los diferentes comandos o preguntas True or False antes mencionadas

inject1

Luego de hacer las pruebas, sqlmap nos indicará que el parametro siempre si resulto vulnerable, así como tambien nos afirma que el SGBD es MySQL, preguntando si queremos seguir probando payloads en busca de otros gestores.

En caso de todas las bases esten formadas en MySQL, preguntará si queremos seguir probando payloads exclusivos para MySQL, aqui se indicó que si.

Y por ultimo, nos indica que el parámetro «cat_id» es vulnerable, si queremos continuar en busca de otros afirmamos con «y»: inject2

Al finalizar el proceso de inyección, mostrará detalles sobre lo que se obtuvo, en este caso se trata de la configuración que especificamos en el comando, donde indicabamos querer saber usuario sobre la BD actual y el nombre de esta, siendo el primero «herbalcl_herbalcl@localhost» y la BD es «herbalcl_herbalclinics«. Así como tambien vemos un «Path» o directorio en donde residen archivos relevantes a esta inyección:

db1

Como es recomendable siempre visualizar las tablas que constituyen a esta base de datos antes d realizar algún «dumping» o robo, pasaremos a enumerarlas antes de ver el contenido de estas. Haciendo algunos cambios al comando anterior, se quitarán los ultimos 2 parámetros y se agregarán los siguientes 2:

Donde:

  • -D: Indica la BD sobre la que se trabajará
  • –tables: Hará el fetching de las tablas existentes

inject4 inject5

Esto no es necesario para hacer el dumping de la BD, en cambio me es preferible enlistar las tablas que forman a esta base de datos, así sabre si hacer «dump» de todas o de alguna tabla en específico, en este caso descidí realizar el volcado de todo el contenido de la BD, cambiando la config. del comando anterior, quitando el ultimo parámetro y sisituyendolo por «–dump», al hacer esto comenzará la descarga de esta info en la BD, retomando el punto de inyección anterior sin tener que repetir tdo el proceso:

inject6

Retomando el punto de inyección anterior, comenzará el «fetching» u obtención de «entries» (entradas con información) en la tabla correspondiente en la BD, enlistando las tablas que estan por descargarse, en este caso la primera es «admin_user«, la cual se constituye por las columnas «adminid», «username», «password», «adminname», «email», «phone» y «active»:

inject7

inject8

Luego de finalizar con esta tabla y haberla mostrado en la terminal, continuará con la siguiente, que es la de  «tbl_testimonials» en donde no hay mas que supuestas personas hablando de lo bien que les fue usando productos:

inject9

Entre las tablas que se descargaron, la de nombre «tbl_feedback«, que a decir verdad fue la que mas interesante/graciosa encontré. Esta tabla cuenta con mas de 2000 «entries», las cuales muestran información acerca de  supuestas personas describiendo su situación acerca de los padecimientos que tienen, en esta tabla podemos ver columnas que indican la situación, nombre, pais, género y correo electrónico:

inject10

Al finalizar el fetching de esta tabla continuaron los demas, terminando el volcado en alrededor 1 hr y 15 min, el resto de la info, no resultó ser tan interesante como estas 2 primeras tablas, ya que el resto son nombres de productos y texto acerca de consejos médicos, sin embargo toda la info se queda en el directorio de dumping para SQLMAP, en donde encontrarémos archivos, con extension .csv, los cuales se utilizan para guardar bases de datos, estos pueden ser visualizados facilmente con Excel:

dump

Con este demo, se demostro una vez mas como los errores en la consulta hacia BD  son muy comúnes en aplicaciones web, presentandose en distintos tipos (como lo osn por Error-based, Blind, etc…), permitiendo un punto de inyección el cual puede usarse como vector de ataque para poder robar información dentro de la o las bases de datos con las que cuenta el gestor correspondiente.

Todo el contenido de este escrito fue hecho con fines educativos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *