Skip to content

Commit ee36a00

Browse files
committed
optimize project structure
1 parent 45c1dc0 commit ee36a00

File tree

405 files changed

+8309
-542
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

405 files changed

+8309
-542
lines changed

Expression/pom.xml

-24
This file was deleted.

JDBCAttack/src/main/java/ibm/JNDI.java

-20
This file was deleted.

JDBCAttack/src/main/java/modeshape/JNDI.java

-14
This file was deleted.

JDBCAttack/src/main/java/teradata/RCE.java

-12
This file was deleted.

README.md

+7-280
Original file line numberDiff line numberDiff line change
@@ -1,293 +1,20 @@
1-
# JavaRceDemo
1+
# JavaRce
22

33
By. Whoopsunix
44

55
# 0x00 do what?
66

7-
🚀 记录贴 对照实战场景梳理较通用的 Java Rce 相关漏洞的利用方式或知识点
7+
🚀 对照实战场景梳理较通用的 Java Rce 相关漏洞的利用方式 记录在 [VulnCore](SecVulns/VulnCore)
88

9-
🚩 对于实际环境遇到过的组件如有必要会针对可利用版本进行一个梳理 慢更
9+
🚩 子目录 [VulnCore](SecVulns/VulnCore) 给出 Java 利用方式,具体覆盖量见对应 README.md 文件
1010

11-
🚧 长期项目 不定期学习后更新......
11+
⛳️ 配套测试靶场 [SecVulns](SecVulns) 主要针对 DevSecOps 场景构建(IAST、RASP、SAST),采用 httpREST 实现批量测试。大多数 Java 靶场都把注意力集中在 Spring、Tomcat 组件上,之后会引入更多组件丰富 Source 点
1212

