<summary><strong>Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com)
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
XML ni lugha ya alama iliyoundwa kwa uhifadhi na usafirishaji wa data, ikionyesha muundo mpana unaoruhusu matumizi ya vitambulisho vilivyopewa majina ya kuelezea. Inatofautiana na HTML kwa kutokuwa na kikomo cha vitambulisho vilivyopangwa mapema. Umuhimu wa XML umepungua na kuibuka kwa JSON, licha ya jukumu lake la awali katika teknolojia ya AJAX.
* **Uwakilishaji wa Data kupitia Entiti**: Entiti katika XML inawezesha uwakilishaji wa data, ikiwa ni pamoja na herufi maalum kama vile `<` na `>`, ambazo zinafaanana na `<` na `>` ili kuepuka mgongano na mfumo wa vitambulisho vya XML.
* **Kuainisha Elementi za XML**: XML inaruhusu ufafanuzi wa aina za elementi, ikielezea jinsi elementi zinavyopaswa kuwa na muundo na yaliyomo wanayoweza kuwa nayo, kutoka aina yoyote ya yaliyomo hadi elementi maalum za watoto.
* **Ufafanuzi wa Aina ya Nyaraka (DTD)**: DTD ni muhimu katika XML kwa kuainisha muundo wa nyaraka na aina za data inaweza kuwa nayo. Wanaweza kuwa ndani, nje, au mchanganyiko, kuongoza jinsi nyaraka zinavyopangwa na kuhakikiwa.
* **Entiti za Kibinafsi na za Nje**: XML inasaidia uundaji wa entiti za kibinafsi ndani ya DTD kwa uwakilishaji wa data wenye mabadiliko. Entiti za nje, zilizoainishwa na URL, zinazua wasiwasi wa usalama, hasa katika muktadha wa mashambulio ya XML External Entity (XXE), ambayo yanatumia jinsi wapangaji wa XML wanavyoshughulikia vyanzo vya data vya nje: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
* **Uchunguzi wa XXE kwa Kutumia Entiti za Parameta**: Kwa kugundua udhaifu wa XXE, hasa wakati njia za kawaida zinashindwa kutokana na hatua za usalama za wapangaji, entiti za parameta za XML zinaweza kutumika. Entiti hizi huruhusu mbinu za uchunguzi nje ya mtandao, kama vile kuzindua uchunguzi wa DNS au maombi ya HTTP kwa kikoa kilichodhibitiwa, kuthibitisha udhaifu.
[**Mashambulizi mengi haya yalijaribiwa kwa kutumia maabara ya kushangaza ya Portswiggers XEE: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
Katika maombi yaliyojengwa kwa **Java** inaweza kuwa inawezekana **kuorodhesha maudhui ya directory** kupitia XXE na mzigo kama huu (kuuliza tu kwa directory badala ya faili):
Kwa kutumia **njia iliyotajwa hapo awali** unaweza kufanya server ufikie server unayodhibiti ili kuonyesha kuwa ni dhaifu. Lakini, ikiwa hiyo haifanyi kazi, labda ni kwa sababu **vitengo vya XML haviruhusiwi**, katika kesi hiyo unaweza jaribu kutumia **vitengo vya parameta za XML**:
**Katika tukio hili tutafanya server kupakia DTD mpya na mzigo wa hatari ambao utatuma maudhui ya faili kupitia ombi la HTTP (kwa faili zenye mistari mingi unaweza kujaribu kuitoa kupitia \_ftp://**\_ kwa kutumia server huu wa msingi kwa mfano [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Maelezo haya yanategemea** [**maabara ya Portswiggers hapa**](https://portswigger.net/web-security/xxe/blind)**.**
* Kipengele cha parameta cha XML, `%file`, kinaundwa, kusoma maudhui ya faili `/etc/hostname`.
* Kipengele kingine cha parameta cha XML, `%eval`, kinafafanuliwa. Kinaanzisha kwa kudai kipengele kipya cha parameta cha XML, `%exfiltrate`. Kipengele cha `%exfiltrate` kinaelekezwa kufanya ombi la HTTP kwa seva ya muhusika, kupitisha maudhui ya kipengele cha `%file` ndani ya mfuatano wa query wa URL.
2.**Utekelezaji wa Vipengele:**
* Kipengele cha `%eval` kinatumika, kusababisha utekelezaji wa kipengele cha parameta cha `%exfiltrate` kilichotangazwa kwa kudai.
* Kipengele cha `%exfiltrate` kisha hutumika, kuzindua ombi la HTTP kwa URL iliyotajwa na maudhui ya faili.
**Katika kesi hii tutafanya server iweke DTD mbaya ambayo itaonyesha maudhui ya faili ndani ya ujumbe wa kosa (hii ni sahihi tu ikiwa unaweza kuona ujumbe wa kosa).** [**Mfano kutoka hapa.**](https://portswigger.net/web-security/xxe/blind)
Ujumbe wa kosa wa kuchambua XML, ukiweka wazi maudhui ya faili ya `/etc/passwd`, unaweza kuzinduliwa kwa kutumia Msimbo wa Aina ya Hatua ya Nje (DTD) mbaya. Hii inafanikishwa kupitia hatua zifuatazo:
1. Kifaa cha XML kinachoitwa `faili` kinafafanuliwa, ambacho kina maudhui ya faili ya `/etc/passwd`.
2. Kifaa cha XML kinachoitwa `tathmini` kinafafanuliwa, kikiingiza tangazo la kudai la kifaa kingine cha XML kinachoitwa `kosa`. Kifaa hiki cha `kosa`, wakati wa kutathminiwa, jaribu kupakia faili isiyopo, kikiingiza maudhui ya kifaa cha `faili` kama jina lake.
3. Kifaa cha `tathmini` kinaitwa, kusababisha tangazo la kudai la kifaa cha `kosa`.
4. Kuwaita kifaa cha `kosa` kunasababisha jaribio la kupakia faili isiyopo, kuzalisha ujumbe wa kosa ambao unajumuisha maudhui ya faili ya `/etc/passwd` kama sehemu ya jina la faili.
Hitilafu katika maelezo ya lugha ya XML inaweza **kufunua data nyeti kupitia ujumbe wa kosa wakati DTD ya hati inachanganya matangazo ya ndani na ya nje**. Shida hii inaruhusu upya wa ndani wa viungo vilivyotangazwa kwa nje, kurahisisha utekelezaji wa mashambulizi ya XXE yanayotokana na kosa. Mashambulizi kama hayo hufaidika na upya wa kipengele cha XML, kilichotangazwa awali katika DTD ya nje, kutoka ndani ya DTD ya ndani. Wakati mwingiliano wa nje unazuiliwa na seva, wadukuzi lazima wategemee faili za DTD za ndani kufanya shambulio, wakilenga kusababisha kosa la uparaganyaji kufunua habari nyeti.
Fikiria hali ambapo mfumo wa faili wa seva una faili ya DTD kwa `/usr/local/app/schema.dtd`, ikidefiniisha kipengele kinachoitwa `custom_entity`. Mshambuliaji anaweza kusababisha kosa la uparaganyaji wa XML kufunua maudhui ya faili ya `/etc/passwd` kwa kuwasilisha DTD ya mchanganyiko kama ifuatavyo:
* Ufafanuzi wa kipengele cha parameter cha XML kinachoitwa `local_dtd` unajumuisha faili ya DTD ya nje iliyoko kwenye mfumo wa seva.
* Ubadilishaji unatokea kwa kipengele cha parameter cha XML kinachoitwa `custom_entity`, kilichoelezwa awali katika DTD ya nje, ili kufunga [shambulio la XXE kulingana na makosa](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ubadilishaji huu umepangwa kusababisha kosa la uchambuzi, kufunua maudhui ya faili ya `/etc/passwd`.
* Kwa kutumia kipengele cha `local_dtd`, DTD ya nje inatumika, ikijumuisha kipengele kilichofafanuliwa kwa mara ya kwanza cha `custom_entity`. Mfululizo huu wa hatua unasababisha kutolewa kwa ujumbe wa kosa uliolengwa na shambulio.
**Mfano wa ulimwengu wa kweli:** Mifumo inayotumia mazingira ya desktop ya GNOME mara nyingi ina DTD kwenye `/usr/share/yelp/dtd/docbookx.dtd` inayojumuisha kipengele kinachoitwa `ISOamso`
Kwa kuwa mbinu hii inatumia **DTD ya ndani unahitaji kwanza kupata moja inayofaa**. Unaweza kufanya hivi **kwa kusakinisha****OS / Programu** ile ile ambayo seva inatumia na **kutafuta DTD za msingi**, au **kupata orodha** ya **DTD za msingi** ndani ya mifumo na **kuangalia** kama moja kati yao ipo:
Zaidi ya hayo, ikiwa una **picha ya Docker ya mfumo wa mwathiriwa**, unaweza kutumia zana ya repo hiyo hiyo kufanya **skani** ya **picha** na **kupata** njia za **DTDs** zilizopo ndani ya mfumo. Soma [Readme ya github](https://github.com/GoSecure/dtd-finder) kujifunza jinsi.
Kwa maelezo zaidi kuhusu shambulio hili, **angalia sehemu ya pili ya** [**chapisho hili la kushangaza**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **kutoka Detectify**.
Uwezo wa **kupakia hati za Microsoft Office unatolewa na programu nyingi za wavuti**, ambazo kisha huendelea kutoa maelezo fulani kutoka kwa hati hizi. Kwa mfano, programu ya wavuti inaweza kuruhusu watumiaji kuagiza data kwa kupakia karatasi ya muundo wa XLSX. Ili kipambanuzi uweze kutoa data kutoka kwenye karatasi, itabidi bila shaka iparishe angalau faili moja ya XML.
Ili kujaribu udhaifu huu, ni muhimu kuunda **faili ya Microsoft Office inayojumuisha mzigo wa XXE**. Hatua ya kwanza ni kuunda saraka tupu ambayo hati inaweza kufunguliwa.
Baada ya hati kufunguliwa, faili ya XML iliyoko kwenye `./unzipped/word/document.xml` inapaswa kufunguliwa na kuhaririwa kwenye mhariri wa maandishi unaopendelewa (kama vile vim). XML inapaswa kuhaririwa ili kujumuisha mzigo wa XXE unaotakiwa, mara nyingi ukiwa na ombi la HTTP.
Mistari iliyohaririwa ya XML inapaswa kuingizwa kati ya vitu viwili vya mizizi ya XML. Ni muhimu kubadilisha URL na URL inayoweza kufuatiliwa kwa maombi.
Hatimaye, faili inaweza kufungwa ili kuunda faili ya poc.docx yenye nia mbaya. Kutoka kwenye saraka iliyoundwa hapo awali "unzipped", amri ifuatayo inapaswa kutumika:
Sasa, faili iliyoundwa inaweza kupakiwa kwenye programu ya wavuti inayoweza kuwa na udhaifu, na mtu anaweza kutumai ombi litatokea kwenye magogo ya Burp Collaborator.
Itifaki ya **jar** inapatikana kipekee ndani ya **programu za Java**. Imetengenezwa kuruhusu ufikiaji wa faili ndani ya kiunzi cha **PKZIP** (k.m., `.zip`, `.jar`, n.k.), ikilenga faili za ndani na za mbali.
Ili kuweza kupata faili ndani ya faili za PKZIP ni **muhimu sana kudanganya XXE kupitia faili za DTD za mfumo.** Angalia [sehemu hii kujifunza jinsi ya kudanganya faili za DTD za mfumo](xxe-xee-xml-external-entity.md#error-based-system-dtd).
Mbinu ya kuvuruga mchakato huu katika hatua ya pili inajumuisha kuweka uhusiano wa seva ukiwa wazi milele wakati wa kutumikia faili ya kiwango. Zana zilizopo kwenye [hifadhi hii](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) zinaweza kutumika kwa madhumuni haya, ikiwa ni pamoja na seva ya Python (`slow_http_server.py`) na seva ya Java (`slowserver.jar`).
Kuandika faili katika saraka ya muda inaweza kusaidia **kuongeza ukiukaji mwingine wa usalama unaohusisha upitishaji wa njia** (kama vile kuingiza faili za ndani, kuingiza templeti, XSLT RCE, uhariri wa data, nk).
Wakati unapoingiza data ya mteja kwenye nyaraka za XML upande wa seva, kama vile zile katika maombi ya SOAP ya nyuma, udhibiti wa moja kwa moja juu ya muundo wa XML mara nyingi huwa mdogo, ukizuia mashambulizi ya kawaida ya XXE kutokana na vizuizi vya kuhariri kipengele cha `DOCTYPE`. Hata hivyo, shambulio la `XInclude` hutoa suluhisho kwa kuruhusu uingizaji wa vitengo vya nje ndani ya kipengele chochote cha data ya nyaraka ya XML. Mbinu hii ni yenye ufanisi hata wakati sehemu tu ya data ndani ya nyaraka ya XML iliyozalishwa na seva inaweza kudhibitiwa.
Ili kutekeleza shambulio la `XInclude`, jina la nafasi ya `XInclude` lazima itangazwe, na njia ya faili kwa kipengele cha nje kilichokusudiwa lazima itajwe. Hapa chini ni mfano wa kifupi jinsi shambulio kama hilo linaweza kuundwa:
Faili zilizopakiwa na watumiaji kwenye programu fulani, ambazo kisha hupitishwa kwenye seva, zinaweza kutumia mapungufu katika jinsi XML au muundo wa faili unaofaa XML unavyoshughulikiwa. Miundo ya faili ya kawaida kama nyaraka za ofisi (DOCX) na picha (SVG) inategemea XML.
Wakati watumiaji **wanapopakia picha**, picha hizi hupitishwa au kuthibitishwa upande wa seva. Hata kwa programu zinazotarajia miundo kama PNG au JPEG, **maktaba ya usindikaji wa picha ya seva inaweza pia kusaidia picha za SVG**. SVG, ikiwa ni muundo unaotegemea XML, inaweza kutumiwa na wachomaji kutekeleza picha za SVG zenye nia mbaya, hivyo kuweka seva wazi kwa mapungufu ya XXE (XML External Entity).
Katika visa vyote, muundo wa SVG hutumiwa kuzindua mashambulizi yanayotumia uwezo wa usindikaji wa XML wa programu ya seva, ikisisitiza umuhimu wa ukaguzi thabiti wa data na hatua za usalama.
**Tafadhali kumbuka kwamba mstari wa kwanza wa faili iliyosomwa au matokeo ya utekelezaji utaonekana NDANI ya picha iliyoundwa. Kwa hivyo, unahitaji kuweza kupata picha ambayo SVG imeunda.**
Ili kubadilisha ombi unaweza kutumia Kifaa cha Burp kinachoitwa "**Mbadala wa Aina ya Yaliyomo**". [Hapa](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) unaweza kupata mfano huu:
Unaweza kutumia \[**"Mwongozo wa Kubadilisha" wa cyberchef hapa ]\(\[[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)) kubadilisha hadi UTF-7.
Ikiwa wavuti inatumia PHP, badala ya kutumia `file:/` unaweza kutumia **php wrappers**`php://filter/convert.base64-encode/resource=` kwa **kupata faili za ndani**.
Tafadhali kumbuka kuwa **Entiti za HTML** zinazotumiwa lazima ziwe za **nambari** (kama \[mfano huu]\([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)).
Mfano huu umehamasishwa katika [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) hutumiwa kustahimilisha kubadilishana data katika michakato ya upelekaji wa lugha. Ni muundo uliojikita kwenye XML unaotumiwa hasa kwa uhamishaji wa data zinazoweza kuhuishwa kati ya zana wakati wa upelekaji wa lugha na kama muundo wa kawaida wa kubadilishana kwa zana za CAT (Computer-Aided Translation).
{"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."}
Hii njia inaonyesha kwamba User Agent inaonyesha matumizi ya Java 1.8. Kikwazo kilichotambuliwa na toleo hili la Java ni uwezo wa kurejesha faili zinazohusisha herufi mpya, kama vile /etc/passwd, kwa kutumia mbinu ya Out of Band.
Udakuzi wa Data kwa Makosa Ili kushinda kikwazo hiki, njia ya Udakuzi wa Data kwa Makosa inatumika. Faili ya DTD imeandaliwa kama ifuatavyo kusababisha kosa ambalo linajumuisha data kutoka kwa faili ya lengo:
Hii mabadiliko inapelekea kufanikiwa kwa kuvuja kwa maudhui ya faili, kama ilivyoonyeshwa kwenye pato la kosa lililotumwa kupitia HTTP. Hii inaashiria shambulio la XXE (XML External Entity) lililofanikiwa, likitumia mbinu za Out of Band na Error-Based kutoa taarifa nyeti.
XMLDecoder ni darasa la Java ambalo hujenga vitu kulingana na ujumbe wa XML. Ikiwa mtumiaji mwenye nia mbaya anaweza kupata programu kutumia data ya kupita kwa wito wa njia **readObject**, atapata mara moja utekelezaji wa nambari kwenye seva.
* Pata habari kupitia HTTP kwa kutumia DTD ya nje: [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>Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA KUJIUNGA**](https://github.com/sponsors/carlospolop)!
* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee
* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**