FLOW^:Pentest Workflow

Pentesting: How Attacks Work

A single-page beginner guide to the attacks documented in DAEMONSEC write-ups, DAEMONSEC-VAULT and a supplied report, with interactive diagrams and tool links.

beginnerupdated 2026-10-11Nmap · NetExec · Impacket · BloodHound

Pentesting: How Attacks Work

A penetration test asks whether someone can cross a security boundary, shows how that happens, and explains how to fix it. Start with the account, resource and permission at each step. A tool automates a request; understanding why the server accepts it is what lets you choose a useful next step.

This page brings together the attacks and supporting techniques in the reviewed DAEMONSEC machine write-ups, university reports and DAEMONSEC-VAULT notes, plus examples from the supplied 198-page Red Block report. Each entry explains the mechanism, required conditions, evidence and fix. Report examples and partial notes are labelled separately. All examples are for agreed test scope or lab systems.

How to read: learn the foundations, choose an attack family, then follow a tool link for commands. Each diagram reads left to right on a wide screen and top to bottom on a phone. Open a step to see what happens there. Everything stays on this page; opening a tool card is optional.

Foundations: what you are testing

The boundaries

An application has users and roles; an operating system has process identities and file permissions; a domain has accounts and delegated rights. They overlap without being identical. A web administrator might execute code as a low-privilege service, and a local Windows administrator might have no domain administrative rights.

TermMeaningCommon mistake
Target and scopeThe hosts, accounts, techniques and times agreed for the testTreating a discovered neighbour as automatically included
Service and portA program reachable through a network endpointAn open port proves reachability, not vulnerability
DNS name and vhostDNS selects an address; HTTP Host routing selects an applicationAssuming every app on one IP shows the same site
AuthenticationProving an identity with a password, key, ticket or certificateA successful login does not prove administrator rights
AuthorisationDeciding which actions that identity may performMistaking visibility for write or execution permission
Session and tokenA web session or OS token carries the current identity and rightsA new group membership may need a fresh session/token
VulnerabilityA defect or unsafe permission that can cross a boundaryA scanner label is a candidate, not a proven exploit
FootholdInitial useful access, such as a shell or valid accountA shell can still be a restricted service identity
Privilege escalationGaining a more powerful identity or operationLocal root/SYSTEM is not automatically domain control
Lateral movementUsing established access to reach another identity or hostNetwork access alone does not supply its credentials
PivotA tunnel, route or proxy through an accessible hostA working tunnel does not bypass the destination’s login
ImpactThe concrete data or action that became accessibleA callback alone does not describe business impact

A repeatable workflow

Agree scope and evidence handling, discover hosts, enumerate services, validate a candidate weakness, prove the smallest useful impact, then clean up and report. A new password or route sends you back to enumeration. Real paths loop; they are not a mandatory sequence of exploits.

A test is a sequence of questions
  1. What can I reach?

    Discover hosts and services; record source, time and route.

  2. What does this identity control?

    Enumerate a specific resource and verify a suspected boundary failure.

  3. What changed, and how is it fixed?

    Capture minimal proof, restore changes and explain the corrective action.

Passwords, hashes, challenges and keys

A password is the secret a user supplies. A stored password verifier is a one-way representation used to check guesses. Offline cracking tests candidates against a captured verifier without sending each guess to the target. Online guessing sends attempts to a service and can trigger account lockout.

An NT hash is a particular password-derived key used by Windows authentication. NetNTLMv2 is a challenge-response exchange captured from network authentication: it can be cracked or relayed under the right conditions, but is not directly the NT hash used for pass-the-hash. An SSH private key or a certificate’s private key is another kind of authentication secret. File encryption passwords, login passwords and database hashes may all be different values.

Active Directory and Kerberos, from the beginning

Active Directory stores accounts, groups, computers and permissions. A domain controller (DC) hosts directory and authentication services. A SID identifies a security principal; a UPN is a user-style name. Names can change without creating a new SID. Nested groups and object permissions can give an account useful rights even when its group list does not say Domain Admins.

Kerberos uses the DC’s KDC to issue a TGT (a ticket for asking for other tickets) and TGS/service tickets (tickets for a particular service). An SPN names that service. Ticket requests, service account keys and delegated impersonation are distinct parts of a chain. Correct time and name resolution matter.

AD CS is certificate infrastructure. A CA issues certificates using a template’s rules. A certificate plus its private key may authenticate an account if its purpose, trust and identity mapping are accepted. Enrolment, requesting another identity and successfully authenticating as that identity are three separate checks. Historical weak-mapping examples may fail on patched domains with strong mapping enforced.

Linux and Windows privileges

Linux file owner/group/mode checks, sudo rules, SUID bits and capabilities determine what a process can do. A special mode bit alone is not proof of a usable escalation; the program must preserve or exercise the privilege in a reachable operation.

Windows uses tokens, groups, privileges and resource ACLs. SeBackupPrivilege, SeImpersonatePrivilege and SeTcbPrivilege have different operations and prerequisites. A disabled privilege can already be present; an absent privilege cannot be created just by toggling a token flag. Windows SYSTEM is a local service identity, distinct from a domain administrator.

Minimal evidence and cleanup

Record the starting identity, exact resource, relevant permission, request/command and observed result. Prefer a harmless marker, identity query or one permitted sample record to a bulk dump. Confirm the result from a fresh session where needed. Restore changed SPNs, UPNs, group memberships, ACLs, services, uploaded plugins and test files. A failed callback may be a listener or route problem; a claimed vulnerability still needs independent proof.

Find an attack family

Credentials and exposed data

Anonymous SMB, LDAP and FTP access | NFS export and file-permission abuse | SNMP information disclosure | Credentials in files, directory attributes and history | Cleartext authentication interception | Offline password, key and vault cracking | Online brute force and default credentials | Password spraying | Password reuse and local/domain identity confusion | Forced authentication and NetNTLM capture | DNS zone-transfer disclosure | Cisco type 7 decoding and type 5 cracking

Anonymous SMB, LDAP and FTP access

A service accepts a guest or unauthenticated identity and gives it more information than intended. SMB can expose files, LDAP can expose directory objects, and FTP can expose downloads. Enumeration turns that disclosure into usernames, programs or configuration to investigate; an anonymous connection alone does not mean administrative access.

Needs: The service must allow that identity to read the particular share, directory query or file. Permissions differ between listing a share and opening it.

Anonymous SMB, LDAP and FTP access - how it works
  1. Ask without a login

    The server maps the request to anonymous or guest.

  2. Read what that identity can reach

    Collect a user list or a relevant file, rather than assuming all data is readable.

  3. Use the new information

    A username or configuration file suggests the next test; it is not automatically a shell.

Evidence: A specific file or query result is returned without an authorised account. Record the access identity and resource.

Fix: Remove unnecessary guest access and grant read permissions only to the principals that need them.

Documented example: Support, Forest, Timelapse (DAEMONSEC-VAULT). Tool commands.

NFS export and file-permission abuse

NFS lets a client mount a remote directory as part of its own filesystem. An overly broad export can expose sensitive files. With AUTH_SYS the server uses client-supplied numeric user and group IDs; poorly restricted mappings can let a client read another user’s files. This is different from breaking encryption.

Needs: A reachable export, matching export restrictions and a usable identity mapping. root_squash maps client root to an anonymous identity; it does not repair an export that is readable by another allowed UID.

NFS export and file-permission abuse - how it works
  1. Mount the permitted export

    Start read-only so inspection does not alter the server.

  2. Server checks numeric identity

    Export rules, squashing and file modes decide what the client can read.

  3. Sensitive file becomes readable

    An exposed password verifier can be tested offline, as in the ACME assessment.

Evidence: An otherwise protected file is readable through the export. A visible export list alone is insufficient.

Fix: Restrict clients and paths, enforce file ownership, use root squashing, and prefer authenticated NFS security where appropriate.

Documented example: CMP314. Tool commands.

SNMP information disclosure

SNMP exposes management information such as interfaces and running processes. A guessable community string on older SNMP versions acts like a shared access token. If a process was started with a password on its command line, the management data can disclose that password.

Needs: SNMP read access and an exposed object containing useful data. A community string permitting reads does not necessarily permit configuration changes.

SNMP information disclosure - how it works
  1. Read management objects

    The agent accepts the community or configured SNMP identity.

  2. Inspect process and interface data

    Management output may reveal arguments, routes or services.

  3. A secret or route is disclosed

    Pandora's note records credentials obtained from process information.

Evidence: The response includes the actual sensitive argument or management information, with the credential redacted in evidence.

Fix: Restrict management access, use SNMPv3 authentication/privacy, and keep secrets out of command-line arguments.

Partial note: Pandora (DAEMONSEC-VAULT).

Credentials in files, directory attributes and history

A password stored in an accessible file is already known to anyone who can read that file. Common locations in your work were spreadsheets, installation configurations, scripts, AD description/info fields, PowerShell history, setup logs, application environment files and AutoLogon settings. This is disclosure, rather than cryptographic cracking.

Needs: Read access to the exact resource. Registry ACLs and the way AutoLogon was configured matter; not every Windows host stores a readable plaintext AutoLogon password.

Credentials in files, directory attributes and history - how it works
  1. Read in the current identity

    Check what your account can access, including less prominent fields and history.

  2. Identify the secret and its owner

    A database password or local username may belong to a different authentication realm.

  3. Validate one scoped use

    Test the intended service and verify which account actually logged in.

Evidence: A redacted source location and a confirmed login as the expected principal. A string that looks like a password is only a lead.

Fix: Use secret stores, remove credentials from notes/history, limit read permissions and rotate any exposed secrets.

Documented example: EscapeTwo, Support, Sauna, Cicada (DAEMONSEC-VAULT), Resolute (DAEMONSEC-VAULT), Timelapse (DAEMONSEC-VAULT), MetaTwo, Zephyr (DAEMONSEC-VAULT). Tool commands.

Cleartext authentication interception

Protocols such as unprotected FTP, Telnet and LDAP simple bind can send reusable passwords over the network. A packet capture or a service endpoint under your control can expose them. Support involved observing a downloaded program’s LDAP bind; Return redirected a printer’s configured LDAP server to a listener.

Needs: An unencrypted authentication exchange visible at the capture point, or control of a destination that a client will authenticate to. TLS-protected traffic is not readable merely because packets were captured.

Cleartext authentication interception - how it works
  1. Client starts a login

    The application sends authentication to the selected server.

  2. Password crosses without transport protection

    The capture or listener sees the plaintext protocol fields.

  3. Validate the disclosed credential

    The observed service identity can be tested against its actual permitted services.

Evidence: The trace identifies the protocol and account, and shows an unprotected credential field. Preserve a redacted extract.

Fix: Use protected transport, validate server certificates and lock down applications’ authentication destinations.

Documented example: Support, Return (DAEMONSEC-VAULT), Cap (DAEMONSEC-VAULT), CMP314.

Offline password, key and vault cracking

An attacker takes a password verifier or encrypted container away and tests guesses locally. Each guess is hashed or used to derive a decryption key, then checked against the stolen data. Slow, salted password functions make this expensive; they do not rescue a weak password that is already in the candidate list.

Needs: A readable hash, challenge-response or supported encrypted ZIP, PFX, SSH key, KeePass database or PGP key. Formats and KDFs differ; selecting a mode by filename alone is unreliable.

Offline password, key and vault cracking - how it works
  1. Extract the correct verifier

    John extractors turn supported containers into records suitable for the chosen cracker.

  2. Test candidate secrets locally

    The tool derives and compares values; no target login is needed for each guess.

  3. Validate the recovered secret

    Open the original container or authenticate once to the intended service.

Evidence: The original key, archive or database opens, or a controlled login succeeds. A cracker’s output alone is not enough.

Fix: Use long unique secrets, strong supported KDFs and strict access controls on encrypted stores and password hashes.

Documented example: Builder, MetaTwo, Postman, Jeeves, Timelapse (DAEMONSEC-VAULT), GoodGames (DAEMONSEC-VAULT), CMP314, Sauna, Forest, Fluffy, TombWatcher, Red Block pp. 136-139, 157-161. Tool commands.

