xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Microsoft FrontPage 2000服务器扩展缓冲区溢出漏洞


发布时间:2001-06-26
更新时间:2001-06-26
严重程度:
威胁程度:远程管理员权限
错误类型:输入验证错误
利用方式:服务器模式

受影响系统
Microsoft FrontPage 2000 Server Extensions
  - Microsoft IIS 4.0
  - Microsoft IIS 5.0
详细描述
NSFOCUS安全小组发现微软FrontPage 2000 服务器扩展软件包中的一个程序存在
一个缓冲区溢出漏洞。远程攻击者可能利用这个漏洞执行任意代码。

微软FrontPage 2000 服务器扩展软件包中带了一个动态链接库:fp30reg.dll.
它存在一个缓冲区溢出漏洞。当向fp30reg.dll提交一个包含超过258字节的长
URL请求时,将触发一个基于堆栈的缓冲区溢出。成功地利用这个漏洞,攻击
者可以在被攻击的主机上远程执行任意代码。

如果fp30reg.dll收到到一个它不理解的参数时,它会返回一个错误信息给请求者:

"The server is unable to perform the method [用户提供的参数] at this
time"

这个错误信息被保存在堆栈中的一个缓冲区中。fp30reg.dll调用
USER32.wsprintfA()来构造返回消息,由于没有检查用户输入数据的长度,攻击
者可以重写某些重要的内存地址以改变程序流程,例如:异常结构或者保存的返
回地址等。

USER32.wsprintfA()用到的格式串为:

<HEAD><TITLE>HTTP Error 501</TITLE></HEAD><BODY><H1>NOT IMPLEMENTED</H1>
The server is unable to perform the method <b>%s</b> at this time.</BODY>

它也被保存在堆栈中,而且它的地址在(目标缓冲区地址 + 256字节)处,因此在
溢出发生时,格式串会被重写,攻击者必须设法使拷贝顺利完成。

如果攻击者使用随机数据,可导致IIS停止响应。
对于IIS 5.0, IIS服务会自动重新启动。而对于IIS 4.0,需要手工重启服务。

成功地利用这个漏洞,
在IIS 5.0中,攻击者可以获取IWAM_machinename用户的权限.
在IIS 4.0中,攻击者可以获取Local SYSTEM权限。

注意:

fp30reg.dll在另外一个目录:
"\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\bin\"
下有一份拷贝,名字为: fp4areg.dll.

攻击者也可以利用unicode等漏洞来访问这个程序。

测试代码
Nsfocus Security Team (security@nsfocus.com)提供了下列测试代码:

如果只提交258字节长的参数,溢出不会发生:

$ curl http://xx.xx.xx.xx/_vti_bin/_vti_aut/fp30reg.dll?`perl -e 'print "A"x258'`

<HEAD><TITLE>HTTP Error 501</TITLE></HEAD><BODY><H1>NOT IMPLEMENTED</H1>
The server is unable to perform the method <b>AAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAA</b> at this time.</BODY>

但是,如果长度超过258字节,就将触发缓冲区溢出:

$ curl http://xx.xx.xx.xx/_vti_bin/_vti_aut/fp30reg.dll?`perl -e 'print "A"x259'`

<html><head><title>Error</title></head><body>The remote procedure call failed.
</body></html>

Nsfocus Security Team 也提供了一个演示程序:
http://www.nsfocus.com/proof/fpse2000ex.c

解决方案
临时解决方法:

删除或禁止任何人访问fp30reg.dll和fp4areg.dll

厂商补丁:

微软已就此发布了一个安全公告(MS01-035)以及相应补丁。

您可以在下列地址看到微软安全公告的详细内容:

http://www.microsoft.com/technet/security/bulletin/ms01-035.asp

补丁程序可以在下列地址下载:

. Microsoft Windows NT 4.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=31038

. Microsoft Windows 2000:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=30727

相关信息
Nsfocus Security Team (security@nsfocus.com)