Роутер поиск в интернете

Автоматический поиск роутеров со стандартными паролями

Недавно мне пришла в голову банальная мысль, что большинство людей кладут на настройку своих роутеров, и на них можно зайти по дефолтным паролям. А много ли таких роутеров вдобавок открыты для входа из интернета, что делает их проходным двором? И как это по-быстрому проверить?

Итак, задача: просканировать какую-нибудь подсеть и найти уязвимые роутеры.

Условия выполнения: не более нескольких часов (на дворе всё-таки лето), используя только стандартные средства системы Linux. Да, я в курсе про проекты типа Kali и вагоны «хакерского» софта в них, но найти нужную программу, которая сделала бы это прямо «из коробки» мне сходу не удалось, а время-то идёт… Да и интереснее самому.

Первая мысль, которая приходит в голову: сканировать nmap’ом по открытому 80 порту. Но что делать с огромным зоопарком веб-морд? Ведь цель — не написать универсальный комбайн-уничтожитель роутеров, а небольшой proof-of-concept. А нет ли какой-нибудь унифицированной системы авторизации на роутерах? Конечно же есть — Telnet! Начинаем!

Выбираем жертв: вводим в Google «имя_провайдера диапазон адресов». Я выбрал провайдера на букву «У» и одну из его подсетей вида XX.XX.00.00/16, то есть ни много ни мало ~65536 адресов.

nmap --open XX.XX.0.0/16 -p 23 > raw_log.txt 

Так мы ищем роутеры (и любые другие железки) с открытым 23 портом (Telnet), а ключ —open позволяет вывести только нужные адреса, что упрощает дальнейшую обработку.

Проходит немногим более 40 минут, и список из 2100 адресов у нас на рабочем столе. А всего было доступными 18000 хостов.

Для наших целей выхлоп nmap слишком пёстрый, его скрипту не скормишь, нужно отсеять только адреса. С этим справится незаменимый grep, а именно:

grep -o -E '(1[\.])9' raw_log.txt > log.txt 

Регулярное выражение может испугать начинающего греповца, но на самом деле оно очень простое: блок вида «от одной до трёх цифр + точка» трижды + блок «от одной до трёх цифр». Ключ -o выводит только найденную подстроку, что нам и требуется.

Читайте также:  Как настроить роутер smartbox

Можно немного отдохнуть и поподключаться вручную к данным IP с помощью telnet. Кое-где соединение обрывается, но много где и подключается. Более того, из десятка попробованных IP уже два оказалось рабочими роутерами с автоматическим логином и паролем admin, что не может не радовать.

Кто-то бы на этом остановился, но только не мы, ведь наша цель — не похозяйничать в чужих роутерах, а более возвышенная — статистическое исследование.

Попытки автоматизации telnet’а «в лоб» не увенчались успехом: просто так его в bash-скрипт завернуть не удавалось. Проблема была в автоматической подстановке пароля: все известные мне способы (пайпы, эхи и кэты) здесь не сработали. Пришлось открывать для себя способы неизвестные: Expect — инструмент для автоматизации и тестирования в ОС Unix, написанный Don Libes как расширение к скрипт-языку Tcl, для интерактивных приложений таких, как telnet, ftp, passwd, fsck, rlogin, tip, ssh, и других. В статье из википедии первым же примером приводится автоматическая авторизация по telnet — ну просто подарок. Код пришлось немного «подпилить» под свои нужды, вот уже готовое тело программы для перебора: исполняемый файл try_telnet

#!/usr/bin/expect -f set SERVER [lindex $argv 0]; set USER [lindex $argv 1]; set PASS [lindex $argv 2]; set timeout 1 spawn telnet $SERVER expect ":" send "$USER\r" expect ":" send "$PASS\r" expect ">" exit 1 

Команда expect следует своему буквальному значению: ждёт приглашения на ввод логина и пароля, а потом и ввода команд. Если получен шелл, то скрипт радостно рапортует об этом в общий поток вывода строкой, которую потом удобно грепать.

Интересный факт: в Википедии и других ресурсах в качестве маркера шелла указан «#». Путём экспериментов выяснилось, что этот способ не работает на большой доле уязвимых роутеров, а именно TP-LINK, которые дают приглашение на ввод команд вида

#!/bin/bash while read line; do ./try_telnet $line admin admin; done < log.txt 

В stderr скрипт ругается в случае connection refused — не обращайте внимания. Полезную работу скрипта можно вживую наблюдать в файле out.txt (не забывая его периодически обновлять).

Читайте также:  Роутеры ростелеком витая пара

Проходит 35 минут и скрипт завершает работу. Просеиваем результат с помощью

grep 'FOUND' out.txt > final.txt 

Получаем 95 роутеров с авторизацией admin:admin — цель достигнута.

В итоге из 18000 адресов оказалось 95 роутеров, на которые из любой точки земного шара можно зайти по admin:admin. Веб-интерфейс у всех тоже открыт. Много это или мало? Напоминаю, что мы искали лишь роутеры с открытым telnet, и попробовали лишь одну стандартную связку для авторизации (хоть и самую распространённую).

В основном оказались уязвимы роутеры TP-LINK и D-link различных моделей. Если у вас такой роутер, то его стоит проверить! Также нашлось несколько ZyXEL, Huawei, Asotel, ZTE.

В заключение хочу сказать, что я честно попытался информировать провайдера, однако электронной почты у него нет, толька форма «для обращений» с полями обязательного ввода «домашний адрес» и «телефон». Тогда друг и посоветовал написать на Хабрахабр. Всем спасибо!

Источник

Оцените статью
Adblock
detector