Online brute force and default credentials

Online guessing submits candidate passwords to the real login service. Brute force commonly tests many guesses for one account; default-credential testing checks the vendor’s initial login. These requests reach the target, consume resources and can trigger lockout. Hydra does not crack a remote password hash when it submits logins.

Needs: A reachable login and a scoped attempt budget based on the lockout policy. A reliable success/failure detector is essential for web forms.

Online brute force and default credentials - how it works
  1. Choose an account and candidate set

    Use the policy and identified application to constrain the test.

  2. Service evaluates each login

    Rate limits, MFA and lockout can stop guessing.

  3. Confirm one successful session

    Verify the effective account and stop the successful test.

Evidence: An authenticated session or service response proves the credential, not just a different HTTP response length.

Fix: Remove defaults, apply rate limiting and monitored lockout controls, use MFA, and require unique strong passwords.

Documented example: Jerry (DAEMONSEC-VAULT), BoardLight (DAEMONSEC-VAULT), CMP210, CMP314, CMP319. Tool commands.

Password spraying

Spraying tries a small number of plausible passwords across multiple usernames. It exploits password reuse and predictable choices while spreading attempts across accounts. It can still lock accounts: retries across different services may accumulate against the same directory policy.

Needs: A username list, a defensible candidate and a known attempt policy. Validating an already recovered password against its known owner is credential validation, not automatically spraying.

Password spraying - how it works
  1. One candidate, several accounts

    The test is organised around a password rather than a long per-user list.

  2. Respect the account policy

    Track total attempts per account across services and time windows.

  3. A matching account is found

    Check the realm and which services that identity is authorised to use.

Evidence: A verified matching identity and service. A successful SMB login does not imply WinRM or administrative access.

Fix: Use unique passwords and MFA, monitor cross-account login patterns and remove credentials from descriptions or shares.

Documented example: Support, EscapeTwo, Cicada (DAEMONSEC-VAULT), Resolute (DAEMONSEC-VAULT), Zephyr (DAEMONSEC-VAULT). Tool commands.

Password reuse and local/domain identity confusion

A secret recovered for one purpose also works somewhere else: a key passphrase may be a local password, a database password may work over SSH, or the same username may have a separate local and domain account. Those accounts have different SIDs and permissions even when their visible names match.

Needs: The second account actually shares the secret and accepts the chosen authentication method. Username similarity is not proof of a shared account.

Password reuse and local/domain identity confusion - how it works
  1. Recover a secret from one context

    Identify whether it came from a database, vault, service or local account.

  2. Test the intended second realm

    Explicitly distinguish the local machine from the domain.

  3. A new identity opens new access

    Repeat enumeration because permissions have changed.

Evidence: The effective account SID/name and realm match the intended login. Your working directory does not prove administrator rights.

Fix: Use unique credentials, managed service accounts and local administrator password rotation; restrict cross-service logon.

Documented example: Postman, MetaTwo, EscapeTwo, GoodGames (DAEMONSEC-VAULT), BoardLight (DAEMONSEC-VAULT), Papers (DAEMONSEC-VAULT), Zephyr (DAEMONSEC-VAULT).

Forced authentication and NetNTLM capture

A file or application feature makes Windows connect to an attacker-controlled network path. The client may attempt NTLM authentication automatically. Responder receives a challenge-response, commonly NetNTLMv2. That response can support offline guessing; it is not the reusable NT hash accepted by pass-the-hash.

Needs: A processing trigger, outbound connectivity and a client permitted to use NTLM. In your notes the triggers included Media playlists, Fluffy library files and Zephyr PDFs.

Forced authentication and NetNTLM capture - how it works
  1. Place a remote resource reference

    The file points to a network location the tester controls.

  2. A client processes the file

    Its network request can trigger authentication in that client's security context.

  3. Capture the challenge-response

    Crack a weak password offline or investigate a separate eligible relay target.

Evidence: An authentication exchange arrives from the expected client. Capture, cracking and relay are three separate outcomes.

Fix: Patch the triggering flaw, restrict outbound SMB/NTLM and avoid automatic authentication to untrusted resources.

Documented example: Media, Fluffy, Zephyr (DAEMONSEC-VAULT), Red Block pp. 80-89. Tool commands.

DNS zone-transfer disclosure

AXFR copies a DNS zone from an authoritative server. It is intended for authorised secondary servers. If an unrelated client can transfer it, internal naming and address information can be disclosed in bulk. This provides discovery leads rather than a login or command execution.

Needs: A reachable authoritative server that allows the client to transfer the specific zone.

DNS zone-transfer disclosure - how it works
  1. Request the whole zone

    The client sends AXFR for the exact zone.

  2. Server permits the transfer

    Its transfer policy accepts a client outside the intended secondary set.

  3. Map the disclosed names

    Validate which records still resolve and which services are reachable.

Evidence: A completed transfer with the expected SOA boundaries and records. A denied or interrupted request is not success.

Fix: Restrict transfers to approved secondaries and authenticate them where supported.

Report example: Red Block pp. 9. Tool commands.

Cisco type 7 decoding and type 5 cracking

Type 7 configuration passwords are reversibly obfuscated. A reader can decode them without guessing. Type 5 enable secrets are MD5-crypt verifiers and require offline candidate testing. They have different mechanisms even when found in the same leaked router configuration.

Needs: Readable configuration and an intact supported record; password reuse elsewhere is a separate condition.

Cisco type 7 decoding and type 5 cracking - how it works
  1. Read the stored credential type

    Identify type 7 versus type 5 before choosing a tool.

  2. Decode or test candidates

    Reversible obfuscation yields plaintext; a one-way verifier requires guessing.

  3. Validate the credential role

    A router login, enable secret and application password are distinct roles.

Evidence: A decoded or recovered value confirmed for its original role.

Fix: Protect configuration backups, use supported strong storage and rotate exposed secrets.

Report example: Red Block pp. 23-27. Tool commands.

Web attacks

IDOR and missing object authorisation | SQL injection | Reflected cross-site scripting | Stored cross-site scripting | Path traversal and local file inclusion | XML external entity injection | Server-side request forgery | Server-side template injection | Operating-system command injection | Shellshock in Bash-backed CGI | API role modification and broken function authorisation | Jenkins CLI arbitrary file read | CMS configuration and draft disclosure | Unsafe deserialization | Zabbix SAML session bypass | Invitation bypass through format-only validation | Upload plus PHP file inclusion | Webmin privileged file-write escalation

IDOR and missing object authorisation

An application uses a caller-controlled identifier to choose a record or file, but does not check whether the caller may access that specific object. Changing the identifier then reads someone else’s resource. Predictable IDs make testing easier, but the vulnerability is the missing authorisation check.

Needs: At least one resource that your test identity should not be able to read or change. Using a random UUID does not replace an ownership check.

IDOR and missing object authorisation - how it works
  1. Request your own object

    Establish the expected access with one session.

  2. Change the object identifier

    The server retrieves another object without checking your relationship to it.

  3. Observe unauthorised data

    Cap exposed another capture containing a cleartext FTP login.

Evidence: The same caller obtains a resource belonging to another identity. Use controlled accounts when available.

Fix: Check object ownership or policy on every server-side access, independently of the identifier format.

Documented example: Cap (DAEMONSEC-VAULT).

SQL injection

SQL injection happens when untrusted input changes the structure of a database query instead of remaining a parameter value. A modified predicate can bypass a login; a UNION or other extraction technique can return extra data. The permissions of the application’s database account limit the impact.

Needs: An input reaching an unsafe query, the correct database syntax and a observable response or inference channel. A nonce or logged-in session may be required by the endpoint without preventing injection.

SQL injection - how it works
  1. Input joins query text

    The application concatenates data into SQL syntax.

  2. The database interprets new structure

    The supplied value changes filtering or adds data retrieval.

  3. Application exposes the result

    Rows, errors or timing can reveal information outside the intended query.

Evidence: A controlled data or logic change repeatably linked to the input. A generic server error is not confirmation.

Fix: Use prepared statements with bound values, allowlist dynamic identifiers and minimise database permissions.

Documented example: MetaTwo, GoodGames (DAEMONSEC-VAULT), Pandora (DAEMONSEC-VAULT), CMP319. Tool commands.

Reflected cross-site scripting

The server immediately places input into a response without the correct encoding for that HTML or JavaScript context. When a browser interprets the result, attacker-supplied content executes in the application’s origin. This affects the visiting browser, rather than inherently executing a command on the web server.

Needs: An executable reflection context and a victim visiting the crafted request. Browser controls and CSP can change what a payload can do.

Reflected cross-site scripting - how it works
  1. Submit crafted input

    A URL or form parameter carries the test markup.

  2. Server reflects it unsafely

    The response treats the input as page syntax.

  3. Browser executes it in the site origin

    A benign proof demonstrates script execution in the correct context.

Evidence: A harmless controlled action executes in the browser. Merely finding the text in the source is not sufficient.

Fix: Apply context-specific output encoding, safe DOM APIs and an effective CSP as additional protection.

Documented example: CMP319. Tool commands.

Stored cross-site scripting

Stored XSS persists untrusted content in a comment, profile or other saved record. The application later renders that content as executable browser code. One submission can affect multiple readers because the vulnerable output is served whenever the saved record is displayed.

Needs: A writable field and an unsafe output context when another session views the saved data.

Stored cross-site scripting - how it works
  1. Save the crafted value

    The application stores the attacker's input.

  2. Another session loads the record

    A legitimate page includes the saved content.

  3. Browser interprets it as code

    The vulnerable render crosses the data-to-code boundary.

Evidence: A second controlled session executes a benign proof after loading the saved record. Remove the test value afterwards.

Fix: Encode at the final output context, sanitise permitted rich HTML with a maintained library and remove stored payloads.

Documented example: CMP319. Tool commands.

Path traversal and local file inclusion

Path traversal lets a filename escape its intended directory. Local file inclusion occurs when an application includes an attacker-selected local file in its execution/rendering path. Both can disclose data, but reading a file is not itself proof of code execution. Papers’ bot used directory traversal; Bumtree had a file-inclusion input.

Needs: A controllable path reaching file handling and filesystem read rights in the application’s identity.

Path traversal and local file inclusion - how it works
  1. Supply a path

    The input selects which file the application opens.

  2. Path escapes the allowed location

    Normalisation and authorisation fail to confine the operation.

  3. Service reads or includes the file

    The response discloses content or processes it in an inclusion context.

Evidence: A benign file outside the permitted directory is returned. Report read-only disclosure separately from any proven execution.

Fix: Resolve allowed file IDs server-side, canonicalise paths, enforce a directory allowlist and minimise filesystem privileges.

Documented example: Papers (DAEMONSEC-VAULT), CMP319.

XML external entity injection

An XML parser resolves an attacker-supplied external entity as a file or URL. The parser then accesses that resource with the server process’s privileges. In MetaTwo, XML inside WAV metadata was the entry point; the result was file disclosure, not a WAV codec memory exploit.

Needs: An XML parsing route with external entity resolution enabled and a visible or out-of-band result channel.

XML external entity injection - how it works
  1. Upload XML-bearing content

    A file or request causes the backend to parse attacker-influenced XML.

  2. Parser resolves an external entity

    It opens a local file or contacts the declared remote resource.

  3. File content reaches the test channel

    The parser's output or callback discloses data the caller could not directly read.

Evidence: A controlled file marker or callback confirms resolution in the target’s context. A DNS lookup alone proves only that lookup.

Fix: Disable external entities/DTDs, restrict parser network access and patch the affected parsing dependency.

Documented example: MetaTwo.

Server-side request forgery

SSRF makes the server send a request to a destination chosen by an untrusted caller. Because the server is on a different network, it may reach services the tester cannot reach directly. Sau’s Request Baskets instance became a forwarding route to a localhost Maltrail service.

Needs: A controllable destination and a permitted network route from the requesting server. An SSRF response is not automatically a shell.

Server-side request forgery - how it works
  1. Choose a forwarding destination

    The attacker controls a URL the application fetches.

  2. Server makes the request

    The connection comes from the backend's network position.

  3. Internal service becomes reachable

    A separate vulnerability in that service can then be tested.

