EXPLOTANDO SSI Injection

“La vulnerabilidad es básicamente una inyección de código que explota directivas SSI”

Se trata de Server-Side Includes (SSI) Injection, y para saber bien de que se trata, primero hay que conocer que es una directiva SSI.

Que es SSI ?

Acorde a OWASP es; directivas presentes en las aplicaciones Web utilizadas para alimentar una página HTML con contenido dinámico. Son similares a los CGIs, excepto que los SSIs se utilizan para ejecutar algunas acciones antes de que se cargue la página actual o mientras se visualiza la página.

Para ello, el servidor web analiza SSI antes de suministrar la página al usuario.

Las implementaciones comunes de SSI proporcionan comandos para incluir archivos externos, para establecer e imprimir variables de entorno CGI del servidor web, y para ejecutar scripts CGI externos o comandos de sistema.

Profundicemos un poco y ver que es posible hacer con una directiva SSI.

La sintáxis es la siguiente:

Es posible utilizar variables de entorno, por ejemplo, obtener la hora:

También es posible incluir ficheros:

Incluso y por demás peligroso, la ejecución de comandos:

Ademas de la posibilidad de declarar variables y usar expresiones condicionales:

Underc0de - SSI

Los servidores más conocidos que soportan este tipo de directivas:

  • Apache
  • Nginx
  • ISS
  • Lighthttpd
  • LiteSpeed

Generalmente son encontrados en archivos con extensión “.shtml”, “.stm” o “.shtm”, aunque no siempre es así.
Por tanto, la vulnerabilidad es básicamente una inyección de código que explota directivas SSI, y que, dependiendo de la configuración del servidor, puede conllevar, entre otros casos, a la ejecución de código arbitrario en el server, inclusión de archivos, ejecución de código javascript tambíen depende la creatividad.


PoC

Para buscar aplicaciones vulnerables, es posible utilizar dorks, por ejemplo:

  • inurl:bin/Cklb/
  • inurl:login.shtml
  • inurl:login.shtm
  • inurl:login.stm
  • inurl:search.shtml
  • inurl:search.shtm
  • inurl:search.stm
  • inurl:forgot.shtml
  • inurl:forgot.shtm
  • inurl:forgot.stm
  • inurl:register.shtml
  • inurl:register.shtm
  • inurl:register.stm
  • inurl:login.shtml?page=

El entorno de pruebas bWAPP permite testear este tipo de ataques en modo local.

Para montar el lab, es necesario subir el contenido de bWAPP a un servidor con PHP y base de datos.

Brindamos una una guía de instalación: Instalación bWAPP

Una vez el laboratorio de pruebas montado, hay que configurar un proxy para interceptar las peticiones, como ejemplo BurpSuite.

Seleccionamos la opción correspondiente a SSI Injection y tenemos todo listo para comenzar.

Underc0de - Ssi Injection Bwapp

Para testear la vulnerabilidad se validarían los parámetros de entrada. Haciendo una petición con los caracteres que debe filtrar una directiva SSI lo comprobamos.

Caracteres: < ! # = / . ” – > and [a-zA-Z0-9]

Enviando Peticiones.

Underc0de - enviando e interceptando peticiones

Respuesta de las peticiones.

Underc0de - Respuesta de peticiones

Vemos que no ha filtrado nada, ya que devuelve los valores introducidos.

A continuación, testearemos con una variable de entorno para ver el resultado:

Petición

Respuesta

Underc0de - respuesta de peticion

La variable introducida contiene el valor de la fecha del sistema del servidor, lo que significa que podemos interactuar con él.

Vamos a comprobar si tenemos acceso a datos sensibles cómo pueden ser directorios /etc/passwd o /etc/shadow.

Underc0de - Respuesta de inyeccion

Veamos cómo obtener una shell para tener total control del servidor.

Para ello, tenemos que abrir una conexión con netcat, para luego enviar una directiva que indique al server la conexión.

Underc0de - Shell obtenida


Agradecemos a HATI por explicar una: Inyección SSI


Posts Relacionados

Comments

comments

Deja una respuesta

Tu email no será publicado. Los campos requeridos estan marcados con *
Puedes usar tags HTML y los atributos: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">