NMAP:网络探索和安全审计手册 Chapter6 扫描邮件服务器

本章包括以下食谱:

  • 检测 SMTP 开放式中继

  • 暴力破解 SMTP 密码

  • 检测可疑 SMTP 服务器

  • 枚举 SMTP 用户名

  • 暴力破解 IMAP 密码

  • 检索 IMAP 服务器的功能

  • 暴力破解 POP3 密码

  • 检索 POP3 服务器的功能

  • 通过 NTLM 身份验证从 SMTP 服务器检索信息

引言

几乎所有组织都有邮件服务器,因为显而易见,电子邮件已成为首选通信渠道。邮件服务器作用的重要性取决于其中存储的信息。攻击者通常会入侵一个电子邮件账户,然后利用几乎所有网络应用程序中的忘记密码功能接管所有其他账户。有时,被入侵的账户会被窃听数月而无人察觉,甚至会被垃圾邮件发送者滥用。因此,任何优秀的系统管理员都知道,拥有一个安全的邮件服务器是至关重要的。

在本章中,我将介绍管理和监控邮件服务器的不同 NSE 任务。我还将展示渗透测试人员可以使用的攻击手段。我们将介绍最常用的邮件协议,如 SMTP、POP3 和 IMAP。

我们将回顾与邮件协议相关的任务,如检索功能、枚举用户,甚至暴力破解密码。

检测 SMTP 开放式中继

开放式中继是不安全的邮件服务器,允许第三方域在未经授权的情况下使用。它们被垃圾邮件发送者和网络钓鱼者滥用,并给企业带来严重风险,因为公共垃圾邮件黑名单可能会添加中继服务器,并根据电子邮件到达目的地的情况影响整个企业。

本教程介绍如何使用 Nmap 检测 SMTP 开放式中继。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -sV --script smtp-open-relay -v <target> 

如果 SMTP 服务器是开放式中继,输出会返回通过测试的次数和使用的命令组合:

 Host script results: 

 | smtp-open-relay: Server is an open relay (1/16 tests) 

 |_MAIL FROM:<antispam@insecure.org> -> RCPT TO: 

 <relaytest@insecure.org> 

How it works...

smtp-open-relay 脚本由 Arturo Buanzo Busleiman 提交,它尝试了 16 种不同的测试,以确定 SMTP 服务器是否允许开放中继。如果开启详细说明模式,它还会返回成功中继电子邮件的命令。

命令组合是脚本中的硬编码,测试包括目标地址和源地址的不同字符串格式:

 MAIL FROM:<user@domain.com> 

 250 Address Ok. 

 RCPTTO:<user@adomain.com> 

 250 user@adomain.com OK 

如果收到 503 响应,脚本将退出,因为这意味着该服务器受身份验证保护,不是开放中继。

如果端口 25、465 和 587 已打开,或在目标主机中找到 smtp、smtps 或 submission 服务(-sV --script smtp-open-relay),则执行 smtp-open-relay 脚本。

There's more...

您可以通过设置脚本参数 smtp-open-relay.ip 和 smtp-open-relay.domain,指定备用 IP 地址或域名:

$ nmap -sV --script smtp-open-relay --script-args smtp-open-relay.ip=<ip> <target> 

$ nmap -sV --script smtp-open-relay --script-args smtp-open-relay.domain=<domain> <target> 

使用脚本参数 smtp-open-relay.to 和 smtp-open-relay.from,分别设置测试中使用的源电子邮件地址和目标电子邮件地址:

$ nmap -sV --script smtp-open-relay -v --script-args smtp-open-relay.to=<Destination e-mail address>,smtp-open-relay.from=<Source e-mail address> <target> 

暴力破解 SMTP 密码

邮件服务器通常存储非常敏感的信息。企业使用强密码策略至关重要,因此渗透测试人员需要对它们执行暴力密码审计,以检查弱密码。

本教程将向您展示如何使用 Nmap 对 SMTP 服务器进行字典攻击。

How to do it...

要使用 Nmap 对 SMTP 服务器进行字典攻击,请输入以下命令:

