Gruyere

 

Hola a todos, viajando el otro día por las curiosidades de Google Lab me topé con una aplicación que me resultó bastante curiosa, su nombre Gruyere, efectivamente como el queso.

Ambos comparten un denominador común, los agujeros. En el caso de esta aplicación, agujeros de seguridad puestos a propósito por sus creadores, para que mediante una serie de ejercicios podamos ir comprobando nuestras habilidades como hackers. Se puede practicar desde el cross-site scripting, cross-site request forgery, information disclosure, denial of service (DoS) y ejecución de código remoto. En fin, toda una joya.

Hay que decir que Gruyere está escrito en python, con lo que cualquier conocimiento sobre este tipo de lenguaje de programación no nos vendrá nada mal.

Este es un pequeño resumen del código de la aplicación:

  • gruyere.py es el principal servidor web Gruyere.
  • data.py almacena los datos por defecto en la base de datos. Hay una cuenta de administrador y dos usuarios por defecto.
  • gtl.py es el lenguaje de plantilla de Gruyere.
  • sanitize.py es el módulo de Gruyere utilizados para desinfectar HTML para proteger la aplicación de los agujeros de seguridad.
  • resources/... contiene todos los archivos de plantillas, imágenes, CSS, etc

Alguna de las características especiales y tecnologías que se suman al ataque y que debemos aprovechar son:

  • HTML en Fragmentos: Los usuarios pueden incluir un subconjunto limitado de HTML en sus fragmentos.
  • Carga de archivos: Los usuarios pueden subir archivos al servidor, por ejemplo, para incluir imágenes en sus fragmentos.
  • Web de administración: Los administradores de sistemas podemos controlar el sistema usando una interfaz web.
  • Nuevas cuentas: Los usuarios pueden crear sus propias cuentas.
  • Gruyere lenguaje de plantilla (GTL): es un nuevo lenguaje que hace que escribir páginas web fáciles como las plantillas se conectan directamente a la base de datos. La documentación para el GTL se puede encontrar en gruyere/gtl.py.
  • AJAX: Gruyere utiliza AJAX para cargar la aplicación en el hogar y fragmentos de la página. Debemos pasar por alto las partes AJAX de Gruyere, excepto para los desafíos que específicamente dice que se concentre en AJAX.
  • En una aplicación real, volver a cargar la página probablemente sucederá de forma automática, pero en Gruyere lo hemos hecho manual, para que podamos tener el completo control mientras se trabaja con ella. Al hacer clic en el enlace de actualización, Gruyere obtiene feed.gtl que contiene datos de actualización de la página actual y luego del lado del script de cliente utiliza el navegador API DOM (Document Object Model) para insertar los fragmentos de nuevo en la página. Desde AJAX se ejecuta el código en el cliente, este script es visible para los atacantes que no tienen acceso a su código fuente.

A lo largo de sus páginas podemos encontrarnos con varios tipos de retos, divididos en 3 tipos, dependiendo de la técnica utilizada:

  • Retos que pueden ser resueltos sólo mediante el uso de técnicas de caja negra.
  • Desafíos que requieren que nos fijamos en el código fuente de Gruyere.
  • Desafíos que requieren algún conocimiento específico de Gruyere que se dará en la primera pista.

En la barra lateral derecha se nos indicará los distintos apartados y desafíos con los que podremos encontrarnos

 

Tabla de contenidos

  • Beat the hackers
  • Gruyere
  • Set-up
  • Using Gruyere
  • Cross-Site Scripting (XSS)
  • Client-State Manipulation
  • Cross-Site Request Forgery (XSRF)
  • Cross Site Script Inclusion (XSSI)
  • Path Traversal
  • Denial of Service
  • Code Execution
  • Configuration Vulnerabilities
  • AJAX vulnerabilities
  • Other Vulnerabilities
  • After the Codelab
  •  

    Bueno chicos, espero que os haya gustado esta pequeña presentación de Gruyere, que como podemos ver tiene un fin eminentemente práctico y a todas luces educativo, compartiendo esos aspectos con la página de www.flu-project.com

    Los creadores de este codelab son Leban Bruce, Bendre Mugdha, y Tabriz Parisa:

    http://google-gruyere.appspot.com

     

    Un saludo, streaming10