Evidence: A unique controlled callback or the internal service’s response establishes the server-side request.

Fix: Allowlist destinations and schemes, revalidate redirects and resolved addresses, and restrict backend egress.

Documented example: Sau (DAEMONSEC-VAULT).

Server-side template injection

A template engine treats user input as template source instead of data supplied to a trusted template. An expression may be evaluated by the server; in an unsafe engine context that evaluation can reach objects or functions capable of command execution. GoodGames used a Flask/Jinja route.

Needs: Input that is compiled as a template and an engine/context with exploitable capabilities. A rendered expression alone does not prove arbitrary command execution.

Server-side template injection - how it works
  1. Input enters template source

    The application builds a template from an untrusted value.

  2. Engine evaluates the expression

    The expression is interpreted in the backend runtime.

  3. Runtime capability is reached

    An unsafe context can expose functions, files or process execution.

Evidence: A repeatable harmless expression result establishes evaluation; a separate identity marker establishes execution if tested.

Fix: Keep templates fixed and pass input as values. Use restricted contexts and avoid exposing powerful runtime objects.

Documented example: GoodGames (DAEMONSEC-VAULT).

Operating-system command injection

An application combines untrusted data with a shell command. The shell interprets part of that value as command syntax, allowing an additional operation in the application’s OS identity. Authentication requirements vary: TwoMillion needed application-admin access, Maltrail did not, and Webmin required an eligible authenticated user.

Needs: An unsafe shell call reachable by the current identity and a payload matching its quoting/context.

Operating-system command injection - how it works
  1. Supply a command argument

    A normal field carries attacker-controlled text.

  2. Application invokes the shell unsafely

    The shell processes separators, substitutions or other syntax.

  3. Extra operation runs as the service

    The resulting OS account is the service account, unless it was already privileged.

Evidence: A benign identity or unique marker proves execution. Do not infer root from the web application’s administrator role.

Fix: Avoid the shell, use fixed executable paths and argument arrays, validate allowed inputs and run services with minimal privileges.

Documented example: TwoMillion (DAEMONSEC-VAULT), Sau (DAEMONSEC-VAULT), Postman.

Shellshock in Bash-backed CGI

Shellshock is a historical Bash environment-parsing flaw. A CGI server turns request fields such as headers into environment variables. When a vulnerable Bash process starts, crafted function-like environment content can execute appended commands. The CGI-to-Bash handoff is the critical connection.

Needs: An unpatched Bash parser and a request path that starts Bash with attacker-influenced environment variables. An Apache banner alone does not establish either condition.

Shellshock in Bash-backed CGI - how it works
  1. HTTP header becomes CGI environment

    The web server passes request metadata to a CGI process.

  2. Vulnerable Bash parses the value

    The old parser executes content beyond a function definition.

  3. CGI identity runs the operation

    A command executes under the web/CGI service account.

Evidence: CMP314 records a harmless command response and a subsequent session. CMP319 has a scanner finding, not the same depth of proof.

Fix: Patch Bash, remove unnecessary CGI handlers and minimise the CGI account’s access.

Evidence differs by source: CMP314, CMP319.

API role modification and broken function authorisation

An endpoint accepts a sensitive field such as an administrator flag from a caller who should not control it. The server trusts the submitted change instead of deriving permission from trusted state. In TwoMillion, modifying the role unlocked another endpoint whose command injection was a separate flaw.

Needs: A reachable role-setting function with missing permission checks or unsafe field binding. Discovering an admin URL does not mean it can be used.

API role modification and broken function authorisation - how it works
  1. Ordinary account calls sensitive endpoint

    The caller supplies a property it should not be allowed to edit.

  2. Server accepts the role change

    Authorisation does not reject the function or field.

  3. New role unlocks more functions

    Test the effective role independently, then assess those functions.

Evidence: The role changes in trusted server state and an otherwise denied function becomes usable.

Fix: Authorise every function, allowlist editable properties and derive privileged roles exclusively from trusted server decisions.

Documented example: TwoMillion (DAEMONSEC-VAULT).

Jenkins CLI arbitrary file read

Jenkins’ affected CLI parser expands arguments beginning with @ into local file contents. A command’s error output can echo part of that content back to the caller. Builder used this to read a stored password hash, then cracked it; disclosure and password recovery were separate steps.

Needs: The affected CLI/argument-expansion behaviour, a reachable transport and a command that reveals useful expanded content. Access and number of returned lines depend on the command and permissions.

Jenkins CLI arbitrary file read - how it works
  1. CLI argument names a server file

    The parser receives an @-prefixed argument.

  2. Parser expands file contents

    The file is read as the Jenkins OS account.

  3. Command output reveals content

    An error or response exposes some of the substituted lines.

Evidence: A benign file marker appears in the CLI response. Record the command, transport and returned portion.

Fix: Upgrade Jenkins or apply the vendor’s mitigation and restrict CLI access.

Documented example: Builder.

CMS configuration and draft disclosure

A CMS access-control flaw exposes configuration or unpublished content to an unauthorised caller. Devvortex’s Joomla API disclosed configuration; Papers’ WordPress route disclosed a draft containing another service location. Information disclosure can start a chain even when it gives no immediate command execution.

Needs: The affected endpoint, version/configuration and an access level that should be denied the data.

CMS configuration and draft disclosure - how it works
  1. Request a restricted object

    The endpoint exposes an internal configuration or draft route.

  2. Access check fails

    Data intended for administrators or authors is returned.

  3. Disclosure guides the next step

    A secret or service location can be independently validated.

Evidence: The response contains a controlled restricted item while unauthorised. A version match is only a reason to test.

Fix: Patch the CMS, protect administrative/API routes and keep reusable secrets out of public-facing stores.

Documented example: Devvortex (DAEMONSEC-VAULT), Papers (DAEMONSEC-VAULT).

Unsafe deserialization

Deserialization reconstructs runtime objects from a message. If untrusted input can choose dangerous object types or relationships, reconstruction can invoke a chain of methods with unwanted effects. The Interpreter note records a Mirth Connect pre-authentication RCE test; its borrowed walkthrough material is not evidence of every described later step.

Needs: An unsafe deserializer, an appropriate available gadget chain and a reachable parser before the necessary protection. XML syntax by itself does not imply XXE or deserialization RCE.

Unsafe deserialization - how it works
  1. Send a crafted object description

    The message describes more than simple validated data.

  2. Deserializer constructs the graph

    Object construction or later processing invokes unsafe methods.

  3. Method chain causes an effect

    A matching vulnerable runtime may perform file or process operations.

Evidence: A benign controlled effect in the server context. The vault records a Metasploit shell for the initial Mirth step.

Fix: Use strict data schemas and safe types, avoid native deserialization of untrusted data, and install the vendor fix.

Partial note: Interpreter (DAEMONSEC-VAULT).

Zabbix SAML session bypass

CVE-2022-23131 affected how Zabbix stored SAML session state on the client. Altering trusted session data could let an attacker authenticate as another known user. Zephyr’s note records generating a cookie, placing it in the browser and entering the SSO flow. This is a Zabbix session flaw, distinct from forging a signed AD FS assertion.

Needs: An affected Zabbix instance with SAML SSO enabled and the required user information. Generic SAML use does not imply this weakness.

Zabbix SAML session bypass - how it works
  1. Modify client-held session data

    The crafted state names a different user.

  2. Affected SSO flow trusts the state

    The frontend accepts identity information it should not trust.

  3. Verify the resulting application session

    Check which Zabbix user and role the server actually assigned.

Evidence: A session is authenticated as the intended test user. A locally generated cookie is not proof until the server accepts it.

Fix: Apply the Zabbix security update and invalidate exposed sessions; keep session identity decisions server-side.

Documented example: Zephyr (DAEMONSEC-VAULT).

Invitation bypass through format-only validation

A format check proves that a value has the right shape. It does not prove the server issued that invitation. The supplied report reads application source and finds a regular expression used as the entire acceptance decision, allowing a made-up matching value to unlock an upload feature.

Needs: An application that uses syntax validation without validating existence, ownership, expiry and intended use.

Invitation bypass through format-only validation - how it works
  1. Inspect the decision

    The application checks a pattern rather than a stored invitation.

  2. Submit a matching unissued value

    The value satisfies syntax but was never authorised.

  3. Application grants the feature

    The session gains access based on the inadequate check.

Evidence: An unissued test invitation unlocks the protected function.

Fix: Validate server-issued tokens and their binding, expiry and one-time use; keep format checking as a preliminary check.

Report example: Red Block pp. 31-38.

Upload plus PHP file inclusion

An upload endpoint can accept script content because it checks only filenames. A separate PHP include vulnerability then executes the uploaded file. The report requests index.php with the uploaded path: PHP inclusion explains execution even if a direct request for the image-like filename would serve it as data.

Needs: Accepted attacker-controlled content, a predictable readable upload path and an include operation able to reach it.

Upload plus PHP file inclusion - how it works
  1. Store content as an image-like filename

    Weak validation accepts script content under a permitted extension.

  2. Point the inclusion parameter at the upload

    The include operation opens the attacker-controlled file.

  3. PHP evaluates embedded code

    Execution occurs under the application service identity.

Evidence: A benign server-side marker via inclusion; a double extension or successful upload alone is insufficient.

Fix: Store uploads outside executable paths, verify file content, and allowlist include destinations.

Report example: Red Block pp. 38-39.

Webmin privileged file-write escalation

A less-privileged Webmin account can cross its assigned boundary if a vulnerable file operation writes as root. A privileged file write can then become command execution. The report labels its final chain CVE-2022-30708 but claims a version beyond the range in the vendor advisory; the version discrepancy remains unresolved.

Needs: An actually affected build and an account with access to the vulnerable operation. A working web login does not establish either condition.

Webmin privileged file-write escalation - how it works
  1. Reach the permitted web module

    The account starts with limited application permissions.

  2. Vulnerable operation writes beyond that boundary

    A privileged backend handles an unauthorised destination.

  3. Privileged execution follows from the write

    The lab demonstration verifies what the written data causes.

Evidence: Evidence of the unauthorised privileged write or process under the tested build; do not infer it from a banner alone.

Fix: Apply vendor fixes and restrict untrusted application users and modules.

Report example: Red Block pp. 197-198. Tool commands.

Services and application trust

Jenkins Script Console execution | Build pipeline and credential-binding abuse | CMS code editing and upload-to-execution | Tomcat Manager application deployment | SQL Server xp_cmdshell execution | Redis persistence-file write to SSH access | Management-console script execution | Liferay and Nexus administrative scripting | Legacy SonarQube plugin loading

Jenkins Script Console execution

The Script Console is deliberately capable of running Groovy code on the Jenkins controller. If an untrusted caller can reach it, normal administrative functionality becomes OS execution as Jenkins’ service account. Jeeves required discovering the application’s sub-path before the exposed console was visible.

Needs: Console access, authorised by a dangerous permission or missing authentication. Discovering a Jenkins installation is not sufficient.

Jenkins Script Console execution - how it works
  1. Reach the Script Console

    The service permits the caller to submit an administrative script.

  2. Controller executes Groovy

    The script has the privileges of the Jenkins process.

  3. Verify the OS identity

    The result is the Jenkins account, which must be enumerated separately.

Evidence: A harmless controller-side identity check returns. Application access and OS privilege are recorded separately.

Fix: Require authentication and strict administrative permissions; keep controller secrets and agent separation protected.

Documented example: Jeeves.

Build pipeline and credential-binding abuse

A pipeline author may be allowed to ask the build system to use stored deployment credentials. If that author can run arbitrary build logic in the credential’s scope, they can often use or expose the credential. Builder used an SSH Agent-bound root key to reach the host.

Needs: Permission to define or modify a job and access to the relevant credential scope or plugin. A visible credential name does not prove the key is available.

Build pipeline and credential-binding abuse - how it works
  1. Job requests a deployment credential

    The build system binds a key or starts an SSH agent for the job.

  2. Untrusted job logic uses that access

    The job can exercise the credential or disclose reachable secret material.

  3. Target accepts the deployment identity

    The stored credential's remote permissions define the impact.

