Server Side XSS (Dynamic PDF)
Server Side XSS (Dynamic PDF)
Si une page web crée un PDF en utilisant une entrée contrôlée par l'utilisateur, vous pouvez essayer de tromper le bot qui crée le PDF pour exécuter du code JS arbitraire. Ainsi, si le bot créateur de PDF trouve des balises HTML, il va les interpréter, et vous pouvez abuser de ce comportement pour provoquer un XSS côté serveur.
Veuillez noter que les balises <script></script>
ne fonctionnent pas toujours, vous aurez donc besoin d'une méthode différente pour exécuter du JS (par exemple, en abusant de <img
).
De plus, notez que dans une exploitation régulière, vous pourrez voir/télécharger le PDF créé, vous pourrez donc voir tout ce que vous écrivez via JS (en utilisant document.write()
par exemple). Mais, si vous ne pouvez pas voir le PDF créé, vous devrez probablement extraire les informations en effectuant une requête web vers vous (Aveugle).
Génération de PDF populaire
wkhtmltopdf est connu pour sa capacité à convertir HTML et CSS en documents PDF, en utilisant le moteur de rendu WebKit. Cet outil est disponible en tant qu'utilitaire en ligne de commande open-source, le rendant accessible à un large éventail d'applications.
TCPDF offre une solution robuste dans l'écosystème PHP pour la génération de PDF. Il est capable de gérer les images, les graphiques et le chiffrement, ce qui démontre sa polyvalence pour la création de documents complexes.
Pour ceux travaillant dans un environnement Node.js, PDFKit présente une option viable. Il permet la génération de documents PDF directement à partir de HTML et CSS, établissant un lien entre le contenu web et les formats imprimables.
Les développeurs Java pourraient préférer iText, une bibliothèque qui facilite non seulement la création de PDF, mais prend également en charge des fonctionnalités avancées telles que les signatures numériques et le remplissage de formulaires. Son ensemble de fonctionnalités complet le rend adapté à la génération de documents sécurisés et interactifs.
FPDF est une autre bibliothèque PHP, distinguée par sa simplicité et sa facilité d'utilisation. Elle est conçue pour les développeurs recherchant une approche simple de la génération de PDF, sans avoir besoin de fonctionnalités étendues.
Payloads
Découverte
SVG
L'un des payloads précédents ou suivants peut être utilisé à l'intérieur de ce payload SVG. Un iframe accédant au sous-domaine Burpcollab et un autre accédant au point de terminaison des métadonnées sont donnés comme exemples.
Vous pouvez trouver beaucoup d'autres charges utiles SVG dans https://github.com/allanlw/svg-cheatsheet
Divulgation de chemin
Charger un script externe
La meilleure façon de exploiter cette vulnérabilité est d'abuser de la vulnérabilité pour faire charger au bot un script que vous contrôlez localement. Ensuite, vous pourrez modifier le payload localement et faire charger au bot avec le même code à chaque fois.
Lire un fichier local / SSRF
Remplacez file:///etc/passwd
par http://169.254.169.254/latest/user-data
par exemple pour essayer d'accéder à une page web externe (SSRF).
Si le SSRF est autorisé, mais que vous ne pouvez pas atteindre un domaine ou une IP intéressante, consultez cette page pour des éventuels contournements.
Délai du bot
Analyse de port
Cette vulnérabilité peut être très facilement transformée en SSRF (car vous pouvez faire charger des ressources externes au script). Alors essayez simplement de l'exploiter (lire des métadonnées ?).
Pièces jointes : PD4ML
Il existe des moteurs HTML vers PDF qui permettent de spécifier des pièces jointes pour le PDF, comme PD4ML. Vous pouvez abuser de cette fonctionnalité pour attacher n'importe quel fichier local au PDF. Pour ouvrir la pièce jointe, j'ai ouvert le fichier avec Firefox et double-cliqué sur le symbole de trombone pour enregistrer la pièce jointe en tant que nouveau fichier. Capturer la réponse PDF avec Burp devrait également afficher la pièce jointe en texte clair à l'intérieur du PDF.
Références
Last updated