diff --git a/src/main/java/ysoserial/payloads/URLDNS.java b/src/main/java/ysoserial/payloads/URLDNS.java index 6ed798f..6d6c398 100644 --- a/src/main/java/ysoserial/payloads/URLDNS.java +++ b/src/main/java/ysoserial/payloads/URLDNS.java @@ -41,7 +41,7 @@ import ysoserial.payloads.util.Reflections; * */ @SuppressWarnings({ "rawtypes", "unchecked" }) -@PayloadTest(skip = "true") +@PayloadTest(harness="ysoserial.test.payloads.DnsLookupTest") @Dependencies() @Authors({ Authors.GEBL }) public class URLDNS implements ObjectPayload { diff --git a/src/main/java/ysoserial/secmgr/SecurityManagers.java b/src/main/java/ysoserial/secmgr/SecurityManagers.java new file mode 100644 index 0000000..da1afc6 --- /dev/null +++ b/src/main/java/ysoserial/secmgr/SecurityManagers.java @@ -0,0 +1,21 @@ +package ysoserial.secmgr; + +import java.util.concurrent.Callable; + +public class SecurityManagers { + public static Callable wrapped(final Callable callable, final SecurityManager sm) throws Exception { + final SecurityManager orig = System.getSecurityManager(); // save sm + return new Callable() { + @Override + public T call() throws Exception { + System.setSecurityManager(sm); + try { + return callable.call(); + } finally { + System.setSecurityManager(orig); // restore sm + } + + } + }; + } +} diff --git a/src/test/java/ysoserial/test/payloads/DnsLookupTest.java b/src/test/java/ysoserial/test/payloads/DnsLookupTest.java new file mode 100644 index 0000000..ea10e70 --- /dev/null +++ b/src/test/java/ysoserial/test/payloads/DnsLookupTest.java @@ -0,0 +1,55 @@ +package ysoserial.test.payloads; + +import org.junit.Assert; +import ysoserial.Strings; +import ysoserial.payloads.Scala; +import ysoserial.payloads.URLDNS; +import ysoserial.secmgr.SecurityManagers; +import ysoserial.test.CustomTest; +import ysoserial.test.util.Files; +import ysoserial.test.util.OS; + +import java.io.File; +import java.security.Permission; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.Callable; + +public class DnsLookupTest implements CustomTest { + private final String testDomain = Strings.randUUID(); + + @Override + public void run(Callable payload) throws Exception { + final List lookups = new LinkedList(); + SecurityManager sm = new SecurityManager() { + @Override + public void checkConnect(String host, int port) { + if (port == -1) { + System.out.println(host); + lookups.add(host); + } + } + + @Override + public void checkPermission(Permission perm) {} + }; + + try { + SecurityManagers.wrapped(payload, sm).call(); + } catch (Exception e) { + e.printStackTrace(); + } + + Assert.assertTrue(lookups.contains(testDomain)); + } + + @Override + public String getPayloadArgs() { + return "http://" + testDomain; + } + + public static void main(String[] args) throws Exception { + PayloadsTest.testPayload(URLDNS.class, new Class[0]); + } + +}