$ nmap -p25 --script smtp-brute <target> 

如果找到任何有效凭证,它们将被包含在脚本输出部分:

 PORT STATE SERVICE REASON 
 25/tcp open stmp syn-ack 
 | smtp-brute: 
 | Accounts 
 | acc0:test - Valid credentials 
 | acc1:test - Valid credentials 
 | acc3:password - Valid credentials 
 | acc4:12345 - Valid credentials 
 | Statistics 
 |_ Performed 3190 guesses in 81 seconds, average tps: 39 

How it works...

NSE 脚本 smtp-brute 由 Patrik Karlsson 提交。它针对 SMTP 服务器执行暴力密码审计。它支持以下验证方法:LOGIN、PLAIN、CRAM-MD5、DIGEST-MD5 和 NTLM。

默认情况下,脚本使用 /nselib/data/usernames.lst 和 /nselib/data/passwords.lst,但也可以很容易地修改为使用其他单词表。

参数 -p25 --script smtp-brute 使 nmap 在发现 SMTP 服务器在 25 端口运行时启动 NSE 脚本 smtp-brute。

There's more...

运行不带参数的 smtp-brute 脚本很少会返回有效账户,因为大多数邮件服务器都要求使用完整的合格域名进行验证。因此,强烈建议在启动密码暴力破解攻击前自定义用户名列表。

NSE 脚本 smtp-brute 依赖于可高度配置的 brute 库。请阅读附录 B "暴力密码审计选项",了解更多可用的高级选项。

检测可疑的 SMTP 服务器

被入侵的服务器可能安装了流氓 SMTP 服务器,并被垃圾邮件发送者滥用。系统管理员可以使用 Nmap 帮助他们监控网络中的邮件服务器。

本食谱介绍如何使用 Nmap 检测恶意 SMTP 服务器。

How to do it...

打开终端,输入以下 Nmap 命令:

$ nmap -sV --script smtp-strangeport <target> 

如果在非标准端口上发现邮件服务器,将在脚本输出部分报告:

PORT STATE SERVICE VERSION

 9999/tcp open ssl/smtp Postfix smtpd 
 |_smtp-strangeport: Mail server on unusual port: possible malware 

How it works...

The smtp-strangeport script was submitted by Diman Todorov. It detects SMTP servers running on nonstandard ports, which is an indicator of rogue mail servers. If an SMTP server is found running on a port other than 25, 465, and 587, this script will notify you.

The arguments -sV --script smtp-strangeport make nmap start service detection and launch the NSE script smtp-strangeport which will compare the port numbers on which SMTP servers were found against the known port numbers 25, 465, and 587.

There's more...

We can use this script to set up a monitoring system for your mail server that will notify you if a rogue SMTP server is found. First, create the /usr/local/share/nmap-mailmon/ folder.

Scan your host and save the results in the mailmon directory we just created:

$nmap -oX /usr/local/share/nmap-mailmon/base.xml -sV -p- -Pn <target> 

The resulting file will be used to compare results, and it should reflect your known list of services. Now, create the file nmap-mailmon.sh:

#Bash script to e-mail admin when changes are detected in a network
 using Nmap and Ndiff.
 #
 #Don't forget to adjust the CONFIGURATION variables.
 #Paulino Calderon<paulino@calderonpale.com>
 #
 #CONFIGURATION
 #
 NETWORK="YOURDOMAIN.COM"
 ADMIN=YOUR@E-MAIL.COM
 NMAP_FLAGS="-sV -Pn -p- --script smtp-strangeport"
 BASE_PATH=/usr/local/share/nmap-mailmon/
 BIN_PATH=/usr/local/bin/
 BASE_FILE=base.xml
 NDIFF_FILE=ndiff.log
 NEW_RESULTS_FILE=newscanresults.xml
 BASE_RESULTS="$BASE_PATH$BASE_FILE"
 NEW_RESULTS="$BASE_PATH$NEW_RESULTS_FILE"
 NDIFF_RESULTS="$BASE_PATH$NDIFF_FILE"
 if [ -f $BASE_RESULTS ]
 then
 echo "Checking host $NETWORK"
 ${BIN_PATH}nmap -oX $NEW_RESULTS $NMAP_FLAGS $NETWORK
 ${BIN_PATH}ndiff $BASE_RESULTS $NEW_RESULTS> $NDIFF_RESULTS
 if [ $(cat $NDIFF_RESULTS | wc -l) -gt 0 ]
 then
 echo "Network changes detected in $NETWORK"
 cat $NDIFF_RESULTS
 echo "Alerting admin $ADMIN"
 mail -s "Network changes detected in $NETWORK" $ADMIN <
 $NDIFF_RESULTS
 fi
 fi

