RDP encryption NLA
NLA: Network Level Authentication
RDP security settings dictate what you can do pre-auth and which clients/attack paths will work. rdp-enum-encryption is the quickest way to see supported security layers and RDP encryption levels on a target.
Nmap encryption probe with rdp-enum-encryption
PORT STATE SERVICE 3389/tcp open ms-wbt-server | Security layer | CredSSP (NLA): SUCCESS | CredSSP with Early User Auth: SUCCESS | Native RDP: SUCCESS | RDSTLS: SUCCESS | SSL: SUCCESS | RDP Encryption level: High | 40-bit RC4: SUCCESS | 56-bit RC4: SUCCESS | 128-bit RC4: SUCCESS | FIPS 140-1: SUCCESS |_ RDP Protocol Version: RDP 5.x, 6.x, 7.x, or 8.x server
This tells you what the server will negotiate, not what you “should” use. Your next move changes based on which entries succeed.
Reading the result in a way that drives next actions
If CredSSP (NLA) is the only thing that succeeds, treat it as NLA enforced for real connections and credential testing. Plan for tooling that supports CredSSP and don’t waste time on classic RDP-only brute clients.
If Native RDP succeeds, the target will negotiate legacy RDP security. That’s where you can sometimes do more pre-auth interaction and where older RDP-era issues tend to be more relevant. It’s also where “grab a screenshot without creds” becomes more likely.
If RDSTLS / SSL succeeds, you’re getting TLS-backed RDP. That’s normal on modern Windows. You can usually pivot to certificate extraction and hostname harvesting from the cert if you need naming context.
If RDP Encryption level is Low or Client Compatible, assume older/looser settings. Prioritize deeper checks for legacy exposure and validate what’s actually reachable with a real client handshake.
If FIPS 140-1 is the only working encryption mode, expect some client/tooling friction. Test with a modern RDP client early so you don’t burn time later.
Confirm what actually works with a real client handshake
Nmap tells you “supported”. A quick FreeRDP negotiation confirms what’s usable from your box and what fails during negotiation.
Try negotiation and let it pick the best mode:
Force specific modes when negotiation is flaky or when you want to prove NLA enforcement:
What changes your next move:
/sec:rdpfails but/sec:nlaworks: treat as NLA enforced and focus on credentialed checks or spraying with tools that support NLA — see RDP Brute Force and Password Spray./sec:rdpsucceeds: NLA is not enforced — document the finding and proceed to RDP NLA Not Enforced./sec:tlsworks but you get hostname/cert clues: pivot into cert-based naming and service mapping.Everything negotiates but auth fails: that’s fine. You’ve confirmed the transport/security mode; move to credential strategy.
Combine with NTLM identity leakage in one pass
If you want a single pre-auth profile (naming + security posture), run both scripts:
PORT STATE SERVICE 3389/tcp open ms-wbt-server | rdp-ntlm-info: | Target_Name: W2016 | NetBIOS_Domain_Name: W2016 | NetBIOS_Computer_Name: W16GA-SRV01 | DNS_Domain_Name: W2016.lab | DNS_Computer_Name: W16GA-SRV01.W2016.lab | DNS_Tree_Name: W2016.lab | Product_Version: 10.0.14393 |_ System_Time: 2019-06-13T10:38:35+00:00 | Security layer | CredSSP (NLA): SUCCESS | CredSSP with Early User Auth: SUCCESS | Native RDP: SUCCESS | RDSTLS: SUCCESS | SSL: SUCCESS | RDP Encryption level: High | 40-bit RC4: SUCCESS | 56-bit RC4: SUCCESS | 128-bit RC4: SUCCESS | FIPS 140-1: SUCCESS |_ RDP Protocol Version: RDP 5.x, 6.x, 7.x, or 8.x server
If rdp-ntlm-info returns domain/host naming, set $DOMAIN from DNS_Domain_Name and use that consistently across SMB/LDAP/Kerberos work.
If NLA is disabled: quick screenshot of the login UI
When the probe suggests non-NLA access is viable, grabbing the login screen can confirm hostname/domain branding and sometimes exposes local/user hints.
If that works, it’s strong confirmation that NLA is not enforced and you can prioritize pre-auth RDP interaction paths.
Timeouts and noisy targets
Some RDP endpoints are slow or weird during negotiation. If the script is dragging, set a hard cap so your scan doesn’t stall:
References
-
rdp-enum-encryption NSE scriptnmap.org/nsedoc/scripts/rdp-enum-encryption.html (opens in new tab)
Supported security layers and encryption levels enumeration
-
rdp-ntlm-info NSE scriptnmap.org/nsedoc/scripts/rdp-ntlm-info.html (opens in new tab)
NTLM info extraction over RDP pre-auth
-
NetExec RDP screenshot without NLAwww.netexec.wiki/rdp-protocol/screenshot-without-nla-not-connected (opens in new tab)
--nla-screenshot usage and behavior
-
NetExec RDP module referencekb.offsec.nl/tools/framework/netexec/nxc-rdp (opens in new tab)
Flags including --port and screenshot options
Was this helpful?
Your feedback helps improve this page.