Skip to content

Latest commit

 

History

History
279 lines (205 loc) · 8.08 KB

README.md

File metadata and controls

279 lines (205 loc) · 8.08 KB

JavaRceDemo

By. Whoopsunix

0x00 do what?

🚀 记录贴 对照实战场景梳理较通用的 Java Rce 相关漏洞的利用方式或知识点

🚩 对于实际环境遇到过的组件如有必要会针对可利用版本进行一个梳理 慢更

🚧 长期项目 不定期学习后更新......

🪝 PPPRASP 项目中对本项目给出的漏洞实现防护(仅实现关键函数的 HOOK,不作进一步处理)

目录

命令执行回显目前是通过 java-object-searcher 工具写的,版本适配还没做,之后再优化,本项目主要给出反序列化 demo,jsp 的例子可以参考 Java-Rce-Echo

对于内存马来说,请求处理接口 Servlet、Filter、Listener、Value 之类的请求处理接口都是通用的,变的其实是获取不同组件上下文的方式,因此可以将代码抽象为 注入器+功能实现 两部分来实现内存马。目前还没有将分开的例子给出来,还在写工具测试。

反序列化的测试可以直接用 Rest Client MemShell.http 发包,比较方便。

Tomcat

内存马这部分知识点推荐看 beichen 师傅的内存马Demo 写的很好,用到了动态代理的方式实现功能,很好的兼容了 javax 和 jakarta api 规范。

Tomcat
内存马类型 Loader 测试版本
Filter Thread 6 7 8 9
JMX 7 8 9
WebApp 8 9
Servlet Thread 7 8 9
JMX 7 8 9
WebApp 8 9
Listener Thread 6-11
JMX 7 8 9
WebApp 8 9
Executor Thread 8
Valve Thread 8
RceEcho Thread

Spring

Springboot2
内存马类型 Loader 测试版本
Controller WebApplicationContext [2.2.x, 2.7.x]
RceEcho WebApplicationContext [2.2.x, 2.7.x]

Jetty

Jetty
RceEcho Thread 7.x、8.x、9.x、10.x 、11.x全版本

Undertow

WildFly 默认容器用的 Undertow

Undertow
内存马类型 Loader 测试版本
Listener Thread 2.2.25.Final
Filter Thread 2.2.25.Final
Servlet Thread 2.2.25.Final
RceEcho Thread 2.2.25.Final

Resin

Resin
内存马类型 Loader 测试版本
Listener Thread [4.0.52, 4.0.66]
Servlet Thread [4.0.52, 4.0.66]
Filter Thread [4.0.52, 4.0.66]
RceEcho Thread [4.0.52, 4.0.66]

OSEcho

  • windows
  • linux

0x02 Command

命令执行是参考 javaweb-sec 项目复现的

  • Runtime
  • ProcessBuilder
  • ProcessImpl
  • ProcessImpl & UnixProcess
  • ProcessImpl & UnixProcess by unsafe - Native
  • Thread
  • jni
  • java.lang.StringBuilder
  • java.io.ByteArrayOutputStream
  • java.util.Scanner
  • java.io.BufferedReader
  • java.io.InputStream.readNBytes > JDK 9
  • org.springframework:spring-core
  • org.apache.commons:commons-io

0x03 Code

ScriptEngine

参考 Tri0mphe 师傅文章 https://forum.butian.net/share/487

表达式注入可以看 https://github.com/yzddmr6/Java-Js-Engine-Payloads ,这部分知识笔记比较分散,还没整理进来。

  • 普通执行demo、jsEngine:get、set方式
  • 有sout的回显 (Ps. 通过 Servlet 的回显移到 RceEcho 章节介绍)
    • 明文
    • 套一层base64加密
  • 探测用Payload
    • DNSLOG、HTTPLOG
    • 延时
  • runtime 回显
  • 探测用Payload
    • DNSLOG、HTTPLOG
    • 延时
  • runtime
  • js

JDBC 序列化的知识可以参考这些项目 JDBC-Attackpyn3rd blogA New Attack Interface In Java ApplicationsDeserial_Sink_With_JDBC

  • Mysql
    • 文件读取
    • 反序列化
      • statementInterceptors、detectCustomCollations
  • PostgreSQL
    • CVE-2022-21724 RCE
      • AbstractXmlApplicationContext 实现类
    • 文件写入
      • loggerLevel / loggerFile
        • 原始方式写入 EL
        • 截断方式写入 jsp
  • H2database
    • RUNSCRIPT 远程sql加载
    • 代码执行
      • INIT转义分号
      • TriggerJS
      • Groovy
  • IBMDB2
    • JNDI
  • ModeShape
    • JNDI
  • Apache Derby
    • Serialize
  • Sqlite
    • RCE
  • dameng 达梦
    • JDNI
  • Oracle
    • JNDI
  • teradata
    • JDBC RCE
  • AppClassLoader
  • URLCLassLoader
  • BCEL
  • TransletClassLoader
  • Unsafe
  • ReflectUtils
  • RhinoClassloader
  • ScriptEngineDemo
  • 命令执行 Runtime、ProcessBuilder、js
  • 探测用Payload
    • DNSLOG、SOCKETLOG
    • 延时
  • JNDI
  • BCEL
  • RemoteJar

通过构造方法触发RCE

  • xml
  • ScriptEngineManager
  • c3p0

XStream

主要为 CVE 不具体展开,<= 1.4.17 的生成集成在 yso 项目中

可用的文件读写方法,即 Java 数据流的各种操作方法

测试 JDK 原生的 XXE Demo 时最好将 pom 引入的依赖注释掉,idea 调试时容易出问题进不到想要的 hook 点

Stats

Alt

Thanks

感谢师傅们的研究 带来了很大的帮助 :)