def handle(self): try: self.request.settimeout(0.5) data = self.request.recv(1024) ##session request 139 if data[0] == "\x81": Buffer = "\x82\x00\x00\x00" self.request.send(Buffer) data = self.request.recv(1024) ##Negotiate proto answer. if data[8:10] == "\x72\x00": head = SMBHeader(cmd="\x72", flag1="\x80", flag2="\x00\x00", pid=pidcalc(data), mid=midcalc(data)) Body = SMBNegoAnsLM(Dialect=Parse_Nego_Dialect(data), Domain="", Key=settings.Config.Challenge) Body.calculate() Packet = str(head) + str(Body) Buffer = struct.pack(">i", len(''.join(Packet))) + Packet self.request.send(Buffer) data = self.request.recv(1024) ##Session Setup AndX Request if data[8:10] == "\x73\x00": if Is_LMNT_Anonymous(data): head = SMBHeader(cmd="\x73", flag1="\x90", flag2="\x53\xc8", errorcode="\x72\x00\x00\xc0", pid=pidcalc(data), tid=tidcalc(data), uid=uidcalc(data), mid=midcalc(data)) Packet = str(head) + str(SMBSessEmpty()) Buffer = struct.pack(">i", len(''.join(Packet))) + Packet self.request.send(Buffer) else: ParseLMNTHash(data, self.client_address[0]) head = SMBHeader(cmd="\x73", flag1="\x90", flag2="\x53\xc8", errorcode="\x22\x00\x00\xc0", pid=pidcalc(data), tid=tidcalc(data), uid=uidcalc(data), mid=midcalc(data)) Packet = str(head) + str(SMBSessEmpty()) Buffer = struct.pack(">i", len(''.join(Packet))) + Packet self.request.send(Buffer) data = self.request.recv(1024) except Exception: self.request.close() pass
def handle(self): try: self.request.settimeout(1) data = self.request.recv(1024) Challenge = RandomChallenge() if data[0] == b"\x81": #session request 139 Buffer = "\x82\x00\x00\x00" self.request.send(NetworkSendBufferPython2or3(Buffer)) data = self.request.recv(1024) if data[8:10] == b"\x72\x00": #Negotiate proto answer. head = SMBHeader(cmd="\x72",flag1="\x80", flag2="\x00\x00",pid=pidcalc(NetworkRecvBufferPython2or3(data)),mid=midcalc(NetworkRecvBufferPython2or3(data))) Body = SMBNegoAnsLM(Dialect=Parse_Nego_Dialect(NetworkRecvBufferPython2or3(data)),Domain="",Key=NetworkRecvBufferPython2or3(Challenge)) Body.calculate() Packet = str(head)+str(Body) Buffer = StructPython2or3('>i', str(Packet))+str(Packet) self.request.send(NetworkSendBufferPython2or3(Buffer)) data = self.request.recv(1024) if data[8:10] == b"\x73\x00": #Session Setup AndX Request if Is_LMNT_Anonymous(data): head = SMBHeader(cmd="\x73",flag1="\x90", flag2="\x53\xc8",errorcode="\x72\x00\x00\xc0",pid=pidcalc(NetworkRecvBufferPython2or3(data)),tid=tidcalc(NetworkRecvBufferPython2or3(data)),uid=uidcalc(NetworkRecvBufferPython2or3(data)),mid=midcalc(NetworkRecvBufferPython2or3(data))) Packet = str(head)+str(SMBSessEmpty()) Buffer = StructPython2or3('>i', str(Packet))+str(Packet) self.request.send(NetworkSendBufferPython2or3(Buffer)) else: ParseLMNTHash(data,self.client_address[0], Challenge) head = SMBHeader(cmd="\x73",flag1="\x90", flag2="\x53\xc8",errorcode="\x22\x00\x00\xc0",pid=pidcalc(NetworkRecvBufferPython2or3(data)),tid=tidcalc(NetworkRecvBufferPython2or3(data)),uid=uidcalc(NetworkRecvBufferPython2or3(data)),mid=midcalc(NetworkRecvBufferPython2or3(data))) Packet = str(head) + str(SMBSessEmpty()) Buffer = StructPython2or3('>i', str(Packet))+str(Packet) self.request.send(NetworkSendBufferPython2or3(Buffer)) data = self.request.recv(1024) except Exception: self.request.close() pass