參考:
簡介
什么是 XSLT
全稱 Extensible Stylesheet Language Transformations。xsl 是一種用於轉換處理 xml 文檔的語言。XSLT 就是指 xsl 解釋器處理 xsl 文檔的這個過程。
這是 xml,xml 是一種數據存儲的形式。
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>CD Title</title>
</cd>
</catalog>
這是 xsl,用於描述如何轉換 xml 文檔的語言。
<?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>
<td><xsl:value-of select="catalog/cd/title"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
當執行時,saxonb-xslt -xsl:xsl.xsl xml.xml
,會獲得如下結果。saxonb-xslt
就是 xsl 解釋器。
<html>
<body>
<h2>The Super title</h2>
<table border="1">
<tr>
<td>CD Title</td>
</tr>
</table>
</body>
</html>
可以看到,和 php 解釋器處理 php 腳本文件這個過程很類似。我們可以用類比的方法來體會這個漏洞的原理。
php 解釋器 | php 代碼 | php 腳本文件 | php 處理 php 腳本 |
xsl 解釋器 | xsl 代碼 | xml 數據文件 | xslt |
通過上面的對比,可以看到這個漏洞屬於代碼執行漏洞。也可以看到其實 xslt 漏洞本質就是如果在特定場景下,可以控制 xsl 代碼,從而使 xsl 解釋器 執行惡意的 xsl 代碼。
其危害取決於 xsl 語言、 xsl 解釋器支持的功能。通常來說,可以讀寫文件、ssrf、特定情景下可以 rce。
攻擊場景
如果發現數據包中出現 <xsl: >
類似的標簽,則可以嘗試攻擊。
如何攻擊
嘗試注入 惡意 xsl 代碼。
如何防御
和代碼執行一樣的防御原理。
利用姿勢
因為很少見,所以只補一個鏈接,待遇到時再進行詳細學習。