diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4c89b3e..425ebdca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,15 +1,17 @@ ### 目录结构 -- behinder:冰蝎简易连接器,用来自动化测试连接效果(为保证兼容性够高,所以单独弄出来) -- godzilla:哥斯拉简易连接器,用来自动化测试连接效果(为保证兼容性够高,所以单独弄出来) -- common:bytebuddy 等工具类存放 -- deserialize:反序列化相关 gadget +- bom: 依赖版本管理,不用写到处写版本号就是舒服 - boot:使用 SpringBoot 为 UI 提供生成服务 -- web:使用 react 开发的 Web UI +- common:bytebuddy 等工具类存放 +- generator:内存马生成核心 +- deserialize:反序列化相关 gadget +- integration-test:集成测试用例 - memshell:内存功能类以及注入器(为保证兼容性够高,所以单独弄出来) - memshell-java8:Spring 相关的存在 lambda 表达式所以单独弄出来 -- generator:内存马生成核心 -- integration-test:集成测试用例 +- tools/behinder:冰蝎简易连接器 +- tools/godzilla:哥斯拉简易连接器 +- tools/suo5:Suo5 简易连接器 +- 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 diff --git a/README.md b/README.md index 24de8271..33b531ed 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,43 @@ -
-

MemShellParty

+# MemShellParty -

一键生成常见中间件框架内存马,让内存马测试变得简单高效,打造内存马的全方位学习平台

-

在遍地是轮子的时代,是时候造车,带着大伙加速冲冲冲了

- -[![ci-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) -[![ci-release](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/release.yaml?label=Release&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) -[![release](https://img.shields.io/github/v/release/reajason/memshellparty?style=flat-square&color=blueviolet)](https://github.com/ReaJason/MemShellParty/releases) +[![ci-test](https://img.shields.io/github/actions/workflow/status/reajason/memshellparty/test.yaml?label=Test&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&style=flat-square)](https://github.com/ReaJason/MemShellParty/actions/workflows/release.yaml) +[![release](https://img.shields.io/github/v/release/reajason/memshellparty?style=flat-square)](https://github.com/ReaJason/MemShellParty/releases) +[![docker-pulls](https://img.shields.io/docker/pulls/reajason/memshell-party?style=flat-square)](https://hub.docker.com/r/reajason/memshell-party) [![Telegram](https://img.shields.io/badge/Telegram-2CA5E0?style=flat-square&logo=telegram&logoColor=white)](https://t.me/memshell) -
+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 source + code 的编译) > [!WARNING] > 本工具仅供安全研究人员、网络管理员及相关技术人员进行授权的安全测试、漏洞评估和安全审计工作使用。使用本工具进行任何未经授权的网络攻击或渗透测试等行为均属违法,使用者需自行承担相应的法律责任。 > [!TIP] -> 项目仍在快速迭代过程中,如有相关疑问或者适配请求可提 issue 或加入 TG -> 交流群,由于本人仅是安全产品研发,无实战经验,欢迎一起学习交流 +> 由于本人仅是安全产品研发,无实战经验,如使用或实现有相关疑问或者适配请求可提 issue 或加入 TG +> 交流群,欢迎一起学习交流 ![normal_generator](asserts/normal_generator.png) @@ -26,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 ``` ## 适配情况 @@ -110,9 +146,9 @@ 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 @@ -127,10 +163,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