netanelcyber / netanelcyber/AdPentestAI-Python

Email: Exchange version detection and fingerprinting

Open
#19 1 comment 0 reactions 1 assignee View on GitHub

@tenten48tenten is already working on this.

Since Sep 16, 2026.

email-enumeration exchange help-wanted v1.1.0
Dominant language
Python
Stars
5
Forks
2
Avg merge
22h 25m
Merged PRs (30d)
7

Description

Description

Implement comprehensive Exchange Server version detection and detailed fingerprinting capabilities.

Detection Methods

  1. SMTP Banner Analysis

    • Parse SMTP banner for version info
    • Extract server release date
    • Identify build number
    • Examples:
      • "Microsoft ESMTP MAIL Service Version..."
      • "Exchange 2016 RTM"
      • "Exchange Online"
  2. HTTP Headers

    • OWA Server header
    • EWS endpoint version information
    • X-Powered-By headers
    • X-AspNet-Version
  3. EWS Endpoint Analysis

    • Query /EWS/Exchange.asmx
    • Parse WSDL for version
    • Enumerate mailbox version
    • Detect server roles (Mailbox, CAS, DAG)
  4. LDAP Detection

    • Query msDSMaximumCompatibilityLevel
    • Parse servicePrincipalName patterns
    • Identify global catalog servers
    • Version-specific AD attributes
  5. ActiveSync Probing

    • EAS version negotiation
    • Device policy version
    • Server capabilities

Output Format

{
  \"exchange\": {
    \"detected\": true,
    \"version\": \"2019\",
    \"build\": \"15.02.1779.001\",
    \"service_pack\": \"CU22\",
    \"roles\": [\"Mailbox\", \"CAS\"],
    \"hybrid\": false,
    \"is_online\": false,
    \"detection_methods\": [\"smtp_banner\", \"ews_query\", \"ldap\"]
  }
}

Files to Update

  • adpentest/core.py - Add Exchange detection functions
  • Enhance: detect_exchange_ews()

Success Criteria

  • Detect Exchange 2010, 2013, 2016, 2019, 2021, Online
  • Accurate version identification > 95%
  • Build number extraction
  • Service pack identification
  • Hybrid configuration detection

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.