一、内存马技术概述

1. 出现

在 Web 安全领域,Webshell 一直是重要且热门的话题。根据功能不同,传统 Webshell 可分为三类:

  • 一句话木马:代码简短,通常为单行恶意代码。
  • 小马:功能较简单,体积较小。
  • 大马:功能复杂,具备全面的控制能力。

随着防火墙技术的迭代更新,传统 Webshell 逐渐演变为加密型木马(如加密一句话)。然而,随着安全设备和文件监控技术的进步,传统 Webshell 面临被拦截和查杀的风险,因此催生了一种新型无文件 Webshell——内存马

2. 解决的问题

近年来,防火墙、IDS、IPS 和流量分析等安全设备的普及使得传统 Webshell 的连接方式容易被捕获和拦截。由于传统 Webshell 文件以明文形式存储在服务器端,容易被杀毒软件查杀。加密一句话木马虽然提升了隐蔽性,但仍无法完全绕过文件监控的杀毒软件。因此,内存马作为新一代无文件 Webshell 应运而生,解决了传统 Webshell 的文件存储和检测问题。

3. 原理

内存马是一种无文件 Webshell,即服务器上不存在需要连接的 Webshell 脚本文件。其核心原理类似于 MVC 架构,通过路由访问控制器执行恶意代码。简而言之,内存马的实现方式是在 Web 组件或应用程序中注册一层访问路由,访问者通过该路由触发控制器中的代码逻辑。

4. 类型

内存马技术适用于多种编程语言和框架,包括:

  • PHP
  • Java
  • Python
  • ASPX 等

二、Java 类内存马

1. Webshell 工具

常见的 Java 类 Webshell 管理工具包括:

  • 蚁剑
  • 哥斯拉
  • 冰蝎
  • 天蝎
  • 游魂 等

2. 内存马生成项目

以下是一些开源的内存马生成项目:

3. 其他注意事项

  • 框架型内存马:基于特定框架(如 Spring、Tomcat)实现。
  • 反序列化打内存马:利用 Java 反序列化漏洞注入内存马。
  • SSTI 注入内存马:通过服务器端模板注入实现内存马植入。

4. 思考

无论是 Webshell 工具还是生成项目,通常需要先上传脚本文件才能植入内存马。那么,如何在不上传文件的情况下直接注入内存马呢?

解决方案:借助已知漏洞(如反序列化、SSTI 注入、RCE 等),通过执行 Java 反射逻辑直接注入内存马。

5. 查杀平台

以下是一些用于检测和查杀内存马的平台:

6. 工具项目

7. 参考文章

三、代码静态免杀技术

以下是实现代码静态免杀的常用方法:

  1. 加密混淆
    • 使用 XOR、AES、BASE64、字符反转等加密方式隐藏代码。
  2. 利用注释
    • 使用 /**/ 等注释关键字分割代码,如 Runtime/**/.getRuntime()/**/.exec
  3. 改变特征
    • 修改常见代码中的变量名或字符关键字以规避特征检测。
  4. 反射机制
    • 利用 Java 反射动态获取类并调用方法。
  5. 字节码加载
    • 使用 BCEL 或 ClassLoader 动态加载字节码。
  6. 远程分离加载
    • 通过 URL 远程加载 Class 文件并调用类方法。

四、Webshell 管理工具

动态特征

  • 传输协议:优化通信协议以降低被检测的概率。
  • 流量特征:隐藏或伪装流量特征以绕过流量分析。