8 | 8 |
from nmb.base import NMBSession
|
9 | 9 |
from .utils import convertFILETIMEtoEpoch
|
10 | 10 |
from . import ntlm, securityblob
|
11 | |
from six import b
|
12 | |
import random
|
13 | |
import string
|
14 | |
from Crypto.Cipher import ARC4
|
15 | 11 |
|
16 | 12 |
try:
|
17 | 13 |
import hashlib
|
|
374 | 370 |
self.log.info('Performing NTLMv1 authentication (on SMB2) with server challenge "%s"', binascii.hexlify(server_challenge))
|
375 | 371 |
nt_challenge_response, lm_challenge_response, session_key = ntlm.generateChallengeResponseV1(self.password, server_challenge, True)
|
376 | 372 |
|
377 | |
session_base_key = session_key
|
378 | |
session_sign_key = b("".join([random.choice(string.digits+string.ascii_letters) for _ in range(16)]))
|
379 | |
cipher = ARC4.new(session_key)
|
380 | |
cipher_encrypt = cipher.encrypt
|
381 | |
session_encrypted_key = cipher_encrypt(session_sign_key)
|
382 | |
self.log.info("SMB keys = %s:%s:%s", session_encrypted_key.hex(), session_base_key.hex(), session_sign_key.hex())
|
383 | 373 |
ntlm_data = ntlm.generateAuthenticateMessage(server_flags,
|
384 | 374 |
nt_challenge_response,
|
385 | 375 |
lm_challenge_response,
|
386 | |
session_encrypted_key,
|
|
376 |
session_key,
|
387 | 377 |
self.username,
|
388 | 378 |
self.domain,
|
389 | 379 |
self.my_name)
|
|
406 | 396 |
|
407 | 397 |
if self.is_signing_active:
|
408 | 398 |
self.log.info("SMB signing activated. All SMB messages will be signed.")
|
409 | |
self.signing_session_key = session_sign_key
|
410 | |
self.log.info("SMB signing key = %s", self.signing_session_key.hex())
|
|
399 |
self.signing_session_key = session_key
|
|
400 |
if self.log.isEnabledFor(logging.DEBUG):
|
|
401 |
self.log.info("SMB signing key is %s", binascii.hexlify(self.signing_session_key))
|
|
402 |
|
411 | 403 |
if self.capabilities & CAP_EXTENDED_SECURITY:
|
412 | 404 |
self.signing_challenge_response = None
|
413 | 405 |
else:
|