Skip to main content

AdPentestAI-Python

Active Directory penetration testing framework with automatic Domain Controller detection.

Features

  • Auto DC Detection — discovers Domain Controllers via DNS SRV records, LDAP RootDSE probes, and port fingerprinting
  • Subnet expansion — scans /24 first, widens to /23 if no DC found
  • Domain auto-discovery — extracts domain name from LDAP RootDSE defaultNamingContext
  • DC FQDN resolution — multi-source FQDN lookup with live LDAP probe fallback, forward DNS verification
  • DC-aware tool execution — passes discovered domain, DC IP, and FQDN to tools
  • 29 AD/SMB/Kerberos/ADCS/Email tools — 12 cross-platform binaries + 3 Windows-native PowerShell + 3 Kerberos attack + 4 ADCS certificate attacks + 5 Email protocol enumeration
  • SMB pentesting — null session detection, share enumeration, SMB signing detection, credential testing
  • Windows-native tools — built-in PowerShell enumeration for LDAP, SMB, and AD forest discovery (no external dependencies on Windows)
  • Cross-platform — runs on Linux, macOS, and Windows with platform-specific optimizations
  • Auto-install — missing tools installed automatically via apt/pip/git (or native on Windows)
  • Safetydry-run is the default; --scope-confirmed required for authorization

DC Detection Strategies

  1. DNS SRV — queries _ldap._tcp.dc._msdcs.<domain>, _kerberos._tcp.dc._msdcs.<domain>, etc.
  2. LDAP RootDSE — anonymous bind to extract domain, forest level, hostname
  3. Port fingerprint — checks Kerberos (88), LDAP (389/636), Global Catalog (3268/3269)
  4. Subnet sweep — Kerberos port 88 quick-scan on /24, expands to /23, then /22 if no DCs found

SMB Pentesting Capabilities

  • Null session detection — checks if targets allow anonymous SMB access (IPC$)
  • Share enumeration — discovers available SMB shares via CrackMapExec and smbmap
  • SMB signing detection — identifies if SMB message signing is enforced (via nmap scripts)
  • Credential testing — attempts connection with guest/empty credentials via impacket tools
  • Secretsdump — extracts NTLM hashes and session keys when null credentials work
  • PsExec simulation — tests command execution capability via impacket psexec

Kerberos/Kerberoasting Attack Vectors

  • GetUserSPNs — enumerates service principal names (SPN) via LDAP (custom implementation, no impacket needed)
  • AS-REP Roasting — targets accounts with DONT_REQUIRE_PREAUTH flag for offline cracking
  • Kerberoasting — extracts and cracks service account tickets via TGS-REQ requests
  • Requires: null/guest credentials or valid domain account (LDAP access for SPN enumeration)
  • Output formats: .txt files compatible with Hashcat/John for cracking
  • Implementation: Pure Python LDAP-based tools (ldap3, no external binaries)

ADCS Certificate Attack Vectors

  • Shadow Credentials — exploits ADCS to inject shadow credentials for account takeover via certificate-based authentication
  • ESC1 — template misconfiguration allowing client authentication without enrollment agent
  • ESC3 — enrollment agent misconfig enabling privilege escalation via certificate requests
  • ESC9 — object control abuse via ADCS certificate manipulation
  • Tools: Certipy-AD automated enumeration and exploitation
  • Attack chain: certificate enumeration → template analysis → credential extraction → privilege escalation

Windows-Native Tools

PowerShell enumeration (built-in, no external dependencies on Windows):

  • powershell_ldap_enum — LDAP RootDSE queries via .NET DirectoryServices
  • powershell_smb_enum — SMB share enumeration via Get-SmbShare
  • powershell_ad_recon — Forest/domain/DC discovery via AD API

Python-based Enumeration Engines:

  • enum_windows_py — Pure Python enum4linux-ng replacement (LDAP + SMB + policy enumeration)

    • Null session detection and exploitation
    • Domain policy extraction (password complexity, lockout settings)
    • SMB share discovery via impacket
    • Works on Windows, Linux, macOS
    • Uses ldap3 + impacket (already required dependencies)
  • SPNEnumerator — Custom LDAP-based Service Principal Name enumeration

    • Direct LDAP queries to extract SPNs without impacket.examples.GetUserSPNs
    • Anonymous LDAP bind capability
    • Hashcat/John compatible output format
    • Pure Python implementation (ldap3 only)

Cross-platform Tools:

  • 12 binary tools (nmap, masscan, crackmapexec, smbmap, bloodhound, etc.)
  • All tools auto-install via apt/pip/git based on platform

Email Protocol Enumeration & Credential Testing

