MCPcopy
hub / github.com/fortra/impacket / smbComTreeConnectAndX

Method smbComTreeConnectAndX

impacket/smbserver.py:2400–2473  ·  view source on GitHub ↗
(connId, smbServer, SMBCommand, recvPacket)

Source from the content-addressed store, hash-verified

2398
2399 @staticmethod
2400 def smbComTreeConnectAndX(connId, smbServer, SMBCommand, recvPacket):
2401 connData = smbServer.getConnectionData(connId)
2402
2403 resp = smb.NewSMBPacket()
2404 resp['Flags1'] = smb.SMB.FLAGS1_REPLY
2405 resp['Flags2'] = smb.SMB.FLAGS2_EXTENDED_SECURITY | smb.SMB.FLAGS2_NT_STATUS | smb.SMB.FLAGS2_LONG_NAMES | \
2406 recvPacket['Flags2'] & smb.SMB.FLAGS2_UNICODE
2407
2408 resp['Tid'] = recvPacket['Tid']
2409 resp['Mid'] = recvPacket['Mid']
2410 resp['Pid'] = connData['Pid']
2411
2412 respSMBCommand = smb.SMBCommand(smb.SMB.SMB_COM_TREE_CONNECT_ANDX)
2413 respParameters = smb.SMBTreeConnectAndXResponse_Parameters()
2414 respData = smb.SMBTreeConnectAndXResponse_Data()
2415
2416 treeConnectAndXParameters = smb.SMBTreeConnectAndX_Parameters(SMBCommand['Parameters'])
2417
2418 if treeConnectAndXParameters['Flags'] & 0x8:
2419 respParameters = smb.SMBTreeConnectAndXExtendedResponse_Parameters()
2420
2421 treeConnectAndXData = smb.SMBTreeConnectAndX_Data(flags=recvPacket['Flags2'])
2422 treeConnectAndXData['_PasswordLength'] = treeConnectAndXParameters['PasswordLength']
2423 treeConnectAndXData.fromString(SMBCommand['Data'])
2424
2425 errorCode = STATUS_SUCCESS
2426
2427 ## Process here the request, does the share exist?
2428 UNCOrShare = decodeSMBString(recvPacket['Flags2'], treeConnectAndXData['Path'])
2429
2430 # Is this a UNC?
2431 if ntpath.ismount(UNCOrShare):
2432 path = UNCOrShare.split('\\')[3]
2433 else:
2434 path = ntpath.basename(UNCOrShare)
2435
2436 share = searchShare(connId, path, smbServer)
2437 if share is not None:
2438 # Simple way to generate a Tid
2439 if len(connData['ConnectedShares']) == 0:
2440 tid = 1
2441 else:
2442 tid = list(connData['ConnectedShares'].keys())[-1] + 1
2443 connData['ConnectedShares'][tid] = share
2444 connData['ConnectedShares'][tid]['shareName'] = path
2445 resp['Tid'] = tid
2446 # smbServer.log("Connecting Share(%d:%s)" % (tid,path), connData=connData)
2447 else:
2448 smbServer.log("TreeConnectAndX not found %s" % path, logging.ERROR, connData=connData)
2449 errorCode = STATUS_OBJECT_PATH_NOT_FOUND
2450 resp['ErrorCode'] = errorCode >> 16
2451 resp['ErrorClass'] = errorCode & 0xff
2452 ##
2453 respParameters['OptionalSupport'] = smb.SMB.SMB_SUPPORT_SEARCH_BITS
2454
2455 if path == 'IPC$':
2456 respData['Service'] = 'IPC'
2457 else:

Callers

nothing calls this directly

Calls 11

addCommandMethod · 0.95
decodeSMBStringFunction · 0.85
searchShareFunction · 0.85
encodeSMBStringFunction · 0.85
getConnectionDataMethod · 0.80
splitMethod · 0.80
signSMBv1Method · 0.80
setConnectionDataMethod · 0.80
fromStringMethod · 0.45
logMethod · 0.45
decodeMethod · 0.45

Tested by

no test coverage detected