13-
🛰️ 部分利用已经集成在 [PPPYSO](https://github.com/Whoopsunix/PPPYSO) 项目中
13+
🪝 EXP: 反序列化框架 [PPPYSO](https://github.com/Whoopsunix/PPPYSO) 集成了部分内容
1414

15-
🪝 [PPPRASP](https://github.com/Whoopsunix/PPPRASP) 项目中对本项目给出的漏洞实现防护(仅实现关键函数的 HOOK,不作进一步处理)
15+
🚧 Protection: [PPPRASP](https://github.com/Whoopsunix/PPPRASP) 基于 [jvm-sandbox](https://github.com/alibaba/jvm-sandbox) 对 VulnCore 中的漏洞实现防护(仅实现关键函数的 HOOK,不作进一步处理)
1616

17-
## 目录
18-
19-
- [0x01 RceEcho & MemShell 减少重复代码移到 PPPYSO 项目中更新](#0x01-rceecho--memshell)
20-
- [Tomcat](#tomcat)
21-
- [Spring](#spring)
22-
- [Jetty](#jetty)
23-
- [Undertow](#undertow)
24-
- [Resin](#resin)
25-
- [OS](#osecho)
26-
- [0x02 命令执行](#0x02-command)
27-
- [执行Demo,java jsp](#执行demo)
28-
- [执行结果输出(InputStream 处理Demo)](#执行结果输出inputstream-处理demo)
29-
- [0x03 代码执行](#0x03-code)
30-
- [0x04 表达式注入](#0x04-expression-inject)
31-
- [OGNL](#ognl)
32-
- [EL](#el)
33-
- [SPEL](#spel)
34-
- [JxPath](#jxpath)
35-
- [0x05 JDBC Attack](#0x05-jdbc-attack)
36-
- Mysql、PostgreSQL、H2database、IBMDB2、ModeShape、Apache Derby、Sqlite、dameng 达梦、Oracle、teradata
37-
- [0x06 Serialization](#0x06-serialization)
38-
- [类加载](#class-load)
39-
- [XMLSerialization](#xmlserialization)
40-
- [JavaBean](#jarbean)
41-
- [XStream](#xstream)
42-
- [构造方法利用](#constructorexp)
43-
- [Snakeyaml](#snakeyaml)
44-
- [0x07 文件读写 Demo](#0x07-文件读写-demo)
45-
- [0x08 XXE 有回显测试 Demo](#0x08-xxe-有回显测试-demo)
46-
- [0x09 SSTI](#0x09-ssti)
47-
- [0x10 JNDI](#0x10-jndi)
48-
49-
# 0x01 [RceEcho & MemShell](MemShellAndRceEcho)
50-
51-
减少重复代码,目前已移到 PPPYSO 项目中更新。
52-
53-
命令执行回显目前是通过 [java-object-searcher](https://github.com/c0ny1/java-object-searcher) 工具写的,版本适配还没做,之后再优化,本项目主要给出反序列化 demo,jsp 的例子可以参考 [Java-Rce-Echo](https://github.com/feihong-cs/Java-Rce-Echo)
54-
55-
对于内存马来说,请求处理接口 Servlet、Filter、Listener、Value 之类的请求处理接口都是通用的,变的其实是获取不同组件上下文的方式,因此可以将代码抽象为 注入器+功能实现 两部分来实现内存马,见工具化的代码。
56-
57-
反序列化的测试可以直接用 Rest Client [MemShell.http](JavaClass.http) 发包,比较方便。
58-
59-
## Tomcat
60-
61-
内存马这部分知识点推荐看 [beichen 师傅的内存马Demo](https://github.com/BeichenDream/GodzillaMemoryShellProject) 写的很好,用到了动态代理的方式实现功能,很好的兼容了 javax 和 jakarta api 规范。
62-
63-
| Tomcat | | |
64-
| ---------- | ------ | -------- |
65-
| 内存马类型 | Loader | 测试版本 |
66-
| Filter | Thread | 6 7 8 9 |
67-
| | JMX | 7 8 9 |
68-
| | WebApp | 8 9 |
69-
| Servlet | Thread | 7 8 9 |
70-
| | JMX | 7 8 9 |
71-
| | WebApp | 8 9 |
72-
| Listener | Thread | 6-11 |
73-
| | JMX | 7 8 9 |
74-
| | WebApp | 8 9 |
75-
| Executor | Thread | 8 |
76-
| Valve | Thread | 8 |
77-
| | | |
78-
| RceEcho | Thread | |
79-
80-
## Spring
81-
82-
| Springboot2 | | |
83-
| ----------- | --------------------- | -------------- |
84-
| 内存马类型 | Loader | 测试版本 |
85-
| Controller | WebApplicationContext | [2.2.x, 2.7.x] |
86-
| | | |
87-
| RceEcho | WebApplicationContext | [2.2.x, 2.7.x] |
88-
89-
## Jetty
90-
91-
| Jetty | | |
92-
| ------- | ------ | -------------------------------- |
93-
| RceEcho | Thread | 7.x、8.x、9.x、10.x 、11.x全版本 |
94-
95-
## Undertow
96-
97-
WildFly 默认容器用的 Undertow
98-
99-
| Undertow | | |
100-
| ---------- | ------ | ------------ |
101-
| 内存马类型 | Loader | 测试版本 |
102-
| Listener | Thread | 2.2.25.Final |
103-
| Filter | Thread | 2.2.25.Final |
104-
| Servlet | Thread | 2.2.25.Final |
105-
| | | |
106-
| RceEcho | Thread | 2.2.25.Final |
107-
108-
## Resin
109-
110-
| Resin | | |
111-
| ---------- | ------ | ---------------- |
112-
| 内存马类型 | Loader | 测试版本 |
113-
| Listener | Thread | [4.0.52, 4.0.66] |
114-
| Servlet | Thread | [4.0.52, 4.0.66] |
115-
| Filter | Thread | [4.0.52, 4.0.66] |
116-
| | | |
117-
| RceEcho | Thread | [4.0.52, 4.0.66] |
118-
119-
## OSEcho
120-
121-
- windows
122-
- linux
123-
124-
# 0x02 [Command](Command)
125-
126-
## [执行Demo](Command)
127-
128-
命令执行是参考 [javaweb-sec](https://github.com/javaweb-sec/javaweb-sec) 项目复现的
129-
130-
- Runtime
131-
- ProcessBuilder
132-
- ProcessImpl
133-
- ProcessImpl & UnixProcess
134-
- ProcessImpl & UnixProcess by unsafe - Native
135-
- Thread
136-
- jni
137-
138-
## [执行结果输出(InputStream 处理Demo)](Command)
139-
140-
- java.lang.StringBuilder
141-
- java.io.ByteArrayOutputStream
142-
- java.util.Scanner
143-
- java.io.BufferedReader
144-
- java.io.InputStream.readNBytes > JDK 9
145-
- org.springframework:spring-core
146-
- org.apache.commons:commons-io
147-
148-
# 0x03 [Code](Command)
149-
150-
- ScriptEngine
151-
- Groovy
152-
153-
# 0x04 [Expression inject](Expression)
154-
155-
## [OGNL](Expression/OGNLAttack)
156-
157-
- 普通执行demo、jsEngine:get、set方式
158-
- 有sout的回显 (Ps. 通过 Servlet 的回显移到 RceEcho 章节介绍)
159-
- 明文
160-
- 套一层base64加密
161-
- 探测用Payload
162-
- DNSLOG、HTTPLOG
163-
- 延时
164-
165-
## [EL](Expression/ELAttack)
166-
167-
- runtime 回显
168-
- 一句话回显 https://forum.butian.net/share/886
169-
- jsEngine 回显
170-
- Scriptlet 标记写法(放在这里对照)
171-
172-
## [SPEL](Expression/SPELAttack)
173-
174-
- runtime 回显
175-
- 探测用Payload
176-
- DNSLOG、HTTPLOG
177-
- 延时
178-
- 字节码加载
179-
- JDK 高版本加载
180-
181-
## [JxPath](Expression/JxPathAttack)
182-
183-
- runtime
184-
- js
185-
186-
## [MVEL](Expression/MVELAttack)
187-
188-
- runtime
189-
190-
## [JEXL](Expression/JEXLAttack)
191-
192-
- runtime
193-
194-
# 0x05 [JDBC Attack](JDBCAttack)
195-
196-
JDBC 序列化的知识可以参考这些项目 [JDBC-Attack](https://github.com/su18/JDBC-Attack)[pyn3rd blog](https://pyn3rd.github.io/)[A New Attack Interface In Java Applications](https://i.blackhat.com/Asia-23/AS-23-Yuanzhen-A-new-attack-interface-in-Java.pdf)[Deserial_Sink_With_JDBC](https://github.com/luelueking/Deserial_Sink_With_JDBC)
197-
- Mysql
198-
- 文件读取
199-
- 反序列化
200-
- statementInterceptors、detectCustomCollations
201-
- PostgreSQL
202-
- CVE-2022-21724 RCE
203-
- AbstractXmlApplicationContext 实现类
204-
- 文件写入
205-
- loggerLevel / loggerFile
206-
- 原始方式写入 EL
207-
- 截断方式写入 jsp
208-
- H2database
209-
- RUNSCRIPT 远程sql加载
210-
- 代码执行
211-
- INIT转义分号
212-
- TriggerJS
213-
- Groovy
214-
- IBMDB2
215-
- JNDI
216-
- ModeShape
217-
- JNDI
218-
- Apache Derby
219-
- Serialize
220-
- Sqlite
221-
- RCE
222-
- dameng 达梦
223-
- JDNI
224-
- Oracle
225-
- JNDI
226-
- teradata
227-
- JDBC RCE
228-
229-
# 0x06 [Serialization](Serialization)
230-
231-
## [Class load](Serialization/ClassLoad)
232-
233-
- AppClassLoader
234-
- URLCLassLoader
235-
- BCEL
236-
- TransletClassLoader
237-
- Unsafe
238-
- ReflectUtils
239-
- RhinoClassloader
240-
- ScriptEngineDemo
241-
242-
## [XMLSerialization](Serialization/XMLSerialization)
243-
244-
### [JarBean](Serialization/XMLSerialization/JavaBean)
245-
246-
- 命令执行 Runtime、ProcessBuilder、js
247-
- 探测用Payload
248-
- DNSLOG、SOCKETLOG
249-
- 延时
250-
- JNDI
251-
- BCEL
252-
- RemoteJar
253-
254-
## [ConstructorEXP](Serialization/ConstructorEXP)
255-
256-
通过构造方法触发RCE
257-
258-
- xml
259-
260-
## [Snakeyaml](Serialization/SnakeyamlDemo)
261-
262-
- ScriptEngineManager
263-
- c3p0
264-
265-
### XStream
266-
267-
主要为 CVE 不具体展开,<= 1.4.17 的生成集成在 yso 项目中
268-
269-
# 0x07 [文件读写 Demo](FilesOperations)
270-
271-
可用的文件读写方法,即 Java 数据流的各种操作方法
272-
273-
# 0x08 [XXE 有回显测试 Demo](XXE)
274-
275-
测试 JDK 原生的 XXE Demo 时最好将 pom 引入的依赖注释掉,idea 调试时容易出问题进不到想要的 hook 点
276-
277-
# 0x09 [SSTI](SSTI)
278-
279-
- freeMarker
280-
- thymeleaf
281-
- Velocity
282-
283-
# 0x10 [JNDI](JNDIAttack)
284-
285-
- RMI 分析配置代码
286-
- JNDI 代码
287-
- LocalBeanFactory
288-
- LocalJDBC
289-
- LocalServiceFactory
290-
- LocalXXERCE
17+
🛰 Detection: 基于 [joern](https://github.com/joernio/joern) 实现漏洞检测
29118

29219
# Stats
29320

SecVulns/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# SecVulns
2+
3+
[SecVulnsREST](SecVulnsREST) is a RESTful API that provides information about security vulnerabilities in software packages.
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
###
2+
# Groovy
3+
POST /code/Groovy/case1 HTTP/1.1
4+
Host: 127.0.0.1:8080
5+
Content-Type: text/plain
6+
7+
"whoami".execute().text
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
###
2+
# ScriptEngine
3+
POST /code/ScriptEngine/case1 HTTP/1.1
4+
Host: 127.0.0.1:8080
5+
Content-Type: text/plain
6+
7+
var runtime = java.lang./**/Runtime./**/getRuntime();var process = runtime.exec("ifconfig");var inputStream = process.getInputStream();var scanner = new java.util.Scanner(inputStream,"GBK").useDelimiter("\\A");var result = scanner.hasNext() ? scanner.next() : "";scanner.close();result;
8+

0 commit comments

Comments
 (0)