Microsoft 安全公告(MS02-018):IIS .asp 缓冲溢出

/ns/ld/win/data/20020513024440.htm

涉及程序:
IIS 4.0/5.0

描述:
NT/2k IIS4.0/5.0 .asp映射分块编码远程缓冲区溢出漏洞

详细:
Microsoft IIS(Internet Information Server)是MS Windows系统默认自带的Web服务器软件。

IIS 4.0/5.0 ASP (Active Server Pages) ISAPI过滤器存在远程缓冲区溢出漏洞,远程攻击者可以利用此漏洞得到主机本地普通用户访问权限。

默认安装的IIS 4.0/5.0服务器加载了ASP ISAPI过滤器,它在处理分块编码传送(chunked encoding transfer)机制的代码中存在一个缓冲区溢出漏洞。攻击者通过提交恶意分块编码的数据可以覆盖heap区的内存数据,使之以他指定的数据重写任意地址的4字节内存。例如,攻击者可以让dllhost.exe重写它可以访问的任意4字节的内存,包括程序函数指针、意外处理模块指针或其他任何可以用来控制程序执行流程的地址,从而改变程序执行流程,执行任意攻击者指定的代码。

如果攻击者使用随机数据,可能使IIS服务崩溃(IIS 5.0会自动重启)。如果精心构造发送的数据,也可能允许攻击者执行任意代码。

成功地利用这个漏洞,对于IIS 4.0,远程攻击者可以获取SYSTEM权限;对于IIS 5.0攻击者可以获取IWAM_computername用户的权限。


以下代码仅仅用来测试和研究这个漏洞,如果您将其用于不正当的途径请后果自负


Riley Hassell (riley@eeye.com)提供了如下测试方法:

以下的演示可重现问题,使用一个打了最新补丁的Windows 2000系统,安装一个默认的.asp页面:

**************会话开始****************
POST /iisstart.asp HTTP/1.1
Accept: */*
Host: eeye.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked

10
PADPADPADPADPADP
4
DATA
4
DEST
0
[enter]
[enter]
**************会话结束******************


上面的会话导致从dllhost的子进程中执行默认意外处理模块,会弹出消息:

DLLHOST.EXE - Application error
The instruction at 0x77fcb397 referenced memory at 0x54534544

其中0x54534544代表“TSED”,在little endian架构的机器上代表“DEST”。DLLHOST.EXE试图把“DATA”拷贝到“DEST”,因为0x54534544地址的内存不可写,发生访问错误,NT Kernel中的结构化意外处理模块(structured exception handling)捕获了这个信号杀掉了dllhost.exe进程。

问题在于上述会话用自己的数据重写了堆管理头结构(被AllocateHeap()所使用)中两个4字节的数据。在上面演示中,会话用“DATA”重写了第一个4字节的内存,它的内容将会被写到第二个4字节内存中指定的地址中去,当然也用“DEST”重写了第二个4字节的内存,因此,指定内容“DATA”会被程序试图写到地址为0x54534544(“DEST”)的内存里去。通过重写这两个4字节的数据,可以让dllhost.exe重写它可以访问的任意4字节的内存,包括程序函数指针、意外处理模块指针或其他任何可以用来控制程序执行流程的地址。

需要注意的是虽然这个漏洞存在于.ASP ISAPI,但还是需要一个机制来提交Shellcode等利用代码,有表单的ASP程序当然是比较方便,可以通过表单变量提交,如果没有表单,也可以通过HTTP请求头中的服务器变量提交。
受影响的系统:
Microsoft IIS 4.0
- Microsoft Windows NT 4.0
Microsoft IIS 5.0
- Microsoft Windows 2000

解决方案:
这是一个非常严重的安全漏洞,eEye建议我们立即安装微软提供的补丁
下载补丁:
Microsoft IIS 4.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=37931

Microsoft IIS 5.0:
http://www.microsoft.com/Downloads/Release.asp?ReleaseID=37824

如果您不需要使用ASP脚本,作为临时解决方案,建议您立刻删除".asp"的脚本映射。
删除上述脚本映射时可以参考如下步骤:
1. 打开Internet 服务管理器 ;
2. 右击你的服务器,在菜单中选择"属性"栏 ;
3. 选择"主属性" ;
4. 选择 WWW 服务 | 编辑 | 主目录 | 配置 ;
5. 在扩展名列表中删除".asp"项;
6. 保存设置,然后重启IIS服务。




相关站点:
http://www.eeye.com/html/Research/Advisories/AD20020410.html