Evidence: A controlled authenticated operation to the authorised target proves the binding’s reach. Printing a key is unnecessary for many tests.

Fix: Separate job authors from privileged credential scopes, isolate agents and use narrowly scoped deployment identities.

Documented example: Builder.

CMS code editing and upload-to-execution

A CMS administrator may edit server-side templates or create executable pages. A role intended to manage content can therefore become OS code execution if it also controls code. Devvortex used Joomla template editing; BoardLight used the Dolibarr PHP execution flaw. Acceptance of an uploaded file alone does not establish execution.

Needs: Code-editing/deployment rights or a specific flaw bypassing those restrictions, plus a server execution route for the written content.

CMS code editing and upload-to-execution - how it works
  1. Modify server-interpreted content

    A template, page or uploaded file receives executable source.

  2. Trigger its execution route

    The web runtime processes the new source.

  3. Code runs as the application account

    The account's filesystem and network rights determine the next opportunities.

Evidence: A harmless server-side marker proves execution at the written location. Save and restore the original content.

Fix: Disable production code editors, separate content from executable files and patch permission-bypass flaws.

Documented example: Devvortex (DAEMONSEC-VAULT), BoardLight (DAEMONSEC-VAULT), Media.

Tomcat Manager application deployment

Tomcat Manager can deploy Java web applications packaged as WAR files. A weak manager login grants that deployment power to an attacker. The deployed application runs as the Tomcat service account; Jerry’s service was highly privileged, but that is not universal.

Needs: Manager deployment rights and a valid WAR/application compatible with the instance.

Tomcat Manager application deployment - how it works
  1. Authenticate to the deployment manager

    A default or recovered credential permits application deployment.

  2. Deploy a test WAR

    Tomcat registers the supplied web application.

  3. Request the application

    Its Java code executes in the Tomcat service context.

Evidence: A controlled application marker and verified service identity. Remove the deployed application after testing.

Fix: Restrict manager reachability and roles, remove default credentials and run Tomcat as an unprivileged account.

Documented example: Jerry (DAEMONSEC-VAULT).

SQL Server xp_cmdshell execution

xp_cmdshell is SQL Server’s facility for invoking operating-system commands. It may be disabled, but a sufficiently privileged SQL login can enable it. Commands run as the SQL service account for sysadmin callers, or the configured proxy for eligible non-sysadmin callers. Database sysadmin does not necessarily equal Windows administrator.

Needs: The SQL permission to use/enable the feature and an eligible service/proxy configuration.

SQL Server xp_cmdshell execution - how it works
  1. Connect with the SQL identity

    The database evaluates the login's SQL permissions.

  2. Invoke permitted command execution

    xp_cmdshell starts an OS process in the configured context.

  3. Enumerate that OS account

    EscapeTwo's resulting service shell exposed another configuration credential.

Evidence: A harmless OS identity result, with feature state and caller privileges recorded.

Fix: Avoid unnecessary SQL sysadmin grants, keep the feature disabled where possible and minimise service/proxy permissions.

Documented example: EscapeTwo.

Redis persistence-file write to SSH access

An exposed Redis instance can become a filesystem-write primitive when it permits changing the persistence directory/filename and saving data. Postman wrote public-key material into the Redis account’s SSH authorisation file. The database daemon’s OS permissions, not Redis’ name, determine which paths it can write.

Needs: Reachable unauthorised Redis commands, permitted configuration/persistence operations, a writable SSH authorisation path and an SSH account that accepts that key.

Redis persistence-file write to SSH access - how it works
  1. Store tester-controlled public-key data

    Prepare data that survives the persistence-file format.

  2. Redirect the persistence write

    The daemon saves the data at a writable authorisation path.

  3. SSH accepts the matching private key

    A new login is possible as the account owning that SSH configuration.

Evidence: A successful controlled SSH login. A successful Redis save is only the file-write stage.

Fix: Isolate Redis, enforce authentication/ACLs, restrict configuration commands and prevent writes to authentication files.

Documented example: Postman. Tool commands.

Management-console script execution

Monitoring and administration systems often support running scripts on managed hosts. Once an attacker holds the relevant application role, that intended feature can execute code as a service account with reach beyond the web interface. Zephyr used Zabbix scripts after gaining an application session.

Needs: The actual role permitting script creation/execution and the managed execution route. Application admin status is not automatically OS root.

Management-console script execution - how it works
  1. Define an allowed management script

    The console stores an operation for a selected target.

  2. Managed service runs it

    The server or agent executes it using its configured identity.

  3. Verify the service context

    The result reveals which OS account and host were reached.

Evidence: A harmless marker from the expected managed host. Record server-side versus agent-side execution.

Fix: Restrict script roles and destinations, use narrowly privileged service accounts and audit script changes.

Documented example: Zephyr (DAEMONSEC-VAULT).

Liferay and Nexus administrative scripting

Some application roles intentionally permit server-side Groovy scripts. A compromised account with that role can execute code as the application service. This is abuse of trusted administrative capability, not proof of an unauthenticated product vulnerability.

Needs: A reachable scripting feature and the actual script-execution permission; host execution inherits the service identity.

Liferay and Nexus administrative scripting - how it works
  1. Authenticate with the scripting role

    Administrative access supplies the relevant application permission.

  2. Submit a bounded script

    The server interprets the Groovy code in its own runtime.

  3. Read the service identity

    The proof distinguishes application administrator from OS administrator.

Evidence: A marker and identity returned by server-side script execution.

Fix: Limit scripting roles and run the application with only the OS privileges it requires.

Report example: Red Block pp. 57-59, 169-174. Tool commands.

Legacy SonarQube plugin loading

The supplied report turns a SonarQube administrator login into host execution by loading a custom plugin through an old upload API and restarting the service. A plugin runs inside the application process. SYSTEM in that report comes from the particular Windows service account, not a universal plugin property.

Needs: Application administrator rights, the affected legacy upload workflow, a compatible plugin and an allowed restart.

Legacy SonarQube plugin loading - how it works
  1. Upload the reviewed proof plugin

    The administrative API schedules a JAR for installation.

  2. Restart loads the plugin

    The server loads the plugin into its runtime.

  3. Plugin code inherits the service identity

    A local marker demonstrates the actual OS context.

Evidence: A loaded plugin producing a marker with verified identity; upload success alone is not execution.

Fix: Remove legacy upload exposure, restrict administrator accounts and reduce the service privileges.

Report example: Red Block pp. 178-181. Tool commands.

Active Directory permissions and Kerberos

AS-REP roasting | Kerberoasting and targeted SPN abuse | Group membership, AddSelf and inherited access | WriteOwner, WriteDACL and object control | ForceChangePassword and account takeover | gMSA managed-password read abuse | Shadow credentials | Constrained delegation and S4U abuse | Resource-based constrained delegation | DCSync replication-right abuse | LAPS password-read delegation | AD Recycle Bin restoration and stale permissions | Writable logon scripts and scriptPath abuse | RODC ticket forgery and Kerberos Key List abuse

AS-REP roasting

Kerberos normally requires pre-authentication before issuing an AS response. If it is disabled for an account, the KDC can return an encrypted response to a caller who only knows the username. Part of that response is protected by a key derived from the account’s password, so weak candidates can be tested offline.

Needs: A valid account with pre-authentication disabled and reachable Kerberos service. A username and an open port alone are insufficient.

AS-REP roasting - how it works
  1. Ask the KDC for the account

    The requester does not prove knowledge of the account's password.

  2. KDC returns encrypted AS material

    The account's configuration skips the normal pre-authentication gate.

  3. Test password guesses offline

    A recovered password can be validated against permitted services.

Evidence: An AS-REP verifier is returned; cracking and a subsequent login are separate evidence stages.

Fix: Enable Kerberos pre-authentication and use strong unique account secrets.

Documented example: Sauna, Forest. Tool commands.

Kerberoasting and targeted SPN abuse

A domain identity can request a service ticket for an SPN. The service-facing part of the ticket is encrypted using the service account’s key, allowing offline guesses against a weak account password. Targeted Kerberoasting first uses a writable SPN attribute to make a chosen account ticket-requestable, as TombWatcher did.

Needs: A usable requesting identity, an SPN on the target account and a weak recoverable secret. Targeted roasting additionally requires the SPN write right and restoration of the original value.

Kerberoasting and targeted SPN abuse - how it works
  1. Locate or temporarily add an SPN

    An SPN maps the service name to its account.

  2. Request the service ticket

    The KDC protects its service-facing part with that account's key.

  3. Test guesses against the ticket

    Recovering the password grants the account's existing permissions, not automatic domain administration.

Evidence: A ticket for the intended SPN/account; a controlled login confirms any recovered password.

Fix: Use managed/high-entropy service secrets, restrict SPN writes and monitor unusual ticket-request patterns.

Documented example: TombWatcher, Fluffy, Zephyr (DAEMONSEC-VAULT), Red Block pp. 93-96, 147-148. Tool commands.

Group membership, AddSelf and inherited access

An attacker changes a group’s membership or uses a permitted self-membership operation to inherit that group’s rights. Nested memberships can carry those rights through several groups. The power comes from the group’s real permissions over downstream objects, not its name.

Needs: An effective membership-write/AddSelf right and a group that grants useful access. Protected groups and explicit denies can alter the path.

Group membership, AddSelf and inherited access - how it works
  1. Read the effective group path

    Include nesting, object ACLs and restrictions.

  2. Add the permitted identity

    The membership change activates the downstream rights.

  3. Re-authenticate and validate the new rights

    Existing tickets/tokens can retain earlier group information.

Evidence: Membership is present and the claimed downstream operation is now allowed.

Fix: Minimise delegated membership writes, review nested groups and monitor unexpected additions.

Documented example: Forest, Fluffy, TombWatcher, Certified (DAEMONSEC-VAULT), Garfield (DAEMONSEC-VAULT).

WriteOwner, WriteDACL and object control

WriteOwner changes who owns an AD object; WriteDACL changes its access list. Ownership commonly permits rewriting the DACL, unless owner-specific restrictions apply. The chain is to take ownership, grant the necessary right, then perform the allowed operation. GenericAll is broad object control; GenericWrite does not mean every right on every attribute.

Needs: Effective ACL rights on the exact object, including inheritance, protected-object rules and any OWNER RIGHTS restrictions.

WriteOwner, WriteDACL and object control - how it works
  1. Become owner or use WriteDACL

    The starting edge permits changing ownership or permissions.

  2. Grant a specific needed permission

    The new ACE permits a member write, attribute write or password reset.

  3. Perform and verify that operation

    The object type determines how control becomes a useful identity or permission.

Evidence: The saved original ACL/owner and a successful specific operation after the change. BloodHound edges are leads to validate.

Fix: Remove unnecessary object-control delegation, monitor ACL changes and restore the original owner/DACL after a test.

Documented example: Forest, EscapeTwo, TombWatcher, Certified (DAEMONSEC-VAULT), Administrator (DAEMONSEC-VAULT).

ForceChangePassword and account takeover

An account with the password-reset extended right can set another account’s password without knowing the old one. The attacker then authenticates as that target. This is different from a normal password change, which generally requires the current password.

Needs: The effective reset right over a specific target. Resets can disrupt services and make some user-protected data inaccessible.

ForceChangePassword and account takeover - how it works
  1. Control a reset permission

    The object ACL authorises a privileged reset operation.

  2. Set a new test password

    The directory accepts the new secret without the old one.

  3. Authenticate as the target

    The target's existing memberships and permissions now become usable.

Evidence: A login as the target after the reset. Record impact and the recovery plan rather than implying old credentials can always be restored.

Fix: Restrict reset delegation and monitor sensitive-account resets.

Documented example: TombWatcher, Administrator (DAEMONSEC-VAULT), Garfield (DAEMONSEC-VAULT).

gMSA managed-password read abuse

A group Managed Service Account has a directory-managed password. Authorised principals can retrieve the managed-password data so services can use it. An attacker who joins that reader set or inherits its read rights can recover usable authentication material for the gMSA. The password is strong; this bypasses guessing by using legitimate retrieval.

