# XSLT Server Side Injection (Ekstenzibilni jezik transformacija stilova)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **kompaniji za kibernetičku bezbednost**? Želite li da vidite svoju **kompaniju reklamiranu na HackTricks**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
## Osnovne informacije XSLT je tehnologija koja se koristi za transformaciju XML dokumenata u različite formate. Dolazi u tri verzije: 1, 2 i 3, pri čemu je verzija 1 najčešće korišćena. Proces transformacije može se izvršiti na serveru ili u pregledaču. Najčešće korišćeni okviri uključuju: - **Libxslt** od Gnome-a, - **Xalan** od Apache-a, - **Saxon** od Saxonica-e. Za iskorišćavanje ranjivosti povezanih sa XSLT, neophodno je da se xsl oznake čuvaju na serverskoj strani, a zatim pristupiti tom sadržaju. Primer takve ranjivosti dokumentovan je u sledećem izvoru: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/). ## Primer - Tutorijal ```bash sudo apt-get install default-jdk sudo apt-get install libsaxonb-java libsaxon-java ``` {% code title="xml.xml" %} ```xml CD Title The artist Da Company 10000 1760 ``` {% code title="xsl.xsl" %} ```xml

The Super title

Title artist
``` {% endcode %} Izvrši: ```xml saxonb-xslt -xsl:xsl.xsl xml.xml Warning: at xsl:stylesheet on line 2 column 80 of xsl.xsl: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor

The Super title

Title artist
CD Title The artist
``` ### Otisak prsta {% code title="detection.xsl" %} ```xml Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
``` {% endcode %} I izvršite ```xml $saxonb-xslt -xsl:detection.xsl xml.xml Warning: at xsl:stylesheet on line 2 column 80 of detection.xsl: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor

XSLT identification

