Office2K对IIS的意外影响
Article last modified on 2002-9-10
The information in this article applies to:
ü Microsoft IIS 5.0
ü Microsoft FrontPage
ü Microsoft Outlook Web Access
ü Microsoft Exchange 2000
问题陈述:
在一个Web页面中请求打开远端Web Site上的一个文件;如果这个打开文件的请求的URL字节数超过一定数目,就会弹出一个如下所示的“输入网络口令”对话框,上面要求你输入你的身份验证信息:
请输入您的身份验证信息。
资源: http://..................
用户名:
密码:
将此口令保存在您的口令表中。
只有点击随便哪个按钮,文件内容才会显示。
这种情况对于每次打开这个文件都会重现。
你也许想不到,这是因为WebSite的IIS上安装了FrontPage服务器扩展。那这FSE又和你的打开文件的请求有什么关系?难道不是IIS在进行验证吗?让我们仔细地看一看吧。
进一步实验:
弹出对话框时的IE的连接URL类似于下面的URL:
http://XYserver/XY/isapi/XYZUVW.DLL/迁移方案.doc?ClassName=XY_ABCDEFGHIJ.KMNOPQ&session=DA3F0F1-B122-4814-AD29-0B4B6F686B40&Validate=YES&URL=http://XYZUVWABCDE/exchange/zhengyun/%E6%94%B6%E4%BB%B6%E7%AE%B1/%E8%BF%81%E7%A7%BB%E6%96%B9%E6%A1%88.doc-2.EML/迁移方案.doc
经过实验证明:
如果要打开的文档大小小于400KB左右,HTTP请求的URL长度没有影响,这时不会弹出对话框;
如果要打开的文档大小大于460KB左右,HTTP请求的URL长度会有如下影响:
HTTP请求的URL长度必须大于等于260个字节方可正常;
如果是小于260个字节,则会弹出“输入网络密码”对话框。
请注意:一个汉字被转为UTF8码后,是9个字节。
Cause:
要打开的文件的所有数据已经传送到了客户端:
首先,我们确定一点,在弹出对话框前,Word文件的所有数据已经传送到了客户端。
在我们网络监视器捕获的第585个包“HTTP: Continuation of frame 5;671 bytes of data”中,我们可以看到这样的二进制数据:
我们可以用Notepad打开我们读取的附件《迁移方案.doc》,可以在最后的地方看到这个内容:
T U P T O I S U P GS筫Hh j i a y o n g q j i a y o n g q
所以,说明到了第585个包,实际上读取附件所需要的数据已经全部传到了客户端。
之后,才会弹出输入网络密码对话框。
从第594个包到第625个包,属于我们要研究的范围。
工作原理:
如果你安装了Microsoft Office 2000,或者使用了Windows Update保持更新,那么你也许会注意到Windows Explorer中多了一个命名空间:WebFolders。
WebFolders是一个新概念,它给Microsoft Office和FrontPage用户赋予发布与操作Web Content的能力。
在这以后,当你连接到一个web folder或时,你做的事情,和FrontPage连接远端Web站点时做的实际上是一样的。这一切是在你不知不觉中发生的。
【让我们看看WebFolders是怎么工作的】:
简单地说,当你添加一个新的Web folder(或者访问一个远端Web Site的文件)时,Explorer将发送一个POST请求给/_vti_bin/_vti_aut/author.dll,这个组件是FrontPage服务器扩展的一部分。
如果你身为一个匿名用户,你是没有权限读写这个author.dll文件的。所以服务器就会跟你进行NTLM或者Basic验证。
如果你的身份验证通过了,你将会把一个新的WebFolder映射到远端服务器的Web Root。这样你在服务器上至少有了authoring权限。
【我们来给出几个要点】:
v 由于所有的对文件的访问请求都被POST给author.dll,那么对一个特定文件的访问将不会在任何Log中显示出来,所以你不会知道攻击者做了什么或哪些文件被他访问了(或安装了);
v 由于这种操作全都在80端口上工作,所以它可以很容易地绕过许多防火墙和入侵检测系统;
v 为了能够连接到一个WebFolder,FrontPage需要author的账号能够在服务器端有本地登录权限;
v 密码常常被存在global.asa和其他文件中,从而容易被恶意利用;
v 大多数人不知道一个默认安装的FrontPage(而没有实施安全限制)将使他们易被攻击;
【三个致命的组件】:
在Windows NT 和IIS上,FrontPage的安全性是依靠这三个组件实现的:
u Admin.dll (兀,Nimda嘛);
u Author.dll;
u Shtml.dll
相应地,他们对应着这三种权限:
u administration
u authoring
u
browseing
它们的结构如下:
Web Root
\_vti_bin
shtml.dll
\_vti_aut
author.dll
\_vti_adm
admin.dll
要点:
B 当POST给author.dll成功后,这个客户就能够像浏览文件系统一样,浏览web site了。由于author有full authoring权限,所以他完全可以做这样的事情:在_vti_bin目录或其他可执行目录下放至可执行文件。这时,他离拥有full admin权限只有一步之遥了!
B 另外一个有趣的地方是,由于FrontPage的安全性是基于这三个组件的ACL列表,所以如果文件系统是FAT,那么就没有ACLs!从而WebFolder的连接是完全开放的!
B FrontPage对许多系统组件有可执行权限,如msvcrt40.dll、netapi32.dll、rpcltcl.dll、samlib.dll和wsock32.dll。
B 如果IIS被设置为进程内运行DLLs,那么一个人可以更换这三个FrontPage组件为他的特洛伊组件。这些组件完全不必要放在同一个目录下,只需要叫同样的名字。
B 一个用户的local login和password可能使用Basic验证秘密地发送给服务器,而用户浑然不知。
一个比较重要的消息是:
u 如果你的IIS的站点上没有安装FrontPage服务器扩展,那你的打开文件的请求将被送到/_vti_bin/shtml.exe/_vti_rpc进行验证,POST的数据是method=server+version%3a4%2e0%2e2%2e4715。
u 如果你的IIS的站点上没有安装FrontPage服务器扩展,那你的打开文件的请求将被送到/_vti_bin/shtml.dll/_vti_rpc进行验证,POST的数据是下面的这个method=url+to+web+url%3a4%2e0%2e2%2e4715….
Shtml.dll默认位于C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\_vti_bin。
Shtml.exe默认位于C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi。
关于shtml.exe是干什么的,我想我只能提供这样的信息,大家也可以发表自己的意见:
RunTimeFileExtensions
当您使用 FrontPage 服务器扩展可执行的 Shtml.exe 、版本 3.0.2.1330 或更高版本时,基于 FrontPage 的实时运行组件,如默认(保存结果)表单处理程序和搜索表单,将只处理 HTML 文件或不包含 ASP 代码或 SCRIPT RUNAT=server 标记符的基于 HTML 的文件。这样可使得源代码内容、密码或其他私人信息不会向用户曝光。
可以被 Shtml.exe 处理的 HTML 或基于 HTML 的文件通过文件扩展名来标识: .htm 、 .html 、 .shtm 、 .shtml 、 .htx 、 .asp 、 .alx 、和 .asa 。如果站点服务器的配置文件将其他的文件扩展名映射为一个 HTML 或基于 HTML 的文件类型,那么这些文件也将被添加至可被 Shtml.exe 处理的文件类型中。对于 Apache 和 NCSA 服务器而言,任何被映射为具有“text/html”扩展名的 MIME 类型的文件,也将添加到可被 Shtml.exe 处理的文件类型中。
请使用变量 RunTimeFileExtensions 来指定哪些可被 Shtml.exe 处理的文件类型应该被处理。这样也进一步限制了可被 Shtml.exe 处理 HTML 或基于 HTML 的文件类型。
【具体流程】:
下面我们结合网络监视器捕获的包,来讲解一下打开文件的请求被默默地交由FrontPage服务器扩展验证的具体流程。
(待续)