目录
1.1、简介:
1、许多应用程序拥有一项允许用户通过应用程序提交消息的功能。如向技术人员报告问题或提供关于Web站点的反馈。这项功能一般通过邮件(或SMTP) 服务器执行。用户提交的输入被插入到邮件服务器处理的SMTP会话中。如果攻击者能够提交未被过滤或净化的专门设计的输入,就可以在这个会话中注入任意SMTP命令。
2、应用程序允许用户指定消息的内容和自己的电子邮件地址(插入到生成电子邮件的From字段中),还可以指定消息的主题和其他细节。能够控制的任何字段都易于受到SMTP注入。
3、SMTP注入漏洞经常被垃圾邮件发送者利用, 他们扫描因特网在找易受攻击的邮件表单,并使用它们生成大量垃圾电子邮件
1.2、操纵电子邮件标头
简述:
1、发送关于应用程序的反馈,在表单中,用户可填写发件人的地址和邮件的内容。应用程序将这个输入传送给PHPmail()命令, 由它建立邮件并与它配置的邮件服务器进行必要的SMTP会话
包括
To:
From:
Subject:
……
2、PHPmail()命令使用additional_headers参数为消息设定发件人地址。这个参数还可用于指定其他标头, 包括Cc和Bcc , 并用换行符分隔每个被请求的标头,所以攻击者可以通过在From字段中注入其中某个标头, 将邮件发送给任意收件人
1.3、SMTP命令注入
简述:
应用程序可能会执行SMTP会话, 或者将用户提交的输入传送给一个不同的组件以完成这一任务。这时就可以直接在这个会话中注入任意SMTP命令, 完全控制由应用程序生成的消息
1、提交反馈
2、应用程序会通过命令开始一个SMTP会话
MAIL FROM:
RCPT TO:
DATA
From:
To:
Subject:
.
(SMTP客户端发出DATA命令后, 应用程序送出电子邮件消息的内容, 包括消息头和主体, 然后发送一个点字符(.),告诉服务器消息已发送完毕, 客户端可以发出其他SMTP命令, 发送其他消息)
3、在任何受控的电子邮件字段中注入任意SMTP命令(如可以尝试注入Subject字段)
4、如果应用程序易受攻击, 那么会建立SMTP会话,生成两个不同的电子邮件消息,其中第二个完全由攻击者控制
1.4、查找SMTP注入漏洞
简述:
为了有效探查应用程序的邮件功能,需要测试每一个提交给电子邮件有关的功能的参数,甚至那些最初可能与生成的消息无关的参数
测试每一种攻击, 并在每个测试中使用Windows和UNIX形式的换行符
过程:
1、提交以下每个测试字符串作为每一个参数,在相关位置插入电子邮件地址
%0aCc
%0d%0aCc
%0aBcc
%0d%0aBcc %0aDATA%0afoo%0a%2e%0aMAIL+FROM:+
%0aRCPT+TO %0aDATA%0aFrom:+ %0aTo:+ %0aSubject:+test%0afoo%0a%2e%0a %0d%0aDATA%0d%0afoo%0d%0a%2e%0d%0aMAIL+FROM:+
%0d%0aRCPT+TO:+ %0d%0aDATA%0d%0aFrom:+ %0d%0aTo:+ %0d%0aSubject:+test%0d%0afoo%0d%0a%2e%0d%0a 2、注意应用程序返回的任何错误消息,这些错误如果与电子邮件功能中的任何问题有关,确定是否需要对输入进行调整,以利用漏洞
3、应用程序的响应可能并不会以任何形式表示一个漏洞存在或被成功利用,应该监控指定的电子邮件地址,看是否收到任何电子邮件。
4、仔细检查生成相关请求的HTML表单,可能提供与服务器端使用的软件有关的线索。其中可能包含一个用于指定电子邮件收件人地址的隐藏或禁用字段,可直接对其进行修改
(除探查SMTP注入漏洞外,还应极其仔细地检查所有与电子邮件有关的功能, 查找OS命令注入漏洞)
1.5、防止SMTP注入
简述:
如果对提交给电子邮件功能或SMTP会话使用的任何用户提交的数据进行严格的确认检查,就可以防止SMTP注入漏洞。所以应根据其用途对每项数据进行尽可能严格的确认
1、应根据一个适当的正则表达式检查电子邮件地址(应拒绝所有换行符)
2、消息主题不得包含任何换行符, 并应实施适当的长度限制
3、如果消息内容被一个SMTP会话直接使用, 那么应禁止使用仅包含一个点字符的消息行。