Needs: An effective managed-password retrieval right and a gMSA with useful permissions.

gMSA managed-password read abuse - how it works
  1. Reach the authorised reader set

    A group or delegated relationship permits retrieval.

  2. Read managed-password material

    The directory supplies the data to that authorised principal.

  3. Use the gMSA identity where permitted

    Its own ACLs and endpoint logon policy define the next step.

Evidence: Retrieval succeeds and a controlled operation authenticates as the gMSA. A service account may not be allowed interactive WinRM.

Fix: Tightly restrict managed-password readers and reduce the gMSA’s downstream privileges.

Documented example: TombWatcher. Tool commands.

Shadow credentials

An attacker adds a public-key credential to a target’s msDS-KeyCredentialLink attribute, while retaining its private key. In a compatible AD environment that key supports PKINIT authentication as the target. This is key-trust abuse, not a password reset and not a certificate issued by a vulnerable template.

Needs: Write access to the attribute and compatible key-trust/PKINIT infrastructure. CA enrolment permission is not the same prerequisite.

Shadow credentials - how it works
  1. Write a new public-key credential

    The target object now trusts a tester-controlled key.

  2. Prove possession of the private key

    The KDC authenticates the key against the target's stored credential.

  3. Obtain the target's Kerberos identity

    Tools may use a further U2U exchange to recover the NT hash; that is a separate step.

Evidence: Authentication as the intended target; save the original attribute and remove only the injected credential afterwards.

Fix: Restrict attribute writes and monitor key-credential additions to service and privileged accounts.

Documented example: Fluffy, EscapeTwo, Certified (DAEMONSEC-VAULT). Tool commands.

Constrained delegation and S4U abuse

Constrained delegation lets a trusted service obtain tickets for a user to specific backend services. If an attacker controls the service identity and its delegation configuration permits the required flow, S4U requests can turn that control into an impersonated backend ticket. Zephyr used a constrained-delegation path before DCSync.

Needs: Control of the delegating service, the configured backend SPNs and an allowed S4U/delegation path. Protected users, delegation restrictions and service identity matter.

Constrained delegation and S4U abuse - how it works
  1. Authenticate as the trusted service

    The attacker holds its password, key or ticket.

  2. Request the allowed delegated ticket

    The KDC checks delegation policy for the backend service and user.

  3. Present the service ticket to the backend

    The requested identity is usable only where the ticket and policy apply.

Evidence: The backend accepts the ticket as the intended identity. A minted ticket is not automatically a successful remote session.

Fix: Reduce delegation scope, protect privileged accounts from delegation and secure the service credentials.

Documented example: Zephyr (DAEMONSEC-VAULT).

Resource-based constrained delegation

RBCD moves the delegation allowlist onto the backend computer object. If an attacker can edit that attribute, they can authorise a controlled service/computer to act for users to that backend. Support used a controlled computer account and tickets for the domain-controller service.

Needs: Control of an eligible service identity and write access to the backend’s delegation attribute. Creating a computer via MachineAccountQuota is one route, not the vulnerability or a universal entitlement.

Resource-based constrained delegation - how it works
  1. Control a service account/computer

    Keep its key so you can authenticate as that service.

  2. Backend allows that identity to delegate

    A writable attribute adds it to the backend's trusted set.

  3. KDC issues an impersonated backend ticket

    Present the ticket to the correct service, subject to account restrictions.

Evidence: The target service accepts the impersonated ticket; preserve and restore the original delegation attribute.

Fix: Restrict computer-object writes, audit delegation attributes and control computer creation and service keys.

Documented example: Support, Garfield (DAEMONSEC-VAULT).

DCSync replication-right abuse

Domain controllers replicate directory secrets using the directory replication protocol. A principal with the necessary replication rights can request that data without running code on the DC. DCSync uses authorised replication access; it is different from copying SAM or reading LSASS memory.

Needs: Effective replication rights over the domain naming context and access to the replication endpoint. Rights depend on the requested data; ordinary LDAP read access is insufficient.

DCSync replication-right abuse - how it works
  1. Hold or grant replication permissions

    An existing service right or a domain-DACL change permits secret replication.

  2. Request directory secret replication

    The DC checks the replication caller and returns authorised data.

  3. Validate the recovered authentication material

    The returned hash/key can support a separately permitted authentication route.

Evidence: A controlled target account’s replication response, with sensitive data redacted.

Fix: Limit replication rights to expected DCs/services, monitor replication from other hosts and investigate domain ACL changes.

Documented example: Sauna, Forest, Zephyr (DAEMONSEC-VAULT), Red Block pp. 141-143.

LAPS password-read delegation

LAPS rotates local administrator passwords and stores the recovery material in AD under controlled access. Reading it as a deliberately authorised recovery operator is expected behaviour; an overly broad reader group turns a low-privilege compromise into local administrator access. Timelapse used that relationship.

Needs: The specific read/decrypt permissions for the deployed LAPS version and a target storing a password. Encrypted Windows LAPS data can require separate decryption authorisation.

LAPS password-read delegation - how it works
  1. Identify the permitted reader

    Check the computer object and recovery permissions.

  2. Retrieve the current recovery secret

    The directory returns plaintext or protected material according to the deployment.

  3. Log in to that computer's local account

    A LAPS password is scoped to its machine/account, not every domain administrator.

Evidence: The intended local account authenticates on the target computer; record the retrieval right and password age without publishing the secret.

Fix: Restrict and audit LAPS read/decrypt delegation and rotate a password after approved use.

Documented example: Timelapse (DAEMONSEC-VAULT).

AD Recycle Bin restoration and stale permissions

A deleted account can still be referenced by its SID in an ACL. Restoring the matching object can bring that identity and its stale privileges back into use. TombWatcher’s restored certificate administrator had enrolment rights needed for the next attack. Restoration is the bridge, rather than the certificate flaw itself.

Needs: A recoverable deleted object, effective restore/container rights and a useful surviving ACL reference. Display-name similarity is not enough: match the object SID.

AD Recycle Bin restoration and stale permissions - how it works
  1. Find the unresolved ACL identity

    A permission refers to a deleted principal's SID.

  2. Restore the correct object

    The identity becomes usable again when restoration is permitted.

  3. Validate the restored rights

    The stale enrolment/delegated access supplies the next step.

Evidence: The restored SID matches the referenced principal and the intended operation is permitted.

Fix: Remove stale privileged ACL entries and tightly delegate restoration rights.

Documented example: TombWatcher.

Writable logon scripts and scriptPath abuse

A user’s scriptPath points Windows logon at a script. An attacker who can change that attribute and write a script at the reachable location can make code run when the user logs on. The script runs in the user’s context; it becomes an account pivot when that user holds another useful right.

Needs: Both a permitted scriptPath change and write access to a script location, plus a logon trigger. A share-level read-only label does not necessarily describe all file ACLs.

Writable logon scripts and scriptPath abuse - how it works
  1. Bind a user to a controlled script

    Attribute and file permissions enable the pairing.

  2. User logon processes the script

    A real or lab-automated logon supplies the trigger.

  3. Script uses that user's rights

    A delegated account operation or execution occurs as the logging-on user.

Evidence: A controlled marker or delegated operation tied to the logon, with both the script and attribute changes recorded.

Fix: Restrict logon-script/attribute writes, audit SYSVOL ACLs and restore the original path/file after testing.

Documented example: Garfield (DAEMONSEC-VAULT).

RODC ticket forgery and Kerberos Key List abuse

An RODC uses its own krbtgt key and a password-replication policy controlling which users’ secrets it may cache. Compromising that RODC key can permit RODC-scoped ticket forgery. An eligible Key List request can then expose a target’s key material. Garfield’s note also changes the allow/deny policy; that policy is central to the result.

Needs: The RODC-specific key/identifier, appropriate ticket state and a target permitted by the effective password-replication policy. This is not automatically an unrestricted writable-DC Golden Ticket.

RODC ticket forgery and Kerberos Key List abuse - how it works
  1. Compromise the RODC key and policy

    The attacker controls RODC trust material and relevant allowed principals.

  2. Build an RODC-scoped ticket

    Its identity and RODC identifier must match the receiving domain's expectations.

  3. Request an eligible account's key list

    The writable DC evaluates the RODC context and replication policy.

Evidence: A Key List response for the permitted test identity; Garfield records that response but a later ticket-conversion route failed.

Fix: Protect RODC keys, enforce explicit Tier Zero exclusions and review policy writes; rotate compromised RODC secrets.

Documented example: Garfield (DAEMONSEC-VAULT).

Certificate attacks

AD CS ESC1: requester-chosen authentication identity | AD CS ESC4: template control becomes ESC1 | AD CS ESC9: missing template SID extension | AD CS ESC15: application-policy injection | AD CS ESC16: CA-wide missing SID extension

AD CS ESC1: requester-chosen authentication identity

A certificate template lets the enrollee supply an identity while permitting authentication use. If the requester can enrol and no effective approval/signature gate blocks issuance, the CA may issue a certificate for a privileged identity. The certificate must then satisfy the DC’s actual mapping rules.

Needs: All required template permissions/settings and a mapping path accepting the requested identity. Modern SID binding must be evaluated; a UPN printed in a certificate is not sufficient proof.

AD CS ESC1: requester-chosen authentication identity - how it works
  1. Request another authentication identity

    The requester controls identity fields accepted by the template.

  2. CA issues the authentication certificate

    Issuance gates and template settings allow the request.

  3. DC maps it to the privileged principal

    PKINIT or another supported authentication route must accept that mapping.

Evidence: Authentication proves the intended account, rather than just successful issuance.

Fix: Remove unnecessary subject supply, restrict enrolment and enforce strong certificate identity mapping.

Documented example: EscapeTwo. Tool commands.

AD CS ESC4: template control becomes ESC1

ESC4 is write control over a certificate template. Rather than finding an already unsafe template, the attacker modifies one to permit a dangerous request, for example an ESC1 condition. Restoring the template does not revoke certificates already issued during the change.

Needs: Effective template-control rights, publication by a reachable CA, enrolment access and a viable downstream authentication configuration.

AD CS ESC4: template control becomes ESC1 - how it works
  1. Edit the template's security settings

    A delegated write right permits changing the policy.

  2. Issue a certificate under the changed policy

    The CA processes a request with the newly permitted identity/capabilities.

  3. Authenticate, then restore and revoke

    Configuration rollback and certificate invalidation are separate cleanup tasks.

Evidence: A saved original template, the issued certificate properties and successful target-identity authentication.

Fix: Restrict template ownership/ACLs, monitor changes and revoke certificates issued through malicious changes.

Documented example: EscapeTwo. Tool commands.

AD CS ESC9: missing template SID extension

A template’s NoSecurityExtension setting can omit the SID security extension. In the historical weak-mapping environment used in Certified, a controlled account’s UPN was temporarily changed before enrolment, causing the resulting certificate to map to another identity. Missing SID data alone does not make this work on fully enforced mapping.

Needs: The template-level omission, enrolment rights, account-name control and a compatible mapping weakness or additional chain.

AD CS ESC9: missing template SID extension - how it works
  1. Change the controlled enrollee's name

    The certificate request inherits the changed identity field.

  2. Template omits the SID extension

    The certificate lacks that binding to the true account.

  3. A weak mapping resolves another account

    Restore the original name and verify the mapped identity independently.

Evidence: Authentication as the intended principal. A NoSecurityExtension flag is a configuration finding until the whole path is proven.

Fix: Include the security extension, restrict name writes and use enforced strong mapping.

Documented example: Certified (DAEMONSEC-VAULT). Tool commands.

AD CS ESC15: application-policy injection

On affected unpatched CAs, a schema-v1 template can accept requester-supplied application policies, giving a certificate capabilities the template did not intend. TombWatcher used that capability in an enrolment-agent/on-behalf-of chain. It is different from merely requesting a new subject name.

Needs: An affected CA, a version-1 template you can enrol in, and a usable policy/second-template chain. A V1 WebServer template on a patched CA is not automatically vulnerable.

