xslt-injection

Tests XSLT injection endpoints through processor fingerprinting, XXE, document() SSRF, and extension-based RCE.

Updated Jun 5, 2026
One-click install
npx skills add https://github.com/lNwNl/Praxis --skill xslt-injection-lnwnl
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: xslt-injection
Source: https://github.com/lNwNl/Praxis/tree/main/skills/_disabled/xslt-injection
Command: npx skills add https://github.com/lNwNl/Praxis --skill xslt-injection-lnwnl

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? When an application passes user-controlled input into server-side XSLT stylesheets or transform endpoints, testers need a structured way to confirm execution, identify the processor, and escalate impact without guessing payloads blindly. ## Core Features & Use Cases - Processor Fingerprinting: Uses system-property() probes to identify Xalan, Saxon, libxslt, or Microsoft XSLT engines before choosing an attack path. - File Read and SSRF: Covers DTD-based XXE and document() payloads for local file reads and out-of-band HTTP callbacks. - Platform-Specific Escalation: Documents EXSLT file writes, PHP php:function abuse, Java extension functions, and .NET msxsl:script RCE, each gated on the detected engine. - Use Case: During an authorized web assessment you find a report generator accepting an XSLT stylesheet parameter; follow the decision tree to fingerprint the engine, prove execution with a harmless marker, then escalate to document() SSRF or file write where the configuration permits. ## Quick Start Use the xslt-injection skill to test the stylesheet parameter on the target transform endpoint, starting with processor fingerprinting and escalating per the detected engine.

Frequently Asked Questions about xslt-injection

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I test for XSLT injection in a web application?▼

Start by injecting a harmless marker like xsl:value-of select="'XSLT_PROBE_OK'" into stylesheet or transform parameters and watch for reflection in the output. If execution is confirmed, fingerprint the processor with system-property('xsl:vendor') and escalate per the detected engine.

How to fingerprint which XSLT processor a server uses?▼

Read the xsl:vendor, xsl:version, and xsl:vendor-url system properties inside a stylesheet template. Values referencing Apache, Saxonica, libxslt, or Microsoft identify Xalan, Saxon, libxslt, or MSXML/.NET engines respectively.

Can XSLT injection lead to remote code execution?▼

Yes, but only under specific misconfigurations: PHP with registerPHPFunctions exposed, Java engines with extension functions enabled, or .NET with msxsl:script allowed. Secure defaults usually disable these, leaving document() SSRF and XXE as the realistic impact.

Does XSLT injection work when external DTDs are disabled?▼

Yes. Hardened parsers blocking DTDs only defeat the XXE variant. The document() function, EXSLT extension writes, and platform-specific extension functions operate independently of DTD processing and should be tested separately.

What tools are used for XSLT injection testing?▼

Testing is primarily manual through proxies like Burp Suite or OWASP ZAP to replay stylesheet payloads, plus out-of-band callback servers for document('http://...') detection. No universal scanner exists, so matching the target's exact processor version in a local lab is recommended.