Version:2.0
Vendor:SAXON 9.1.0.8 from Saxonica
Vendor URL:http://www.saxonica.com/
``` ### Čitanje lokalne datoteke {% code title="read.xsl" %} ```xml ``` {% endcode %} ```xml $ saxonb-xslt -xsl:read.xsl xml.xml Warning: at xsl:stylesheet on line 1 column 111 of read.xsl: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin ``` ### SSRF Server-Side Request Forgery (SSRF) (Форжиранje zahteva sa servera) je bezbednosna ranjivost koja omogućava napadaču da izvrši zahteve sa servera na druge interne ili eksterne resurse. Ova ranjivost se često koristi za izvršavanje napada kao što su skeniranje mreže, pristup internim servisima ili čak izvršavanje napada na druge sisteme. SSRF se obično javlja kada aplikacija koristi korisnički unos za formiranje URL-a za zahtev. Napadač može da manipuliše ovim unosom kako bi izvršio zahteve na resurse koji nisu namenjeni javnom pristupu. Na primer, napadač može da izvrši zahtev na interni server ili čak na druge veb aplikacije koje su dostupne na internetu. Da bi iskoristio SSRF ranjivost, napadač može da koristi različite tehnike, kao što su: - Korišćenje URL-ova sa lokalnim IP adresama ili privatnim mrežnim adresama. - Korišćenje URL-ova sa loopback adresom (127.0.0.1) kako bi pristupio lokalnim servisima na serveru. - Korišćenje URL-ova sa specijalnim oznakama ili protokolima koji omogućavaju pristup drugim resursima, kao što su file:// ili gopher://. Da bi se zaštitili od SSRF ranjivosti, preporučuje se sledeće: - Validacija korisničkog unosa kako bi se sprečilo korišćenje nevažećih URL-ova. - Ograničavanje pristupa servera na samo one resurse koji su neophodni za rad aplikacije. - Korišćenje belih lista (whitelisting) umesto crnih lista (blacklisting) prilikom konfigurisanja dozvoljenih URL-ova. - Redovno ažuriranje softvera i primena sigurnosnih zakrpa kako bi se sprečile poznate ranjivosti koje mogu biti iskorišćene za SSRF napade. Ukratko, SSRF je ozbiljna ranjivost koja može omogućiti napadaču da izvrši zahteve sa servera na druge resurse. Implementacija odgovarajućih sigurnosnih mera može pomoći u sprečavanju ovog tipa napada. ```xml ``` ### Verzije Može biti više ili manje funkcija u zavisnosti od verzije XSLT-a koja se koristi: * [https://www.w3.org/TR/xslt-10/](https://www.w3.org/TR/xslt-10/) * [https://www.w3.org/TR/xslt20/](https://www.w3.org/TR/xslt20/) * [https://www.w3.org/TR/xslt-30/](https://www.w3.org/TR/xslt-30/) ## Fingerprint Otpremi ovo i preuzmi informacije ```xml Version:
Vendor:
Vendor URL:
Product Name:
Product Version:
Is Schema Aware ?:
Supports Serialization:
Supports Backwards Compatibility:
``` ## SSRF Server-Side Request Forgery (SSRF) je sigurnosna ranjivost koja omogućava napadaču da izvrši zahtev sa servera prema drugim resursima na mreži. Ova ranjivost se često koristi za izvršavanje napada kao što su povratni kanal zaobilaženja sigurnosnih ograničenja, skeniranje unutrašnje mreže, pristup internim servisima i izvršavanje napada na drugim sistemima. SSRF se često iskorišćava kroz unos korisničkih podataka koji se prosleđuju serveru, kao što su URL-ovi ili IP adrese. Napadač može manipulisati ovim unosima kako bi izazvao server da izvrši zahtev prema ciljanim resursima. Ovo može uključivati pristup internim servisima, kao što su baze podataka ili administrativni paneli, ili čak eksternim resursima na internetu. Da bi se iskoristila SSRF ranjivost, napadač mora pronaći način da server izvrši zahtev prema ciljanim resursima. To se može postići korišćenjem različitih tehnika, kao što su URL redirekcija, DNS rekurzija, lokalni IP adrese, mrežni interfejsi i drugi. Da bi se zaštitili od SSRF ranjivosti, preporučuje se validacija i filtriranje korisničkih unosa koji se prosleđuju serveru. Takođe je važno ograničiti pristup servera ka internim resursima i koristiti sigurnosne mehanizme kao što su bela lista URL-ova ili sandbox okruženja za izvršavanje zahteva. ```xml ``` ## Ubacivanje Javascript koda Ubacivanje Javascript koda je tehnika koja se koristi za izvršavanje zlonamernog koda na ciljnom serveru. Ova tehnika se često koristi u napadima na veb aplikacije kako bi se iskoristile ranjivosti i omogućilo izvršavanje neovlašćenih operacija. ### Kako funkcioniše? Kada se izvršava Javascript kod na veb stranici, on ima pristup svim podacima i funkcionalnostima koje su dostupne na toj stranici. To znači da, ako je veb aplikacija ranjiva na Javascript ubacivanje, napadač može da ubaci zlonamerni Javascript kod koji će se izvršiti na strani servera. Da bi se izvršio Javascript kod na serveru, napadač mora da pronađe ranjivost koja omogućava ubacivanje koda. Jedna od uobičajenih ranjivosti je nedovoljna validacija korisničkog unosa, što omogućava napadaču da ubaci zlonamerni kod putem formulara ili URL parametara. ### Posledice Ubacivanje Javascript koda može imati ozbiljne posledice po bezbednost veb aplikacije i korisnika. Napadač može da izvrši različite vrste napada, kao što su krađa podataka, preusmeravanje korisnika na zlonamerne stranice, ili čak preuzimanje kontrole nad serverom. Da bi se zaštitili od ovakvih napada, veb aplikacije treba da primenjuju odgovarajuće sigurnosne mere, kao što su validacija korisničkog unosa, enkripcija podataka i ograničavanje privilegija izvršavanja Javascript koda. ### Prevencija Da bi se sprečilo ubacivanje Javascript koda, veb aplikacije treba da primenjuju sledeće sigurnosne mere: - Pažljivo validirati i filtrirati korisnički unos kako bi se sprečilo ubacivanje zlonamernog koda. - Koristiti sigurne metode za izvršavanje Javascript koda, kao što su Content Security Policy (CSP) i sandbox okruženja. - Redovno ažurirati veb aplikaciju i sve biblioteke kako bi se ispravile poznate ranjivosti. - Edukovati razvojni tim o sigurnosnim praksama i ranjivostima koje mogu dovesti do ubacivanja Javascript koda. Pravilna primena ovih mera može značajno smanjiti rizik od ubacivanja Javascript koda i zaštititi veb aplikaciju od napada. ```xml ``` ## Prikazivanje direktorijuma (PHP) ### **Opendir + readdir** ```xml - - - - - - - - - ``` ### **Assert (var\_dump + scandir + false)** ### **Assert (var\_dump + scandir + false)** Ova tehnika se koristi za izvršavanje server-side injekcije XSLT-a (Extensible Stylesheet Language Transformations) kroz kombinaciju funkcija `var_dump` i `scandir`. Ova tehnika je korisna kada je ciljani server konfigurisan tako da izvršava XSLT transformacije. Da biste iskoristili ovu tehniku, prvo koristite funkciju `var_dump` kako biste prikazali sadržaj direktorijuma na ciljanom serveru. Zatim, koristite funkciju `scandir` kako biste dobili listu datoteka i direktorijuma u tom direktorijumu. Konačno, koristite `false` kao argument za `assert` funkciju kako biste izvršili server-side injekciju. Ova tehnika može biti korisna za dobijanje informacija o serveru, kao i za izvršavanje dodatnih napada na ciljani sistem. Važno je napomenuti da je ova tehnika specifična za servere koji podržavaju XSLT transformacije i da može biti ranjiva samo u određenim konfiguracijama. ```xml
``` ## Čitanje fajlova ### **Interno - PHP** ```xml ``` ### **Interno - XXE** XXE (Eksterni XML eksploatacioni napad) je vrsta napada koji se koristi za iskorišćavanje slabosti u obradi XML dokumenata. Ovaj napad omogućava napadaču da izvrši proizvoljan kod na serveru ili da izvrši druge zlonamerne radnje. #### **Kako funkcioniše XXE napad?** XXE napad se obično izvodi ubacivanjem zlonamernog XML sadržaja u aplikaciju koja obrađuje XML dokumente. Kada aplikacija pokuša da parsira XML dokument, ona može da izvrši eksterni HTTP zahtev ili da pristupi lokalnom fajlu na serveru. Ovo omogućava napadaču da izvrši proizvoljan kod ili da pristupi osetljivim informacijama. #### **Kako sprečiti XXE napade?** Da biste sprečili XXE napade, preporučuje se sledeće: - Validirajte i filtrirajte ulazne XML dokumente kako biste uklonili ili neutralisali potencijalno zlonamerne sadržaje. - Isključite eksterne entitete i DTD (Document Type Definition) obradu u XML parseru. - Koristite bezbedne XML parsere koji automatski isključuju eksterne entitete i DTD obradu. - Ažurirajte XML parsere na najnovije verzije koje ispravljaju poznate sigurnosne propuste. #### **Zaključak** XXE napadi predstavljaju ozbiljnu pretnju za aplikacije koje obrađuju XML dokumente. Implementacija odgovarajućih sigurnosnih mera, kao što je validacija i filtriranje ulaznih XML dokumenata, može pomoći u sprečavanju ovih napada. ```xml ]> &ext_file; ``` ### **Preko HTTP-a** XSLT Server-Side Injection (SSI) je tehnika koja se koristi za izvršavanje proizvoljnog koda na serveru putem XML ekstenzibilnog jezičkog transformacijskog obrasca (XSLT). Ova tehnika se može iskoristiti kada aplikacija prihvaća korisnički unos u XML formatu i koristi ga za generisanje XSLT transformacijskog obrasca. Da biste izvršili XSLT SSI napad, prvo morate identifikovati mjesto gdje se korisnički unos ubacuje u XSLT transformacijski obrazac. Zatim, umjesto očekivanog XML sadržaja, ubacite XSLT kod koji će biti izvršen na serveru. Jedan od načina za izvršavanje XSLT SSI napada je slanje HTTP zahtjeva sa specijalno oblikovanim XML tijelom koje sadrži XSLT kod. Kada server obradi zahtjev, XSLT transformacijski obrazac će biti generisan sa vašim ubačenim kodom i izvršen na serveru. Ova tehnika može biti vrlo opasna, jer omogućava napadaču da izvršava proizvoljan kod na serveru, što može dovesti do kompromitovanja sistema, krađe podataka ili daljnjih napada na druge korisnike. Da biste se zaštitili od XSLT SSI napada, preporučuje se sanitizacija korisničkog unosa i validacija XML sadržaja prije generisanja XSLT transformacijskog obrasca. Takođe, treba koristiti najnovije verzije softvera i pratiti sigurnosne zakrpe kako bi se smanjio rizik od ovog napada. ```xml ``` ```xml ]> &passwd; ``` ### **Interno (PHP-funkcija)** ```xml ``` ```xml
``` ### Skeniranje portova Port skeniranje je proces koji se koristi za identifikaciju otvorenih portova na ciljnom računaru ili mreži. Ova tehnika omogućava hakerima da otkriju koje usluge ili aplikacije su dostupne na određenim portovima. Kada se otkrije otvoren port, haker može iskoristiti ranjivosti tih usluga ili aplikacija kako bi izvršio napad. Postoje različiti alati i tehnike koje se mogu koristiti za skeniranje portova. Neki od najčešće korišćenih alata su Nmap, Masscan i Zmap. Ovi alati omogućavaju hakerima da skeniraju veliki broj portova u kratkom vremenskom periodu. Port skeniranje može biti pasivno ili aktivno. Pasivno skeniranje se odnosi na praćenje mrežnog saobraćaja kako bi se identifikovali otvoreni portovi. Aktivno skeniranje, s druge strane, uključuje slanje posebnih paketa na ciljne portove kako bi se proverilo da li su otvoreni ili zatvoreni. Važno je napomenuti da je port skeniranje ilegalno bez dozvole vlasnika sistema ili mreže. Ova tehnika se često koristi u etičkom hakovanju ili pentestiranju kako bi se identifikovali bezbednosni propusti i ranjivosti. ```xml ``` ## Pisanje u datoteku ### XSLT 2.0 XSLT 2.0 podržava pisanje u datoteku pomoću `xsl:result-document` elementa. Ovaj element omogućava generisanje izlaznih datoteka tokom izvršavanja transformacije. Da biste napisali sadržaj u datoteku, prvo morate definisati putanju do ciljne datoteke koristeći `href` atribut `xsl:result-document` elementa. Na primer: ```xml ``` Nakon definisanja putanje do datoteke, možete unutar `xsl:result-document` elementa koristiti bilo koji XSLT izraz za generisanje sadržaja datoteke. Na primer, možete koristiti `xsl:value-of` element za upisivanje vrednosti u datoteku: ```xml ``` Takođe možete koristiti `xsl:copy-of` element za kopiranje sadržaja izvornog XML dokumenta u ciljnu datoteku: ```xml ``` Napomena: Da biste koristili `xsl:result-document` element, vaš XSLT procesor mora podržavati XSLT 2.0 standard. ```xml Write Local File ``` ### **Xalan-J ekstenzija** Xalan-J je implementacija XSLT (Extensible Stylesheet Language Transformations) procesora napisana u programskom jeziku Java. Ova ekstenzija omogućava izvršavanje XSLT transformacija na serveru. Xalan-J ekstenzija može biti iskorišćena za izvršavanje server-side injekcije putem XSLT fajlova. Da biste iskoristili ovu ranjivost, potrebno je pronaći mesto gde se XSLT fajl koristi za transformaciju XML podataka. Zatim, možete ubaciti zlonamerni kod u XSLT fajl kako biste izvršili proizvoljan kod na serveru. Napadač može iskoristiti Xalan-J ekstenziju za izvršavanje različitih napada, kao što su čitanje i pisanje fajlova na serveru, izvršavanje sistemskih komandi, preuzimanje osetljivih podataka i još mnogo toga. Važno je napomenuti da je ova ranjivost specifična za Xalan-J implementaciju XSLT procesora i ne odnosi se na sve XSLT procesore. ```xml Write Local File ``` ## Uključivanje spoljnih XSL fajlova Kada koristite XSLT server-side injection, možete uključiti spoljne XSL fajlove kako biste pisali fajlove u PDF formatu. Ovo vam omogućava da iskoristite funkcionalnosti eksternih XSL fajlova za manipulaciju PDF datotekama. Da biste to postigli, možete koristiti `document()` funkciju u XSLT kodu kako biste učitali spoljni XSL fajl. Zatim možete koristiti XSLT transformacije da biste generisali PDF datoteku sa željenim sadržajem. Na primer, možete uključiti spoljni XSL fajl koji sadrži XSLT transformacije za generisanje PDF datoteke. Zatim možete koristiti ove transformacije da biste generisali PDF datoteku sa željenim sadržajem, kao što su tekst, slike ili tabele. Važno je napomenuti da prilikom korišćenja ove tehnike treba biti oprezan da se ne dozvoli neovlašćen pristup ili manipulacija sa sistemom. Takođe, treba proveriti da li je platforma koju koristite podržava ovu funkcionalnost i da li postoje odgovarajuće bezbednosne mere zaštite. ```xml ``` ```xml ``` ## Izvršavanje koda ### **php:function** ```xml ``` ```xml
``` Izvršite kod koristeći druge okvire u PDF-u ### **Više jezika** **Na ovoj stranici možete pronaći primjere RCE-a u drugim jezicima:** [**https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt\_injection#C%23%2FVB.NET%2FASP.NET**](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt\_injection#C%23%2FVB.NET%2FASP.NET) **(C#, Java, PHP)** ## **Pristup PHP statičkim funkcijama iz klasa** Sljedeća funkcija će pozvati statičku metodu `stringToUrl` klase XSL: ```xml ``` (Primer sa [http://laurent.bientz.com/Blog/Entry/Item/using\_php\_functions\_in\_xsl-7.sls](http://laurent.bientz.com/Blog/Entry/Item/using\_php\_functions\_in\_xsl-7.sls)) ## Više Payloadova * Proverite [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection) * Proverite [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection) ## **Lista za otkrivanje Brute-Force napada** {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %} ## **Reference** * [XSLT\_SSRF](https://feelsec.info/wp-content/uploads/2018/11/XSLT\_SSRF.pdf)\\ * [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20IO%20Active.pdf)\\ * [http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf](http://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Abusing%20XSLT%20for%20practical%20attacks%20-%20Arnaboldi%20-%20Blackhat%202015.pdf)
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)! * Da li radite u **cybersecurity kompaniji**? Želite li da vidite **vašu kompaniju reklamiranu na HackTricks-u**? Ili želite da imate pristup **najnovijoj verziji PEASS-a ili preuzmete HackTricks u PDF formatu**? Proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family) * Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com) * **Pridružite se** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili me **pratite** na **Twitter-u** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podelite svoje hakovanje trikove slanjem PR-ova na [hacktricks repo](https://github.com/carlospolop/hacktricks) i [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.