技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
java-memshell-generator工具分析优化
多*瓜
安全工具
129浏览 · 2025-02-28 10:33
返回文档
Project Introduction
目前该项目已有1.8k stars
官网介绍:
●
支持以下框架、组件、内存马类型、输出格式:
中间件
框架
工具 (测试版本)
内存马类型
输出格式
辅助模块
Tomcat
SpringMVC
AntSword
(2.1.15)
Listener
BASE64
专项漏洞封装
Resin
SpringWebFlux
Behinder
(4.0.7)
Filter
BCEL
表达式语句封装
WebLogic
Godzilla
(4.0.1)
Interceptor
BIGINTEGER
Jetty
Neo-reGeorg
(5.1.0)
HandlerMethod
CLASS
WebSphere
Suo5
(0.9.0)
TomcatValve
JAR
Undertow
Custom
JAR_AGENT
GlassFish
JS
Apusic(金蝶)
JSP
BES(宝兰德)
InforSuite(中创)
TongWeb(东方通)
项目编译:
mvn package assembly:single
编译成功后,会在
release
目录下 生成如下jar包
Framework Introduction
项目代码整体目录如下
Plain Text
复制代码
使用的流程图大致如下:
●
jmg-extender
和
jmg-woodpecker
目前处于尚未整合阶段
○
jmg-entender
:拓展,通过
DFSEecho
、
DNSLog
,
HTTPLog
,
Sleep
实现中间件/框架探测。
○
jmg-woodpecker
:应该是最原始的
jmg-cli
,现已经废弃使用
●
jmg-sdk
: 作为接口,整合冰蝎、哥斯拉等工具的
shell Generator
。
●
jmg-core
: 作为核心代码内核
○
具备 各种应用对应组件 的注入器生成模板
○
项目整体配置文件config配置
○
内存马 bypass、格式化输出等工具类编写
●
jmg-cli
和
jmg-gui
○
主要实现解析参数等逻辑,实现
generate
得到
payload
●
jmg-behinder
jmg-godzilla
jmg-neoregeorg
jmg-suo5
jmg-antsword
jmg-custom
○
作为工具类:copy这些工具实现内存马的相关代码,并将生成的内存马
payload
类字节流化
○
正常支持生成监听器类型、过滤器、拦截器类型等内存马
图片加载失败
Shell Generator
主要查看
jmg.sdk.util.ShellGenerator#makeShell
方法
根据传入的
ToolType
,分别构造不同类型的
shellGenerator
最后执行对应
makeShell
方法,获取对应工具、服务类型的内存马
这些不同工具的
shellGenrator
均继承自
jmg.core.generator.IShellGenerator
接口
●
initShell
方法主要处理shell的相关配置信息情况
●
makeShell
方法即为 获取内存马对应种类,调用
modifyShell
方法制作对应的 内存马字节流
●
modifyShell
方法通过
javassit
制作内存马字节流
Behinder
位于
jmg-behinder
模块
initShell()
初始化
pass
,如无参数传入,赋值为随机六位的字符串
makeShell()
通过目录下
jmg.behinder.util.ShellUtil
类下的方法获取对应的
shellClassName
根据
toolType
和
shellType
获取对应内存马类路径的相关hashMap表
之后获取诸如
jmg.behinder.memshell.BehinderInterceptor
的内存马类包路径,通过
modifyShell
方法生成内存马字节码。
最后将以下数据 保存到
config
中
●
内存马字节流
●
内存马字节流长度
●
Base64形式的内存马字节流
modifyShell()
根据传入的
shellClassName
制作对应的内存马字节流,并创建相关鉴权字段
●
首先通过
pool.getCtClass(className)
创建相关内存马的 class
●
之后添加字段
pass
,
headerName
,
headerValue
作为内存马流量通信阶段鉴权
●
在之后根据传入的shell类型,添加新传入的方法
antSword
位于
jmg-antsword
模块
框架结构逻辑类似冰蝎
suo5
位于
jmg-suo5
模块
框架结构逻辑类似冰蝎
neregeorg
位于
jmg-neregeorg
模块
框架结构逻辑类似冰蝎
custom
位于
jmg-custom
模块
框架结构逻辑类似冰蝎
Injector Generator
在
jmg.core.generator.InjectorGenerator#makeInjector
方法中
通过传入
ServerType
和
ShellType
两个参数的值,在
InjectorUtil
方法中通过维护两个
HashMap
,从而获取对应可供利用的注入器类的名字
之后会调用
jmg.core.generator.InjectorGenerator.UtilPlus#generate
方法,来对注入器的相关具体实现类进行修改、添加字节码、生成注入器字节码等操作。
首先通过
javassit
修改
getBase64String
方法 返回的值,为我们传入的内存马字节流的Base64形式,这个在后续注入器反射执行创建内存马会提到。
之后就是构造常规的方法,
Url
路径映射、类名等操作,不再赘述
Bypass
书接上文,在
generate
方法中,如果设置了需要
BypassJDKModule
首先给注入器类添加方法
bypassJDKModule
具体的
bypass
如下
最后修改注入器类的初始化构造方法
Constructor
,添加执行
bypassJDKModule()
.
Gadget
byte[] bytes = new CtClassUtil(config, pool, ctClass).modifyForExploitation();
通过调用
modifyForExploitation
来为对应的注入器类添加相关的接口
目前支持添加以下四种Gadget
●
com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet
●
org.apache.xalan.xsltc.runtime.AbstractTranslet
●
Fastjson Groovy loadJar 的利用需要实现 ASTTransformation 接口
●
snakeyaml loadJar 的利用需要实现 ScriptEngineFactory 接口
这里的
Gadget
意思即为,生成上述字节流后,
作为字节流利用相关反序列化链的相关
Gadget
从而实现利用。
模板
模版的实现大同小异,这里以
TomcatFilterInjectorTpl
模板为例:
注入器类反射初始化
首先该注入器类在被反射初始化的时候,由于存在静态的代码域 会调用注入器的
construtor
方法
获取Context
首先调用
getContext
方法建相应的
context
通过线程
Thread
,获取创建过滤器所需要的相关上下文
Context
。
●
针对不同版本的
tomcat
都做了相应的优化
获取内存马 实例化类
接着调用
getFilter
方法
通过调取
getBase64String()
方法返回内存马字节流。
之后通过
defineClass
方法加载内存马的字节流,生成对应内存马的
class
文件。
最后实例化为
filter
过滤器
添加内存马到应用服务中
最后调用
addFilter
方法,适配tomcata的不同版本,定制不同的添加过滤器方法
Format Output
输出格式
jMGCodeApi
主要封装了字节流格式化输出的各个接口
在
jmg.core.jMGCodeApi#generate
方法中实现针对传入参数输出对应的字节流
Jexpr 表达式语句封装-优化
该表达式方法在原项目中只在
gui
模块实现了
我将其转移到到
jmg.core.util.JExprUtil
类中
调用第三方库实现,对字节流表达式的封装执行。
并额外为
cli
提供了
Expr
表达式的功能优化
效果如下:
图片加载失败
Tool
jmg-cli
参数部分
jmg/cli/Console.java#init()
方法,会设置五种类型的参数
●
ToolType
○
Tools: [Godzilla, Behinder, AntSword, Suo5, NeoreGeorg]
●
serverType
:
○
Servers: [Tomcat, SpringMVC, Jetty, Resin, WebLogic, WebSphere, Undertow, GlassFish, JBoss, Tongweb, Apusic, BES, InforSuite]
●
`shellTypes:
○
Shells: [Listener, Filter, Interceptor]
●
formatType
:
○
Formats: [BASE64, BCEL, BIGINTEGER, CLASS, JAR, JAR_AGENT, JSP]
命令说明
help 说明:
支持
list
,
use
,
set
,
get
,
generate
等命令
●
list
,
use
,
set
,
get
命令均是为了帮助设置内存马生成的相关参数
●
generate
命令,可以将生成的内存马输出
●
此外,可以知道,
cli
版本的目前不支持表达式语句包装。
已实现优化
generate
命令所对应方法,不再赘述
jmg-gui
在
jmg.gui.form.jMGForm
类中,
通过
idea
自身带的图形化界面相关组件,实现图形化,
监控图形化界面中各个Label的赋值,从而实现对配置文件
config
各个参数的赋值。
参数赋值部分不再赘述,主要查看
generate
button 按钮之后的动作
同样是生成内存马字节流、注入器字节流。
最后
ResultUtil.resultOutput()
方法实现输出可用shell的相关信息
总结
更新:
●
为
cli
模块增添了表达式语句封装
todo:
●
更新主流针对
Servlet
类型内存马生成
●
整合
jmg-extender
模块到工具中
●
更新针对其他框架、种类的内存马方案,支持更多custom自定义化内存马生成
●
缺乏反序列化链 Gadget 与 (注入器/neicunma) 的结合
○
后续考虑:实现 反序列化链与内存马 一键结合。
Reference
https://github.com/pen4uin/java-memshell-generator
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
没有评论
发布投稿
热门文章
1
飞塔防火墙漏洞深度利用及调试环境搭建
2
Linux Shellcode开发(Stager & Reverse Shell)
3
Windows Shellcode开发(x64 stager)
4
Fuzz挖掘sudo提权漏洞:一次堆溢出如何逆向分析出提权思路
5
1.6K主机全域沦陷实录:从单点突破到域控接管的终极横向渗透链
近期热点
一周
月份
季度
1
飞塔防火墙漏洞深度利用及调试环境搭建
2
Linux Shellcode开发(Stager & Reverse Shell)
3
Windows Shellcode开发(x64 stager)
4
Fuzz挖掘sudo提权漏洞:一次堆溢出如何逆向分析出提权思路
5
1.6K主机全域沦陷实录:从单点突破到域控接管的终极横向渗透链
暂无相关信息
暂无相关信息
优秀作者
1
一天
贡献值:18800
2
T0daySeeker
贡献值:18700
3
1174735059082055
贡献值:15000
4
Yale
贡献值:14000
5
1674701160110592
贡献值:13000
6
LeeH
贡献值:10000
7
MeteorKai
贡献值:9000
8
姓*户
贡献值:8600
9
熊猫正正
贡献值:8000
10
lufei
贡献值:8000
目录
Project Introduction
Framework Introduction
Shell Generator
Behinder
initShell()
makeShell()
modifyShell()
antSword
suo5
neregeorg
custom
Injector Generator
Bypass
Gadget
模板
注入器类反射初始化
获取Context
获取内存马 实例化类
添加内存马到应用服务中
Format Output
输出格式
Jexpr 表达式语句封装-优化
Tool
jmg-cli
参数部分
命令说明
jmg-gui
总结
Reference
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板
没有评论