Skip to content

Latest commit

 

History

History
1112 lines (526 loc) · 55.2 KB

File metadata and controls

1112 lines (526 loc) · 55.2 KB

java-chains 1.4.4 Gadget 知识库

对 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() 取内层对象再包装)。

一、预设链索引(51)

| # | 链名 | 说明 | 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 参考索引(419)

amf · AMF/Flex(8)

| Gadget | 名称 | 用于预设链 |

|---|---|---|

| Axis2MetaDataEntry | Axis2链 | Axis2链 |

| Axis2MetaDataEntryObf | Axis2链-带Java序列化混淆 | — |

| C3P0WrapperConnPool | 远程类加载 | — |

| HikariConfigGadget | HikariJNDI注入 | — |

| ReplicatedTreeGadget | ReplicatedTree链 | — |

| SpringPropertyPathFactory | JNDI注入 | — |

| UnicastRef2Gadget | UnicastRef2 | — |

| UnicastRefGadget | UnicastRef | — |

bytecode · 字节码生成与回显(48)

| 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 | 写入大文件/二进制文件 | — |

common · 通用/表达式/JDBC 等(112)

| 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 | — |

custom · 自定义/其它(4)

| Gadget | 名称 | 用于预设链 |

|---|---|---|

| ByteArrayFromBase64 | 自定义byte[]类型数据(Base64) | — |

| ByteArrayFromHex | 自定义byte[]类型数据(Hex) | — |

| ByteArrayFromUploadFile | 自定义byte[]类型数据(文件上传) | — |

| CustomString | 自定义String类型数据 | — |

fastjson · Fastjson/Jackson(16)

| 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 | — |

hessian · Hessian/Burlap(49)

| 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文件链 | — |

javanative · Java 原生反序列化(137)

| 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链 | — |

jndi · JNDI 注入(35)

| 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 命令执行 | — |

mysql · FakeMySQL(3)

| Gadget | 名称 | 用于预设链 |

|---|---|---|

| FakeMySQLPipeFile | FakeMySQL PipeFile | — |

| FakeMySQLReadFile | FakeMySQL 读取文件 | ReadFile |

| FakeMySQLSSRF | FakeMySQL SSRF | — |

xml · XML(XMLDecoder/XStream 等)(7)

| 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 参考条目