mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
docs: update README
This commit is contained in:
@@ -35,18 +35,26 @@ MemShellParty 是一款专注于主流 Web 中间件的内存马快速生成工
|
|||||||
|
|
||||||
## 主要特性
|
## 主要特性
|
||||||
|
|
||||||
- 无侵入性:生成的内存马不会影响目标中间件正常流量,即使同时注入十几个不同的内存马。
|
- **无侵入性**:生成的内存马不会影响目标中间件正常流量,即使同时注入十几个不同的内存马。
|
||||||
- 强兼容性:覆盖攻防场景下常见中间件和框架,以及 JDK 适配 JDK6 ~ JDK21。
|
- **强兼容性**:覆盖攻防场景下常见中间件和框架,以及 JDK 适配 JDK6 ~ JDK21。
|
||||||
- 高可用性:对所有支持的中间件框架建立了全面的自动化测试矩阵,确保每一次生成的载荷都具备最高的可用性和稳定性,杜绝实战中的不确定性。
|
- **高可用性**:对所有支持的中间件框架建立了全面的自动化测试矩阵,确保每一次生成的载荷都具备最高的可用性和稳定性,杜绝实战中的不确定性。
|
||||||
- 极致轻量化:通过深度优化的字节码生成策略,MemShellParty 将内存马体积相较于 JMG 等传统工具进行了大幅缩小,常规内存马缩小了
|
- **极致轻量化**:通过深度优化的字节码生成策略,MemShellParty 将内存马体积相较于 JMG 等传统工具进行了大幅缩小,常规内存马缩小了
|
||||||
30%,Agent 内存马采用 ASM 技术缩小了 80%。
|
**30%**,Agent 内存马采用 ASM 技术缩小了 **80%**。
|
||||||
- 傻瓜一键化:内置针对主流表达式注入、反序列化、SSTI 等常见漏洞的载荷生成。系统会自动根据绕过 Java
|
- **傻瓜一键化**:内置针对主流表达式注入、反序列化、SSTI 等常见漏洞的载荷生成。系统会自动根据绕过 Java
|
||||||
模块限制配置,动态生成最优攻击载荷。可实现常规漏洞载荷一键生成。
|
模块限制配置,动态生成最优攻击载荷。可实现常规漏洞载荷一键生成。
|
||||||
- 高灵活性:原生支持哥斯拉、冰蝎、蚁剑、Suo5、NeoreGeorg 等常用内存马功能,通过高度灵活的自定义内存马上传功能,可以将任何定制化载荷融入
|
- **高灵活性**:原生支持哥斯拉、冰蝎、蚁剑、Suo5、NeoreGeorg 等常用内存马功能,通过高度灵活的自定义内存马上传功能,可以将任何定制化载荷融入
|
||||||
MemShellParty 的生成体系,打造最贴合自身战术需求的攻击平台。
|
MemShellParty 的生成体系,打造最贴合自身战术需求的攻击平台。
|
||||||
|
|
||||||
## 快速使用
|
## 快速使用
|
||||||
|
|
||||||
|
### 使用前必看
|
||||||
|
|
||||||
|
[Java 服务简介.md](./docs/ServerIntro.md),用于了解 MemShellParty
|
||||||
|
中针对各个服务适配的情况,针对不同的应用选择合适的服务类型。
|
||||||
|
|
||||||
|
探测马中探测服务类型已经做了一一对应,探测出来的服务类型,即是可生成内存马的服务类型(非中间件类型,例如 Apusic10 探测出来的结果为
|
||||||
|
GlassFish,因为它使用的是 GlassFish 进行的二开)。
|
||||||
|
|
||||||
### 在线站点
|
### 在线站点
|
||||||
|
|
||||||
> 仅限尝鲜的小伙伴,对于其他暴露在公网的服务请谨慎使用,小心生成的内存马带后门
|
> 仅限尝鲜的小伙伴,对于其他暴露在公网的服务请谨慎使用,小心生成的内存马带后门
|
||||||
@@ -86,11 +94,13 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason
|
|||||||
|
|
||||||
1. [适配情况](./docs/Compatibility.md)
|
1. [适配情况](./docs/Compatibility.md)
|
||||||
2. [本地构建](./docs/BuildOnLocal.md)
|
2. [本地构建](./docs/BuildOnLocal.md)
|
||||||
3. [SDK 集成](./docs/SDKUsage.md)
|
3. [SDK 集成](./examples/memshell-party-maven-example)
|
||||||
4. [代码贡献](./CONTRIBUTING.md)
|
4. [代码贡献](./CONTRIBUTING.md)
|
||||||
|
|
||||||
## Special Thanks
|
## Special Thanks
|
||||||
|
|
||||||
|
- [vulhub/java-chains](https://github.com/vulhub/java-chains)
|
||||||
- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
|
- [pen4uin/java-memshell-generator](https://github.com/pen4uin/java-memshell-generator)
|
||||||
|
- [pen4uin/java-echo-generator](https://github.com/pen4uin/java-echo-generator)
|
||||||
|
|
||||||
### Let's start the party 🎉
|
### Let's start the party 🎉
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
## SDK 集成
|
|
||||||
|
|
||||||
> 适合集成到已有工具中,实现内存马 payload 的生成,支持 JDK8 以上版本,v1.7.0 开始支持
|
|
||||||
|
|
||||||
1. 添加依赖,Maven Or Gradle
|
|
||||||
|
|
||||||
```xml
|
|
||||||
<!-- Maven Repo-->
|
|
||||||
<dependency>
|
|
||||||
<groupId>io.github.reajason</groupId>
|
|
||||||
<artifactId>generator</artifactId>
|
|
||||||
<version>1.10.0</version>
|
|
||||||
</dependency>
|
|
||||||
```
|
|
||||||
|
|
||||||
```groovy
|
|
||||||
// Gradle Repo
|
|
||||||
implementation 'io.github.reajason:generator:1.10.0'
|
|
||||||
```
|
|
||||||
|
|
||||||
2. 生成 Tomcat Godzilla Filter 内存马示例
|
|
||||||
|
|
||||||
```java
|
|
||||||
ShellConfig shellConfig = ShellConfig.builder()
|
|
||||||
.server(Server.Tomcat)
|
|
||||||
.shellTool(ShellTool.Godzilla)
|
|
||||||
.shellType(ShellType.FILTER)
|
|
||||||
.shrink(true) // 缩小字节码
|
|
||||||
.debug(false) // 关闭调试
|
|
||||||
.build();
|
|
||||||
|
|
||||||
InjectorConfig injectorConfig = InjectorConfig.builder()
|
|
||||||
// .urlPattern("/*") // 自定义 urlPattern,默认就是 /*
|
|
||||||
// .shellClassName("com.example.memshell.GodzillaShell") // 自定义内存马类名,默认为空时随机生成
|
|
||||||
// .injectorClassName("com.example.memshell.GodzillaInjector") // 自定义注入器类名,默认为空时随机生成
|
|
||||||
.build();
|
|
||||||
|
|
||||||
GodzillaConfig godzillaConfig = GodzillaConfig.builder()
|
|
||||||
// .pass("pass")
|
|
||||||
// .key("key")
|
|
||||||
// .headerName("User-Agent")
|
|
||||||
// .headerValue("test")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
GenerateResult result = MemShellGenerator.generate(shellConfig, injectorConfig, godzillaConfig);
|
|
||||||
|
|
||||||
System.out.println("注入器类名:"+result.getInjectorClassName());
|
|
||||||
System.out.println("内存马类名:"+result.getShellClassName());
|
|
||||||
|
|
||||||
System.out.println(result.getShellConfig());
|
|
||||||
System.out.println(result.getShellToolConfig());
|
|
||||||
|
|
||||||
System.out.println("Base64 打包:"+Packers.Base64.getInstance().pack(result));
|
|
||||||
System.out.println("脚本引擎打包:"+Packers.ScriptEngine.getInstance().pack(result));
|
|
||||||
```
|
|
||||||
3. 生成 Tomcat Godzilla AgentFilterChain 示例
|
|
||||||
```java
|
|
||||||
ShellConfig shellConfig = ShellConfig.builder()
|
|
||||||
.server(Server.Tomcat)
|
|
||||||
.shellTool(ShellTool.Godzilla)
|
|
||||||
.shellType(ShellType.AGENT_FILTER_CHAIN)
|
|
||||||
.shrink(true) // 缩小字节码
|
|
||||||
.debug(false) // 关闭调试
|
|
||||||
.build();
|
|
||||||
|
|
||||||
InjectorConfig injectorConfig = InjectorConfig.builder()
|
|
||||||
// .urlPattern("/*") // 自定义 urlPattern,默认就是 /*
|
|
||||||
// .shellClassName("com.example.memshell.GodzillaShell") // 自定义内存马类名,默认为空时随机生成
|
|
||||||
// .injectorClassName("com.example.memshell.GodzillaInjector") // 自定义注入器类名,默认为空时随机生成
|
|
||||||
.build();
|
|
||||||
|
|
||||||
GodzillaConfig godzillaConfig = GodzillaConfig.builder()
|
|
||||||
// .pass("pass")
|
|
||||||
// .key("key")
|
|
||||||
// .headerName("User-Agent")
|
|
||||||
// .headerValue("test")
|
|
||||||
.build();
|
|
||||||
|
|
||||||
GenerateResult result = MemShellGenerator.generate(shellConfig, injectorConfig, godzillaConfig);
|
|
||||||
|
|
||||||
System.out.println("注入器类名:" + result.getInjectorClassName());
|
|
||||||
System.out.println("内存马类名:" + result.getShellClassName());
|
|
||||||
|
|
||||||
System.out.println(result.getShellConfig());
|
|
||||||
System.out.println(result.getShellToolConfig());
|
|
||||||
|
|
||||||
byte[] agentJarBytes = ((JarPacker) Packers.AgentJar.getInstance()).packBytes(result);
|
|
||||||
Files.write(Paths.get("agent.jar"), agentJarBytes);
|
|
||||||
```
|
|
||||||
4. 封装统一生成接口可参考 [GeneratorController.java](boot/src/main/java/com/reajason/javaweb/boot/controller/GeneratorController.java)
|
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
# Java 服务简介
|
||||||
|
|
||||||
|
以下服务仅我个人遇到的一些场景,与实际攻防场景可能仍有差距,但是在 MemShellParty
|
||||||
|
中可用于参考进行内存马生成。个别其他服务还请自行辨别其服务类型。如果有其他环境补充,欢迎 PR 交流学习~
|
||||||
|
|
||||||
|
## Tomcat
|
||||||
|
|
||||||
|
> https://tomcat.apache.org/
|
||||||
|
|
||||||
|
Tomcat 使用的是自己 Catalina 模块提供的 Servlets 实现,限制较少,在 MemShellParty 中,服务类型选 Tomcat 即可生成 Tomcat
|
||||||
|
内存马。
|
||||||
|
|
||||||
|
一般而言,SpringWebMVC 项目大多使用 Tomcat 提供 Servlets 容器功能,比如 Nacos,这种情况下可以选择 Tomcat 内存马注入。
|
||||||
|
|
||||||
|
其他服务中,致远 OA、Confluence、帆软使用的是 Tomcat。
|
||||||
|
|
||||||
|
## Jetty
|
||||||
|
|
||||||
|
> https://jetty.org/
|
||||||
|
|
||||||
|
Jetty6 版本使用的包名为 `org.mortbay.jetty`,而 7 以上使用的是 `org.eclipse.jetty`,在测试最新的 Jenkins 时,发现 Jetty11+
|
||||||
|
版本支持 ee8 ~ ee10 的环境,包名对应的是 `org.eclipse.jetty.ee8`,这些在 MemShellParty 中均已支持,因此服务类型选 Jetty
|
||||||
|
即可生成 Jetty 内存马。
|
||||||
|
|
||||||
|
在 SpringWebMVC 项目中也是有可能使用的。
|
||||||
|
|
||||||
|
## JBoss
|
||||||
|
|
||||||
|
> JBossAS: https://jbossas.jboss.org/downloads
|
||||||
|
|
||||||
|
> JBossEAP: https://developers.redhat.com/products/eap/download
|
||||||
|
|
||||||
|
JBoss 分为 JBossAS 和 JBossEAP,JBossAS 全版本和 JBossEAP6 使用的 Catalina 模块提供的 Servlets 实现,JBossEAP7 及其以上使用的
|
||||||
|
[Undertow](https://undertow.io/) 提供的 Servlets 实现。
|
||||||
|
|
||||||
|
因此 JBossAS 4~7 以及 JBossEAP6 服务类型选择 JBoss 进行内存马的生成,而 JBossEAP7 服务类型需要选择
|
||||||
|
Undertow 进行内存马的生成。
|
||||||
|
|
||||||
|
## Wildfly
|
||||||
|
|
||||||
|
> https://www.wildfly.org/
|
||||||
|
|
||||||
|
Wildfly 使用的 [Undertow](https://undertow.io/) 提供的 Servlets 实现,因此服务类型选择 Undertow 生成内存马
|
||||||
|
|
||||||
|
## GlassFish
|
||||||
|
|
||||||
|
> https://glassfish.org/
|
||||||
|
|
||||||
|
GlassFish 使用的是 Catalina 提供的 Servlets 实现,但是使用了 OSGI 类加载模式,因此类限制较为严重,在 MemShellParty 中,服务类型选择
|
||||||
|
GlassFish 进行内存马的生成。
|
||||||
|
|
||||||
|
## Payara
|
||||||
|
|
||||||
|
> https://www.payara.fish/downloads/
|
||||||
|
|
||||||
|
基于 GlassFish 开发,服务类型选择 GlassFish 进行内存马的生成。
|
||||||
|
|
||||||
|
## Resin
|
||||||
|
|
||||||
|
> https://caucho.com/products/resin/download
|
||||||
|
|
||||||
|
Resin 使用的包名为 `com.caucho.`,服务类型选择 Resin 进行内存马的生成。
|
||||||
|
|
||||||
|
泛微 OA 使用的就是 Resin 提供的服务。
|
||||||
|
|
||||||
|
## WebLogic
|
||||||
|
|
||||||
|
> https://www.oracle.com/middleware/technologies/weblogic-server-installers-downloads.html
|
||||||
|
|
||||||
|
WebLogic 使用的包名为 `weblogic.`,服务类型选择 WebLogic 进行内存马的生成。
|
||||||
|
|
||||||
|
## WebSphere
|
||||||
|
|
||||||
|
> https://www.ibm.com/products/websphere-application-server
|
||||||
|
|
||||||
|
WebSphere 是 IBM 研发的商用 Servlets 容器,开源版本为 Websphere liberty,
|
||||||
|
包名为 `com.ibm.`,服务类型选择 WebSphere 进行内存马的生成。
|
||||||
|
|
||||||
|
## BES
|
||||||
|
|
||||||
|
> https://www.bessystem.com/
|
||||||
|
|
||||||
|
BES 宝兰德,其基于 Tomcat 进行二开,在 BES 9.5.1 版本中没有进行包名修改,而在 BES 9.5.2
|
||||||
|
版本之后包名修改为了 `com.bes.enterprise.`。因此 BES 9.5.1 版本,服务类型选择 Tomcat 进行内存马的生成,BES 9.5.2+ 服务类型选择
|
||||||
|
BES 进行内存马的生成。
|
||||||
|
|
||||||
|
## TongWeb
|
||||||
|
|
||||||
|
> https://www.tongtech.com/sy.html
|
||||||
|
|
||||||
|
TongWeb 东方通,其基于 Tomcat 进行二开,并且在最初的 6 版本就进行了包名修改,每个版本都进行了修改。
|
||||||
|
|
||||||
|
- TongWeb6: `com.tongweb.web.thor.`
|
||||||
|
- TongWeb7: `com.tongweb.catalina.`
|
||||||
|
- TongWeb8: `com.tongweb.server.`
|
||||||
|
|
||||||
|
这三个版本在 MemShellParty 中均有适配,服务类型选择 TongWeb 进行内存马的生成。
|
||||||
|
|
||||||
|
## Apusic
|
||||||
|
|
||||||
|
> https://www.apusic.com/
|
||||||
|
|
||||||
|
金蝶中间件,Apusic9 疑似魔改自 GlassFish,不过改得面目全非了,自 Apusic10 开始使用原版 GlassFish 进行二开。因此 Apusic9
|
||||||
|
版本服务类型选择
|
||||||
|
Apusic 进行内存马生成,Apusic10 版本选择 GlassFish 进行内存马生成。
|
||||||
|
|
||||||
|
## Primeton
|
||||||
|
|
||||||
|
> https://www.primeton.com/products/pas/
|
||||||
|
|
||||||
|
普元中间件,Primeton6.5 版本基于 GlassFish
|
||||||
|
二开,高版本疑似做了包名修改,但没有环境,因此暂未适配([#60](https://github.com/ReaJason/MemShellParty/issues/60))因此当前仅支持
|
||||||
|
Primeton6.5 版本,服务类型选择 GlassFish 进行内存马生成。
|
||||||
|
|
||||||
|
## InforSuite
|
||||||
|
|
||||||
|
中创中间件,InforSuite 基于 GlassFish 进行二开,不过因为 InforSuite10 版本针对 filterConfigs 字段做了手脚改成了
|
||||||
|
iasFilterConfigs 因此 Filter 注入单独进行了适配。服务类型选择 InforSuite 进行内存马注入。
|
||||||
|
|
||||||
|
## SpringWebMVC
|
||||||
|
|
||||||
|
Spring 框架,默认的 MVC 架构,官方 Servlets 容器实现可选 Tomcat、Jetty 与 Undertow,也可打包成 war 包部署于任意 Servlets
|
||||||
|
容器上。内存马注入场景下不推荐框架内存马,而是具体的 Servlets 容器内存马,因为可绕过框架的限制(鉴权或其他)。服务类型选择
|
||||||
|
SpringWebMVC 进行内存马生成。
|
||||||
|
|
||||||
|
## SpringWebFlux
|
||||||
|
|
||||||
|
Spring Boot 项目中基于 reactor 异步 IO 模型的服务组件,底层使用的 Netty,一般常见于各种 SpringCloud 项目,例如网关。服务类型选择
|
||||||
|
SpringWebFlux 进行内存马生成。
|
||||||
|
|
||||||
Reference in New Issue
Block a user