AD CS ESC15: application-policy injection - how it works
  1. Request extra application policy

    The requester asks for a capability absent from the template's intended policy.

  2. Unpatched CA includes it

    The first certificate gains an unintended use, such as enrolment-agent capability.

  3. Use the granted capability in the next request

    The demonstrated chain obtains a target authentication certificate.

Evidence: The issued policy and the second enrolment/authentication result establish the full chain.

Fix: Apply the CA security fix, replace legacy template usage where appropriate and restrict enrolment-agent policy.

Documented example: TombWatcher. Tool commands.

AD CS ESC16: CA-wide missing SID extension

ESC16 concerns a CA-wide setting suppressing the SID security extension, whereas ESC9 is template-specific. Fluffy combined this with control of an enrollee’s UPN and the lab’s weak identity mapping. Suppressing the extension does not by itself defeat a fully enforced modern mapping policy.

Needs: CA-wide omission, an eligible authentication template, enrolment and account-control rights, plus a viable mapping weakness or additional chain.

AD CS ESC16: CA-wide missing SID extension - how it works
  1. Control the enrollee's identity field

    The changed UPN is used during enrolment.

  2. CA omits the SID binding

    The CA-wide policy prevents the normal extension from being issued.

  3. Vulnerable mapping selects the target

    The DC's actual mapping path determines whether the attack succeeds.

Evidence: Certificate authentication as the intended target, with the original UPN restored.

Fix: Re-enable SID extension issuance and enforce strong mapping; audit certificates issued while it was suppressed.

Documented example: Fluffy. Tool commands.

Linux privilege escalation

Sudo access to a scriptable tool | Sudo pager shell escape | SUID helper and PATH hijacking | Vulnerable SUID helper: Enlightenment | Linux capability abuse | Container bind-mount ownership and SUID abuse | Polkit authorisation race | OverlayFS/FUSE copy-up privilege flaw

Sudo access to a scriptable tool

Sudo authorises a program, but that program may itself be able to execute arbitrary code. Giving an account root access to a script interpreter or a tool with a scripting engine effectively gives that code root privileges. Zephyr’s allowed Nmap scripting route is one example.

Needs: A sudo rule permitting the relevant program/arguments and a usable script-execution feature. A restricted rule can block the needed arguments.

Sudo access to a scriptable tool - how it works
  1. Sudo starts the permitted tool as root

    The rule gives the process a privileged execution context.

  2. Tool accepts user-supplied logic

    Its scripting or execution feature runs code chosen by the caller.

  3. That logic inherits root permissions

    A feature intended for useful automation becomes privilege escalation.

Evidence: A harmless identity check in the tool’s actual subprocess shows UID 0.

Fix: Restrict sudo to narrow operations and arguments; avoid delegating general-purpose interpreters or scriptable tools as root.

Documented example: Zephyr (DAEMONSEC-VAULT).

Sudo pager shell escape

A privileged program launches an interactive pager such as less to display output. If it keeps root privileges and the pager permits shell commands, a display feature becomes a root execution path. Your examples were systemctl status in Sau and apport-cli in Devvortex.

Needs: A qualifying sudo rule, an interactive pager invocation and absent effective secure-pager restrictions. Merely installing less is not a vulnerability.

Sudo pager shell escape - how it works
  1. Run the allowed privileged display command

    Sudo starts the parent program as root.

  2. Parent starts an unrestricted pager

    The viewer inherits the privileged context.

  3. Pager executes a requested command

    Its shell-escape feature can start another root process.

Evidence: A benign identity result from the pager’s subprocess. Version, TTY and secure-pager mode can change the behaviour.

Fix: Patch the affected application, enforce secure/non-interactive output and narrow sudo rules.

Documented example: Sau (DAEMONSEC-VAULT), Devvortex (DAEMONSEC-VAULT).

SUID helper and PATH hijacking

A SUID-root executable starts with an effective root identity. If it invokes a helper by a relative name and searches a caller-controlled PATH without dropping privilege, the attacker can replace the helper that it runs. Pandora’s summary records this route, but the detailed final steps are unfinished.

Needs: A SUID program that preserves privilege and searches a writable/prepended path for the needed command. A SUID bit by itself does not make every program exploitable.

SUID helper and PATH hijacking - how it works
  1. Launch the privileged wrapper

    Its effective UID can differ from the invoking user's UID.

  2. Wrapper searches an unsafe helper path

    A controlled executable is selected before the intended helper.

  3. Controlled helper inherits privilege

    The test succeeds only if the wrapper does not drop or sanitise that privilege.

Evidence: A controlled helper marker and effective UID demonstrate the path. Pandora is labelled as an unfinished source.

Fix: Use absolute helper paths, sanitise the environment, drop privileges and remove unnecessary SUID bits.

Partial note: Pandora (DAEMONSEC-VAULT).

Vulnerable SUID helper: Enlightenment

Even when the caller cannot replace a helper, a privileged helper may parse its own arguments unsafely. BoardLight’s Enlightenment helper flaw allowed caller-controlled path/input to reach unintended command execution with effective root privileges. This is a specific implementation bug, not proof that every SUID application is vulnerable.

Needs: The affected installed helper, its SUID privilege and the vulnerable input-handling path.

Vulnerable SUID helper: Enlightenment - how it works
  1. Call the SUID helper with crafted input

    The process starts with elevated effective privileges.

  2. Vulnerable handling interprets input unsafely

    Untrusted values reach a dangerous execution path.

  3. An unintended command inherits root

    The specific helper defect crosses the local privilege boundary.

Evidence: A benign root-identity marker through the affected helper.

Fix: Install the fixed package and remove unnecessary SUID privilege from vulnerable helpers.

Documented example: BoardLight (DAEMONSEC-VAULT).

Linux capability abuse

Capabilities split root’s privileges into individual powers. A general-purpose interpreter with CAP_SETUID can change its process identity if that capability is effective. Cap’s Python binary held that power, letting an ordinary user move to UID 0 without a SUID Python binary.

Needs: An executable available to the user with the required effective capability and runtime support. CAP_NET_BIND_SERVICE alone does not allow changing UID.

Linux capability abuse - how it works
  1. Execute the capability-bearing interpreter

    The file capability grants a narrow privileged operation.

  2. Use the permitted identity operation

    CAP_SETUID authorises a UID change in that process.

  3. Continue as the changed identity

    A subsequent process or operation can run with that identity's rights.

Evidence: The interpreter’s process reports effective UID 0 after the controlled identity change.

Fix: Remove unnecessary file capabilities, particularly identity-changing powers from general-purpose interpreters.

Documented example: Cap (DAEMONSEC-VAULT).

Container bind-mount ownership and SUID abuse

A writable bind mount exposes the same host files inside a container. Without the necessary isolation, container root can alter ownership and modes on those host files. GoodGames used that shared path to create a root-owned SUID executable which was then run from a host session.

Needs: Writable shared storage, sufficient capability/UID mapping in the container, and host execution on a filesystem permitting SUID. Container UID 0 is not universally host root.

Container bind-mount ownership and SUID abuse - how it works
  1. Modify a shared file as container root

    The mount writes through to the underlying host file.

  2. Host sees the changed ownership/mode

    The relevant UID mapping and mount policy preserve the change.

  3. Execute from the host context

    A SUID-enabled host execution gains the file owner's effective identity.

Evidence: The host observes the permission change and a controlled host execution proves privilege. A root container prompt alone does not.

Fix: Use user namespaces, restrict bind mounts/capabilities and avoid exposing writable host paths or SUID-enabled execution.

Documented example: GoodGames (DAEMONSEC-VAULT).

Polkit authorisation race

CVE-2021-3560 was an authorisation flaw in polkit’s handling of a disappearing D-Bus caller. In the affected path, disconnecting at the right point could make a credential-lookup error be treated as a privileged caller. Papers’ notes use this local route. It is a polkit flaw, despite the note’s synopsis calling it a sudo issue.

Needs: An affected polkit version/path, local access and the race conditions needed by the test.

Polkit authorisation race - how it works
  1. Start a privileged D-Bus request

    An ordinary process requests an operation needing authorisation.

  2. Caller disappears during credential lookup

    The vulnerable error path mishandles the missing caller identity.

  3. Operation is incorrectly authorised

    The request can create/change an account through a privileged service.

Evidence: A controlled privileged account operation demonstrates the authorisation failure.

Fix: Update polkit and review/remove test accounts and privileges introduced during validation.

Documented example: Papers (DAEMONSEC-VAULT).

OverlayFS/FUSE copy-up privilege flaw

CVE-2023-0386 concerns OverlayFS copy-up handling of file ownership across user namespaces. An affected kernel can copy attacker-controlled metadata into a host-visible file with unintended privilege. TwoMillion used this kernel path after obtaining a normal local account.

Needs: An affected kernel and the user-namespace/FUSE/OverlayFS conditions required by the exploit. Distribution backports matter more than a broad version banner.

OverlayFS/FUSE copy-up privilege flaw - how it works
  1. Present a crafted lower filesystem

    File ownership/privilege metadata is controlled in a namespace.

  2. Trigger OverlayFS copy-up

    The vulnerable kernel fails the required ownership-mapping check.

  3. Privileged file appears in the upper layer

    A suitable execution path turns that incorrect metadata into elevated access.

Evidence: A benign privilege result on the affected kernel, with patch state and prerequisites recorded.

Fix: Install the vendor kernel fix and reduce unnecessary unprivileged namespace exposure.

Documented example: TwoMillion (DAEMONSEC-VAULT).

Windows privilege escalation

Upload redirection through a directory junction | FullPowers service-token restoration | Token impersonation and Potato attacks | SeBackupPrivilege and offline credential-hive extraction | DnsAdmins server-plugin loading | Service configuration and Server Operators abuse | SeTcbPrivilege and disabled token privileges | Privileged GUI file-dialog escape

Upload redirection through a directory junction

A directory junction redirects filesystem operations to another directory. Media let a user pre-create an upload destination as a junction; the higher-privilege upload handler trusted it and wrote into the web root. This crossed a write boundary and created a code-execution route under Apache’s account.

Needs: Write/control over the destination directory, a handler following the reparse point and write permission at the destination for that handler’s identity.

Upload redirection through a directory junction - how it works
  1. Replace the expected directory with a junction

    The user-controlled entry points at a different writable destination.

  2. Upload handler follows the redirect

    It writes where the junction resolves rather than where it intended.

  3. Web runtime executes the uploaded content

    A separate web request runs it under the web service identity.

Evidence: The file lands at the redirected path and a harmless execution marker identifies the resulting service account.

Fix: Use protected upload directories outside executable roots and securely reject/revalidate reparse points during writes.

Documented example: Media.

FullPowers service-token restoration

A Windows process token may have privileges removed even though the account normally receives them. FullPowers uses a compatible service/task context to obtain a fresh token for the same account with its default privileges. In Media this restored SeImpersonatePrivilege, enabling a later attack; FullPowers was not itself the SYSTEM step.

Needs: A compatible service identity and task/service configuration permitting the fresh-token route. It cannot generally manufacture rights the account is not entitled to receive.

FullPowers service-token restoration - how it works
  1. Inspect the current restricted token

    The account's expected privilege is absent from this process.

  2. Obtain a fresh same-account token

    A compatible scheduled-task/service route creates a new process context.

  3. Verify the restored privilege

    The account is still the same, but its effective token now permits the next operation.

Evidence: The new token lists the required privilege. Verify account identity separately from token privileges.

Fix: Avoid relying only on a stripped process token when the account can recover its default rights; minimise the service identity’s entitlement.

Documented example: Media.

Token impersonation and Potato attacks

Service accounts can hold impersonation privileges so servers may act for connecting clients. A suitable Potato exploit induces a privileged Windows component to authenticate to an attacker-controlled endpoint and abuses the resulting impersonation context to launch an elevated process. The particular protocol path depends on the tool and Windows build.

Needs: The required effective privilege, a compatible Windows component/build and the tool’s trigger conditions. A disabled/absent privilege or a mismatched build can stop the route.

