Как выудить пароль авторизации из роутеров Zyxel с прошивками V2? В веб-морде, понятное дело, его не видно. В конфиге он в зашифрованном виде: authentication password ns3 BiEjZE6GOPmOmTtDIO0Gtcw+ Как его можно расшифровать?
Столкнулся с такой же проблемой, поэтому апну тему. Пароль шифруется каким-то алгоритмом, но роутер должен его знать для установки соединения, поэтому это не хэш, и его можно как-то расшифровать. В моем случае дело выглядит так: Code: authentication password ns3 vqF6abt3B+LJFy5gvGL4yqwz Вдобавок напишу, что есть известный пароль, зашифрованный таким же образом: Code: authentication wpa-psk ns3 ddAt+Dg8+NDEtPBiduuQJYRz пароль Do4WcR5w
Spoiler: Скрипт Code: #!/usr/bin/env python3 # # zyxel_scramble.py # # author: Felis-Sapiens # # Decode password from ZyXEL config (NDMS V2) import sys from base64 import b64decode, b64encode from hashlib import md5 def first_step(password, x1, x2): x1 &= 0xff x2 &= 0xff for i in range(len(password)): password[i] = (password[i] ^ x2) & 0xff x2, x1 = x1 + x2, x2 return password def second_step(password): x = 0 for b in password: x ^= b for i in range(1,8): a = ((x >> i) ^ (~x << i)) & 0xff x = ((a << i) ^ (~a ^ x)) & 0xff for i in range(len(password)): password[i] ^= x return password def scramble_decode(password): if len(password) % 4 != 0: password += '=' * (4 - len(password) % 4) password = list(b64decode(password)) length = len(password) if length not in [0x12, 0x24, 0x48]: print('ERROR: invalid input length') return a2 = length // 7 x2 = password[a2] del password[a2] a1 = x2 % (length - 1) x1 = password[a1] del password[a1] password = second_step(password) password = first_step(password, x1, x2) zero_pos = password.index(0) if zero_pos != -1: length = zero_pos return bytes(password[:length]).decode() def scramble_encode(password): old_length = len(password) length = len(password) + 3 if length < 0x13: length = 0x12 elif length < 0x25: length = 0x24 elif length < 0x49: length = 0x48 else: print('ERROR: password is too long') return password = password.encode() md5_digest = md5(password).digest() password = list(password) if length != old_length: password.append(0) for i in range(old_length+1, length-2): password.append((password[i-old_length-1] * 2 + md5_digest[2 + i%14]) & 0xff) x1 = md5_digest[0] x2 = md5_digest[1] password = first_step(password, x1, x2) password = second_step(password) password.insert(x2 % (length - 1), x1) password.insert(length // 7, x2) return b64encode(bytes(password)) def main(): if len(sys.argv) < 3: print('Usage: zyxel_scramble.py decode|encode password') return if sys.argv[1] == 'decode': password = scramble_decode(sys.argv[2]) elif sys.argv[1] == 'encode': password = scramble_encode(sys.argv[2]) else: print('ERROR: unknown command', sys.argv[1]) return if password is not None: print(password) if __name__ == '__main__': main()
Можно и так: пароль WPA2 и PPPoE/PPTP/L2TP шифруются одинаково просто сохраняет startup-config, открывает его блокнотом и копируем пароль провайдера вместо Wi-Fi пароля, скармливаем startup-config роутеру и смотрим пароль в разделе беспроводной сети
А потом роутер внезапно пропадает (меняет IP, выключается, etc.) и хозяин остаётся без вафли. И у вас, как правило, меньше суток, чтобы вновь его найти и исправить. Ибо после зачастую роутер подвергается ресету, либо перенастройке с лучшей защитой. Этот способ удобен только для первого раза.
Просто предложил как вариант, способ удобен тем, что не надо разбираться в коде и использовать стороннее ПО Если работать в видимости роутера, то все можно легко вернуть назад Интернет пропадет у хозяина на 2 минуты, он этого просто не заметит, и делать это надо когда список клиентов пуст Через Router Scan да, способ непригоден, одноко можно найти другой ZyxEL и выполнить восстановление на нем, алгоритм одинаковый у всех моделей Не всегда требуется украсть чужой пароль, иногда есть необходимость восстановить свой забытый
Можно гостевую wi-fi сеть поднять, скрытую, и через неё смотреть. Основную не трогать. И нет нужды полностью конфиг заливать - нужные несколько команд можно в консоль ввести (NDMS V2). Может еще придумаете способ получения конфига, без пароля к вэб-морде, или как пароль к вэб-морде достать (кроме брута, конечно)?
Это уже надо искать уязвимости, если они есть. Думаю, если бы был эксплоит, его бы уже давно добавили в RouterScan.
помогие расшифровать пароль authentication wpa-psk ns3 u4LA0MYDP0iDy5KU0m+4iMLK authentication password ns3 siU1bFP1zgin2TgYAiF3K/Ax
В командной строке Code: python3 zyxel_scramble.py decode u4LA0MYDP0iDy5KU0m+4iMLK Нужен python 3. Если у вас Linux, то с большой вероятностью он уже есть.
На коротких паролях всё ок, а на длинных не работает. Например такой пароль не расшифровывается: Nm46BLtTNsU/0CLvwM+2wv6ILjpQapQ2O4Y5t4CHZlJFW59Q