Serv-U FTP Server 越狱0day漏洞分析
发布时间:2011-12-07   作者:启明星辰

影响版本:

RhinoSoftServ-U 9.x
RhinoSoftServ-U 8.x
RhinoSoftServ-U 7.x
RhinoSoftServ-U 6.x
RhinoSoftServ-U 11.x
RhinoSoftServ-U 10.x

 

漏洞描述

RhinoSoftServ-U FTP Server实现上存在目录遍历漏洞,通过输入特定的路径串可以实现目录遍历,攻击者可以下载、上传、删除FTP根目录外的文件

 

具体分析

 

在登入ftp成功后,我们输入下面的指令:cd“..:\windows”,最终该命令被客户端解析成CWD\x20..:\windows(\x20为空格)传递个FTP Server。

 

 

 之后FTP server在接收到这段指令后将指令和指令的参数分开,并单独处理”..:\windows”部分。处理的函数如图:

 

 
之后对该字符串进行了如下检测:


1.取出指令参数即:..:\windows

 

2.检测该串头部或者尾部是否有空格和TAB,如果有则去掉。

 

3.取出根目录(测试中为/c:/ftp)检测第一个字符以及第二个字符是否为/,如果第一个字符为/且第二个字符不为/,则指针加1,并将/改为\,结果变为c:\ftp

 

4.在c:\ftp后面添加\,于是变成了c:\ftp\

 

5.对于..:\..:\windows的进一步检测:检测的内容主要是,偏移0的位置是否为\\,偏移0的位置是否为\或者/,偏移1的位置是否为:\或者\\等等。所有的这些检查都不符合的话则将..:\..:\windows拷贝到c:\ftp之后,即变成了c:\ftp\..:\..:\windows

 

6.路径反转:之后程序会在该字符串中搜索“\..\”由于是特殊构造的,当然这里搜索不到。程序的目的是,如果搜索到的话则进行和windows类似的路径反转。即如果是请求的是c:\ftp\..\..\windows则转换为c:\windows。在路径反转之后会进行权限检查,即比较根目录是否为c:\ftp,如果不是则返回No such file or directory。

 

7.之后会搜索路径中的“:”,并将其移除。结果变成了“c:\ftp\..\..\windows”。但此次却未再次进行路径反转,直接进行了权限检查,比较根目录是否是c:\ftp,比较的结果当然是肯定的。但c:\ftp\..\..\windows在事实上就相当于c:\windows目录,于是造成了目录遍历漏洞。


(在windows中,.相当于本目录,..相当于上级目录)


特征建议

 

由于程序在去掉冒号后未进行路径反转便直接进行了权限检查。因此我们可以通过构造”:\”的特殊字符串躲避路径反转。更深入的,可以通过构造”:::::::\”这样的特殊字符进行入侵尽可能的躲避网管拦截。比如cd “..::::::::::::::\..:::::::\windows”这样,因为冒号最后都是要去掉的,相当于没有。如图
 

 

解决方案:
1、 更新至启明星辰最新事件库

文章来源:http://www.venustech.com.cn/
  • 公司总部 | 分支机构 | 法律声明 | 投资者关系 | 400-624-3900 800-810-6038
  • © 启明星辰1996-2015 版权所有 京ICP备05032414号 京公网安备11010802024551号