XML External Entity Injection(XXE)
Qué es XML
Extensible Markup Language, o también abreviado XML es un lenguaje diseñado para transportar información entre un cliente y un servidor en un formato que va a ser interpretado (una vez es enviado al backend) por una API para realizar alguna tarea. A diferencia de HTML que tiene etiquetas predefinidas, acá se utiliza el nombre que el desarrollador haya elegido ponerle. Las etiquetas están en formato de árbol, por lo que se comienza con una etiqueta raíz y se sigue con las etiquetas hijas, las etiquetas hijas pueden tener hermanas y padres.
Ejemplo de uso
##The XML prolog is optional. If it exists, it must come first in the document.
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Document Type Definition
Abreviados DTD, sirven para definir la estructura y sintaxis de un documento XML, describiendo los elementos, estructura y como se van a anidar las etiquetas en el documento.
DTD Elements
Los elementos de un DTD son básicamente las etiquetas que vamos a estar utilizando, estas pueden contener texto, otros elementos o estar en blanco.
<producto>Heladera</producto>
<precio>14.999</precio>
DTD Attributes
Estos proveen información de los atributos de un elemento.
<data type="message">Some text</data>
DTD Entities
Las entidades sirven para representar información o caracteres especiales en un DTD. Algunos ejemplos son:
<
<
>
>
&
&
Sintaxis
<!ENTITY entity-name "entity-value">
Internal Entity
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
<author>&writer;©right;</author>
External Entity
<!ENTITY writer SYSTEM "https://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "https://www.w3schools.com/entities.dtd">
<author>&writer;©right;</author>
Explotación
La explotación de las entidades externas se la realiza declarando una entidad externa apuntando ya sea a una url o con algun wrapper apuntando a archivos internos de la máquina, por ejemplo:
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://normal-website.com" > ]>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///path/to/file" > ]>
Last updated