Nuevas Entradas

XXE Injection (I)



Las inyecciones XXE son una técnica de explotación que se centra en aprovechar el uso de  entidades externas dentro de un documento XML (eXtensible Markup Language).

Para lograr comprender el significado de entidad y asi adentrarnos en este tutorial, se recomienda tener un conocimiento basico sobre la estructura del lenguaje, pueden pasarse por el siguiente enlace donde encontraran mucho material acerca de la sintaxis de XML.


Primero se van a tener en cuenta un par de conceptos que tocaremos dentro de este apartado.

  • Que es un DTD?

Un DTD y como sus siglas lo indican (Definicion del tipo de documento), se encarga de decirle a el parser XML (motor XML) como va a estar compuesto un fichero de este tipo.

Cada vez que un xml es cargado, el que se ocupa de verificar si dicho fichero presenta una estructura correcta, entre otras cosas, es el parser XML y lo hace primero consultando el DTD.

Los DTD pueden encontrarse dentro del documento.


Todo lo que se encuentra dentro del tag [] es parte del DTD.


O externos al mismo.


Dentro de un DTD podemos realizar varias declaraciones, durante este escrito solo nos ocuparemos de la creacion de entidades.


  • Declaracion de entidades

Para continuar con la explicacion, programe un simple script en php que se va a encargar de procesar strings XML.


Una entidad es algo muy similar a una constante, se encarga de almacenar valores que no pueden ser modificados a diferencia de una variable. Se pueden definir dos tipos de entidades:

  • Internas


  • Externas

Para ambas entidades, al momento de llamarlas, tenemos lo que son las Entidades generales que pueden usarse dentro del documento xml y las Entidades parametro, que solo pueden llamarse dentro del DTD.

El analisis de esta ultima va a dejarse para mas adelante ya que por el momento no se requiere su uso.

Tenemos el siguiente documento, en el que hacemos referencia a una entidad interna

Fijense la sintaxis de acceso a la entidad interna general (&foo;). Esto imprimiria "Yo soy el valor de la entidad interna" dentro del elemento <salida>

Urlencodeamos y enviamos.



Pero que pasa cuando hacemos uso de entidades externas? ahi esta el verdadero peligro ya que nos permiten leer ficheros dentro del servidor, realizar ataques DOS, enumerar servicios internos en la red y hasta incluso ejecutar comandos en el sistema.

SYSTEM nos deja utilizar ciertos wrappers y protocolos como file://, php://, http://, ftp://, expect://, entre otros.

Intentemos divisar el famoso archivo /etc/passwd



Leer ficheros php



Ejecutar comandos siempre y cuando este instalado expect:// en php, lo cual lo veo como una opcion poco probabable de darse, pero es interesante saber que podria estar presente en algun que otro entorno.



Este tipo de falensias puede aprovecharse en webs que pidan la subida, por ejemplo de CVS en formato XML e impriman su contenido.
Incluso hasta el propio FB recientemente sufrio el impacto de esta tecnica, a diferencia de que los datos no eran procesados a la vista, lo cual deja como incognita la explotacion de XXE a ciegas para el proximo post.

Me olvidaba, para evitar el uso de entidades externas cuando procesemos nuestros ficheros solo basta con utilizar la funcion libxml_disable_entity_loader() del siguiente modo.

Saludos!

Share this:

 
Copyright © 2014 Security Signal.
Designed by OddThemes | Distributed By Gooyaabi Templates