对 java-chains 1.4.4(com.ar3h.chains)内置的反序列化利用链与 gadget 构件做的系统化、源码级中文拆解。
既是安全研究知识库,也是模型训练语料。
免责声明:仅供安全研究、CTF、授权渗透测试与防御建设使用。
| 指标 | 数量 |
|---|---|
| 预设链 | 51 |
| 链分析文章已生成 | 51/51 |
| Gadget 构件(@GadgetAnnotation) | 419 |
| Gadget 参考条目已生成 | 419/419 |
| 出现在预设链中的 gadget | 68 |
关于内容完整度:51 篇链文章与 419 条 gadget 参考条目均为源码级中文分析,当前没有待补条目。
核心机制:每个 gadget 实现 Gadget.invoke(context, chain),链由内向外构建(chain.doCreate() 取内层对象再包装)。
| # | 链名 | 说明 | Gadget 组成 |
|---|---|---|---|
| 1 | CB1链 | 经典 CommonsBeanutils1 1.9.x链,最新版1.9.4默认仍然存在该链 | CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec |
| 2 | JDK17 RCE链 | 高版本 suid | EventListenerListToStringHighJDK → JacksonToString → TWrapHighVersion → TemplatesImpl2 → BytecodeConvert → Exec |
| 3 | JDK17 RCE链2 | 高版本 suid | TextAndMnemonicHashMapToStringHighJDK → JacksonToString → TWrapHighVersion → TemplatesImpl2 → BytecodeConvert → Exec |
| 4 | CB1 JNDI链1 | CommonsBeanutils1 1.9.x JNDI | CommonsBeanutils1 → JdbcRowSetImpl |
| 5 | CB1 JNDI链2 | CommonsBeanutils1 1.9.x JNDI | CommonsBeanutils1 → LdapAttribute |
| 6 | CB2链 | CommonsBeanutils2 1.8.x JNDI | CommonsBeanutils2 → TemplatesImpl → BytecodeConvert → Exec |
| 7 | K1链 | CommonsCollections 3.2.1 InvokerTransformer 链 | CommonsCollectionsK1 → TemplatesImpl → BytecodeConvert → Exec |
| 8 | K1链二次反序列化1 | CommonsCollections 3.2.1 InvokerTransformer SignedObject二次反序列化 | CommonsCollectionsK1 → SignedObject → JavaNativeSerialization → CommonsCollectionsK3 → TransformerWithTemplatesImpl → TemplatesImpl → BytecodeConvert → Exec |
| 9 | K1链二次反序列化2 | CommonsCollections 3.2.1 InvokerTransformer RMIConnector二次反序列化 | CommonsCollectionsK1 → RMIConnector → JavaNativeSerialization → CommonsCollectionsK3 → TransformerWithTemplatesImpl → TemplatesImpl → BytecodeConvert → Exec |
| 10 | K2链 | CommonsCollections 4.0 InvokerTransformer | CommonsCollectionsK2 → TemplatesImpl → BytecodeConvert → Exec |
| 11 | K3链 | CommonsCollections 3.2.1 Transformer 链 | CommonsCollectionsK3 → TransformerWithTemplatesImpl → TemplatesImpl → BytecodeConvert → Exec |
| 12 | K4链 | CommonsCollections 4.0 Transformer 链 | CommonsCollectionsK4 → TransformerWithTemplatesImpl → TemplatesImpl → BytecodeConvert → Exec |
| 13 | Fastjson链 | Fastjson 1.2.x 通杀链 | Fastjson → TemplatesImpl → BytecodeConvert → Sleep |
| 14 | Fastjson JNDI链 | Fastjson 1.2.x JNDI | Fastjson → LdapAttribute |
| 15 | Fastjson C3p0 Jdbc h2链 | Fastjson 1.2.x C3p0 Jdbc 链 | Fastjson → C3p0DataSource → H2JavaJdbc1 → BytecodeConvert → Exec |
| 16 | Fastjson2链 | Fastjson 2.0.26 链 | Fastjson2 → TemplatesImpl → BytecodeConvert → Sleep |
| 17 | Jackson链 | Jackson链,用到了动态代理,提高了链子稳定性 | Jackson → TWrap → TemplatesImpl → BytecodeConvert → Sleep |
| 18 | Jackson C3p0 Jdbc h2链 | Jackson链,用到了动态代理,提高了链子稳定性 | Jackson → DWrap → C3p0DataSource → H2JavaJdbc1 → BytecodeConvert → Exec |
| 19 | 反序列化炸弹 | 可探测反序列化点是否存在,可探测类是否存在 | FindClassByBomb |
| 20 | DNSLog探测类 | 通过dnslog协议探测类是否存在 | FindClass |
| 21 | C3P0反序列化1 | LDAP远程加载字节码 | MchangeC3p0Reference → LdapClassLoader |
| 22 | C3P0反序列化2 | 通过EL表达式实现任意字节码执行 | MchangeC3p0Reference → TomcatElRef → ElConvert → BytecodeConvert → Exec |
| 23 | 命令执行 | | BytecodeConvert → Exec |
| 24 | DNSLog探测链 | | BytecodeConvert → DNSLogWithInfo |
| 25 | Sleep探测链 | | BytecodeConvert → Sleep |
| 26 | 二次反序列化链 | 通过 Spring的 SerializationUtils 类实现Java反序列化,建立Hessian反序列与Java反序列化桥梁 | SwingLazyValueUIDefaults → LazyValueWithDS → JavaNativeSerialization → CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec |
| 27 | JDK原生链1 | Xslt 无需第三方依赖即可实现任意字节码执行 | XsltOnlyJdk → JsConvert → BytecodeConvert → Exec |
| 28 | JDK原生链2(慎用) | 通过 SwingLazyValue + MethodUtil 实现加载任意字节码,但是有一定概率导致JDK崩溃 | SwingLazyValueMethodUtil → BytecodeConvert → Exec |
| 29 | JDK原生BCEL链 | 通过 BCEL 加载字节码 | ProxyLazyValueUIDefaults → LazyValueWithBcel → BcelConvert → BytecodeConvert → Exec |
| 30 | JDK原生JNDI链 | Spring JNDI | ProxyLazyValueUIDefaults → LazyValueWithJNDI |
| 31 | Spring JNDI链1 | | SpringPartiallyComparableAdvisorHolder → SpringJndi1 |
| 32 | Spring JNDI链2 | | SpringAbstractBeanFactoryPointcutAdvisor → SpringJndi1 |
| 33 | Spring 命令执行 | | SpringAbstractBeanFactoryPointcutAdvisor → SpringExec |
| 34 | Xslt 代码执行 | 适用于Spring场景下,可通过写文件并读取方式实现任意字节码执行 | XsltSpring → BytecodeConvert → Exec |
| 35 | Rome1低版本二次反序列化链 | 通过SignedObject二次反序列化配合Java原生反序列化实现RCE | Rome1 → SignedObject → JavaNativeSerialization → CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec |
| 36 | Rome2高版本二次反序列化链 | 通过SignedObject二次反序列化配合Java原生反序列化实现RCE | Rome2 → SignedObject → JavaNativeSerialization → CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec |
| 37 | JSP文件 | 生成jsp文件 | Jsp → BytecodeConvert → Exec |
| 38 | H2 Jdbc Url | 实现加载字节码,该Payload兼容性较强 | H2JavaJdbc1 → BytecodeConvert → Exec |
| 39 | Spring Bean Xml 加载字节码 | ClassPathXmlApplicationContext Payload | SpringBeanXmlClassLoader → BytecodeConvert → Exec |
| 40 | SpringBoot charsets.jar生成 | 可实现任意字节码执行 | CharsetJarConvert2 → BytecodeConvert → Exec |
| 41 | 经典 Tomcat EL 执行 | 在绝大部分Tomcat下可实现任意字节码执行 | TomcatElRef → ElConvert → BytecodeConvert → Exec |
| 42 | Groovy 脚本执行 | 在一些场景下,如果EL执行失败可尝试Groovy执行 | GroovyShellRef → GroovyConvert → BytecodeConvert → Exec |
| 43 | SnakeYaml 利用 | 在一些场景下,如果EL执行失败可尝试SnakeYaml执行 | SnakeyamlRef → SnakeyamlJarSpi4JNDI → SnakeyamlJarConvert → BytecodeConvert → Exec |
| 44 | BeanshellRef 利用 | 在一些场景下,如果EL执行失败可尝试Beanshell执行 | BeanshellRef → BeanshellConvert → BytecodeConvert → Exec |
| 45 | HikariJdbcAttack Jdbc 利用 | 通过Jdbc Attack实现字节码执行 | HikariJdbcAttack → H2JavaJdbc1 → BytecodeConvert → Exec |
| 46 | Druid Jdbc 利用 | 通过Jdbc Attack实现命令执行 | DruidJdbcAttack → H2JavaExecJdbc1 |
| 47 | Axis2链 | | Axis2MetaDataEntry → CommonsBeanutils1 → TemplatesImpl → BytecodeConvert → Exec |
| 48 | Hessian XBean 链 | | XBeanToString → TomcatElRef → ElConvert → BytecodeConvert → Exec |
| 49 | Hessian Fastjson 链 | 因为 TemplatesImpl 链不能直接在 Hessian 反序列化中使用,所以这里 FastjsonToString1 后面不能接 TemplatesImpl | FastjsonToString1 → SignedObject → JavaNativeSerialization → Fastjson → TemplatesImpl → BytecodeConvert → Exec |
| 50 | Hessian Jackson 链 | | JacksonToString → SignedObject → JavaNativeSerialization → Jackson → TWrap → TemplatesImpl → BytecodeConvert → Exec |
| 51 | ReadFile | | FakeMySQLReadFile |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| Axis2MetaDataEntry | Axis2链 | Axis2链 |
| Axis2MetaDataEntryObf | Axis2链-带Java序列化混淆 | — |
| C3P0WrapperConnPool | 远程类加载 | — |
| HikariConfigGadget | HikariJNDI注入 | — |
| ReplicatedTreeGadget | ReplicatedTree链 | — |
| SpringPropertyPathFactory | JNDI注入 | — |
| UnicastRef2Gadget | UnicastRef2 | — |
| UnicastRefGadget | UnicastRef | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| ApusicEcho | 生成 ApusicV9 命令执行明文回显的字节码 | — |
| BypassJrmpClient | 进行JrmpClient | — |
| BytecodeConvert | 处理字节码 | Axis2链、BeanshellRef 利用、C3P0反序列化2、CB1链、CB2链、DNSLog探测链、Fastjson C3p0 Jdbc h2链、Fastjson2链、Fastjson链、Groovy 脚本执行、H2 Jdbc Url、Hessian Fastjson 链、Hessian Jackson 链、Hessian XBean 链、HikariJdbcAttack Jdbc 利用、JDK17 RCE链、JDK17 RCE链2、JDK原生BCEL链、JDK原生链1、JDK原生链2(慎用)、JSP文件、Jackson C3p0 Jdbc h2链、Jackson链、K1链、K1链二次反序列化1、K1链二次反序列化2、K2链、K3链、K4链、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链、Sleep探测链、SnakeYaml 利用、Spring Bean Xml 加载字节码、SpringBoot charsets.jar生成、Xslt 代码执行、二次反序列化链、命令执行、经典 Tomcat EL 执行 |
| BytecodeFromBase64 | 自定义字节码-Base64字符串 | — |
| BytecodeFromHex | 自定义字节码-Hex字符串 | — |
| BytecodeFromLocalFile | 自定义字节码-本地文件 | — |
| BytecodeFromUploadFile | 自定义字节码-上传文件 | — |
| DNSLog | 发起DNSLog请求 | — |
| DNSLogAndHttp | 发起DNSLog和Http请求 | — |
| DNSLogWithInfo | 发起DNSLog请求2 | DNSLog探测链 |
| Docbase | 生成tomcat-docbase需要的字节码 | — |
| Download | 文件下载 | — |
| DownloadExec | 下载文件并执行 | — |
| Exec | 执行命令 | Axis2链、BeanshellRef 利用、C3P0反序列化2、CB1链、CB2链、Fastjson C3p0 Jdbc h2链、Groovy 脚本执行、H2 Jdbc Url、Hessian Fastjson 链、Hessian Jackson 链、Hessian XBean 链、HikariJdbcAttack Jdbc 利用、JDK17 RCE链、JDK17 RCE链2、JDK原生BCEL链、JDK原生链1、JDK原生链2(慎用)、JSP文件、Jackson C3p0 Jdbc h2链、K1链、K1链二次反序列化1、K1链二次反序列化2、K2链、K3链、K4链、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链、SnakeYaml 利用、Spring Bean Xml 加载字节码、SpringBoot charsets.jar生成、Xslt 代码执行、二次反序列化链、命令执行、经典 Tomcat EL 执行 |
| ExecCustom | 执行命令 | — |
| FastJsonbBackDoor | FastJsonbBackDoor(建议自定义类名) | — |
| FileSteamFromUploadFile | 自定义字节码-本地文件 | — |
| GlassFishEcho | 生成 GlassFish 命令执行明文回显的字节码 | — |
| HTTPReq | 发起http请求 | — |
| JegGadget | 调用 Jeg 生成回显字节码 | — |
| JettyEcho | 生成 Jetty 命令执行明文回显的字节码 | — |
| JmgCustomShellGadget | 借助 Jmg 注入器配合自定义马生成注马字节码 | — |
| JmgGadget | 调用 Jmg 生成注入内存马字节码 | — |
| MemShellPartyGadget | 调用 MemShellParty 生成注入内存马字节码 | — |
| ModifyShiroKey | 修改ShiroKey | — |
| OneForAllEcho | One For All Echo 回显 | — |
| OsSleep | 通过Sleep判断目标操作系统 | — |
| ResinEcho | 生成 Resin 命令执行明文回显的字节码 | — |
| ReverseShell | 反弹Shell | — |
| RuoYiShell | RuoYiShell | — |
| ServerDetectorWithDNSLog | 生成使用dnslog探测中间件的字节码 | — |
| ServerInfoHttpDnsLog | 生成使用dnslog探测中间件的字节码 | — |
| ShiroClassLoader | Shiro下字节码分离加载 | — |
| ShiroClassLoader2 | Shiro下字节码分离加载2 | — |
| Sleep | Sleep字节码 | Fastjson2链、Fastjson链、Jackson链、Sleep探测链 |
| SpringLoaderFromParam | Spring字节码加载 | — |
| TcpConnect | 发起Tcp请求 | — |
| TomcatEcho | 生成 Tomcat 命令执行明文回显的字节码 | — |
| TomcatEcho2 | 生成 Tomcat 命令执行明文回显的字节码 2 | — |
| TomcatHeader | 修改TomcatHeader长度限制 | — |
| TongWebEcho | 生成 TongWeb 命令执行明文回显的字节码 | — |
| UdpConnect | 发起UDP请求 | — |
| UndertowEcho | 生成 Undertow 命令执行明文回显的字节码 | — |
| WebLogicEcho | 生成 WebLogic 命令执行明文回显的字节码 | — |
| WebSphereEcho | 生成 WebSphere 命令执行明文回显的字节码 | — |
| WriteFile | 写字符串到文件 | — |
| WriteFileExec | 写入二进制文件并执行 | — |
| WriteLargeFile | 写入大文件/二进制文件 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| AudioFileFormat | AudioFileFormat$Type 调用toString | — |
| AudioFormat | AudioFormat$Encoding 调用toString | — |
| AviatorConvert | Aviator 表达式加载字节码 | — |
| BadAttributeValueExpExceptionToString | BAVE 调用toString | — |
| BcelConvert | 将byte[]字节码转换为BCEL字符串 | JDK原生BCEL链 |
| BeanshellConvert | 将byte[]字节码转换为Beanshell字符串 | BeanshellRef 利用 |
| CharsetJarConvert | charsets利用姿势1-jar包 | — |
| CharsetJarConvert2 | charsets利用姿势2-字节码 | SpringBoot charsets.jar生成 |
| ConcurrentHashMapEquals | HashMap#readObject()调用equals()方法,注意在调用equals方法之前会调用到包装对象hashCode方法,所以需要保证对象调用hashCode不能出现问题 | — |
| Db2Jdbc | DB2 JDBC URL | — |
| DerbyAddClassPathJdbc | 2.Derby 添加Classpath 单SQL | — |
| DerbyCommandJdbc | 5.Derby 调用cmd函数 单SQL | — |
| DerbyCreateCmdProcJdbc | 3.Derby CreateCmdProc 单SQL | — |
| DerbyCreateJdbc | Derby 创建数据库 无SQL | — |
| DerbyCreateRevProcJdbc | 4.Derby CreateRevProc 单SQL | — |
| DerbyDropJdbc | Derby 删除数据库 无SQL | — |
| DerbyInstallJarJdbc | 1.Derby 远程加载jar包 单SQL 仅适用于JNDI模块 | — |
| DerbyInstallJdbc | Derby 远程加载jar包-多SQL 仅适用于JNDI模块 | — |
| DerbyRceSql | Derby加载任意字节码 | — |
| DerbyReverseShellJdbc | 6.Derby 调用rev函数反弹shell 单SQL | — |
| DerbySlaveJdbc | Derby slave远程反序列化 无SQL | — |
| ElConvert | 将byte[]字节码转换为EL表达式字符串 | C3P0反序列化2、Hessian XBean 链、经典 Tomcat EL 执行 |
| ElExec | EL表达式执行系统命令 | — |
| EventListenerListToString | EventListenerList 调用toString | — |
| EventListenerListToStringHighJDK | EventListenerList 调用toString 高版本JDK | JDK17 RCE链 |
| FreemarkerConvert | freemarker表达式加载字节码 | — |
| FreemarkerConvert2 | freemarker表达式加载字节码2 | — |
| GStringCompareToToString | GString compareTo 调用toString | — |
| Groovy2Convert | Groovy表达式字符串2 | — |
| GroovyConvert | Groovy表达式字符串 | Groovy 脚本执行 |
| GroovyExec1Convert | Groovy表达式字符串1 | — |
| GroovyExec2Convert | Groovy表达式字符串1 | — |
| GroovyJarConvert | 将字节码转为Groovy Jar包字节流 | — |
| H2ExecSql | 生成h2 sql文件 | — |
| H2GroovyExecJdbc | H2 JDBC URL Groovy命令执行 | — |
| H2JavaExecJdbc1 | H2 JDBC URL Java命令执行1 | Druid Jdbc 利用 |
| H2JavaExecJdbc2 | H2 JDBC URL Java命令执行2 | — |
| H2JavaJdbc1 | H2 JDBC URL Java加载任意字节码1 | Fastjson C3p0 Jdbc h2链、H2 Jdbc Url、HikariJdbcAttack Jdbc 利用、Jackson C3p0 Jdbc h2链 |
| H2JavaJdbc2 | H2 JDBC URL Java加载任意字节码2 | — |
| H2JavaJdbc3 | H2 JDBC URL Java加载任意字节码3 | — |
| H2JavaReverseJdbc | H2 JDBC URL Java反弹shell | — |
| H2JsExecJdbc | H2 JDBC URL js命令执行 | — |
| H2RemoteJdbc | H2 JDBC URL 远程加载执行sql文件 | — |
| HashMapEquals | HashMap#readObject()调用equals()方法,注意在调用equals方法之前会调用到包装对象hashCode方法,所以需要保证对象调用hashCode不能出现问题 | — |
| HashTableEquals | HashTable#readObject()调用equals()方法,注意在调用equals方法之前会调用到包装对象hashCode方法,所以需要保证对象调用hashCode不能出现问题 | — |
| HotSTSourceEquals | 调用Equals方法 | — |
| HsqldbC3p0HexJdbc | Hsql CALL C3P0ImplUtils 二次反序列化 | — |
| HsqldbCustomJdbc | Hsql 自定义执行语句 | — |
| HsqldbDefineClassJdbc | Hsql CALL defineClass 加载字节码 | — |
| HsqldbHexDeserJdbc | Hsql CALL SerializationUtils 二次反序列化 | — |
| HsqldbHexJdbcOld1 | Hsql CALL ScriptTool 二次反序列化 | — |
| HsqldbHexJdbcOld2 | Hsql CALL InOutUtil 二次反序列化 | — |
| HsqldbHexJdbcOld3 | Hsql CREATE,INSERT 二次反序列化 | — |
| HsqldbJndiJdbc | Hsql CALL InitialContext JNDI注入 | — |
| HsqldbPropertyJdbc | Hsql 设置系统环境变量 | — |
| Jar | 将字节码转为Jar包 | — |
| JavaRunCmdBash | Java Bash 执行命令处理 | — |
| JavaRunCmdPs | Java Powershell 执行命令处理 | — |
| JexlConvert | 将byte[]字节码转换为Jexl表达式字符串 | — |
| JinJavaConvert | 将byte[]字节码转换为JinJava表达式字符串 | — |
| JsConver3 | 将byte[]字节码转换为Js表达式字符串 | — |
| JsConvert | 将byte[]字节码转换为Js表达式字符串 | JDK原生链1 |
| JsConvert2 | 将byte[]字节码转换为Js表达式字符串 | — |
| JsExec | JS Runtime执行命令 | — |
| Jsp | 将字节码转为Jsp文件 | JSP文件 |
| Jsp2 | 将字节码转为Jsp文件 | — |
| JxpathConvert | jxpath表达式嵌套js加载字节码 | — |
| JxpathConvert2 | jxpath表达式嵌套spel加载字节码 | — |
| JxpathExec | jxpath表达式执行系统命令 | — |
| ModeShapeJdbc | ModeShape JDBC URL | — |
| MvelConnectTest | 发起简单请求的Mvel表达式 | — |
| MvelConvert | 将byte[]字节码转换为Mvel表达式字符串 | — |
| MvelExec | Mvel执行命令 | — |
| MysqlJdbc | Mysql JDBC URL | — |
| OnglConvert | 将byte[]字节码转换为Ongl表达式字符串 | — |
| OnglConvert2 | jdk高版本Ongl表达式执行Java代码 | — |
| OnglExec1 | Ongl表达式执行命令 | — |
| OnglExec2 | Ongl表达式执行命令 | — |
| OpengaussJdbc | Openguass JDBC URL | — |
| PostgreSqlJdbc | PostgreSQL JDBC URL CVE-2022-21724 | — |
| PostgreSqlJdbc4Jndi | PostgreSQL JDBC 仅适用于JNDI模块 | — |
| Rdn | Rdn$RdnEntry 调用Equals | — |
| SnakeyamlC3p0 | 生成SnakeYaml 二次反序列化Payload | — |
| SnakeyamlDnslog | 生成SnakeYaml简单的dnslog请求探测Payoad | — |
| SnakeyamlJarConvert | 将字节码转为SnakeYaml Jar包字节流 | SnakeYaml 利用 |
| SnakeyamlJarSpi | SnakeYaml远程加载JAR包 | — |
| SnakeyamlJarSpi4JNDI | SnakeYaml远程加载JAR包 仅适用于JNDI模块 | SnakeYaml 利用 |
| SnakeyamlJndi1 | 生成SnakeYaml Jndi注入 Payload | — |
| SnakeyamlJndi2 | 生成SnakeYaml Jndi注入 Payload | — |
| SpelConvert | 将byte[]字节码转换为SPEL表达式字符串 | — |
| SpringBeanXMLDecoderClassLoader | 将XMLDecoder payload封装进spring bean.xml中,返回xml文件内容 | — |
| SpringBeanXmlClassLoader | 将字节码封装进spring bean.xml中,返回xml文件内容 | Spring Bean Xml 加载字节码 |
| SpringBeanXmlExec | 执行命令 | — |
| SpringBeanXmlSpEL | spring bean.xml 执行任意 SpEL 表达式 | — |
| SqliteJdbc | Sqlite JDBC URL | — |
| SqliteRceJdbc | Sqlite load_extension RCE | — |
| TextAndMnemonicHashMapToString | TextAndMnemonicHashMap 调用toString | — |
| TextAndMnemonicHashMapToStringHighJDK | TextAndMnemonicHashMap 调用toString 高版本JDK | JDK17 RCE链2 |
| ThymeleafConvert | thymeleaf表达式加载字节码 | — |
| ThymeleafConvert2 | thymeleaf表达式js加载字节码 | — |
| ThymeleafExec | thymeleaf表达式执行系统命令 | — |
| UserCustomExpr | 自定义表达式字符串 | — |
| UserCustomSerializeData | 自定义Java反序列化数据 | — |
| VelocityConvert | 将byte[]字节码转换为Velocity表达式字符串 | — |
| VelocityConvert2 | velocity表达式js加载字节码 | — |
| XMLDecoder | 将Java反序列化数据转为XMLDecoder格式 | — |
| XStringToString1 | XString 调用toString | — |
| XStringToString2 | XStringForChars 调用toString | — |
| XStringToString3 | XStringForFSB 调用toString | — |
| XalanXStringToString1 | Xalan XString 调用toString | — |
| XalanXStringToString2 | Xalan XStringForChars 调用toString | — |
| XalanXStringToString3 | Xalan XStringForFSB 调用toString | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| ByteArrayFromBase64 | 自定义byte[]类型数据(Base64) | — |
| ByteArrayFromHex | 自定义byte[]类型数据(Hex) | — |
| ByteArrayFromUploadFile | 自定义byte[]类型数据(文件上传) | — |
| CustomString | 自定义String类型数据 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| FastjsonBasicDataSource | dbcp BasicDataSource 1.2.47 | — |
| FastjsonBasicDataSourcemybatis | mybatis BasicDataSource 1.2.47 | — |
| FastjsonC3p0 | C3p0 1.2.47 | — |
| FastjsonCmonsio | Fastjson CommonsIo 1.2.68/1.2.80 写文件 | — |
| FastjsonDns | Fastjson DNSLog | — |
| FastjsonGroovy | Groovy 1.2.83 | — |
| FastjsonH2Jdbc | H2Jdbc 1.2.47 | — |
| FastjsonJdbcRowSetImpl | JdbcRowSetImpl 1.2.47 | — |
| FastjsonJta | Jta 1.2.67 | — |
| FastjsonMySQL1_2_80 | FastjsonMySQL1_2_80 | — |
| FastjsonMySQLJdbc | Mysql-connector 1.2.68 | — |
| FastjsonMySQLPipe | Mysql-connector 1.2.68 | — |
| FastjsonPostgreSQLJdbc | postgresql 1.2.68 | — |
| FastjsonPostgreSQLJdbc1_2_80 | postgresql 1.2.80 | — |
| FastjsonWriteFileJDK11 | FastjsonWriteFileJDK11 1.2.68 | — |
| FastjsonlogbackH2Jdbc | H2Jdbc 1.2.58 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| DirContextJndi | Hessian加载Reference | — |
| GroovyGString | GroovyGString | — |
| GroovyWithRef | Groovy链 | — |
| LazyValueWithBcel | 加载BCEL字节码 | JDK原生BCEL链 |
| LazyValueWithDS | 通过SerializationUtils触发二次Java原生反序列化 | 二次反序列化链 |
| LazyValueWithDS2 | lang SerializationUtils触发二次反序列化 | — |
| LazyValueWithDS3 | lang3 SerializationUtils触发二次反序列化 | — |
| LazyValueWithFileWrite1 | 写文件 | — |
| LazyValueWithFileWrite2 | DumpBytecode 写文件 | — |
| LazyValueWithGroovy | Groovy链 | — |
| LazyValueWithJNDI | 发起JNDI请求 | JDK原生JNDI链 |
| LazyValueWithRMI | 发起RMI连接 | — |
| LazyValueWithReflectUtils | 通过Spring ReflectUtils执行任意字节码 | — |
| LazyValueWithSleep | 服务器延迟 | — |
| LazyValueWithUrlClassLoader | 加载本地jar包 | — |
| ProxyLazyValueUIDefaults | 加载LazyValue相关链 | JDK原生BCEL链、JDK原生JNDI链 |
| ProxyLazyValueXString | 加载LazyValue相关链 | — |
| Resin | Resin链 | — |
| Rome1 | ROME链1 rome | Rome1低版本二次反序列化链 |
| Rome2 | ROME链2 rometools | Rome2高版本二次反序列化链 |
| Rome3 | ROME链3(不推荐) | — |
| Rome4 | ROME链4(不推荐) | — |
| RomeEqualsBean1 | equals调用本链 rome EqualsBean链1 | — |
| RomeEqualsBean2 | equals调用本链 rometools EqualsBean链2 | — |
| RomeToStringBean1 | toString调用本链 ROME ToStringBean链1 | — |
| RomeToStringBean2 | toString调用本链 ROME ToStringBean链2 | — |
| ServerManagerImpl | ServerManagerImpl 命令注入 | — |
| SpringAbstractBeanFactoryPointcutAdvisor | Spring相关链 | Spring JNDI链2、Spring 命令执行 |
| SpringExec | 执行win/linux命令 | Spring 命令执行 |
| SpringJndi1 | 向外发起JNDI连接,推荐使用 | Spring JNDI链1、Spring JNDI链2 |
| SpringJndi2 | 向外发起JNDI连接 | — |
| SpringLinuxExec | 执行linux命令 | — |
| SpringLoadJar | 加载目标的jar包进行任意函数调用 | — |
| SpringPartiallyComparableAdvisorHolder | Spring JNDI链 | Spring JNDI链1 |
| SpringUpload | 任意文件上传 | — |
| SwingLazyValueJarWrite | 写文件 | — |
| SwingLazyValueMethodUtil | MethodUtil JDK原生链 | JDK原生链2(慎用) |
| SwingLazyValueUIDefaults | 加载LazyValue相关链 | 二次反序列化链 |
| SwingLazyValueXString | 加载LazyValue相关链 | — |
| SystemLoad | 写库文件和加载动态链接库的代码执行链 | — |
| UnixPrintService | UnixPrintService 命令注入 | — |
| UnixPrintServiceLookup | UnixPrintServiceLookup 命令注入 | — |
| XBean | XBean链 | — |
| XBeanToString | 需要toString链触发的XBean链 | Hessian XBean 链 |
| XsltOnlyJdk | Xslt整合链2 一键通过js实现代码执行 | JDK原生链1 |
| XsltOnlyJdk2 | Xslt整合链2 一键通过js实现代码执行(hashmap包装) | — |
| XsltRead | Xslt解析xml文件链 | — |
| XsltSpring | Xslt整合链 一键代码执行 | Xslt 代码执行 |
| XsltWrite | Xslt写xml文件链 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| AspectJWeaver | AspectJ链指定目录文件写入文件 | — |
| BeanShell1 | Beanshell链 | — |
| BeanShell2 | Beanshell链2 | — |
| C3p0DataSource | C3p0DataSource JDBC URL Attack | Fastjson C3p0 Jdbc h2链、Jackson C3p0 Jdbc h2链 |
| C3p0DataSource2 | C3p0DataSource JDBC URL Attack | — |
| C3p0DataSource3 | C3p0DataSource JDBC URL Attack | — |
| C3p0DataSource4 | C3p0DataSource JDBC URL Attack | — |
| C3p0_C3p0HexSerialize | C3p0:C3P0 二次反序列化 | — |
| C3p0_C3p0Jndi | C3p0:C3P0 jndi注入 | — |
| C3p0_C3p0Jndi2 | C3P0:C3P0 jndi注入 | — |
| C3p0_C3p0Reference | C3P0 Reference 类加载 | — |
| CaseInsensitiveMap3ToString | CC3.X调用toString方法 | — |
| CaseInsensitiveMap4ToString | CC4.x调用toString方法 | — |
| Click1 | Click1 | — |
| Clojure | Clojure | — |
| ClosureWithJNDI | 向外发起JNDI | — |
| ClosureWithJNDISandboxed | Groovy沙箱-JNDI | — |
| ClosureWithRuntime | 执行任意命令 | — |
| ClosureWithRuntimeSandboxed | Groovy沙箱-命令执行 | — |
| ClosureWithTemplatesImpl | Groovy利用链代码执行 | — |
| ClosureWithTemplatesImplSandboxed | Groovy沙箱-TemplatesImpl | — |
| CommonDbcp2DataSource | CommonDbcp2DataSource JNDI | — |
| CommonDbcp2DataSource2 | CommonDbcp2DataSource2 JNDI | — |
| CommonDbcpDataSource | CommonDbcpDataSource JNDI | — |
| CommonDbcpDataSource2 | CommonDbcpDataSource2 JNDI | — |
| CommonsBeanutils1 | CB 1.9 链 | Axis2链、CB1 JNDI链1、CB1 JNDI链2、CB1链、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链、二次反序列化链 |
| CommonsBeanutils2 | CB 1.8/1.7 链 | CB2链 |
| CommonsBeanutils3 | CB 1.6 链 | — |
| CommonsBeanutils4 | CB 1.5 链 | — |
| CommonsBeanutils5 | CB 1.10 链 | — |
| CommonsCollectionsK1 | CC3.2.1 InvokerTransformer 链 | K1链、K1链二次反序列化1、K1链二次反序列化2 |
| CommonsCollectionsK2 | CC4.0 InvokerTransformer 链 | K2链 |
| CommonsCollectionsK3 | CC3.2.1 ChainedTransformer 链 | K1链二次反序列化1、K1链二次反序列化2、K3链 |
| CommonsCollectionsK4 | CC4.0 ChainedTransformer 链 | K4链 |
| DWrap | 使用spring动态代理包裹 DataSource 的实现类 | Jackson C3p0 Jdbc h2链 |
| DmdbRowSet | 达梦 DataSource JNDI | — |
| DruidDataSource | DruidXADataSource JDBC URL Attack | — |
| DruidDataSource2 | DruidDataSource JDBC URL Attack | — |
| Fastjson | Fastjson反序列化链 | Fastjson C3p0 Jdbc h2链、Fastjson JNDI链、Fastjson链、Hessian Fastjson 链 |
| Fastjson2 | Fastjson2反序列化链 | Fastjson2链 |
| FastjsonToString1 | 需要toString链触发的Fastjson反序列化链 | Hessian Fastjson 链 |
| FastjsonToString2 | 需要toString链触发的Fastjson2反序列化链 | — |
| FileUpload1 | FileUpload1 | — |
| FindClass | DNSLog探测类 | DNSLog探测类 |
| FindClass2 | DNSLog探测类2-指定suid | — |
| FindClassByBomb | Sleep探测类 | 反序列化炸弹 |
| FindClassByBomb2 | Sleep探测类2-指定suid | — |
| Groovy | Groovy反序列化链 | — |
| Groovy2 | Groovy反序列化链1 | — |
| Groovy2GString | Groovy2 GString 链 | — |
| GroovyExpando | Groovy反序列化拓展链 | — |
| Hiber2jdbc | DriverManagerConnectionProviderImp JDBC URL Attack | — |
| Hiber2jdbc2 | DriverManagerConnectionProviderImp JDBC URL Attack | — |
| Hibernate1 | Hibernate1链 版本3/4 | — |
| Hibernate1For5 | Hibernate1链 版本5 | — |
| Hibernate2 | Hibernate2链 版本3/4 | — |
| Hibernate2For5 | Hibernate2链 版本5 | — |
| Hibernate3For5 | Hibernate1链 5 (JFormattedTextField ) | — |
| HutoolJndiDSFactory | HutoolJndiDSFactory | — |
| HutoolPooledDSFactory | HutoolPooledDSFactory | — |
| HutoolSimpleDSFactory | HutoolSimpleDSFactory | — |
| JBossInterceptors1 | JBossInterceptors1链 | — |
| JFormattedTextField | JFormattedTextField$FocusLostHandler | — |
| JRE8u20 | Jre8u20反序列化链 | — |
| JRMPClient | JRMPClient | — |
| JRMPClient2 | JRMPClient2 | — |
| JRMPClient3 | JRMPClient3 | — |
| JRMPListener | JRMPListener | — |
| JSON1 | JSON1链 | — |
| Jackson | Jackson反序列化链 | Hessian Jackson 链、Jackson C3p0 Jdbc h2链、Jackson链 |
| JacksonToString | 需要toString链触发的Jackson反序列化 | Hessian Jackson 链、JDK17 RCE链、JDK17 RCE链2 |
| JavaNativeSerialization | Java原生反序列化Payload生成 | Hessian Fastjson 链、Hessian Jackson 链、K1链二次反序列化1、K1链二次反序列化2、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链、二次反序列化链 |
| JavassistWeld1 | JavassistWeld1链 | — |
| JdbcRowSetImpl | JdbcRowSetImpl JNDI链 | CB1 JNDI链1 |
| Jdk7u21 | jdk7u21反序列化链 | — |
| Jython1 | Jython1链 | — |
| LdapAttribute | LdapAttribute JNDI | CB1 JNDI链2、Fastjson JNDI链 |
| MapMessage | MapMessage二次反序列化 | — |
| MapProxy | hutool.MapProxy二次反序列化 | — |
| MchangeC3p0HexSerialize | C3P0 二次反序列化 | — |
| MchangeC3p0Jndi | C3P0 jndi注入 | — |
| MchangeC3p0Jndi2 | C3P0 jndi注入 | — |
| MchangeC3p0Reference | C3P0 Reference 类加载 | C3P0反序列化1、C3P0反序列化2 |
| MozillaRhino1 | MozillaRhino1 RCE | — |
| MozillaRhino2 | MozillaRhino2 RCE | — |
| MozillaRhino3 | MozillaRhino3 JS RCE | — |
| Myfaces1 | myfaces1 (未测试通过) | — |
| Myfaces2 | Myfaces2 (未测试通过) | — |
| MysqlDataSource | MysqlDataSource Mysql JDBC URL Attack | — |
| OracleCachedRowSet | Oracle DataSource JNDI | — |
| OracleFilteredRowSet | Oracle DataSource JNDI | — |
| OracleJDBCRowSet | Oracle DataSource JNDI | — |
| OracleJoinRowSet | Oracle DataSource JNDI | — |
| OracleWebRowSet | Oracle DataSource JNDI | — |
| PostgreSqlDataSource | PostgreSqlDataSource PostgreSQL JDBC URL Attack | — |
| PostgreSqlDataSource2 | PGSimpleDataSource PostgreSQL JDBC URL Attack | — |
| ProcessBuilder | ProcessBuilder执行命令 | — |
| RMIConnectWithUnicastRemoteObject | 发起RMI请求bypass | — |
| RMIConnectWrapped | 发起RMI请求 | — |
| RMIConnectWrappedWithProxy | 发起RMI请求 | — |
| RMIConnector | RMIConnector二次反序列化 | K1链二次反序列化2 |
| RefWrap | 使用ReferenceWrapper对Reference类进行封装 | — |
| SignedObject | SignedObject二次反序列化 | Hessian Fastjson 链、Hessian Jackson 链、K1链二次反序列化1、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链 |
| SpringAopAspectjweaver | SpringAop aspectjweaver 链 | — |
| SpringBeansFastjson | Spring Fastjson链 | — |
| StoreableCachingMap | 指定目录文件写入文件 | — |
| TWrap | 使用Spring动态代理处理TemplatesImpl | Hessian Jackson 链、Jackson链 |
| TWrapHighVersion | 使用Spring动态代理处理TemplatesImpl 高版本JDK | JDK17 RCE链、JDK17 RCE链2 |
| TemplatesImpl | TemplatesImpl加载字节码 | Axis2链、CB1链、CB2链、Fastjson2链、Fastjson链、Hessian Fastjson 链、Hessian Jackson 链、Jackson链、K1链、K1链二次反序列化1、K1链二次反序列化2、K2链、K3链、K4链、Rome1低版本二次反序列化链、Rome2高版本二次反序列化链、二次反序列化链 |
| TemplatesImpl2 | TemplatesImpl2加载字节码 | JDK17 RCE链、JDK17 RCE链2 |
| TeraDataSource | Teradata DataSource | — |
| TomcatDbcp2DataSource | TomcatDbcp2DataSource JNDI | — |
| TomcatDbcp2DataSource2 | TomcatDbcp2DataSource2 JNDI | — |
| TomcatDbcpDataSource | TomcatDbcpDataSource JNDI | — |
| TomcatDbcpDataSource2 | TomcatDbcpDataSource2 JNDI | — |
| TransformerWithBcel | CC Transform链加载BCEL | — |
| TransformerWithDefiningClassLoader | CC Transform链绕TemplaetsImpl黑名单 | — |
| TransformerWithDefiningClassLoader2 | CC Transform链绕TemplaetsImpl黑名单 | — |
| TransformerWithExec | 执行指定的系统命令 | — |
| TransformerWithFileWrite | 写文件 | — |
| TransformerWithJNDI | 向外发起jndi连接 | — |
| TransformerWithJs | CC Transform链加载BCEL | — |
| TransformerWithMethodHandles | MethodHandles 加载字节码 | — |
| TransformerWithSleep | Sleep指定时间 | — |
| TransformerWithTemplatesImpl | TemplateImpl执行字节码 | K1链二次反序列化1、K1链二次反序列化2、K3链、K4链 |
| TransformerWithURLClassLoader | 远程加载jar包 | — |
| URL4Getter | getter方法调用本链发起DNS请求 | — |
| URLDNS | 发起DNS请求 | — |
| Vaadin1 | Vaadin1 | — |
| Wicket1 | Wicket1 | — |
| WildFly | WildFly JNDI | — |
| XString1 | XString 调用toString链 | — |
| XString2 | XStringForChars 调用toString链 | — |
| XString3 | XStringForFSB 调用toString链 | — |
| XalanXString1 | Xalan XString 调用toString链 | — |
| XalanXString2 | Xalan XStringForChars 调用toString链 | — |
| XalanXString3 | Xalan XStringForFSB 调用toString链 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| BeanshellRef | Beanshell表达式RCE | BeanshellRef 利用 |
| BypassRef | LdapCtxFactory Bypass | — |
| CommonConfiguration | configuration 修改系统属性 | — |
| CommonConfiguration2 | configuration2 修改系统属性 | — |
| CommonConfigurationGroovy | groovy 修改系统属性 | — |
| CommonDbcp2JdbcAttack | Common dbcp2 加载jdbc,转为jdbc url利用 | — |
| CommonDbcpJdbcAttack | Common dbcp 加载jdbc,转为jdbc url利用 | — |
| DataSource2JdbcAttack | 通过 DataSource 类加载jdbc,转为jdbc url的利用 | — |
| DruidJdbcAttack | Druid 加载jdbc,转为jdbc url利用 | Druid Jdbc 利用 |
| GroovyClassLoaderRef | Groovy RCE2 | — |
| GroovyShellRef | Groovy RCE | Groovy 脚本执行 |
| H2CreateDirRef | h2 创建文件夹 | — |
| HessianSSRF | Hessian JNDI SSRF | — |
| HikariJdbcAttack | HikariCP 加载jdbc,转为jdbc url利用 | HikariJdbcAttack Jdbc 利用 |
| INIConfigurationReadFileRef | INIConfiguration 不完美的文件读取 | — |
| JavaBeanObjectFactoryHexDS | JNDI C3P0 二次反序列化 | — |
| LdapClassLoader | 远程字节码加载 | C3P0反序列化1 |
| LoadNativeLibRef | Load NativeLib RCE | — |
| MemoryUserDatabaseFactoryWriteFile | Tomcat MemoryUserDatabaseFactory 写文件RCE | — |
| Mlet2Ref | 使用MLet进行类探测 | — |
| MletRef | 使用MLet远程加载类(不触发static代码块) | — |
| MvelRef | MVEL RCE | — |
| PropertiesConfigurationRef | PropertiesConfiguration 不完美的远程文件下载/读取 | — |
| PropertiesConfigurationRef2 | PropertiesConfiguration 不完美的远程文件下载/读取2 | — |
| ResourceFactoryBypass | ResourceFactoryBypass | — |
| SnakeyamlRef | SnakeYaml 远程加载jar包 RCE | SnakeYaml 利用 |
| SystemConfigurationRef | configuration 修改系统属性 | — |
| SystemConfigurationRef2 | configuration2 修改系统属性 | — |
| SystemConfigurationRef3 | groovy 修改系统属性 | — |
| TomcatDbcp2JdbcAttack | Tomcat dbcp2 加载jdbc,转为jdbc url利用 | — |
| TomcatDbcpJdbcAttack | Tomcat dbcp1 加载jdbc,转为jdbc url利用 | — |
| TomcatElRef | El RCE | C3P0反序列化2、Hessian XBean 链、经典 Tomcat EL 执行 |
| TomcatJDBCJdbcAttack | Tomcat jdbc 加载jdbc,转为jdbc url利用 | — |
| VelocityCreateDirRef | Velocity创建任意文件夹 | — |
| XStreamRef | XStream 命令执行 | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| FakeMySQLPipeFile | FakeMySQL PipeFile | — |
| FakeMySQLReadFile | FakeMySQL 读取文件 | ReadFile |
| FakeMySQLSSRF | FakeMySQL SSRF | — |
| Gadget | 名称 | 用于预设链 |
|---|---|---|
| XMLBceLoader | BCEL 加载字节码 | — |
| XMLDnsLog | 简单的 Dnslog 请求探测Payoad | — |
| XMLExec | 命令执行 | — |
| XMLJNDI | JdbcRowSetImpl JNDI | — |
| XMLJdkDefineClass | ClassLoader defineClass 加载字节码 | — |
| XMLJsLoader | 通过 js 加载字节码 | — |
| XMLSleep | 服务器延迟 | — |
.
├── README.md # 本文件(总索引)
├── STRUCTURE.md # 目录结构说明
├── chains/ # 51 篇链分析文章
└── gadgets/<category>/ # 419 条 gadget 参考条目