Token impersonation and Potato attacks - how it works
  1. Privileged component reaches a controlled endpoint

    A compatible COM/RPC or related trigger creates the connection.

  2. Service process impersonates the client

    The available token/impersonation level grants an elevated context.

  3. Start and verify the elevated process

    A supported token API produces a process whose actual identity must be checked.

Evidence: An identity check shows SYSTEM. Jeeves records original JuicyPotato success and newer-tool failures; Media records GodPotato after FullPowers.

Fix: Patch affected components and minimise service impersonation rights and endpoint exposure.

Documented example: Jeeves, Media. Tool commands.

SeBackupPrivilege and offline credential-hive extraction

Backup privilege can permit protected file reads through backup-aware operations, even when normal file ACLs deny access. Cicada’s note saves SAM and SYSTEM data and processes them offline. SAM holds local account verifiers; SYSTEM supplies material needed to decrypt them. Domain-controller NTDS extraction is a different dataset and requires its own evidence.

Needs: Effective backup/read capability, an operation that uses it and the required matching hive/database material.

SeBackupPrivilege and offline credential-hive extraction - how it works
  1. Use the privileged backup-read route

    The operation reads otherwise protected registry/file data.

  2. Export the matching credential material

    Local SAM processing also needs the corresponding SYSTEM hive.

  3. Process the copies offline

    A tool extracts verifiers, which may support a separately authorised authentication test.

Evidence: The extracted local account identity and a controlled authentication result. Do not relabel a SAM dump as DCSync.

Fix: Restrict backup operator privileges, protect backups and use local credential isolation/rotation appropriate to the host.

Documented example: Cicada (DAEMONSEC-VAULT).

DnsAdmins server-plugin loading

An eligible DNS administrator can configure a server-level plugin DLL. If the Windows DNS service subsequently loads that controlled DLL under its privileged service identity, directory/DNS administration becomes local execution as the service. Resolute’s narrative records that route.

Needs: Rights to configure the plugin, a DLL path readable by the DNS service and a valid service-load/restart trigger. Group membership alone does not prove all three.

DnsAdmins server-plugin loading - how it works
  1. Set the DNS plugin path

    A delegated server-setting operation points to controlled code.

  2. DNS service loads the plugin

    A restart or supported load event triggers DLL loading.

  3. Plugin executes as the DNS service

    The service identity determines the privilege gained.

Evidence: A controlled marker under the DNS service identity, and a saved original plugin setting.

Fix: Restrict DNS service configuration and restart rights, patch and audit server-level plugin changes.

Documented example: Resolute (DAEMONSEC-VAULT).

Service configuration and Server Operators abuse

A Windows service can run as a privileged account. An operator who can replace its executable command or writable binary, and trigger a start, can make it run tester-controlled code in that account. Return’s command notes use a service-control path after obtaining the printer’s service credential.

Needs: Effective change-configuration or binary-write rights and a service trigger. Read access to service metadata is not sufficient.

Service configuration and Server Operators abuse - how it works
  1. Modify the service command or binary

    A delegated service control right changes what will execute.

  2. Start the affected service

    The service manager launches the configured operation.

  3. Operation inherits the service identity

    A SYSTEM service can execute the controlled operation as SYSTEM.

Evidence: A benign marker from the service context, with the original configuration captured and restored.

Fix: Restrict service ACLs and operator memberships, protect executable paths and monitor configuration changes.

Documented example: Return (DAEMONSEC-VAULT), Red Block p. 155.

SeTcbPrivilege and disabled token privileges

Disabled privileges can sometimes be enabled if they are already in a process token. This differs from acquiring a privilege that is absent. The report first enables present privileges, then uses a separate SeTcbPrivilege-specific helper to launch a privileged process.

Needs: SeTcbPrivilege present in the relevant token, a compatible helper/OS and access to the required system operations.

SeTcbPrivilege and disabled token privileges - how it works
  1. Inspect the current token

    Identify privileges present but disabled versus completely absent.

  2. Enable the existing privilege

    Adjusting a token does not create a new account or grant missing rights.

  3. Use the specific privileged operation

    A separate mechanism launches the proof process with an elevated identity.

Evidence: Identity output from the newly launched process. An Enabled flag alone is not SYSTEM proof.

Fix: Restrict SeTcbPrivilege to the trusted operating-system components that need it.

Report example: Red Block pp. 59-62. Tool commands.

Privileged GUI file-dialog escape

A privileged desktop application may open a file dialog that can launch an unintended executable. The child can inherit the elevated application context. The report describes Remote Mouse GUI 3.008 and CVE-2021-35448; that is a specific affected application path, not a universal property of every file picker.

Needs: Interactive desktop access and the affected application actually running with elevated privileges.

Privileged GUI file-dialog escape - how it works
  1. Reach the elevated application

    The user opens its image-folder selection interface.

  2. Dialog launches a test executable

    The privileged program creates a child outside its intended task.

  3. Child inherits the elevated context

    Confirm the launched process token rather than judging its window appearance.

Evidence: Process identity and token integrity demonstrating the boundary crossing.

Fix: Patch the affected application and avoid exposing privileged interactive interfaces to ordinary users.

Report example: Red Block pp. 68-73. Tool commands.

Movement, sessions and boundaries

Pass-the-hash | Kerberos ticket use and pass-the-ticket | Certificate and private-key authentication | SAM, LSA and LSASS credential access | SSH forwarding, SOCKS and routed pivots | SSH authorised-key modification | HTTP header trust and firewall-management abuse | NTFS Alternate Data Streams

Pass-the-hash

NTLM authentication proves knowledge of key material derived from the NT hash; the plaintext password is not needed to compute a valid response. A tool holding the NT hash can perform that calculation. This is not sending a captured NetNTLMv2 response unchanged, and it still requires a service accepting NTLM plus account authorisation.

Needs: The correct account’s NT hash, a compatible NTLM endpoint and the permissions needed for the operation. Local accounts can face remote restrictions.

Pass-the-hash - how it works
  1. Hold the account's reusable NT key

    The material comes from an authorised dump, vault or equivalent recovery.

  2. Compute a fresh challenge-response

    The tool answers the server's new challenge using that key.

  3. Server checks identity and permissions

    Authentication success does not override endpoint logon or admin policy.

Evidence: A controlled session identifies the correct account and allowed operation.

Fix: Reduce NTLM use, protect credential material and apply unique managed local passwords and least privilege.

Documented example: Sauna, Jeeves, EscapeTwo, Fluffy, TombWatcher, Cicada (DAEMONSEC-VAULT), Zephyr (DAEMONSEC-VAULT), Garfield (DAEMONSEC-VAULT). Tool commands.

Kerberos ticket use and pass-the-ticket

A Kerberos ticket proves an identity to the service for which it was issued. A caller controlling a valid ticket and its session key can use that authentication state without the user’s password. A TGT is used to obtain service tickets; a service ticket applies to a particular service, subject to validity and policy.

Needs: Valid ticket/key material, correct service principal/name, network reachability and acceptable clock/validity. Ticket conversion changes storage format, not privilege.

Kerberos ticket use and pass-the-ticket - how it works
  1. Load or obtain the relevant ticket

    A cache or process holds the Kerberos authentication state.

  2. Request or present the service ticket

    The ticket must match the target service and naming.

  3. Service authorises the mapped identity

    The endpoint applies its permissions after authentication.

Evidence: The actual target service accepts the ticket as the intended account.

Fix: Protect ticket caches/session keys, minimise privileged logons and investigate credential theft or delegation paths.

Documented example: Forest, Support, Zephyr (DAEMONSEC-VAULT), Garfield (DAEMONSEC-VAULT).

Certificate and private-key authentication

A certificate binds a public key to an identity, and authentication requires proving possession of its private key. A stolen PFX can therefore be a credential even when the account password is unknown. Timelapse used recovered certificate/key files with WinRM TLS authentication; AD CS paths used Kerberos PKINIT, which is a different protocol flow.

Needs: The matching private key, a certificate valid for the authentication route and a server mapping that identity to an allowed account. A public certificate alone is insufficient.

Certificate and private-key authentication - how it works
  1. Recover the certificate and matching key

    A PFX or separate files supplies the credential pair.

  2. Prove possession to the authentication endpoint

    The client signs the required protocol data with the private key.

  3. Server maps and authorises the identity

    TLS client-certificate mapping and PKINIT must be evaluated separately.

Evidence: A successful session as the expected account using the documented authentication method.

Fix: Protect/export-restrict private keys, revoke compromised certificates and apply strong identity mappings.

Documented example: Timelapse (DAEMONSEC-VAULT), EscapeTwo, Fluffy, Certified (DAEMONSEC-VAULT), TombWatcher. Tool commands.

SAM, LSA and LSASS credential access

A privileged process can sometimes retrieve local password verifiers, service secrets or credential material from protected stores or authentication memory. Zephyr used secretsdump and Mimikatz/Kiwi routes after obtaining elevated access. These stores are different: SAM is local accounts, LSA secrets can contain service material, and LSASS holds authentication state.

Needs: The actual required privilege and readable/unprotected store. Credential Guard, protected processes and endpoint controls can prevent a particular memory route.

SAM, LSA and LSASS credential access - how it works
  1. Establish the real privileged context

    Check account and token privileges rather than the prompt or directory.

  2. Read the eligible credential store

    The chosen operation accesses its particular dataset.

  3. Identify the recovered account and realm

    Use only the material applicable to that local/domain identity.

Evidence: A redacted result tied to its source store and a controlled validation. A tool error is not a successful dump.

Fix: Minimise privileged sessions, protect credential stores and apply isolation, endpoint protection and secret rotation.

Documented example: Zephyr (DAEMONSEC-VAULT), CMP210, Cicada (DAEMONSEC-VAULT).

SSH forwarding, SOCKS and routed pivots

A pivot sends traffic through a host with network reach that the testing machine lacks. SSH local forwarding maps one local port to a remote destination; SOCKS proxies compatible connections; Ligolo builds a routed path. The tunnel grants reachability, not credentials or authorisation to the destination.

Needs: An accessible controlled pivot, a route from it to the destination and correctly configured return traffic/name resolution.

SSH forwarding, SOCKS and routed pivots - how it works
  1. Tester reaches the pivot

    The tunnel or proxy is established to an already controlled host.

  2. Pivot connects to the internal target

    Its network position supplies the otherwise missing route.

  3. Target still checks authentication

    The target sees a reachable connection and applies its own access controls.

Evidence: A known service is reachable through the intended path; then independently verify authentication. Track each hop in a double pivot.

Fix: Segment management traffic, limit egress and enforce strong destination authentication despite internal reachability.

Documented example: CMP314, Pandora (DAEMONSEC-VAULT), GoodGames (DAEMONSEC-VAULT), Zephyr (DAEMONSEC-VAULT), Garfield (DAEMONSEC-VAULT). Tool commands.

SSH authorised-key modification

Adding a public key to an account’s authorised keys lets the matching private key authenticate if the SSH server permits that account/key. This is legitimate credential installation with the wrong writer. It can be a foothold, as in Postman, or an access-maintenance step, as in CMP314.

Needs: Write access to the effective authorised-key location and a server accepting that account/key. Filesystem modes, account restrictions and network reachability still matter.

SSH authorised-key modification - how it works
  1. Write the test public key

    The account's trusted-key list gains a new entry.

  2. Prove possession over SSH

    The client signs the server's authentication challenge.

  3. SSH permits the account session

    The account's login policy and SSH options determine the access.

Evidence: A successful controlled key login. Remove only the injected key and preserve pre-existing entries.

Fix: Restrict writes to authentication files, audit key changes and constrain key options and account access.

Documented example: Postman, CMP314.

HTTP header trust and firewall-management abuse

Host and Referer are request metadata supplied by the client; they are not proof that a caller is trusted. CMP314 reached a firewall GUI through a pivot, rewrote its expected headers, authenticated with default credentials and changed rules. Reaching the GUI, passing a header check and changing policy were separate stages.

Needs: Network reach to the management interface, the vulnerable header check, valid management access and permission to change rules.

HTTP header trust and firewall-management abuse - how it works
  1. Reach the management GUI through a pivot

    Filtering from the initial position is bypassed by the alternate network path.

  2. Supply expected header values

    A client-controlled check does not establish identity.

  3. Use management rights to change policy

    The resulting rule change exposes additional routes or segments.