现在更新以下配置值:

 NETWORK="YOURDOMAIN.COM"
 ADMIN=YOUR@E-MAIL.COM
 NMAP_FLAGS="-sV -Pn -p- -T4 --script smtp-strangeport"
 BASE_PATH=/usr/local/share/nmap-mailmon/
 BIN_PATH=/usr/local/bin/
 BASE_FILE=base.xml
 NDIFF_FILE=ndiff.log
 NEW_RESULTS_FILE=newscanresults.xml

使用以下命令使 nmap-mailmon.sh 脚本可执行:

#chmod +x /usr/local/share/nmap-mailmon/nmap-mailmon.sh 

现在可以添加以下 crontab 条目来自动运行该脚本:

 0 * * * * /usr/local/share/nmap-mon/nmap-mon.sh 

重新启动 cron,你应该已经成功地为邮件服务器安装了一个监控系统,一旦发现恶意 SMTP 服务器,它就会通知你。

枚举 SMTP 用户名

作为用户名使用的电子邮件帐户在网络应用程序中非常常见。访问电子邮件账户可能意味着访问敏感数据,包括访问其他服务的更多凭证。不幸的是,作为攻击者,我们有时甚至没有用户名列表。因此,查找有效用户是审计邮件服务器的第一步。通过 SMTP 命令枚举用户可以获得很好的结果,多亏了 Nmap 脚本引擎,我们可以自动完成这项任务。

本食谱演示如何使用 Nmap 枚举 SMTP 服务器上的用户。

How to do it...

要使用 Nmap 枚举 SMTP 服务器的用户,请输入以下命令:

$ nmap -p25 --script smtp-enum-users <target> 

