1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  package com.jsql.view.swing.terminal;
12  
13  import com.jsql.util.LogLevelUtil;
14  import org.apache.logging.log4j.LogManager;
15  import org.apache.logging.log4j.Logger;
16  
17  import java.io.IOException;
18  import java.net.URISyntaxException;
19  import java.util.UUID;
20  
21  
22  
23  
24  public class ExploitReverseShell extends AbstractExploit {
25  
26      private static final Logger LOGGER = LogManager.getRootLogger();
27  
28      private final transient ServerInput serverInput;
29  
30      
31  
32  
33  
34  
35  
36      public ExploitReverseShell(UUID terminalID, String port) throws IOException, URISyntaxException {
37          super(terminalID, null, "reverse", false);
38  
39          this.serverInput = new ServerInput(this, Integer.parseInt(port));
40          new Thread(() -> {
41              try {
42                  this.serverInput.startServer();
43              } catch (IOException e) {
44                  try {
45                      LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Socket connection failure: {}", e.getMessage());
46                      this.serverInput.close();
47                  } catch (IOException ex) {
48                      LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Socket closing failure: {}", ex.getMessage());
49                  }
50              }
51          }).start();
52      }
53  
54      @Override
55      public void action(String command, UUID terminalID, String urlShell, String... arg) {
56          this.serverInput.getServerInputConnection().setCommand(command);
57      }
58  }