# XML External Entity Injection(XXE)

## Qué es XML

{% embed url="https://www.w3schools.com/xml/xml_whatis.asp" %}

**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

```xml
##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.

```xml
<producto>Heladera</producto>
<precio>14.999</precio>
```



### **DTD Attributes**

Estos proveen información de los atributos de un elemento.

```xml
<data type="message">Some text</data>
```



### DTD Entities&#x20;

Las entidades sirven para representar información o caracteres especiales en un DTD. Algunos ejemplos son:

| Entidad | Valor |
| ------- | ----- |
| \&lt;   | <     |
| \&gt;   | >     |
| \&amp;  | &     |



**Sintaxis**

```xml
<!ENTITY entity-name "entity-value"> 
```



**Internal Entity**

```markup
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">


<author>&writer;&copyright;</author>
```



**External Entity**

```markup
<!ENTITY writer SYSTEM "https://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "https://www.w3schools.com/entities.dtd">

<author>&writer;&copyright;</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:

```xml
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://normal-website.com" > ]>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///path/to/file" > ]>
```

