SMTP使用与安全/漏洞 (postfix)

-- 使用 --

邮件介绍

  • MX记录(Mail Exchange Record): 用于在邮件发送到某域名时, 将域名指向 邮件服务器地址
  • A记录(Address Record): 用于将域名解析到服务器的IP地址
  • SPF记录(Sender Policy Framework): 声明哪些服务器有权以该域名发送邮件
    许多正规的邮件厂商接收邮件后 都会检测邮件的来源与SPF记录, 来判断是否为钓鱼邮件
    如某邮件的寄件人为test@test.cn, 来源ip为100.100.100.100 ,
    厂商收到后会查询test.cn域名的SPF记录, 查看是否包含100.100.100.100, 若不包含, 判定为垃圾邮件
  • DKIM记录: 用于检测邮件在发送过程中是否被篡改 (需自行配置以达成以下功能)
    发件服务器生成一对公私钥, 公钥发布在发件服务器域名的DNS中, 私钥用于对邮件头部和内容进行加密签名, 收件服务器收到邮件后, 提取公钥解密签名, 对比邮件内容是否一致, 一致则通过验证
  • DMARC记录: 明确告知收件服务器如何处理未通过 SPF/DKIM 验证的邮件(如拒收、隔离或放行),同时收集认证数据以优化策略
  • 注: MX记录 A记录 SPF记录 DKIM记录 DMARC记录 都是关键的DNS配置,
    其中SPF/DKIM/DMARC 一般在TXT记录中设置

SMTP流程

  • SMTP连接建立
    1. 客户端连接服务器的25端口(默认的SMTP端口),
      服务器返回220 (表示服务已就绪)
    2. 客户端发送HELO <身份>EHLO <身份>,
      告知服务器使用者身份, 用于标识连接来源 (通常为使用者 域名/主机名)
      服务器返回250(表示命令成功), 并显示 服务器的完整域名(即配置项中的hostname)
      (用EHLO还会列出SMTP服务支持的扩展功能)
  • 邮箱发送
    1. 客户端发送MAIL FROM:<指定发件人邮箱>,
      服务端返回250(表示命令成功)
    2. 客户端发送RCPT TO:<指定收件人邮箱>,
      服务端会根据权限配置呈现不同的回显
    3. 认证(可选): 客户端发送AUTH <认证方式>后, 可输入账户和密码进行登录
      服务端支持的验证方式可通过使用EHLO时的回显来知晓, 常见的有LOGIN(base64), PLAIN(明文)
    4. 客户端发送DATA, 表示开始输入邮件内容,
      服务端返回354(表示开始邮件输入)
    5. 客户端发送 邮件内容(其中用单独一行的句点代表输入结束),
      服务端返回250(表示邮件接收成功)
    6. 服务端会判断邮件是否为本地,
      若为本地, 直接发送到本地系统用户的邮箱中(/var/mail中)
      若非本地, 则中继转发到目标域名中(也叫发送中继邮件)
  • 连接关闭: 客户端发送QUIT, 服务端返回状态码221(表示连接已关闭)

