Credential Reuse Leading to Domain Controller Compromise in an Active Directory Environment

Search for a command to run...

No comments yet. Be the first to comment.
Overview During a penetration test of a Web Applications API, I discovered a vulnerability in the password reset functionality that allowed an attacker to intercept reset tokens and take over user accounts. By manipulating a user-controllable field i...

During a web application assessment, I discovered an exposed .git directory that allowed me to download the application's entire source code. By extracting and analysing the git objects, I identified hardcoded credentials that granted admin-level acc...

Overview During a web application penetration test, I identified a broken access control issue that allowed a low-privileged user to escalate their privileges to administrator. The issue was easy to identify and had a high impact, as it allowed full ...

Overview During a black-box web application penetration test, I identified an unauthenticated SQL injection vulnerability that could be escalated to remote command execution. Although SQL injection vulnerabilities are less common today, this finding ...

Overview During a penetration test of a web application, I identified a flawed two-factor authentication implementation that could be bypassed using brute-force techniques. This finding demonstrates that poorly implemented two-factor authentication (...

Cyber Sekler
7 posts
During an internal Active Directory penetration test, I achieved Domain Controller compromise through credential abuse and lateral movement. The attack relied entirely on well-known tooling and common post-authentication techniques. This matters because it demonstrates how basic credential hygiene failures can lead directly to full domain compromise.
The objective of the engagement was to assess the security posture of a corporate Active Directory environment. Testing was conducted in an authenticated, black-box context using a single set of domain credentials. No administrative privileges were assumed at the start of testing.
After validating the provided credentials, I performed light enumeration to understand the level of access available and identify potential opportunities for further access. During this step, I identified the presence of a local administrator account on a system accessible with the supplied credentials.
Based on this observation, I attempted to extract local account password hashes. Using Impacket’s secretsdump.py, I dumped the local user password hashes from the system.
Example command used:
secretsdump.py domain/user@10.x.x.x
I initially attempted to crack the extracted hashes offline. This, however, was unsuccessful; I pivoted to testing whether the extracted hash could be reused across other systems in the environment.
After extracting the local administrator hash, I tested whether it could be reused to authenticate to other systems. Using a pass-the-hash attack, the same credential was accepted by multiple hosts, including the Domain Controller.
Example command used:
crackmapexec smb 10.x.x.x/24 -u admin -d domain -H <HASH>
This demonstrated that the local administrator password was reused across multiple machines. Most importantly, the hash successfully authenticated against the Domain Controller, resulting in administrative-level access.
With authentication established, I moved on to command execution. After evaluating available execution options, I obtained a semi-interactive shell on the Domain Controller using Impacket’s smbexec.py.

At this stage, command execution on the Domain Controller was confirmed, and the compromise was considered complete. The relevant stakeholders were notified so that remediation could begin.
Reusing local administrator passwords can turn a single compromised host into full domain compromise. Defenders should enforce unique local administrator credentials, for example, through LAPS, and continuously monitor for lateral authentication activity.