找到的任何用户名都将包含在脚本输出部分:

 `Host script results: 
 | smtp-enum-users: 
 |_ RCPT, webmaster 

How it works...

smtp-enum-users 脚本由 Duarte Silva 编写,它尝试使用 SMTP 命令 RCPT、VRFY 和 EXPN 枚举 SMTP 服务器中的用户。

SMTP 命令 RCPT、VRFY 和 EXPN 可用于确定邮件服务器上是否存在账户。我们只看 VRFY 命令,因为它们的工作方式类似:

 VRFY root 
 250 root@domain.com 
 VRFYeaeaea 
 550 eaeaea... User unknown 

请注意,该脚本仅适用于不需要身份验证的 SMTP 服务器。如果是这种情况,您将看到以下信息:

 | smtp-enum-users: 
 |_ Couldn't perform user enumeration, authentication needed 

There's more...

您可以使用脚本参数 smtp-enum-users.methods,选择要尝试的方法(RCPT、VRFY 和 EXPN)以及尝试的顺序:

$ nmap -p25 --script smtp-enum-users --script-args smtp-enum-users.methods={VRFY,EXPN,RCPT} <target> 

$ nmap -p25 --script smtp-enum-users --script-args smtp-enum-users.methods={RCPT, VRFY} <target> 

要在 SMTP 命令中设置不同的域,请使用脚本参数 smtp-enum-users.domain:

$ nmap -p25 --script smtp-enum-users --script-args smtp-enum-users.domain=<domain> <target> 

NSE 脚本 smtp-enum-users 依赖于可高度配置的 unpwdb 库。阅读附录 B "暴力密码审计选项",了解更多可用的高级选项。

暴力破解 IMAP 密码

邮件服务器通常存储非常敏感的信息。组织使用强大的密码策略至关重要,因此渗透测试人员需要对它们执行暴力密码审计,以检查弱密码。

本教程将向您展示如何使用 Nmap 对 IMAP 服务器发起字典攻击。

How to do it...

要对 IMAP 执行暴力密码审计,请使用以下命令:

$ nmap -p143 --script imap-brute <target> 

所有找到的有效账户都将列在脚本输出部分:

 PORT STATE SERVICE REASON 
 143/tcp open imap syn-ack 
 | imap-brute: 
 | Accounts 
 | acc1:test - Valid credentials 
 | webmaster:webmaster - Valid credentials 
 | Statistics 
 |_ Performed 112 guesses in 112 seconds, average tps: 1 

How it works...

imap-brute 脚本由 Patrik Karlsson 提交,可对 IMAP 服务器进行密码暴力审核。它支持 LOGIN、PLAIN、CRAM-MD5、DIGEST-MD5 和 NTLM 身份验证。

默认情况下,脚本使用 /nselib/data/usernames.lst 和 /nselib/data/passwords.lst,但可以通过配置暴力库来更改。

参数 -p143 --script imap-brute 命令 nmap 在发现 IMAP 在 143 端口运行时启动 imap-brute 脚本。

There's more...

运行不带参数的 imap-brute 脚本很少会返回有效账户,因为大多数邮件服务器都要求使用完全合格的域名进行验证。因此,强烈建议在启动密码暴力破解攻击前自定义用户名列表。

NSE 脚本 imap-brute 依赖于可高度配置的暴力库。请阅读附录 B "暴力密码审计选项",了解更多可用的高级选项。

检索 IMAP 服务器的功能

IMAP 服务器可能支持不同的功能。有一个名为 "能力 "的命令允许客户端列出这些支持的邮件服务器能力,我们可以使用 Nmap 自动执行这项任务。

本食谱向您展示如何使用 Nmap 列出 IMAP 服务器的功能。

How to do it...

打开您喜欢的终端,输入以下 nmap 命令:

$ nmap -p143,993 --script imap-capabilities <target>

结果将包含在脚本输出部分:

 993/tcp openssl/imap Dovecot imapd 
 |_imap-capabilities: LOGIN-REFERRALS completed AUTH=PLAIN OK 
 Capability UNSELECT THREAD=REFERENCES AUTH=LOGINA0001IMAP4rev1 
 NAMESPACE SORT CHILDREN LITERAL+ IDLE SASL-IRMULTIAPPEND 

How it works...

imap-capabilities 脚本由 Brandon Enright 提交,它试图使用 RFC 3501 中定义的能力命令列出 IMAP 服务器支持的功能。

参数 NSE script -p143,993 --script imap-capabilities 告诉 Nmap 在发现 IMAP 服务器在 143 或 993 端口运行时启动 imap-capabilities。

There's more...

IMAP 服务器可能在非标准端口上运行。使用 Nmap 服务检测 (-sV) 并通过指定端口参数 (-p) 手动设置端口:

$ nmap -sV --script imap-capabilities <target> 
$ nmap -sV -p1234 --script imap-capabilities <target> 

暴力破解 POP3 密码

邮件服务器通常存储非常敏感的信息。企业使用强密码策略至关重要,因此渗透测试人员需要对它们执行暴力密码审计,以检查弱密码。

本教程将向您展示如何使用 Nmap 对 POP3 服务器进行字典攻击。

How to do it...

要使用 Nmap 对 POP3 发起字典攻击,请输入以下命令:

$ nmap -p110 --script pop3-brute <target> 

任何有效账户都将列在脚本输出部分:

 PORT STATE SERVICE 

 110/tcp open pop3 

 | pop3-brute: webmaster : abc123 

 |_acc1 : password 

How it works...

pop3-brute 脚本由 Philip Pickering 提交,用于对 POP3 服务器进行密码暴力审核。默认情况下,该脚本使用单词表 /nselib/data/usernames.lst 和 /nselib/data/passwords.lst,但可以通过配置暴力库来更改。

参数 -p110 --script pop3-brute 命令 Nmap 在发现 IMAP 在 143 端口运行时启动 pop3-brute 脚本。

There's more...

在不带参数的情况下运行 pop3-brute 脚本很少会返回有效账户,因为大多数邮件服务器都要求使用完全合格的域名进行验证。因此,强烈建议在启动密码暴力破解攻击前自定义用户名列表。

NSE 脚本 pop3-brute 依赖于可高度配置的暴力库。请阅读附录 B "暴力密码审计选项",了解更多可用的高级选项。

检索 POP3 服务器的功能

POP3 邮件服务器可能支持 RFC 2449 中定义的不同功能。使用 pop3 命令,我们可以列出它们,多亏了 Nmap,我们可以自动完成这项任务,并在扫描结果中包含这些服务信息。

本食谱将教你如何使用 Nmap 列出 POP3 邮件服务器的功能。

How to do it...

打开您喜欢的终端,输入以下 Nmap 命令:

$ nmap -p110 --script pop3-capabilities <target> 

脚本输出部分将包含服务器功能列表:

 PORT STATE SERVICE 
 110/tcp open pop3 
 |_pop3-capabilities: USER CAPAUIDL TOP OK(K) RESP-CODES PIPELINING 
 STLSSASL(PLAIN LOGIN) 

How it works...

pop3-capabilities 脚本由 Philip Pickering 提交,它试图检索 POP3 和 POP3S 服务器的功能。它使用 POP3 命令 CAPA 来询问服务器支持的命令列表。该脚本还尝试通过实施字符串检索版本字符串,以及任何其他特定站点的策略。

There's more...

pop3-capabilities 脚本适用于 POP3 和 POP3S。可使用 nmap 服务扫描检测在非标准端口上运行的邮件服务器:

$ nmap -sV --script pop3-capabilities <target> 

通过 NTLM 身份验证从 SMTP 服务器检索信息

采用 NTLM 身份验证的 SMTP 服务器会披露 NetBIOS、DNS 和操作系统构建版本信息。这些信息非常有用,可以在身份验证前对系统进行准确的指纹识别。

本教程介绍如何使用 Nmap 从启用 NTLM 身份验证的 SMTP 服务器中提取信息。

How to do it...

要使用 NTLM 从 SMTP 服务器检索信息,请运行以下命令:

$ nmap -p25,465,587 --script smtp-ntlm-info --script-args smtp-ntlm-info.domain=<target domain> <target> 

结果将包括脚本输出部分中的 NetBIOS、DNS 和操作系统构建版本信息:

 25/tcp open smtp 
 | smtp-ntlm-info: 
 | Target_Name: SMTP 
 | NetBIOS_Domain_Name: SMTP 
 | NetBIOS_Computer_Name: SMTP 
 | DNS_Domain_Name: 0xdeadbeefcafe.com 
 | DNS_Computer_Name: smtp.0xdeadbeefcafe.com 
 | DNS_Tree_Name: 0xdeadbeefcafe.com 
 |_ Product_Version: 6.1.420 

How it works...

如果在 SMTP 端口启用了 NTLM,参数 -p25,465,587 --script smtp-ntlm-info --script-args smtp-ntlm-info.domain= 将启动 NSE 脚本 smtp-ntlm-info。

smtp-ntlm-info 脚本由 Justin Cacak 提交。它的工作原理是发送一个畸形的 MS-TDS NTLM 身份验证请求,使服务器响应一个 NTLMSSP 消息,从而揭示前面提到的信息。

There's more...

在其他支持 NTLM 身份验证的协议(如 HTTP、IMAP、SMTP、TELNET、NNTP 和 POP3)中也可观察到前面描述的行为。如果这些协议中的任何一个启用了 NTLM 身份验证,那么在发送带有空凭证的身份验证请求时,就会泄露 NetBIOS、DNS 和操作系统构建版本信息。我们还可以使用 NSE 脚本快速使用此技术获取其他网络信息,如 http-ntlm-info、smtp-ntlm-info、telnet-ntlm-info、nntp-ntlm-info 和 pop3-ntlm-info。