Last updated
Was this helpful?
Last updated
Was this helpful?
An attacker knowing a user's NT hash can use it to authenticate over NTLM (pass-the-hash) (or indirectly over Kerberos with ).
There are many tools that implement pass-the-hash: (Python) (, , ...), (Python), (C), (C), (Python), (Python) and many more.
The Impacket script (Python) has the ability to remotely dump hashes and LSA secrets from a machine (LMhash
can be empty) (see ).
(Python) has the ability to do it on a set of targets. The bh_owned
has the ability to set targets as "owned" in (see ).
(Python) has the ability to do it with higher success probabilities as it offers multiple dumping methods. This tool can set targets as "owned" in . It works in standalone but also as a module (see ).
UAC limits pass-the-hash
UAC (User Account Control) limits which local users can do remote administration operations. And since most of the attacks exploiting pass-the-hash rely on remote admin operations, it affects this technique.
the registry key LocalAccountTokenFilterPolicy
is set to 0
by default. It means that the built-in local admin account (RID-500, "Administrator") is the only local account allowed to do remote administration tasks. Setting it to 1
allows the other local admins as well.
the registry key FilterAdministratorToken
is set to 0
by default. It allows the built-in local admin account (RID-500, "Administrator") to do remote administration tasks. If set to 1
, it doesn't.
In short, by default, only the following accounts can fully take advantage of pass-the-hash:
local accounts : the built-in, RID-500, "Administrator" account
domain accounts : all domain accounts with local admin rights
RDP Pass-the-hash
WinRM enables pass-the-hash
Testers should look out for environments with WinRM enabled. During the WinRM configuration, the Enable-PSRemoting
sets the LocalAccountTokenFilterPolicy
to 1
, allowing all local accounts with admin privileges to do remote admin tasks, hence allowing those accounts to fully take advantage of pass-the-hash.
Machine accounts
The (Python) can be used from a Linux system to operate LDAP queries, add a user to a group and so on (LMhash
can be ffffffffffffffffffffffffffffffff
).
(C) has the ability to do pass-the-hash for opening RDP sessions.
must be enabled to allow pass-the-hash attacks over RDP.
It is disabled by default, but we can enable it via the DisableRestrictedAdmin
registry entry, as follows:
Just like with any other domain account, a machine account's NT hash can be used with pass-the-hash, but it is not possible to operate remote operations that require local admin rights (such as ). These operations can instead be conducted with a since the machine accounts validates Kerberos tickets used to authenticate to a said computer/service.
A domain controller machine account's NT hash can be used with pass-the-hash to .
MITRE ATT&CK™ Sub-technique T1550.002