
पेनिट्रेशन टेस्टिंग, बग बाउंटी हंटिंग और रेड टीमिंग के लिए दुर्भावनापूर्ण PDF परीक्षण फ़ाइलें उत्पन्न करता है। PDF व्यूअर्स, कन्वर्टर्स और वेब एप्लिकेशन में SSRF, XSS, XXE, NTLM क्रेडेंशियल चोरी और डेटा एक्सफ़िल्ट्रेशन का परीक्षण करता है। Burp Collaborator और Interact.sh के साथ एकीकृत होता है।

फ़ोन-होम कॉलबैक, SSRF, XSS, XXE, NTLM क्रेडेंशियल चोरी, और PDF व्यूअर, कन्वर्टर और वेब एप्लिकेशन में डेटा एक्सफ़िलट्रेशन के परीक्षण के लिए 67 दुर्भावनापूर्ण PDF परीक्षण फ़ाइलें जनरेट करें। Burp Collaborator या Interact.sh के साथ उपयोग किया जा सकता है।
पैठ परीक्षण, बग बाउंटी हंटिंग, और/या रेड-टीमिंग आदि के लिए उपयोग किया जाता है। मैंने यह टूल इसलिए बनाया क्योंकि मुझे विभिन्न लिंक के साथ बहुत सारी PDF फ़ाइलें जनरेट करने के लिए एक टूल की आवश्यकता थी। केवल शैक्षिक और व्यावसायिक उद्देश्यों के लिए।
pip install -r requirements.txt python3 malicious-pdf.py burp-collaborator-url
आउटपुट `output/` निर्देशिका में लिखा जाएगा: test1.pdf, test2.pdf, test3.pdf आदि।
### विकल्प```
--output-dir DIR Directory to save generated PDF files (default: output/)
--no-credit Do not embed credit/attribution metadata in generated PDFs
--obfuscate LEVEL Obfuscation level (0-3):
0 = None (default)
1 = PDF name hex encoding + string octal/hex encoding
2 = Level 1 + JS bracket notation + javascript: URI case/whitespace obfuscation
3 = Level 2 + FlateDecode stream compression
अस्पष्टीकरण के साथ उदाहरण:``` python3 malicious-pdf.py https://your-interact-sh-url --obfuscate 2
अधिकतम अस्पष्टीकरण (Level 4 JS payloads को base64 decoder stub में लपेटता है ताकि मूल API calls कभी literal substrings के रूप में प्रकट न हों):```
python3 malicious-pdf.py https://your-interact-sh-url --obfuscate 4
/V, base64 डिकोडर) भोलेपन से /JS रेगेक्स स्कैनर को विफल करते हैंCollab.isDocReadOnly (फ़ाइलसिस्टम प्रोबिंग), app.plugIns (इंस्टॉल किए गए प्लगइन्स की गणना), app.viewerVersion (संस्करण फ़िंगरप्रिंटिंग)-O फ़्लैग के) पूरी तरह से ऑब्जेक्ट मिस करते हैं। Ref: PDF spec ISO 32000 §7.5.7app.doc.getAnnots()[n].subject के माध्यम से पुनर्प्राप्त करें और eval करें। Ref: Julia Wolf - PDF Obfuscation using getAnnots()/Info ट्रेलर फ़ील्ड्स (/Title, /Author) में स्टोर करें। JS में info.Title के माध्यम से रनटाइम पर पुनर्प्राप्त करें। Ref: corkami PDF tricks/V मानों में पेलोड टुकड़े स्टोर करें। JS में getField("name").value के माध्यम से पुनर्प्राप्त करें। Ref: | परीक्षण फ़ाइल | फ़ंक्शन | CVE/संदर्भ | आक्रमण वेक्टर | विधि | प्रभाव |
|---|
| test1.pdf | create_malpdf() | CVE-2018-4993 | बाहरी फ़ाइल पहुंच | UNC पथ के साथ /GoToE क्रिया | फ़ाइल सिस्टम के माध्यम से नेटवर्क कॉलबैक |
| test1_1.pdf | create_malpdf() | CVE-2018-4993 | बाहरी फ़ाइल पहुंच | HTTPS URL के साथ /GoToE क्रिया | HTTPS के माध्यम से नेटवर्क कॉलबैक |
| test2.pdf | create_malpdf2() | XFA फॉर्म सबमिशन | फॉर्म डेटा एक्सफ़िल्ट्रेशन | सबमिट इवेंट के साथ XDP फॉर्म | स्वचालित फॉर्म सबमिशन |
| test3.pdf | create_malpdf3() | JavaScript इंजेक्शन | कोड निष्पादन | app.openDoc() के साथ /OpenAction | बाहरी दस्तावेज़ लोडिंग |
| test4.pdf | create_malpdf4() | CVE-2019-7089 | XSLT इंजेक्शन | बाहरी XSLT स्टाइलशीट के साथ XFA | UNC पथ कॉलबैक |
| test5.pdf | create_malpdf5() | PDF101 अनुसंधान | URI क्रिया | /URI क्रिया प्रकार | DNS प्रीफ़ेचिंग/HTTP अनुरोध |
| test6.pdf | create_malpdf6() | PDF101 अनुसंधान | लॉन्च क्रिया | बाहरी URL के साथ /Launch | बाहरी संसाधन निष्पादन |
| test7.pdf | create_malpdf7() | PDF101 अनुसंधान | रिमोट PDF | /GoToR क्रिया | रिमोट PDF लोडिंग |
| test8.pdf | create_malpdf8() | PDF101 अनुसंधान | फॉर्म सबमिशन | HTML फ़्लैग के साथ /SubmitForm | फॉर्म डेटा सबमिशन |
| test9.pdf | create_malpdf9() | PDF101 अनुसंधान | डेटा आयात | /ImportData क्रिया | बाहरी डेटा आयात |
| test10.pdf | create_malpdf10() | CVE-2017-10951 | JavaScript निष्पादन | Foxit this.getURL() कॉलबैक | Foxit Reader के माध्यम से नेटवर्क कॉलबैक |
| test11.pdf | create_malpdf11() | EICAR परीक्षण | AV पता लगाना | एम्बेडेड EICAR स्ट्रिंग | एंटी-वायरस परीक्षण |
| test12.pdf | create_malpdf12() | CVE-2014-8453 | FormCalc डेटा एक्सफ़िल्ट्रेशन | XFA FormCalc Post() फ़ंक्शन | कुकीज़ के साथ समान-ऑरिजिन डेटा एक्सफ़िल्ट्रेशन |
| test13.pdf | create_malpdf13() | अनुरोध इंजेक्शन | CRLF हेडर इंजेक्शन | XFA सबमिट textEncoding CRLF | HTTP हेडर हेरफेर |
| test14.svg | create_malpdf14() | ImageMagick शेल इंजेक्शन | SVG/MSL के माध्यम से शेल इंजेक्शन | SVG-MSL पॉलीग्लॉट authenticate विशेषता | ImageMagick के माध्यम से रिमोट कोड निष्पादन |
| test15.pdf | create_malpdf15() | PDF विनिर्देश | FormCalc हेडर इंजेक्शन | कस्टम हेडर के साथ XFA FormCalc Post() | मनमाना HTTP हेडर इंजेक्शन |
| test16.pdf | create_malpdf16() | PDF विनिर्देश | GotoE के माध्यम से JavaScript | javascript: URI के साथ /GoToE | जब PDF <embed>/<object> के माध्यम से एम्बेडेड हो तो ब्राउज़र XSS |
| test17.pdf | create_malpdf17() | CVE-2014-8452 | XXE इंजेक्शन | XMLData.parse() बाहरी इकाई | XML बाहरी इकाई रिज़ॉल्यूशन |
| test18.pdf | create_malpdf18() | PortSwigger अनुसंधान | एनोटेशन URI इंजेक्शन | अनएस्केप्ड पैरेंस डुप्लिकेट /A कुंजी के माध्यम से JS क्रिया इंजेक्ट करते हैं | PDF-Lib/jsPDF आउटपुट के माध्यम से XSS |
| test19.pdf | create_malpdf19() | PortSwigger अनुसंधान | PV ऑटो-निष्पादन | पेज दृश्य पर /AA /PV स्क्रीन एनोटेशन JS फायर करता है | स्वचालित कोड निष्पादन (Acrobat) |
| test20.pdf | create_malpdf20() | PortSwigger अनुसंधान | PC क्लोज़ ट्रिगर | पेज बंद होने पर /AA /PC एनोटेशन JS फायर करता है | बंद करने पर कोड निष्पादन (Acrobat) |
| test21.pdf | create_malpdf21() | PortSwigger अनुसंधान | SubmitForm SubmitPDF | फ़्लैग 256 के साथ /SubmitForm पूरी PDF भेजता है | पूर्ण PDF सामग्री एक्सफ़िल्ट्रेशन |
| test22.pdf | create_malpdf22() | PortSwigger अनुसंधान | JS submitForm() | cSubmitAs: "PDF" के साथ this.submitForm() | PDF सामग्री सबमिशन (Acrobat) |
| test23.pdf | create_malpdf23() | PortSwigger अनुसंधान | विजेट बटन इंजेक्शन | पेज को कवर करने वाला अदृश्य /Btn विजेट, क्लिक पर JS | कोड निष्पादन (Chrome/PDFium) |
| test24.pdf | create_malpdf24() | PortSwigger अनुसंधान | टेक्स्ट फ़ील्ड SSRF | submitForm() POST के साथ विजेट /Tx फ़ील्ड | फॉर्म डेटा के माध्यम से ब्लाइंड SSRF |
| test25.pdf | create_malpdf25() | PortSwigger अनुसंधान | सामग्री निष्कर्षण | getPageNthWord() सभी टेक्स्ट पढ़ता है और एक्सफ़िल्ट्रेट करता है | रेंडर किया गया टेक्स्ट एक्सफ़िल्ट्रेशन |
| test26.pdf | create_malpdf26() | PortSwigger अनुसंधान | माउसओवर ट्रिगर | माउस एंटर पर /AA /E एनोटेशन JS फायर करता है | होवर पर कोड निष्पादन (PDFium) |
| — | — | हटाया गया | test3 (Acrobat OpenAction JS) + test23 (Chrome Widget Btn) का डुप्लिकेट | — | |
| test28.pdf | create_malpdf28() | PortSwigger अनुसंधान | URL अपहरण | अनएस्केप्ड पैरेंस नई /URI क्रिया इंजेक्ट करते हैं | PDF-Lib/jsPDF के माध्यम से क्लिक रीडायरेक्शन |
| test29.pdf | create_malpdf29() | CVE-2024-4367 | FontMatrix इंजेक्शन | टाइप1 फ़ॉन्ट FontMatrix स्ट्रिंग c.transform() से बाहर निकलती है | PDF.js (Firefox < 126) में मनमाना JS निष्पादन |
| test30.pdf | create_malpdf30() | PDF101 अनुसंधान | बाहरी XObject स्ट्रीम | इमेज XObject /FS /URL के माध्यम से रिमोट URL से डेटा प्राप्त करता है | पेज रेंडरिंग के माध्यम से साइलेंट कॉलबैक (कोई क्रिया/JS नहीं) |
| test31.pdf | create_malpdf31() | PDF101 अनुसंधान | थ्रेड क्रिया | रिमोट FileSpec के साथ /S /Thread | थ्रेड संदर्भ के माध्यम से नेटवर्क कॉलबैक |
| test32.pdf | create_malpdf32() | PDF101 अनुसंधान | प्रिंट के साथ लॉन्च | /Launch के साथ /Win << /O /print >> रिमोट फ़ेच को बाध्य करता है | प्रिंट ऑपरेशन के माध्यम से नेटवर्क कॉलबैक |
| test33_1.pdf | create_malpdf33_1() | PDF101 अनुसंधान | JS: this.submitForm() | Acrobat JS फॉर्म सबमिशन कॉलबैक | Acrobat Reader |
| test33_2.pdf | create_malpdf33_2() | PDF101 अनुसंधान | JS: this.getURL() | Acrobat JS URL फ़ेच | Acrobat Reader |
| test33_3.pdf | create_malpdf33_3() | PDF101 अनुसंधान | JS: app.launchURL() | Acrobat JS लॉन्च URL | Acrobat Reader |
| test33_4.pdf | create_malpdf33_4() | PDF101 अनुसंधान | JS: app.media.getURLData() | Acrobat JS मीडिया फ़ेच | Acrobat Reader |
| test33_5.pdf | create_malpdf33_5() | PDF101 अनुसंधान | JS: SOAP.connect() | Acrobat JS SOAP कनेक्शन | Acrobat Reader |
| test33_6.pdf | create_malpdf33_6() | PDF101 अनुसंधान | JS: SOAP.request() | Acrobat JS SOAP अनुरोध | Acrobat Reader |
| test33_7.pdf | create_malpdf33_7() | PDF101 अनुसंधान | JS: this.importDataObject() | Acrobat JS डेटा आयात | Acrobat Reader |
| test33_8.pdf | create_malpdf33_8() | PDF101 अनुसंधान | JS: app.openDoc() | Acrobat JS दस्तावेज़ खोलें | Acrobat Reader |
| test33_9.pdf | create_malpdf33_9() | PDF101 अनुसंधान | JS: fetch() | वेब API कॉलबैक (PDF.js/ब्राउज़र) | Firefox/PDF.js |
| test33_10.pdf | create_malpdf33_10() | PDF101 अनुसंधान | JS: XMLHttpRequest | वेब API कॉलबैक (PDF.js/ब्राउज़र) | Firefox/PDF.js |
| test33_11.pdf | create_malpdf33_11() | PDF101 अनुसंधान | JS: new Image() | वेब API इमेज कॉलबैक (PDF.js/ब्राउज़र) | Firefox/PDF.js |
| test33_12.pdf | create_malpdf33_12() | PDF101 अनुसंधान | JS: WebSocket | वेब API WebSocket कॉलबैक (PDF.js/ब्राउज़र) | Firefox/PDF.js |
| test33_13.pdf | create_malpdf33_13() | Adobe 0-दिन ब्लॉग (अप्रैल 2026) | JS: RSS.addFeed() | Acrobat JS RSS फ़ीड कॉलबैक | Acrobat Reader |
| test33_14.pdf | create_malpdf33_14() | Adobe 0-दिन ब्लॉग (अप्रैल 2026) | JS: util.readFileIntoStream() + SOAP.request() | स्थानीय फ़ाइल पढ़ें + एक्सफ़िल श्रृंखला (try/catch त्रुटि पथ भी कॉलबैक करता है) | Acrobat Reader |
| test33_15.pdf | create_malpdf33_15() | Adobe 0-दिन ब्लॉग (अप्रैल 2026) | फॉर्म-फ़ील्ड-स्टेज्ड JS लोडर | /Tx विजेट /V में Base64 पेलोड, getField() + util.stringFromStream के माध्यम से डिकोड किया गया | Acrobat Reader |
| test34_1.pdf | create_malpdf34_1() | PDF101 अनुसंधान | UNC: XObject स्ट्रीम | UNC पथ के साथ इमेज XObject | पेज रेंडरिंग के माध्यम से NTLM चोरी |
| test34_2.pdf | create_malpdf34_2() | PDF101 अनुसंधान | UNC: GoToR | UNC FileSpec के साथ /GoToR क्रिया | रिमोट PDF के माध्यम से NTLM चोरी |
| test34_3.pdf | create_malpdf34_3() | PDF101 अनुसंधान | UNC: Thread | UNC FileSpec के साथ /Thread क्रिया | थ्रेड संदर्भ के माध्यम से NTLM चोरी |
| test34_4.pdf | create_malpdf34_4() | PDF101 अनुसंधान | UNC: URI | UNC पथ के साथ /URI क्रिया | URI क्रिया के माध्यम से NTLM चोरी |
| test34_5.pdf | create_malpdf34_5() | PDF101 अनुसंधान | UNC: JS submitForm | UNC पथ के साथ this.submitForm() | JS फॉर्म सबमिशन के माध्यम से NTLM चोरी |
| test34_6.pdf | create_malpdf34_6() | PDF101 अनुसंधान | UNC: JS getURL | UNC पथ के साथ this.getURL() | JS URL फ़ेच के माध्यम से NTLM चोरी |
| test34_7.pdf | create_malpdf34_7() | PDF101 अनुसंधान | UNC: JS launchURL | UNC पथ के साथ app.launchURL() | JS लॉन्च के माध्यम से NTLM चोरी |
| test34_8.pdf | create_malpdf34_8() | PDF101 अनुसंधान | UNC: JS SOAP | UNC पथ के साथ SOAP.connect() | JS SOAP के माध्यम से NTLM चोरी |
| test34_9.pdf | create_malpdf34_9() | PDF101 अनुसंधान | UNC: JS openDoc | UNC पथ के साथ app.openDoc() | JS दस्तावेज़ खोलने के माध्यम से NTLM चोरी |
| test35.pdf | create_malpdf35() | PDF101 अनुसंधान | नाम शब्दकोश | /Names /JavaScript कैटलॉग-स्तरीय ऑटो-निष्पादन ट्रिगर | वैकल्पिक JS निष्पादन ट्रिगर |
| test36.pdf | create_malpdf36() | CVE-2016-2175 / CVE-2017-9096 | XMP मेटाडेटा में XXE | /Metadata XMP स्ट्रीम में XXE <!ENTITY> | सर्वर-साइड कॉलबैक (PDFBox, iText) |
| test37.pdf | create_malpdf37() | CVE-2016-2175 / CVE-2017-9096 | XFA फॉर्म डेटा में XXE | /AcroForm /XFA स्ट्रीम में XXE <!ENTITY> | सर्वर-साइड कॉलबैक (PDFBox, iText) |
| test38.pdf | create_malpdf38() | CVE-2020-29075 | मौन DNS ट्रैकिंग | कैटलॉग /AA के साथ /WC, /WS, /DS ट्रिगर | प्रॉम्प्ट के बिना DNS कॉलबैक (Acrobat) |
| test39.pdf | create_malpdf39() | CVE-2022-28244 | CSP बाईपास | एम्बेडेड HTML/JS के साथ RichMedia एनोटेशन | क्रॉस-ऑरिजिन अनुरोध (Acrobat) |
| test40.pdf | create_malpdf40() | CVE-2018-5158 | PostScript कैलकुलेटर इंजेक्शन | इमेज XObject में /FunctionType 4 JS इंजेक्शन | PDF.js वर्कर (Firefox) में JS निष्पादन |
| test41.pdf | create_malpdf41() | CVE-2018-20065 | उपयोगकर्ता जेस्चर के बिना URI | /S /URI ऑटो-नेविगेशन के साथ /OpenAction | मौन नेविगेशन (PDFium/Chrome) |
| test42.pdf | create_malpdf42() | CVE-2025-66516 | XFA में XXE OOB पैरामीटर इकाई | /AcroForm /XFA में %xxe; पैराम इकाई DTD फ़ेच को बाध्य करती है | सर्वर-साइड ब्लाइंड XXE (Tika, Confluence, Jira) |
| test43.pdf | create_malpdf43() | CVE-2025-70401 | एनोटेशन /T फ़ील्ड XSS | टेक्स्ट एनोटेशन /T (लेखक) फ़ील्ड में `` टैग | XSS कॉलबैक (Apryse WebViewer, वेब व्यूअर) |
| test44.pdf | create_malpdf44() | CVE-2024-12426 | LibreOffice URL विस्तार | vnd.sun.star.expand: के साथ /URI ${HOME} का विस्तार करता है | एनवी वेरिएबल एक्सफ़िल्ट्रेशन (LibreOffice < 24.8.4) |
| test45.pdf | create_malpdf45() | CVE-2025-59803 | हस्ताक्षर करने पर OCG JS ट्रिगर | /AA /WP+/DP हस्ताक्षर वर्कफ़्लो में OCG के माध्यम से JS ट्रिगर करता है | हस्ताक्षर के दौरान कॉलबैक (Foxit < 2025.2.1) |
| test46.pdf | create_malpdf46() | CVE-2026-25755 | jsPDF ऑब्जेक्ट इंजेक्शन | टूटा हुआ JS स्ट्रिंग + इंजेक्टेड /AA /O ऑटो-क्रिया | किसी भी व्यूअर के माध्यम से ऑटो-कॉलबैक (jsPDF < 4.2.0) |
| test47.pdf | create_malpdf47() | PDF 2.0 स्पेक | एसोसिएटेड फ़ाइलें HTML एम्बेड | कैटलॉग /AF + /EF EmbeddedFile के माध्यम से HTML | एम्बेडेड HTML के माध्यम से कॉलबैक (PDF 2.0 व्यूअर) |
| test48.pdf | create_malpdf48() | XFA स्पेक | XFA SOAP कॉलबैक | initialize इवेंट के साथ <submit method="soap"> | SOAP HTTP अनुरोध (Acrobat XFA इंजन) |
/Names प्रविष्टियों में विभाजित करें जो क्रमिक रूप से निष्पादित होती हैं। Ref: corkami PDF tricks%%EOF मार्कर के बाद नए ऑब्जेक्ट/क्रियाएँ जोड़ें। Ref: PDF101 content masking, Didier Stevensunescape() एन्कोडिंग — JS पेलोड को eval(unescape("%61%6C%65%72%74...")) में लपेटें। Ref: corkami PDF tricks%PDF- हेडर से पहले JPEG/HTML/अन्य मैजिक बाइट्स जोड़ें (स्पेक पहले 1024 बाइट्स के भीतर हेडर की अनुमति देता है)। फ़ाइल-प्रकार का पता लगाने में भ्रम पैदा करता है। Ref: corkami, Decalageevent.target.zoomType == "FitPage" या ग्लोबल वेरिएबल प्रकार जाँच के माध्यम से वास्तविक Adobe Reader का पता लगाएँ। Ref: corkami PDF tricks