相关文章:

Serv-U FTP Server Jail Break 0day - Serv-U 目录跳转漏洞

原文时间:

发表于: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、更新至启明星辰最新事件库

留言评论(旧系统):

【匿名者】 @ 2012-05-26 12:20:01

帖子时间错了吧

本站回复:

时间没错,这是转载的,我是用的原帖子的发表时间,我以前很多文章都这么定时间的。。。 这样貌似不太好。。。RSS订阅排序会错乱。。。还是改回来吧。。。