mirror of
https://github.com/lgandx/Responder.git
synced 2025-12-24 08:29:08 +00:00
Merge pull request #99 from ValdikSS/utf16names
Proper non-Latin names support for SMB
This commit is contained in:
@@ -65,7 +65,7 @@ def ParseShare(data):
|
|||||||
packet = data[:]
|
packet = data[:]
|
||||||
a = re.search('(\\x5c\\x00\\x5c.*.\\x00\\x00\\x00)', packet)
|
a = re.search('(\\x5c\\x00\\x5c.*.\\x00\\x00\\x00)', packet)
|
||||||
if a:
|
if a:
|
||||||
print text("[SMB] Requested Share : %s" % a.group(0).replace('\x00', ''))
|
print text("[SMB] Requested Share : %s" % a.group(0).decode('UTF-16LE'))
|
||||||
|
|
||||||
|
|
||||||
def ParseSMBHash(data,client): #Parse SMB NTLMSSP v1/v2
|
def ParseSMBHash(data,client): #Parse SMB NTLMSSP v1/v2
|
||||||
@@ -91,10 +91,10 @@ def ParseSMBHash(data,client): #Parse SMB NTLMSSP v1/v2
|
|||||||
SMBHash = SSPIStart[NthashOffset:NthashOffset+NthashLen].encode("hex").upper()
|
SMBHash = SSPIStart[NthashOffset:NthashOffset+NthashLen].encode("hex").upper()
|
||||||
DomainLen = struct.unpack('<H',data[105:107])[0]
|
DomainLen = struct.unpack('<H',data[105:107])[0]
|
||||||
DomainOffset = struct.unpack('<H',data[107:109])[0]
|
DomainOffset = struct.unpack('<H',data[107:109])[0]
|
||||||
Domain = SSPIStart[DomainOffset:DomainOffset+DomainLen].replace('\x00','')
|
Domain = SSPIStart[DomainOffset:DomainOffset+DomainLen].decode('UTF-16LE')
|
||||||
UserLen = struct.unpack('<H',data[113:115])[0]
|
UserLen = struct.unpack('<H',data[113:115])[0]
|
||||||
UserOffset = struct.unpack('<H',data[115:117])[0]
|
UserOffset = struct.unpack('<H',data[115:117])[0]
|
||||||
Username = SSPIStart[UserOffset:UserOffset+UserLen].replace('\x00','')
|
Username = SSPIStart[UserOffset:UserOffset+UserLen].decode('UTF-16LE')
|
||||||
WriteHash = '%s::%s:%s:%s:%s' % (Username, Domain, LMHash, SMBHash, settings.Config.NumChal)
|
WriteHash = '%s::%s:%s:%s:%s' % (Username, Domain, LMHash, SMBHash, settings.Config.NumChal)
|
||||||
|
|
||||||
SaveToDb({
|
SaveToDb({
|
||||||
@@ -110,10 +110,10 @@ def ParseSMBHash(data,client): #Parse SMB NTLMSSP v1/v2
|
|||||||
SMBHash = SSPIStart[NthashOffset:NthashOffset+NthashLen].encode("hex").upper()
|
SMBHash = SSPIStart[NthashOffset:NthashOffset+NthashLen].encode("hex").upper()
|
||||||
DomainLen = struct.unpack('<H',data[109:111])[0]
|
DomainLen = struct.unpack('<H',data[109:111])[0]
|
||||||
DomainOffset = struct.unpack('<H',data[111:113])[0]
|
DomainOffset = struct.unpack('<H',data[111:113])[0]
|
||||||
Domain = SSPIStart[DomainOffset:DomainOffset+DomainLen].replace('\x00','')
|
Domain = SSPIStart[DomainOffset:DomainOffset+DomainLen].decode('UTF-16LE')
|
||||||
UserLen = struct.unpack('<H',data[117:119])[0]
|
UserLen = struct.unpack('<H',data[117:119])[0]
|
||||||
UserOffset = struct.unpack('<H',data[119:121])[0]
|
UserOffset = struct.unpack('<H',data[119:121])[0]
|
||||||
Username = SSPIStart[UserOffset:UserOffset+UserLen].replace('\x00','')
|
Username = SSPIStart[UserOffset:UserOffset+UserLen].decode('UTF-16LE')
|
||||||
WriteHash = '%s::%s:%s:%s:%s' % (Username, Domain, settings.Config.NumChal, SMBHash[:32], SMBHash[32:])
|
WriteHash = '%s::%s:%s:%s:%s' % (Username, Domain, settings.Config.NumChal, SMBHash[:32], SMBHash[32:])
|
||||||
|
|
||||||
SaveToDb({
|
SaveToDb({
|
||||||
|
|||||||
4
utils.py
4
utils.py
@@ -154,9 +154,9 @@ def SaveToDb(result):
|
|||||||
if not count:
|
if not count:
|
||||||
with open(logfile,"a") as outf:
|
with open(logfile,"a") as outf:
|
||||||
if len(result['cleartext']): # If we obtained cleartext credentials, write them to file
|
if len(result['cleartext']): # If we obtained cleartext credentials, write them to file
|
||||||
outf.write('%s:%s\n' % (result['user'], result['cleartext']))
|
outf.write('%s:%s\n' % (result['user'].encode('utf8', 'replace'), result['cleartext'].encode('utf8', 'replace')))
|
||||||
else: # Otherwise, write JtR-style hash string to file
|
else: # Otherwise, write JtR-style hash string to file
|
||||||
outf.write(result['fullhash'] + '\n')
|
outf.write(result['fullhash'].encode('utf8', 'replace') + '\n')
|
||||||
|
|
||||||
cursor.execute("INSERT INTO responder VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", (timestamp, result['module'], result['type'], result['client'], result['hostname'], result['user'], result['cleartext'], result['hash'], result['fullhash']))
|
cursor.execute("INSERT INTO responder VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", (timestamp, result['module'], result['type'], result['client'], result['hostname'], result['user'], result['cleartext'], result['hash'], result['fullhash']))
|
||||||
cursor.commit()
|
cursor.commit()
|
||||||
|
|||||||
Reference in New Issue
Block a user