DotNetToJScript 复活之路
2020-03-08 10:49:53 Author: mp.weixin.qq.com(查看原文) 阅读量:167 收藏


0x00 简介

去年James Forshaw开源了一个工具DotNetToJScript,能够利用JS、Vbs等脚本加载.Net程序。再此工具发布以后,很多很多的工具也在此基础上产生,比如StarFighters、CACTUSTORCH、SharpShooter等等,基于脚本的攻击也随之越来越多,所以在win10中,微软引入了AMSI,并将基于DotNetToJScript的脚本特征加入到检测之列。并将此工具标记为恶意软件。如果直接运行通过DotNetToJScript生成的脚本,便会直接拦截,如下图

最近,学到了两种bypass的方式,所以进行一下分享。

0x01 禁用AMSI

这里讲的禁用AMSI并不需要高权限,只需要一个简单的Trick,这个是从这篇文章学来的,通过Process Monitor 进行查看,设置以下过滤器:

运行通过DotNetToJScript生成的脚本,可以监控到以下调用过程:

这里我们可以看到,在加载AMSI之前,查询了以下注册表键值HKCU\Software\Microsoft\Windows Script\Settings\AmsiEnable,尝试修改此键值为0:

再次运行脚本,可以看到shellcode成功执行了,如下图:

虽然修改注册表可以实现禁用AMSI,但是需要高权限,那怎样才可以在普通权限下禁用AMSI,其实通过@tiraniddo的文章我们可以看到,其实可以通过DLL劫持来进行绕过。通过Process Monitor可以看到检测过程中调用了C:\Windows\System32\amsi.dll,如果我们把cscript.exe 重命名成amsi.dll会怎么样呢?

可以看到成功shellcode 成功执行了,修改过滤器如下:

我们来看一下调用过程


可以看到,现在已经没有调用C:\Windows\System32\amsi.dll,这也就让我们成功执行了我们的shellcode。

0x02 利用wmic

Casey Smith@subTee在博客分享的一个技巧,使用wmic能够从本地或从URL调用XSL(可扩展样式表语言)脚本。经过测试,通过此方式来调用DotNetToJScript的脚本也是可以成功执行的。subTee的文章在这。利用命令如下:

evil.xsl

修改好的脚本,可以看这里:

https://raw.githubusercontent.com/Ridter/AMSI_bypass/master/shellcode.xsl

使用一下命令则可执行shellcode

但是使用wmic执行的时候会有一个问题,在powershell下执行会失败。如下图:

那么怎么调用呢?

在读了mdsec的这篇文章以后,我们发现,其实是可以通过COM来调用的。用javascript写可以这样:

那这样我们就可以构造HTA来远程调用了。为了方便使用,我已经写好了一个aggressor脚本,地址:

GITHUB:https://github.com/Ridter/AMSI_bypass

0x03参考

https://tyranidslair.blogspot.com/2018/06/disabling-amsi-in-jscript-with-one.html

https://subt0x11.blogspot.ca/2018/04/wmicexe-whitelisting-bypass-hacking.html?m=1

https://www.mdsec.co.uk/2018/06/freestyling-with-sharpshooter-v1-0/

文章出处:Evi1cg's blog   

原文链接:

https://evi1cg.me/archives/AMSI_bypass.html

推荐文章++++

*渗透思路:从JS文件入手

*Node.js 反向 Shell

*Js 一句话下载 Payload


文章来源: http://mp.weixin.qq.com/s?__biz=MzAxMjE3ODU3MQ==&mid=2650460110&idx=3&sn=4b564f3a84df2db1bf76658979cade0a&chksm=83bbaa2ab4cc233c26765c2e9500bd2c0264c17c56abc0f484bdd2e2af982a499ae4e27a5e51#rd
如有侵权请联系:admin#unsafe.sh