Evidence: The authorised test session changes a recorded rule and the intended route becomes reachable. Restore the rule afterwards.

Fix: Use real authentication/authorisation, remove defaults and isolate management interfaces; headers are only supplementary signals.

Documented example: CMP314.

NTFS Alternate Data Streams

NTFS files can have named data streams besides their ordinary contents. A plain directory listing may hide those streams, so reading only the unnamed file can miss data. Jeeves used this to locate the final proof. ADS is a storage/enumeration concept here, not a privilege-escalation exploit.

Needs: An NTFS file with an additional stream and permission to enumerate/read it.

NTFS Alternate Data Streams - how it works
  1. Enumerate the file's streams

    Ask for named streams, not just the default directory view.

  2. Identify the unexpected stream

    The extra name indicates another data body attached to the file.

  3. Read it under existing permissions

    Finding the stream does not grant a new access token.

Evidence: A named stream and its permitted content are visible. Flag values remain redacted.

Fix: Include streams in forensic/file inspection and review unexpected stream usage.

Supporting technique: Jeeves.

Worked chains

A chain connects separate weaknesses. Removing any necessary link can prevent the final outcome. These three examples show why a password, a permission and a network route should be tracked independently.

Web to root: MetaTwo

MetaTwo: disclosure becomes access
  1. SQLi yields a password verifier

    Recover the WordPress account password and validate the login.

  2. XXE reveals configuration

    FTP and other configuration disclose a reused SSH secret.

  3. Passpie exposes the final stored secret

    Recover the encrypted vault key/password and validate the root credential.

User to domain replication: Forest

Forest: identity and directory rights
  1. AS-REP gives an offline verifier

    Recover the user password and establish a domain session.

  2. Nested groups expose domain ACL control

    Use the demonstrated group/WriteDACL path to gain replication rights.

  3. DCSync returns permitted account secrets

    Replication permission, not the roasting step, enables directory-secret retrieval.

Application to service identity: supplied report

Report: file inclusion and local delegation
  1. Source read reveals weak invite validation

    A format-matching value unlocks an upload endpoint.

  2. Upload plus LFI executes PHP

    The application includes the uploaded content; extension alone is not the execution mechanism.

  3. Local enumeration finds another access path

    Unrestricted FTP read reveals a key; sudo csvtool delegation is a later independent root step.

Tools from the Red Block report

The supplied report’s tool order is encrypted to the Main_Key. The public ☧ mark identifies a related tool guide; its number, report pages and position appear only in the unlocked list. Guide titles and URLs use tool names.

Download the encrypted file, decrypt it locally with GPG, then open the resulting JSON in the panel. Repeated uses of a tool retain their separate numbers. Some historical commands occur only in screenshots; a flag or version label is not independent proof.

Read these differences before reproducing a historical command:

  • The report uses the legacy PowerShell Inveigh script; the new guide documents the maintained C# build. Inspect the matching help rather than mixing flags.
  • The report’s Ligolo setup is version-specific. The proxy, agent, interface and route must agree; a callback may need a pivot-side listener even when ordinary target connections work. Prefer verified certificate trust for tunnels.
  • A file named .one yielding an Office verifier is not proof that every OneNote file is supported by office2john. Identify the actual container and check the installed extractor’s support.
  • Readable deleted-account attributes do not demonstrate successful account restoration. The report uses a description/password clue; TombWatcher’s restored AD object is a separate documented path.
  • gMSA output should be interpreted as account authentication material, often an NT hash; a convenient human-readable password is not guaranteed.
  • The Anuko helper name in the report is a local rename, not an independently established upstream tool identity. Capture the authenticated Puncher request and review the parameter/affected build before using any automated helper.
  • Webmin’s advisory names 1.991 and below for CVE-2022-30708. The report’s 1.996 label remains a discrepancy.
  • Chisel and socat are mentioned as alternatives; the report does not establish their use in that path. Disabling protection software is not a prerequisite for explaining SharpHound collection.

Source coverage and evidence limits

The map below records which reviewed write-ups contribute each mechanism. Repeated vault copies of a published machine are treated as the same example. Placeholder templates, speculative alternatives and scan-only findings are not counted as completed exploitation. This is coverage of the reviewed documents as of 2026-10-11, rather than a claim to catalogue every possible penetration-testing attack.

Reviewed sourceMechanisms explained hereEvidence scope
Administrator (DAEMONSEC-VAULT)WriteOwner, WriteDACL and object control, ForceChangePassword and account takeoverPartial vault note; only recorded steps
BoardLight (DAEMONSEC-VAULT)Online brute force and default credentials, Password reuse and local/domain identity confusion, CMS code editing and upload-to-execution, Vulnerable SUID helper: EnlightenmentVault narrative
BuilderOffline password, key and vault cracking, Jenkins CLI arbitrary file read, Build pipeline and credential-binding abusePublished write-up
CMP210Online brute force and default credentials, SAM, LSA and LSASS credential accessPublished write-up
CMP314NFS export and file-permission abuse, Cleartext authentication interception, Offline password, key and vault cracking, Online brute force and default credentials, Shellshock in Bash-backed CGI, SSH forwarding, SOCKS and routed pivots, SSH authorised-key modification, HTTP header trust and firewall-management abusePublished write-up
CMP319Online brute force and default credentials, SQL injection, Reflected cross-site scripting, Stored cross-site scripting, Path traversal and local file inclusion, Shellshock in Bash-backed CGIPublished write-up
Cap (DAEMONSEC-VAULT)Cleartext authentication interception, IDOR and missing object authorisation, Linux capability abuseVault narrative
Certified (DAEMONSEC-VAULT)Group membership, AddSelf and inherited access, WriteOwner, WriteDACL and object control, Shadow credentials, AD CS ESC9: missing template SID extension, Certificate and private-key authenticationVault narrative
Cicada (DAEMONSEC-VAULT)Credentials in files, directory attributes and history, Password spraying, SeBackupPrivilege and offline credential-hive extraction, Pass-the-hash, SAM, LSA and LSASS credential accessVault narrative
Devvortex (DAEMONSEC-VAULT)CMS configuration and draft disclosure, CMS code editing and upload-to-execution, Sudo pager shell escapeVault narrative
EscapeTwoCredentials in files, directory attributes and history, Password spraying, Password reuse and local/domain identity confusion, SQL Server xp_cmdshell execution, WriteOwner, WriteDACL and object control, Shadow credentials, AD CS ESC1: requester-chosen authentication identity, AD CS ESC4: template control becomes ESC1, Pass-the-hash, Certificate and private-key authenticationPublished write-up
FluffyOffline password, key and vault cracking, Forced authentication and NetNTLM capture, Kerberoasting and targeted SPN abuse, Group membership, AddSelf and inherited access, Shadow credentials, AD CS ESC16: CA-wide missing SID extension, Pass-the-hash, Certificate and private-key authenticationPublished write-up
ForestAnonymous SMB, LDAP and FTP access, Offline password, key and vault cracking, AS-REP roasting, Group membership, AddSelf and inherited access, WriteOwner, WriteDACL and object control, DCSync replication-right abuse, Kerberos ticket use and pass-the-ticketPublished write-up
Garfield (DAEMONSEC-VAULT)Group membership, AddSelf and inherited access, ForceChangePassword and account takeover, Resource-based constrained delegation, Writable logon scripts and scriptPath abuse, RODC ticket forgery and Kerberos Key List abuse, Pass-the-hash, Kerberos ticket use and pass-the-ticket, SSH forwarding, SOCKS and routed pivotsVault narrative
GoodGames (DAEMONSEC-VAULT)Offline password, key and vault cracking, Password reuse and local/domain identity confusion, SQL injection, Server-side template injection, Container bind-mount ownership and SUID abuse, SSH forwarding, SOCKS and routed pivotsVault narrative
Interpreter (DAEMONSEC-VAULT)Unsafe deserializationPartial vault note; only recorded steps
JeevesOffline password, key and vault cracking, Jenkins Script Console execution, Token impersonation and Potato attacks, Pass-the-hash, NTFS Alternate Data StreamsPublished write-up
Jerry (DAEMONSEC-VAULT)Online brute force and default credentials, Tomcat Manager application deploymentVault narrative
MediaForced authentication and NetNTLM capture, CMS code editing and upload-to-execution, Upload redirection through a directory junction, FullPowers service-token restoration, Token impersonation and Potato attacksPublished write-up
MetaTwoCredentials in files, directory attributes and history, Offline password, key and vault cracking, Password reuse and local/domain identity confusion, SQL injection, XML external entity injectionPublished write-up
Pandora (DAEMONSEC-VAULT)SNMP information disclosure, SQL injection, SUID helper and PATH hijacking, SSH forwarding, SOCKS and routed pivotsPartial vault note; only recorded steps
Papers (DAEMONSEC-VAULT)Password reuse and local/domain identity confusion, Path traversal and local file inclusion, CMS configuration and draft disclosure, Polkit authorisation raceVault narrative
PostmanOffline password, key and vault cracking, Password reuse and local/domain identity confusion, Operating-system command injection, Redis persistence-file write to SSH access, SSH authorised-key modificationPublished write-up
Resolute (DAEMONSEC-VAULT)Credentials in files, directory attributes and history, Password spraying, DnsAdmins server-plugin loadingVault narrative
Return (DAEMONSEC-VAULT)Cleartext authentication interception, Service configuration and Server Operators abuseVault narrative
Sau (DAEMONSEC-VAULT)Server-side request forgery, Operating-system command injection, Sudo pager shell escapeVault narrative
SaunaCredentials in files, directory attributes and history, Offline password, key and vault cracking, AS-REP roasting, DCSync replication-right abuse, Pass-the-hashPublished write-up
SupportAnonymous SMB, LDAP and FTP access, Credentials in files, directory attributes and history, Cleartext authentication interception, Password spraying, Resource-based constrained delegation, Kerberos ticket use and pass-the-ticketPublished write-up
Timelapse (DAEMONSEC-VAULT)Anonymous SMB, LDAP and FTP access, Credentials in files, directory attributes and history, Offline password, key and vault cracking, LAPS password-read delegation, Certificate and private-key authenticationVault narrative
TombWatcherOffline password, key and vault cracking, Kerberoasting and targeted SPN abuse, Group membership, AddSelf and inherited access, WriteOwner, WriteDACL and object control, ForceChangePassword and account takeover, gMSA managed-password read abuse, AD Recycle Bin restoration and stale permissions, AD CS ESC15: application-policy injection, Pass-the-hash, Certificate and private-key authenticationPublished write-up
TwoMillion (DAEMONSEC-VAULT)Operating-system command injection, API role modification and broken function authorisation, OverlayFS/FUSE copy-up privilege flawVault narrative
Zephyr (DAEMONSEC-VAULT)Credentials in files, directory attributes and history, Password spraying, Password reuse and local/domain identity confusion, Forced authentication and NetNTLM capture, Zabbix SAML session bypass, Management-console script execution, Kerberoasting and targeted SPN abuse, Constrained delegation and S4U abuse, DCSync replication-right abuse, Sudo access to a scriptable tool, Pass-the-hash, Kerberos ticket use and pass-the-ticket, SAM, LSA and LSASS credential access, SSH forwarding, SOCKS and routed pivotsVault narrative
Red Block report, supplied locallyAdditional disclosure, upload/inclusion, token, console and plugin examples; encrypted tool indexThird-party historical report; version discrepancies called out

CMP210’s TLS/SSH/PHP scanner findings are not represented as completed exploits. CMP314 demonstrates CGI Shellshock; CMP319’s scanner mention alone does not. Pandora and Administrator have unfinished sections, so their proposed endings are not presented as completed paths. Garfield records an RODC Key List result and a failed later ticket-conversion attempt. Pro-lab planning/checklist notes add terminology but do not establish that every suggested attack was performed.

Technical references

These references support the mechanism explanations and compatibility caveats. The prose and diagrams on this page are original; the supplied report is credited for its examples and is not redistributed.

On this page

☧ 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.