|
Serv-U远程拒绝服务漏洞以及原因分析
原创:isno(isno)
来源:www.xfocus.org
serv-u ftp server远程拒绝服务漏洞以及原因分析
涉及程序版本:
serv-u ftp server v4.0.0.4(以前版本也可能存在该漏洞,没有测试过)
漏洞类型:
远程拒绝服务
漏洞描述:
前几天使用了一下rhinosoft出品的serv-u ftp,感觉还不错,简单
测试了一下其安全性,发现当用匿名用户登陆后,发送list nnnn...命令,
后跟的字符数量达到253字节时,服务端报错,并且错误对话框无法关闭,
只能重启serv-u ftp服务才行。
由于是由长字符串造成的,我一开始还认为是溢出之类的漏洞。后来
经过深入分析程序汇编代码,发现这不是一般的溢出,甚至可以说不是
serv-u的本身程序的问题,而是一个win32 api的设计上的bug。
getfullpathnamea这个api用来获取指定文件的路径,但是它在处理
长文件名时没有考虑好边界条件,造成可能访问到不存在的内存地址,
在serv-u的例子里就造成了拒绝服务攻击。本来一般像这种访问不存在
在serv-u的例子里就造成了拒绝服务攻击。本来一般像这种访问不存在
内存的漏洞,程序的异常处理都可以回恢复过来的,不至于造成程序崩溃,
但是正是由于这个问题是由系统dll出错而造成的,而不是应用程序本身
的问题,所以应用程序的异常处理例程无法正确处理该问题,从而导致了
服务端程序崩掉。
不仅仅是list命令受该漏洞影响,所有后跟参数是文件名的命令都有
这个问题,例如mdtm等等。另外触发这个漏洞的串长度是根据ftp根目录的
设置不同而定的,我写了个程序来测试该漏洞,程序见后面。
由于这个漏洞无法用来得到权限,所以也懒得报告到bugtraq上去了,
不过分析漏洞的过程还是让我有点收获,起码知道了编程中哪些地方是程
序员容易忽视而造成安全漏洞的地方,微软的程序员也一样犯这样的错误。 |
|