постепенно увеличивать буквы по алфавиту - PullRequest
0 голосов
/ 26 октября 2018

Итак, я пытался создать простой скрипт bruteforce для формы php (конечно, на моем локальном веб-сервере). Он по сути работает, вводя данные в список из цикла через цикл for. Здесь проблема; если мой список: list = ['a','b','c','d','e','f','g'] и цикл for выглядит примерно так:

for i in list:
   r = request.post(url, values) #posts the values
   if 'id=correct' in open('output.txt').read(): #check if it works
      print("logged in") 
      #if it works, it would print this, if not, 
      #it will retry with the next element in the list

Проблема в том, что это будет работать только для однобуквенных паролей (так как список циклически повторяется только один раз). Мой вопрос как бы получить его так, чтобы после однократного циклического повторения списка он снова запустил цикл for, за исключением двух элементов из списка (т. е. aa, ab, ac, ad, ae, ef и т. д.)

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Если я правильно понимаю, вы можете использовать itertools.

import itertools

lst = ['a','b','c','d']
for x in range(1, len(lst)): 
    passwords = list(itertools.product(lst, repeat=x))
    for password in passwords:
        print(''.join(password))
0 голосов
/ 26 октября 2018

Вы можете рассматривать это как проблему преобразования базы, увеличивая число и преобразовывая его в основание 7 (длина вашего списка):

def convert(n, lst):
    s = ''
    while True:
        s = lst[n % len(lst)] + s
        if n < len(lst):
            break
        n = n // len(lst) - 1
    return s

так что:

lst = ['a','b','c','d','e','f','g']
print(convert(0, lst))
print(convert(6, lst))
print(convert(7, lst))
print(convert(8, lst))
print(convert(55, lst))
print(convert(56, lst))
print(convert(57, lst))

выходы:

a
g
aa
ab
gg
aaa
aab
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...