Server Side XSS (Dynamic PDF)
XSS en el lado del servidor (PDF dinámico)
Si una página web está creando un PDF utilizando la entrada controlada por el usuario, puedes intentar engañar al bot que está creando el PDF para ejecutar código JS arbitrario. Entonces, si el bot creador de PDF encuentra algún tipo de etiquetas HTML, las va a interpretar, y puedes abusar de este comportamiento para causar un XSS en el servidor.
Por favor, ten en cuenta que las etiquetas <script></script>
no siempre funcionan, por lo que necesitarás un método diferente para ejecutar JS (por ejemplo, abusando de <img
).
Además, ten en cuenta que en una explotación regular podrás ver/descargar el PDF creado, por lo que podrás ver todo lo que escribas a través de JS (usando document.write()
por ejemplo). Pero, si no puedes ver el PDF creado, probablemente necesitarás extraer la información haciendo una solicitud web hacia ti (Ciego).
Generación de PDF popular
wkhtmltopdf es conocido por su capacidad para convertir HTML y CSS en documentos PDF, utilizando el motor de renderizado WebKit. Esta herramienta está disponible como una utilidad de línea de comandos de código abierto, lo que la hace accesible para una amplia gama de aplicaciones.
TCPDF ofrece una solución sólida dentro del ecosistema de PHP para la generación de PDF. Es capaz de manejar imágenes, gráficos y cifrado, lo que muestra su versatilidad para crear documentos complejos.
Para aquellos que trabajan en un entorno Node.js, PDFKit presenta una opción viable. Permite la generación de documentos PDF directamente desde HTML y CSS, proporcionando un puente entre el contenido web y los formatos imprimibles.
Los desarrolladores de Java podrían preferir iText, una biblioteca que no solo facilita la creación de PDF, sino que también admite funciones avanzadas como firmas digitales y rellenado de formularios. Su conjunto de funciones completo lo hace adecuado para generar documentos seguros e interactivos.
FPDF es otra biblioteca de PHP, distinguida por su simplicidad y facilidad de uso. Está diseñada para desarrolladores que buscan un enfoque sencillo para la generación de PDF, sin necesidad de funciones extensas.
Payloads
Descubrimiento
SVG
Cualquiera de los payloads anteriores o siguientes puede ser utilizado dentro de este payload SVG. Se incluyen como ejemplos un iframe accediendo al subdominio de Burpcollab y otro accediendo al endpoint de metadatos.
Puedes encontrar otros payloads SVG en https://github.com/allanlw/svg-cheatsheet
Divulgación de ruta
Cargar un script externo
La mejor forma de aprovechar esta vulnerabilidad es abusar de ella para hacer que el bot cargue un script que controlas localmente. Luego, podrás cambiar el payload localmente y hacer que el bot lo cargue con el mismo código cada vez.
Leer archivo local / SSRF
Cambia file:///etc/passwd
por http://169.254.169.254/latest/user-data
por ejemplo para intentar acceder a una página web externa (SSRF).
Si se permite SSRF, pero no puedes alcanzar un dominio o IP interesante, consulta esta página para posibles bypass.
Retraso del bot
Escaneo de puertos
Esta vulnerabilidad se puede transformar muy fácilmente en un SSRF (ya que puedes hacer que el script cargue recursos externos). Así que intenta explotarla (¿leer algunos metadatos?).
Archivos adjuntos: PD4ML
Existen algunos motores de HTML a PDF que permiten especificar archivos adjuntos para el PDF, como PD4ML. Puedes abusar de esta característica para adjuntar cualquier archivo local al PDF. Para abrir el archivo adjunto, abrí el archivo con Firefox y hice doble clic en el símbolo de clip para guardar el archivo adjunto como un nuevo archivo. Capturando la respuesta en PDF con Burp también debería mostrar el archivo adjunto en texto claro dentro del PDF.
Referencias
Última actualización