基础

  • 邮件头: 邮件头都是邮件自身的内容(相当于元信息), 不会影响邮件发送过程, 只影响接收后的解析
    FROM: <邮件显示的发送者>
    TO: <邮件显示的接收者>
    Subject: <邮件的主题/标题>
    Date: <邮件的发送时间>
    Cc: <邮件的抄送接收者>
    Bcc: <邮件的密送接收者>
    Reply-To: <回复邮件时使用的地址>
    Importance: <邮件的重要性级别>
    MIME-Version: <邮件的MIME版本>
    Content-Type: <邮件正文内容的类型及编码方式>
    Content-Disposition: <邮件附件的处理方式>
    Message-ID: <邮件的唯一标识符>
    In-Reply-To: <针对哪封邮件进行回复的标识符>
    References: <相关邮件的标识符列表>
    Return-Path: <邮件的退回地址>
    X-Priority: <邮件的优先级>
  • 配置文件配置项 ( /etc/postfix/main.cf )
    .mydomain = 定义邮件服务器的主域名
    (通常是myhostname的父域名, 若未设置该配置项, 自动截取myhostname中第一个.后的部分)
    .relay_domains = 定义允许中继转发的中继域名 (若无该配置项, 则默认允许允许所有域名中继转发)
    myhostname = kali.localdomain 定义邮件服务器的完整域名
    myorigin = $myhostname 定义外发邮件的默认域名(发件人地址@后部分, 未填写则自动用该值)
    inet_interfaces = all 设置监听的ip ( all代表监听所有 )
    mydestination = $myhostname, localhost 声明哪些邮箱后缀被认定为本地邮件
    smtpd_banner = $myhostname ESMTP $mail_name (Debian) 定义连接到smtp服务后的欢迎语
    mynetworks = 127.0.0.0/8 定义允许直接投递邮件(无需认证)的客户端IP范围
    (mynetworks配置项本身并无作用, 只有再被smtpd_relay_restrictions和smtpd_relay_restrictions配置项中用permit_mynetworks引用时才有作用)
  • 认证配置
    .smtpd_sasl_auth_enable = yes 是否开启SASL认证功能
    .smtpd_sasl_security_options = noanonymous
    .broken_sasl_auth_clients = yes
  • 权限配置
    配置项:

    • smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
      作用: 配置 发送中继邮件 的权限规则
    • .smtpd_recipient_restrictions =
      作用: 配置 发送本地文件 的权限规则 (默认无该配置项, 即不对发向本地的邮件做任何限制)
      :
    • permit_mynetworks: 允许使用mynetworks配置项中指定的IP 的用户 无认证即可发送中继/本地邮件
    • permit_sasl_authenticated: 允许通过认证的用户 发送中继/本地邮件
    • defer_unauth_destination: 延迟处理(即暂时拒绝)发送到 未授权目标域名 的邮件
    • reject_unauth_destination: 拒绝发送到 未授权目标域名 的邮件
    • defer: 对未通过上述规则的请求进行延迟处理 (即暂时拒绝)
    • reject: 对未通过上述规则的请求直接拒绝
    • 注: 未授权目标域名 即为不在mydestination和relay_domainss和virtual_alias_domains值中的域名
  • 扩展
    VRFY: 支持客户端使用VRFY命令来验证服务器是否存在 指定邮箱地址
    (默认开启, 配置项中加入disable_vrfy_command = yes以关闭)

服务搭建(Linux)

  • 安装:sudo apt install postfix
  • 初始化:sudo dpkg-reconfigure postfix
  • 打开:systemctl start postfix
  • 配置文件:/etc/postfix/main.cf
  • 查看邮件队列状态:sudo postqueue -p

-- 安全 --

未授权访问

  • 未授权发送本地邮件:
    原因; smtpd_relay_restrictions配置错误, 使得可以不登陆发送本地邮件
  • 未授权发送中继邮件:
    原因; smtpd_relay_restrictions配置错误使得可以不登陆发送中继邮件
  • 匿名登录
    原因: 当EHLO后出现AUTH ANONYMOUS的字样时, 即可匿名登录(auth anonymous登录)
  • 测试是否存在: msf中auxiliary/scanner/smtp/smtp_relay模块
  • 后果: 可以通过目标服务器任意发送邮件

信息泄露

  • 原理: smtp在连接上后默认会显示smtpd_banner的欢迎信息, 默认包含了 系统邮箱邮箱 系统类型 服务种类
  • 利用: telnet <ip> <端口>nc <ip> <端口>, 第一句话就是
  • 利用(msf): msf中auxiliary/scanner/smtp/smtp_version模块
    use auxiliary/scanner/smtp/smtp_version;set RHOSTS <服务器ip>;set RPORT <端口>;run;

枚举用户漏洞

  • 前提: 三者满足其一即可
    • 开启了VRFY扩展 (postfix默认开启)
    • 开启了EXPN扩展 (postfix没有该扩展)
    • 可未授权访问 发送本地邮件, 从而可以执行RCPT TO指定接收者
  • 原理:
    • VRFY扩展 支持客户端使用VRFY命令来验证服务器是否存在 指定邮箱地址
    • EXPN扩展 支持客户端使用EXPN命令 查看邮件列表/别名地址 中包含的所有实际邮件地址
    • 使用RCPT TO指向本地邮箱时(即收件人不填写@及其之后部分), 目标存在返回250, 不存在返回550
  • 利用(msf): msf中的auxiliary/scanner/smtp/smtp_enum模块
    use auxiliary/scanner/smtp/smtp_enum;set RHOSTS <服务器ip>;set RPORT <端口>;run;

爆破

  • smtp:hydra -l <用户名> -P <字典路径> <目标IP> smtp -V -s <端口> -e nsr
  • smtps:hydra -l <用户名> -P <字典路径> <目标IP> smtp -V -s <端口> -S -e nsr

CRLF漏洞

  • 原理: 若能够操控DATA数据(一般是可操控收件人),
    可通过CRLF来改变邮件内容, 或操控RCPT TO的内容来改变收件人
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