如何利用注射技术攻击邮件服务器 |
发布时间: 2012/6/15 17:42:32 |
本文将详细介绍通过跟邮件亿恩科技服务器通信的Web应用程序,即webmail应用来注入某些邮件协议(IMAP和SMTP协议)命令来攻击邮件亿恩科技服务器的原理、方法和防御措施。 一、Webmail应用程序的角色 Webmail应用程序通过IMAP和SMTP协议来管理用户和他们的电子邮件之间的交互。从这一点来说,Webmail应用充当了客户应用程序和邮件亿恩科技服务器之间的代理角色。这个交互过程首先通过webmail应用程序来发送用户的身份凭证(注册号和口令)。此时,如果IMAP亿恩科技服务器支持使用“login”认证方式的话,那么Webmail应用程序会向IMAP亿恩科技服务器发送如下所示的命令: AUTH LOGIN 同样,这个应用程序还会将用户的各种动作(如访问邮箱、发送/删除电子邮件、退出邮箱等)转换成相应的IMAP和SMTP命令,然后把这些命令发送给相应的邮件亿恩科技服务器。然而,webmail应用程序的功能有限,所以用户只能生成该应用程序定义的选项所对应的那些IMAP或者SMTP命令。但是,用户却有可能改变被发送给邮件亿恩科技服务器的那些IMAP和SMTP命令。 下面,就让我们来看一下这种技术的工作原理吧! 二、邮件亿恩科技服务器注射技术原理 与广为人知的诸如SQL注射、LDAP注射、SSI注射、XPath注射、CRLF注射等注射技术类似,邮件亿恩科技服务器注射技术也是通过一个对用户提供的数据没有严格检查的webmail应用程序将IMAP命令或者SMTP命令注射到邮件亿恩科技服务器。当通过webmail应用程序使用的后台邮件亿恩科技服务器无法直接经由Internet访问时,邮件亿恩科技服务器注射技术格外有用。 要向邮件亿恩科技服务器注入命令,前提条件是允许用户通过webmail应用程序访问其端口25(SMTP)和143(IMAP)。 邮件亿恩科技服务器注射来利用一个应用程序的攻击者来说,他们相当于直接访问了被防火墙隔离的原始电子邮件服务端口(即绕过了防火墙)。通过利用这种技术,攻击者可以进行各式各样的活动和攻击,至于到底能做哪些事情,这要取决于被注入命令的亿恩科技服务器的类型。之所以这样说,是因为Webmail应用会把来自用户的请求转换成各种IMAP和SMTP协议命令。下面介绍如何利用这两种协议。 在进行IMAP注射时,注入的命令最终是由IMAP亿恩科技服务器执行的,所以命令必须遵循这个协议的格式和规范。Webmail应用程序为了完成客户请求的操作,必须跟IMAP亿恩科技服务器进行通信,这正是它们容易遭受这种攻击的原因。在用户验证身份的时候,webmail应用程序将用户的凭证传送到IMAP亿恩科技服务器,因此,利用IMAP亿恩科技服务器的验证机制,无需在该应用程序中具有一个有效帐户就能够进行IMAP注射。注入IMAP命令之前,用户必须找出跟邮件亿恩科技服务器通信时所用的所有参数,并弄清楚这些参数跟应用程序的功能的关系,如: ◆认证/登录/退出 现在让我们看一个利用消息阅读功能来进行IMAP注射的例子。假定webmail应用程序使用参数“message_id”来存放用户想要阅读的消息的标识符。当一个包含消息标识符的请求发出时,该请求看起来像下面的样子: http:///read_email.php?message_id= 假如网页“read_email.php”负责显示有关消息,它直接把请求发给IMAP亿恩科技服务器,而不对用户提供的值做任何检验。这时发给邮件亿恩科技服务器的命令将是下面的样子:
在这种情况下,我们就可以通过应用程序用来与邮件亿恩科技服务器通信的参数“message_id”来发动IMAP注射攻击。例如,可以利用下列命令来注入IMAP命令“CAPABILITY”:
这将导致亿恩科技服务器执行下列IMAP命令:
所以该亿恩科技服务器返回的页面显示的是在IMAP亿恩科技服务器中的“CAPABILITY”命令的结果: * CAPABILITY IMAP4rev1 CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES 三、SMTP注射 这里,我们要向SMTP亿恩科技服务器注射命令,所以注入的命令必须遵循SMTP协议。由于这些活动是使用SMTP协议的应用程序所允许的,所以我们基本上就是去模仿发送电子邮件。要利用SMTP注射,用户必须事先通过认证,所以用户必须有一个有效的webmail帐户。 通过SMTP发送电子邮件消息的格式如下: ◆发送方的e-mail地址 下面是一个通过存放消息主题的参数来进行SMTP注射的例子。 如前所述,这种技术的使用要求用户是经过认证的,并且可以针对发送电子邮件时的webmail参数进行SMTP命令注射。一般的,webmail应用程序会提供给用户一个表单,用户必须在表单中提供必要信息,这些信息将被发送给负责创建发送电子邮件所必需的原始SMTP命令的资源。 发送电子邮件的请求一般如下所示: POST http:///compose.php HTTP/1.1 这将导致SMTP亿恩科技服务器执行下列命令: MAIL FROM: 如果webmail应用程序没有对参数“subject”中的值进行必要的验证,那么攻击者可以在其中注入额外的SMTP命令: POST http:///compose.php HTTP/1.1 上面注入的命令将生成一个将被发送给邮件亿恩科技服务器的SMTP命令序列,其中包含MAIL FROM、RCPT TO和DATA等命令,如下所示:
对于邮件函数的注射之前人们就讨论过,但说得最多的还是PHP的mail()函数中的CRLF注射。然而,这些文章直到现在仅对某些部位进行注射,如email头部注射等。这种类型的注射允许一个人进行各种的操作(发送匿名电子邮件、垃圾邮件/转发等等)。实际上,使用邮件亿恩科技服务器注射技术也能达到这些目的,因为它们都是基于同种类型的弱点。与之相比,邮件亿恩科技服务器注射技术的过人之处是能向受影响的邮件亿恩科技服务器注射所有命令,而没有任何限制。就是说,这种利用技术不仅允许对电子邮件头部进行注入(“From :”、“Subject :”、“To :”等),而且还可以向跟webmail应用程序通信的邮件亿恩科技服务器(IMAP/SMTP)注入任意的命令。 邮件亿恩科技服务器注射远胜过对webmail应用程序提供的功能的“简单”滥用,例如发送大量电子邮件等。这种技术允许人们执行webmail应用程序提供的常规动作之外的额外的动作,如通过IMAP命令引起邮件亿恩科技服务器的缓冲区溢出等。对于渗透测试人员来说,注入任意的命令是他们梦寐以求的,因为这在某些情况下可以完全控制邮件亿恩科技服务器,以便对其各种弱点进行测试。 五、发动攻击 下面我们用实例来解释不同类型的邮件亿恩科技服务器攻击方法,以及邮件亿恩科技服务器注射技术示例。这样的实例曾发生在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,来替换上面的单字符形式: 本文出自:亿恩科技【www.enkj.com】 |