In-Band vs Out-of-Band XXE
La XXE in-band se refiere a una vulnerabilidad XXE donde el atacante puede ver la respuesta del servidor. Esto permite una exfiltración de información y explotación directas. El atacante puede mandar un payload XML malicioso a la aplicación y el servidor responderá con la información extraída o el resultado del ataque.
La XXE out-of-band se refiere a la vulnerabilidad XXE donde el atacante no puede ver la respuesta del servidor. Esto requiere usar canales alternaticos como peticiones DNS o HTTP para exfiltrar datos. Para extraer la información, el atacante toene que configurar un payload XML malicioso que dispare una petición OOB para XXE.
In-Band XXE Exploitation
Usaremos Burp para este temoa. Para demostrar esta vulnerabilidad vamos a http://IP/contact.php y rellenamos el formulario.

Le damos al botón de subir e interceptamos la petición.

La información subida es procesada por contact_submit.php el cual contiene un código PHP vulnerable diseñado para devolver el valor del parámetro "name" cuando un usuario sube un mensaje en el formulario. Debajo está el código vulnerable:
libxml_disable_entity_loader(false); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $xmlData = file_get_contents('php://input'); $doc = new DOMDocument(); $doc->loadXML($xmlData, LIBXML_NOENT | LIBXML_DTDLOAD); $expandedContent = $doc->getElementsByTagName('name')[0]->textContent; echo "Thank you, " .$expandedContent . "! Your message has been received."; }
Ya que la aplicación devuelve el valor del parámetro "name", podemos inyectar una entidad que apunte a /etc/passwd para divulgar varios de sus valores.
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <contact> <name>&xxe;</name> <email>test@test.com</email> <message>test</message> </contact>
Usando el payload de arriba, reemplazamos el XML inicial subido a contact_submit.php y reenviamos la petición.

XML Entity Expansion
La expansión de entidaddes XML es una técnica usada en los ataques XXE que involucra definir entidades en un documento XML el cual expande después el parser. Los atacante pueden abusar de esta funcionalidad creando entidades recursivas o excesivamente largas, llevando a Denial of Service (DoS) o definiendo entidades externas referenciando archivos o servicio sensibles. Este método es central a ambos in-band y out-of-band XXE, ya que permite a los atacntes inyectar entidades maliciosas en el XML. Por ejemplo:
<!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe "This is a test message" >]> <contact><name>&xxe; &xxe; </name><email>test@test.com</email><message>test</message></contact>
En el payload de arriba, &xxe; es expandido donde aparece. Los atacantes usan esta expansión para realizar un ataque "Billion Laughs", donde un pequeño documento XML se expande recursivamente para consumir recursos del servidor, llevando a un denial of servide.

