From 2d47216a7134c117351aa323bc82c398af2be069 Mon Sep 17 00:00:00 2001 From: ReaJason Date: Sun, 16 Nov 2025 12:04:08 +0800 Subject: [PATCH] test: add bigInterger for expression vul --- .../java/BigIntegerClassLaoderServlet.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java diff --git a/vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java b/vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java new file mode 100644 index 00000000..ea9a59e0 --- /dev/null +++ b/vul/vul-webapp-expression/src/main/java/BigIntegerClassLaoderServlet.java @@ -0,0 +1,48 @@ +import javax.servlet.*; +import javax.servlet.annotation.WebServlet; +import java.io.IOException; + +/** + * @author Wans + * @since 2025/08/25 + */ +@WebServlet("/biginteger") +public class BigIntegerClassLaoderServlet extends ClassLoader implements Servlet { + + @Override + public void init(ServletConfig config) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + String data = req.getParameter("data"); + try { + byte[] bytes = decodeBigInteger(data); + Object obj = defineClass(null, bytes, 0, bytes.length).newInstance(); + res.getWriter().print(obj); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + static byte[] decodeBigInteger(String bigIntegerStr) throws Exception { + Class decoderClass = Class.forName("java.math.BigInteger"); + return (byte[]) decoderClass.getMethod("toByteArray").invoke(decoderClass.getConstructor(String.class, int.class).newInstance(bigIntegerStr, Character.MAX_RADIX)); + } + + @Override + public String getServletInfo() { + return ""; + } + + @Override + public void destroy() { + + } +}