Pure Python email enumeration (no external dependencies):

  • SMTP User Enumeration — Discover valid email addresses via:

    • SMTP VRFY command (traditional user discovery)
    • SMTP RCPT TO validation (validate recipient addresses)
    • Service banner detection (Exchange/Postfix/Sendmail identification)
    • Ports: 25 (plain), 465 (SMTPS), 587 (SMTP TLS)
  • Credential Testing with Protocol Fallback — Automatic fallback chain:

    • Primary: SMTP AUTH (ports 25, 465, 587)
    • Fallback: POP3 AUTH (ports 110, 995)
    • Fallback: IMAP AUTH (ports 143, 993)
    • Tests multiple credentials until success or all protocols exhausted
    • Supports TLS/SSL connections for secure ports
  • Email Service Detection — Identify email infrastructure:

    • Exchange on-premises (2016, 2019, 2021)
    • Office 365 cloud detection (outlook.office365.com routing)
    • Server banner parsing and version detection
    • Concurrent port scanning for email services
  • Implementation: Pure Python using standard library (smtplib, poplib, imaplib)

    • No external tool dependencies
    • Cross-platform (Windows, Linux, macOS)
    • Works on any Python 3.10+ environment

Output Format:

  • Valid users discovered via SMTP enumeration
  • Working credentials (username, password, protocol, server, port)
  • Email service type and version
  • Protocol availability (which protocols respond on target)
  • Comprehensive failure logging for debugging

Run

# Dry-run (check tools, detect DCs, preview commands)
python -m adpentest --target 10.0.0.1 --mode dry-run --scope-confirmed

# Active scan with auto DC detection
python -m adpentest --target corp.local --mode active --scope-confirmed

# With custom timeout, no auto-install
python -m adpentest --target 192.168.1.10 --mode active --scope-confirmed --timeout 600 --no-auto-install

# With custom DNS servers (fallback to public DNS on failure)
python -m adpentest --target 192.168.1.10 --mode active --scope-confirmed --dns-server 1.1.1.1,1.0.0.1

# With custom DNS timeout (in seconds)
python -m adpentest --target 192.168.1.10 --mode active --scope-confirmed --dns-timeout 5.0

DNS Configuration

The framework supports flexible DNS resolver configuration with automatic fallback:

CLI Arguments

  • --dns-server <servers> — Comma-separated list of custom DNS servers (e.g., 8.8.8.8,8.8.4.4)
  • --dns-timeout <seconds> — DNS query timeout in seconds (default: 3.0)

Environment Variables

  • DNS_SERVERS — Comma-separated DNS servers (e.g., export DNS_SERVERS=8.8.8.8,8.8.4.4)
  • DNS_TIMEOUT — DNS query timeout in seconds (e.g., export DNS_TIMEOUT=5.0)

Priority Order

  1. CLI Arguments (--dns-server, --dns-timeout) — Highest priority
  2. Environment Variables (DNS_SERVERS, DNS_TIMEOUT)
  3. System Default DNS — Automatically detected from system configuration
  4. Public DNS Fallback — Automatically uses 8.8.8.8, 8.8.4.4, 1.1.1.1, 1.0.0.1 if others fail

Examples

# Use custom DNS servers from CLI
python -m adpentest --target corp.local --mode active --scope-confirmed --dns-server 192.168.1.1,8.8.8.8

# Use environment variables for DNS
export DNS_SERVERS=192.168.1.1,1.1.1.1
export DNS_TIMEOUT=5.0
python -m adpentest --target corp.local --mode active --scope-confirmed

# Combine CLI with custom timeout
python -m adpentest --target corp.local --mode active --scope-confirmed --dns-server 8.8.8.8 --dns-timeout 10.0

Resolver Behavior

  • System DNS is queried first by default
  • Automatic fallback to public DNS (Cloudflare, Google) on timeout or resolution failure
  • Detailed logging shows which resolver is used and why (system, environment, CLI, or fallback)
  • All DNS functions (SRV records, PTR lookups, forward resolution) use centralized configuration

Requirements

  • Python 3.10+
  • dnspython, ldap3, httpx

This project does not authorize testing by itself. Operators must supply an explicitly authorized scope.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

adpentest-1.0.2.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

adpentest-1.0.2-py3-none-any.whl (36.3 kB view details)

Uploaded Python 3

File details

Details for the file adpentest-1.0.2.tar.gz.

File metadata

  • Download URL: adpentest-1.0.2.tar.gz
  • Upload date:
  • Size: 39.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for adpentest-1.0.2.tar.gz
Algorithm Hash digest
SHA256 0326a1189c1e59f054f2ccc9e195636587057b747a43549fe6f088ce61cedaf7
MD5 81fa81125fb76a41c71c609de7f84e9d
BLAKE2b-256 84db5741e6d37f370289a47c8d14dab684865ad78afad3fd719b5dc5f58c3d58

See more details on using hashes here.

File details

Details for the file adpentest-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: adpentest-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 36.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for adpentest-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 abbf7f36f667a908d2131ad908334eda8a6de7f891c2fc9bcc89559b8bd10659
MD5 dcf4f3893db981f4a7bb23f574de69ba
BLAKE2b-256 536941b4ed2758dcbd01b3682d7b0f8687751f7730b37f9f4fe43c62a148b6ca

See more details on using hashes here.

Release history Release notifications | RSS feed

1.2.1

2 files

1.2.0

2 files

1.1.5

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1.3

2 files

1.1.1.2

2 files

1.1.1.1

2 files

1.1.1

2 files

1.1.0

2 files

This release

1.0.2 This release

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page