Skip to content

Commit 6e0a969

Browse files
authored
Modify the getSSPType1 method to support NL_AUTH_MESSAGE_DNS_DOMAIN. (#1908)
* fixed NETLOGON auth error * use getSSPType1 func to create NlAuthMessage
1 parent ead516a commit 6e0a969

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

impacket/dcerpc/v5/nrpc.py

+39-14
Original file line numberDiff line numberDiff line change
@@ -1862,31 +1862,56 @@ def UNSEAL(data, auth_data, key, aes = False):
18621862
plain = cipher.decrypt(data)
18631863
return plain, cfounder
18641864

1865+
def CompressedUtf8String(domain_name):
1866+
if domain_name is None:
1867+
raise ValueError("domain_name cannot be None")
1868+
1869+
MAX_LABEL_LENGTH = 63
1870+
1871+
buf = bytearray()
1872+
labels = domain_name.split('.')
1873+
1874+
for label in labels:
1875+
label_bytes = label.encode('utf-8')
1876+
if len(label_bytes) > MAX_LABEL_LENGTH:
1877+
raise ValueError("Label exceeded max length of 63 bytes.")
1878+
buf.append(len(label_bytes))
1879+
buf.extend(label_bytes)
1880+
buf.append(0)
1881+
1882+
return bytes(buf)
18651883

18661884
def getSSPType1(workstation='', domain='', signingRequired=False):
18671885
auth = NL_AUTH_MESSAGE()
1886+
auth['MessageType'] = NL_AUTH_MESSAGE_REQUEST
18681887
auth['Flags'] = 0
1869-
auth['Buffer'] = b''
1870-
auth['Flags'] |= NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1888+
18711889
if domain != '':
1872-
auth['Buffer'] = auth['Buffer'] + b(domain) + b'\x00'
1873-
else:
1874-
auth['Buffer'] += b'WORKGROUP\x00'
1875-
1876-
auth['Flags'] |= NL_AUTH_MESSAGE_NETBIOS_HOST
1877-
1878-
if workstation != '':
1879-
auth['Buffer'] = auth['Buffer'] + b(workstation) + b'\x00'
1890+
if '.' in domain:
1891+
auth['Flags'] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_DNS_DOMAIN
1892+
if workstation != '':
1893+
auth['Buffer'] = b(workstation) + b'\x00' + CompressedUtf8String(domain)
1894+
else:
1895+
auth['Buffer'] = b'MYHOST\x00' + CompressedUtf8String(domain)
1896+
else:
1897+
auth['Flags'] = NL_AUTH_MESSAGE_NETBIOS_HOST | NL_AUTH_MESSAGE_NETBIOS_DOMAIN
1898+
if workstation != '':
1899+
auth['Buffer'] = b(domain) + b'\x00' + b(workstation) + b'\x00'
1900+
else:
1901+
auth['Buffer'] = b(domain) + b'\x00MYHOST\x00'
18801902
else:
1881-
auth['Buffer'] += b'MYHOST\x00'
1882-
1903+
if workstation != '':
1904+
auth['Buffer'] = b'WORKGROUP\x00' + b(workstation) + b'\x00'
1905+
else:
1906+
auth['Buffer'] = b'WORKGROUP\x00MYHOST\x00'
1907+
18831908
auth['Flags'] |= NL_AUTH_MESSAGE_NETBIOS_HOST_UTF8
1884-
1909+
18851910
if workstation != '':
18861911
auth['Buffer'] += pack('<B',len(workstation)) + b(workstation) + b'\x00'
18871912
else:
18881913
auth['Buffer'] += b'\x06MYHOST\x00'
1889-
1914+
18901915
return auth
18911916

18921917
################################################################################

0 commit comments

Comments
 (0)