diff --git a/src/pentesting-web/xxe-xee-xml-external-entity.md b/src/pentesting-web/xxe-xee-xml-external-entity.md
index 75d038973..448467f77 100644
--- a/src/pentesting-web/xxe-xee-xml-external-entity.md
+++ b/src/pentesting-web/xxe-xee-xml-external-entity.md
@@ -1,31 +1,26 @@
# XXE - XEE - XML Externe Entiteit
-{{#include /banners/hacktricks-training.md}}
-
-- [Dojo CTF-uitdaging #42 – Hex Kleurpalet XXE skrywe](https://www.yeswehack.com/dojo/dojo-ctf-challenge-winners-42)
-- [lxml fout #2107279 – Parameter-entiteit XXE steeds moontlik](https://bugs.launchpad.net/lxml/+bug/2107279)
-
{{#include ../banners/hacktricks-training.md}}
## XML Basiese Beginsels
-XML is 'n opmaaktaal wat ontwerp is vir datastoor en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende getitelde etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
+XML is 'n opmaaktaal wat ontwerp is vir data-opberging en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywende naamgewing vir etikette toelaat. Dit verskil van HTML deur nie beperk te wees tot 'n stel vooraf gedefinieerde etikette nie. Die belangrikheid van XML het afgeneem met die opkoms van JSON, ondanks sy aanvanklike rol in AJAX-tegnologie.
- **Data voorstelling deur Entiteite**: Entiteite in XML stel die voorstelling van data in staat, insluitend spesiale karakters soos `<` en `>`, wat ooreenstem met `<` en `>` om konflik met XML se etikette stelsel te vermy.
- **Definiëring van XML Elemente**: XML laat die definisie van elementtipes toe, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat wissel van enige tipe inhoud tot spesifieke kindelemente.
- **Dokumenttipe Definisie (DTD)**: DTD's is van kardinale belang in XML vir die definisie van die dokument se struktuur en die tipes data wat dit kan bevat. Hulle kan intern, ekstern, of 'n kombinasie wees, wat lei hoe dokumente geformateer en gevalideer word.
-- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, wek sekuriteitskwessies, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databronne hanteer, benut: ` ]>`
-- **XXE Opsporing met Parameter Entiteite**: Vir die opsporing van XXE kwesbaarhede, veral wanneer konvensionele metodes misluk as gevolg van parser sekuriteitsmaatreëls, kan XML parameter entiteite gebruik word. Hierdie entiteite stel buite-band opsporingstegnieke in staat, soos om DNS-opsoeke of HTTP versoeke na 'n beheerde domein te aktiveer, om die kwesbaarheid te bevestig.
+- **Pasgemaakte en Eksterne Entiteite**: XML ondersteun die skepping van pasgemaakte entiteite binne 'n DTD vir buigsame data voorstelling. Eksterne entiteite, gedefinieer met 'n URL, wek sekuriteitskwessies, veral in die konteks van XML Externe Entiteit (XXE) aanvalle, wat die manier waarop XML-parsers eksterne databasisse hanteer, benut: ` ]>`
+- **XXE Opsporing met Parameter Entiteite**: Vir die opsporing van XXE kwesbaarhede, veral wanneer konvensionele metodes misluk as gevolg van parser sekuriteitsmaatreëls, kan XML parameter entiteite gebruik word. Hierdie entiteite stel buite-band opsporingstegnieke in staat, soos om DNS-opsoeke of HTTP-versoeke na 'n beheerde domein te aktiveer, om die kwesbaarheid te bevestig.
- ` ]>`
- ` ]>`
## Hoofaanvalle
-[**Meeste van hierdie aanvalle is getoets met die wonderlike Portswiggers XEE laboratoriums: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
+[**Die meeste van hierdie aanvalle is getoets met die wonderlike Portswiggers XEE laboratoriums: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
### Nuwe Entiteit toets
-In hierdie aanval gaan ek toets of 'n eenvoudige nuwe ENTITEIT verklaring werk
+In hierdie aanval gaan ek toets of 'n eenvoudige nuwe ENTITEIT verklaring werk.
```xml
]>
@@ -70,7 +65,7 @@ In hierdie derde geval let op dat ons die `Element stockCheck` as ANY verklaar.
### Gidslys
-In **Java** gebaseerde toepassings mag dit moontlik wees om die **inhoud van 'n gids te lys** via XXE met 'n payload soos (net vra vir die gids in plaas van die lêer):
+In **Java** gebaseerde toepassings mag dit moontlik wees om **die inhoud van 'n gids te lys** via XXE met 'n payload soos (net vra vir die gids in plaas van die lêer):
```xml
]>&xxe;
@@ -88,7 +83,7 @@ In **Java** gebaseerde toepassings mag dit moontlik wees om die **inhoud van 'n
```
### Blind SSRF
-Met die **voorheen kommentaar gelede tegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML entiteite nie toegelaat word** nie, in daardie geval kan jy probeer om **XML parameter entiteite** te gebruik:
+Met die **voorheen kommentaartegniek** kan jy die bediener laat toegang verkry tot 'n bediener wat jy beheer om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit dalk omdat **XML-entiteite nie toegelaat word** nie; in daardie geval kan jy probeer om **XML-parameterentiteite** te gebruik:
```xml
%xxe; ]>
@@ -96,7 +91,7 @@ Met die **voorheen kommentaar gelede tegniek** kan jy die bediener laat toegang
```
### "Blind" SSRF - Exfiltreer data uit-band
-**In hierdie geval gaan ons die bediener laat laai 'n nuwe DTD met 'n kwaadwillige payload wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal met hierdie basiese bediener byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
+**In hierdie geval gaan ons die bediener laat 'n nuwe DTD met 'n kwaadwillige payload laai wat die inhoud van 'n lêer via HTTP versoek sal stuur (vir multi-lyn lêers kan jy probeer om dit via \_ftp://**\_ uit te haal deur hierdie basiese bediener te gebruik, byvoorbeeld [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Hierdie verduideliking is gebaseer op** [**Portswiggers lab hier**](https://portswigger.net/web-security/xxe/blind)**.**
In die gegewe kwaadwillige DTD word 'n reeks stappe uitgevoer om data uit te haal:
@@ -126,18 +121,18 @@ Die aanvaller huisves hierdie kwaadwillige DTD op 'n bediener onder hul beheer,
%xxe;]>
3;1
```
-Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parsser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die ekfiltrasie van die `/etc/hostname`-lêer na die aanvaller se bediener.
+Hierdie payload definieer 'n XML parameterentiteit `%xxe` en inkorporeer dit binne die DTD. Wanneer dit deur 'n XML-parser verwerk word, haal hierdie payload die eksterne DTD van die aanvaller se bediener. Die parser interpreteer dan die DTD inline, voer die stappe in die kwaadwillige DTD uit en lei tot die ekfiltrasie van die `/etc/hostname` lêer na die aanvaller se bediener.
### Foutgebaseerd (Eksterne DTD)
**In hierdie geval gaan ons die bediener dwing om 'n kwaadwillige DTD te laai wat die inhoud van 'n lêer binne 'n foutboodskap sal wys (dit is slegs geldig as jy foutboodskappe kan sien).** [**Voorbeeld hier.**](https://portswigger.net/web-security/xxe/blind)
-'n XML-parsingsfoutboodskap, wat die inhoud van die `/etc/passwd`-lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Document Type Definition (DTD). Dit word bereik deur die volgende stappe:
+'n XML-parsing foutboodskap, wat die inhoud van die `/etc/passwd` lêer onthul, kan geaktiveer word deur 'n kwaadwillige eksterne Document Type Definition (DTD). Dit word bereik deur die volgende stappe:
-1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd`-lêer bevat.
+1. 'n XML parameterentiteit genaamd `file` word gedefinieer, wat die inhoud van die `/etc/passwd` lêer bevat.
2. 'n XML parameterentiteit genaamd `eval` word gedefinieer, wat 'n dinamiese verklaring vir 'n ander XML parameterentiteit genaamd `error` inkorporeer. Hierdie `error` entiteit, wanneer geëvalueer, probeer om 'n nie-bestaande lêer te laai, wat die inhoud van die `file` entiteit as sy naam inkorporeer.
3. Die `eval` entiteit word aangeroep, wat lei tot die dinamiese verklaring van die `error` entiteit.
-4. Aanspreking van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap produseer wat die inhoud van die `/etc/passwd`-lêer as deel van die lêernaam insluit.
+4. Aangroeping van die `error` entiteit lei tot 'n poging om 'n nie-bestaande lêer te laai, wat 'n foutboodskap produseer wat die inhoud van die `/etc/passwd` lêer as deel van die lêernaam insluit.
Die kwaadwillige eksterne DTD kan geaktiveer word met die volgende XML:
```xml
@@ -155,9 +150,9 @@ _**Neem asseblief kennis dat eksterne DTD ons toelaat om een entiteit binne die
So wat van blinde XXE kwesbaarhede wanneer **uit-baan interaksies geblokkeer is** (eksterne verbindings is nie beskikbaar nie)?
-'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem laat die interne herdefinisie van entiteite wat eksterne verklaar is toe, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle benut die herdefinisie van 'n XML parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers op plaaslike DTD-lêers staatmaak om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
+'n Gaping in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem laat die interne herdefinisie van entiteite wat eksterne verklaar is toe, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle benut die herdefinisie van 'n XML parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer uit-baan verbindings deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n ontledingsfout te veroorsaak om sensitiewe inligting te onthul.
-Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer by `/usr/local/app/schema.dtd` bevat, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML-ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd`-lêer onthul deur 'n hibriede DTD soos volg in te dien:
+Overweeg 'n scenario waar die bediener se lêerstelsel 'n DTD-lêer bevat by `/usr/local/app/schema.dtd`, wat 'n entiteit genaamd `custom_entity` definieer. 'n Aanvaller kan 'n XML ontledingsfout veroorsaak wat die inhoud van die `/etc/passwd` lêer onthul deur 'n hibriede DTD soos volg in te dien:
```xml
@@ -193,7 +188,7 @@ Die uiteengesette stappe word deur hierdie DTD uitgevoer:
```
.png>)
-Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur **die dieselfde OS / sagteware** te installeer wat die bediener gebruik en **sommige standaard DTD's** te soek, of **'n lys** van **standaard DTD's** binne stelsels te **gryp** en te **kontroleer** of enige van hulle bestaan:
+Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur die **dieselfde OS / sagteware** wat die bediener gebruik te **installeer** en **sommige standaard DTD's** te **soek**, of deur 'n lys van **standaard DTD's** binne stelsels te **gryp** en te **kontroleer** of enige van hulle bestaan:
```xml
@@ -202,15 +197,15 @@ Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een
```
Vir meer inligting, kyk na [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
-### Vind DTDs binne die stelsel
+### Vind DTD's binne die stelsel
-In die volgende wonderlike github repo kan jy **paaie van DTDs wat in die stelsel teenwoordig kan wees** vind:
+In die volgende wonderlike github repo kan jy **paaie van DTD's wat in die stelsel teenwoordig kan wees** vind:
{{#ref}}
https://github.com/GoSecure/dtd-finder/tree/master/list
{{#endref}}
-Boonop, as jy die **Docker beeld van die slagoffer stelsel** het, kan jy die hulpmiddel van dieselfde repo gebruik om die **beeld** te **skandeer** en die pad van **DTDs** wat binne die stelsel teenwoordig is, te **vind**. Lees die [Readme van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
+Boonop, as jy die **Docker beeld van die slagoffer stelsel** het, kan jy die hulpmiddel van dieselfde repo gebruik om die **beeld** te **skandeer** en die pad van **DTD's** wat binne die stelsel teenwoordig is, te **vind**. Lees die [Readme van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@@ -226,13 +221,13 @@ Testing 0 entities : []
Vir 'n meer diepgaande verduideliking van hierdie aanval, **kyk na die tweede afdeling van** [**hierdie wonderlike pos**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **van Detectify**.
-Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser om die data uit die sigblad te onttrek, sal dit onvermydelik nodig wees om ten minste een XML-lêer te parse.
+Die vermoë om **Microsoft Office-dokumente op te laai, word deur baie webtoepassings aangebied**, wat dan voortgaan om sekere besonderhede uit hierdie dokumente te onttrek. Byvoorbeeld, 'n webtoepassing mag gebruikers toelaat om data in te voer deur 'n XLSX-formaat sigblad op te laai. Ten einde vir die parser om die data uit die sigblad te onttrek, sal dit onvermydelik ten minste een XML-lêer moet parse.
-Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer wat 'n XXE-payload bevat, te skep**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontzip kan word.
+Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer wat 'n XXE-payload bevat, te skep**. Die eerste stap is om 'n leë gids te skep waaraan die dokument ontpak kan word.
-Sodra die dokument ontzip is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
+Sodra die dokument ontpak is, moet die XML-lêer geleë by `./unzipped/word/document.xml` geopen en in 'n verkiesde teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die verlangde XXE-payload in te sluit, wat dikwels met 'n HTTP-versoek begin.
-Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL te vervang met 'n monitorbare URL vir versoeke.
+Die gewysigde XML-lyne moet tussen die twee wortel-XML-objekte ingevoeg word. Dit is belangrik om die URL met 'n monitorbare URL vir versoeke te vervang.
Laastens kan die lêer gezip word om die kwaadwillige poc.docx-lêer te skep. Vanuit die voorheen geskepte "unzipped" gids, moet die volgende opdrag uitgevoer word:
@@ -250,13 +245,13 @@ jar:https://download.host.com/myarchive.zip!/file.txt
Die proses agter die toegang tot 'n lêer binne 'n PKZIP-argief via die jar-protokol behels verskeie stappe:
-1. 'n HTTP-versoek word gemaak om die zip-argief van 'n gespesifiseerde ligging af te laai, soos `https://download.website.com/archive.zip`.
+1. 'n HTTP-versoek word gemaak om die zip-argief van 'n gespesifiseerde ligging af te aflaai, soos `https://download.website.com/archive.zip`.
2. Die HTTP-antwoord wat die argief bevat, word tydelik op die stelsel gestoor, tipies in 'n ligging soos `/tmp/...`.
3. Die argief word dan onttrek om toegang tot sy inhoud te verkry.
4. Die spesifieke lêer binne die argief, `file.zip`, word gelees.
5. Na die operasie word enige tydelike lêers wat tydens hierdie proses geskep is, verwyder.
-'n Interessante tegniek om hierdie proses by die tweede stap te onderbreek, behels om die bedienerverbinding onbeperk oop te hou wanneer die argief lêer bedien word. Gereedskap beskikbaar by [hierdie repo](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) kan vir hierdie doel gebruik word, insluitend 'n Python-bediener (`slow_http_server.py`) en 'n Java-bediener (`slowserver.jar`).
+'n Interessante tegniek om hierdie proses by die tweede stap te onderbreek, behels om die bedienerverbinding onbeperk oop te hou wanneer die argief lêer bedien word. Gereedskap beskikbaar by [hierdie berging](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) kan vir hierdie doel gebruik word, insluitend 'n Python-bediener (`slow_http_server.py`) en 'n Java-bediener (`slowserver.jar`).
```xml
]>
&xxe;
@@ -311,7 +306,7 @@ en deur die volgende versoek te stuur
```
Then you can try to crack the hash using hashcat
-## Verborgen XXE Oppervlakke
+## Hidden XXE Surfaces
### XInclude
@@ -325,11 +320,11 @@ Kontrollere [https://portswigger.net/web-security/xxe](https://portswigger.net/w
### SVG - Lêeroplaai
-Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevatte lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
+Lêers wat deur gebruikers na sekere toepassings opgelaai word, wat dan op die bediener verwerk word, kan kwesbaarhede in hoe XML of XML-bevat lêerformate hanteer word, benut. Algemene lêerformate soos kantoor dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
-Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of geverifieer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, mag die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
+Wanneer gebruikers **beelde oplaai**, word hierdie beelde bediener-kant verwerk of geverifieer. Selfs vir toepassings wat formate soos PNG of JPEG verwag, kan die **bediener se beeldverwerkingsbiblioteek ook SVG-beelde ondersteun**. SVG, as 'n XML-gebaseerde formaat, kan deur aanvallers benut word om kwaadwillige SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
-'n Voorbeeld van so 'n ontploffing word hieronder getoon, waar 'n kwaadwillige SVG-beeld probeer om stelsellêers te lees:
+'n Voorbeeld van so 'n uitbuiting word hieronder getoon, waar 'n kwaadwillige SVG-beeld probeer om stelsellêers te lees:
```xml
```
@@ -363,7 +358,7 @@ Content-Length: 7
foo=bar
```
-Dan kan jy dalk die volgende versoek indien, met dieselfde resultaat:
+Dan mag jy dalk die volgende versoek indien, met dieselfde resultaat:
```xml
POST /action HTTP/1.0
Content-Type: text/xml
@@ -481,9 +476,9 @@ DTD voorbeeld:
Hierdie voorbeeld is geïnspireer deur [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 Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsproses oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaar-geassisteerde Vertaling) gereedskap.
+XLIFF (XML Lokaliseringsuitruilformaat) word gebruik om data-uitruil in lokaliseringsprosesse te standaardiseer. Dit is 'n XML-gebaseerde formaat wat hoofsaaklik gebruik word om lokaliseerbare data tussen gereedskap tydens lokaliseringsprosesse oor te dra en as 'n algemene uitruilformaat vir CAT (Rekenaarondersteunde Vertaling) gereedskap.
-### Blind Versoek Analise
+### Blind Request Analise
'n Versoek word aan die bediener gemaak met die volgende inhoud:
```xml
@@ -497,7 +492,7 @@ Content-Type: application/x-xliff+xml
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
-egter, hierdie versoek veroorsaak 'n interne bedienerfout, wat spesifiek 'n probleem met die merkverklarings noem:
+Hierdie versoek veroorsaak egter 'n interne bedienerfout, wat spesifiek 'n probleem met die merkverklarings noem:
```json
{
"status": 500,
@@ -505,7 +500,7 @@ egter, hierdie versoek veroorsaak 'n interne bedienerfout, wat spesifiek 'n prob
"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."
}
```
-Ten spyte van die fout, word 'n treffer op Burp Collaborator geregistreer, wat 'n sekere vlak van interaksie met die eksterne entiteit aandui.
+Ten spyte van die fout, word 'n treffer op Burp Collaborator aangeteken, wat 'n sekere vlak van interaksie met die eksterne entiteit aandui.
Out of Band Data Exfiltration Om data te eksfiltreer, word 'n gewysigde versoek gestuur:
```
@@ -519,9 +514,9 @@ Content-Type: application/x-xliff+xml
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
-Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Opgemerkte beperking met hierdie weergawe van Java is die onmoontlikheid om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
+Hierdie benadering onthul dat die User Agent die gebruik van Java 1.8 aandui. 'n Opgemerk beperking met hierdie weergawe van Java is die onvermoë om lêers wat 'n nuwe reël karakter bevat, soos /etc/passwd, te verkry met die Out of Band tegniek.
-Error-Based Data Exfiltration Om hierdie beperking te oorkom, word 'n Error-Based benadering gebruik. Die DTD-lêer is soos volg gestruktureer om 'n fout te aktiveer wat data van 'n teikendlêer insluit:
+Error-Based Data Exfiltration Om hierdie beperking te oorkom, word 'n Error-Based benadering gebruik. Die DTD-lêer is as volg gestruktureer om 'n fout te aktiveer wat data van 'n teikendlêer insluit:
```xml
">
@@ -545,9 +540,9 @@ Hierdie wysiging lei tot die suksesvolle eksfiltrasie van die lêer se inhoud, s
Geldige XML met RSS-formaat om 'n XXE kwesbaarheid te benut.
-### Ping terug
+### Ping back
-Eenvoudige HTTP-versoek na die aanvallersbediener
+Eenvoudige HTTP-versoek na die aanvallers bediener
```xml
@@ -689,14 +684,14 @@ https://github.com/luisfontes19/xxexploiter
### Python lxml Parameter-Entity XXE (Fout-gebaseerde Lêerontsluiting)
> [!INFO]
-> Die Python biblioteek **lxml** gebruik **libxml2** onder die oppervlak. Weergawes voor **lxml 5.4.0 / libxml2 2.13.8** brei steeds *parameter* entiteite uit selfs wanneer `resolve_entities=False`, wat dit bereikbaar maak wanneer die toepassing `load_dtd=True` en/of `resolve_entities=True` inskakel. Dit stel Fout-gebaseerde XXE payloads in staat om die inhoud van plaaslike lêers in die parser foutboodskap in te sluit.
+> Die Python biblioteek **lxml** gebruik **libxml2** onder die oppervlak. Weergawes voor **lxml 5.4.0 / libxml2 2.13.8** brei steeds *parameter* entiteite uit selfs wanneer `resolve_entities=False`, wat hulle bereikbaar maak wanneer die toepassing `load_dtd=True` en/of `resolve_entities=True` inskakel. Dit stel Fout-gebaseerde XXE payloads in staat om die inhoud van plaaslike lêers in die parser foutboodskap in te sluit.
#### 1. Exploiteer lxml < 5.4.0
1. Identifiseer of skep 'n *plaaslike* DTD op skyf wat 'n **onbeskryfde** parameter entiteit definieer (bv. `%config_hex;`).
-2. Ontwerp 'n interne DTD wat:
+2. Stel 'n interne DTD saam wat:
* Die plaaslike DTD laai met ``.
* Die onbeskryfde entiteit herdefinieer sodat dit:
-- Die teikend lêer lees (``).
+- Die teikenlêer lees (``).
- 'n Ander parameter entiteit bou wat na 'n **ongeldige pad** verwys wat die `%flag;` waarde bevat en 'n parser fout veroorsaak (`">`).
3. Laastens, brei `%local_dtd;` en `%eval;` uit sodat die parser `%error;` teëkom, misluk om `/aaa/` te open en die vlag binne die gegooi uitsondering lek – wat dikwels aan die gebruiker deur die toepassing teruggestuur word.
```xml
@@ -709,15 +704,15 @@ https://github.com/luisfontes19/xxexploiter
%local_dtd;
]>
```
-Wanneer die aansoek die uitsondering druk, bevat die antwoord:
+Wanneer die toepassing die uitsondering druk, bevat die antwoord:
```
Error : failed to load external entity "file:///aaa/FLAG{secret}"
```
> [!TIP]
-> As die parser kla oor `%`/`&` karakters binne die interne subset, kodifiseer hulle dubbel (`%` ⇒ `%`) om uitbreiding te vertraag.
+> As die parser kla oor `%`/`&` karakters binne die interne subset, kodeer hulle dubbel (`%` ⇒ `%`) om uitbreiding te vertraag.
#### 2. Om die lxml 5.4.0 verharding te omseil (libxml2 steeds kwesbaar)
-`lxml` ≥ 5.4.0 verbied *fout* parameter entiteite soos die een hierbo, maar **libxml2** laat steeds toe dat hulle in 'n *algemene* entiteit ingebed word. Die truuk is om:
+`lxml` ≥ 5.4.0 verbied *error* parameter entiteite soos die een hierbo, maar **libxml2** laat steeds toe dat hulle in 'n *algemene* entiteit ingebed word. Die truuk is om:
1. Lees die lêer in 'n parameter entiteit `%file`.
2. Verklaar 'n ander parameter entiteit wat 'n **algemene** entiteit `c` bou waarvan die SYSTEM identifiseerder 'n *nie-bestaande protokol* soos `meow://%file;` gebruik.
3. Plaas `&c;` in die XML liggaam. Wanneer die parser probeer om `meow://…` te dereferensieer, misluk dit en reflekteer die volle URI – insluitend die lêerinhoud – in die foutboodskap.
@@ -734,14 +729,47 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
#### Sleutelafleidings
* **Parameter entiteite** word steeds deur libxml2 uitgebrei, selfs wanneer `resolve_entities` XXE moet blokkeer.
* 'n **Ongeldige URI** of **nie-bestaande lêer** is genoeg om beheerde data in die gegooi uitsondering te konkateneer.
-* Die tegniek werk **sonder uitgaande konnektiwiteit**, wat dit ideaal maak vir streng uitgangs-gefilterde omgewings.
+* Die tegniek werk **sonder buitelandse konnektiwiteit**, wat dit ideaal maak vir streng uitgangs-gefilterde omgewings.
#### Versagtingsriglyne
* Opgradeer na **lxml ≥ 5.4.0** en verseker dat die onderliggende **libxml2** **≥ 2.13.8** is.
* Deaktiveer `load_dtd` en/of `resolve_entities` tensy absoluut nodig.
-* Vermy om rou parser foute aan die kliënt terug te gee.
+* Vermy om rou parserfoute aan die kliënt terug te gee.
-## Verwysings
+### Java DocumentBuilderFactory versterking voorbeeld
+
+Java-toepassings parseer dikwels XML met `DocumentBuilderFactory`. Standaard laat die fabriek **buitelandse entiteit resolusie toe**, wat dit kwesbaar maak vir XXE en SSRF as daar geen addisionele versterkingsvlagte ingestel is nie:
+```java
+DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+DocumentBuilder builder = dbf.newDocumentBuilder(); // XXE-prone
+```
+Veilige konfigurasie voorbeeld:
+```java
+DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+
+// Completely forbid any DOCTYPE declarations (best-effort defence)
+dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
+
+// Disable expansion of external entities
+dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
+dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
+
+// Enable "secure processing" which applies additional limits
+dbf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, true);
+
+// Defensive extras
+dbf.setXIncludeAware(false);
+dbf.setExpandEntityReferences(false);
+
+DocumentBuilder builder = dbf.newDocumentBuilder();
+```
+As die aansoek DTD's intern moet ondersteun, hou `disallow-doctype-decl` gedeaktiveer, maar **laat altyd** die twee `external-*-entities` funksies op `false` gestel. Die kombinasie voorkom klassieke lêer-blootstelling payloads (`file:///etc/passwd`) sowel as netwerk-gebaseerde SSRF vektore (`http://169.254.169.254/…`, `jar:` protokol, ens.).
+
+Werklike gevalstudie: **CVE-2025-27136** in die Java S3 emulators *LocalS3* het die kwesbare konstruktors hierbo gebruik. 'n Onauthentieke aanvaller kon 'n vervaardigde XML liggaam aan die `CreateBucketConfiguration` eindpunt verskaf en die bediener laat plaaslike lêers (byvoorbeeld `/etc/passwd`) in die HTTP antwoord inkorporeer.
+
+## References
+
+- [OffSec Blog – CVE-2025-27136 LocalS3 XXE](https://www.offsec.com/blog/cve-2025-27136/)
- [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)