Pull to refresh

Восстановление пароля D-Link DPH-400S или история небольшого хака

Reading time 4 min
Views 14K
Ко мне, через двух знакомых, обратился директор одного таксопарка с просьбой сбросить пароль от IP-телефона D-Link DPH-400S. Историю телефона я не знаю и интересоваться не стал, но, как я понял, есть работающее и настроенное оборудование (в том числе и этот многоканальный телефон), которое никто не обслуживает. Пароли тоже никто не знает. А есть желание настроить интеграцию с компьютером, которую определенные люди сделать могут, но для этого нужен пароль от телефона.

Как мне сказал директор, уже полдесятка людей заявили, что без сброса настроек это невозможно. Оказалось всё же возможно. А о том, как получилось восстановить пароль — небольшая история под катом.

Если кто-то попал сюда в поисках способа восстановления пароля, а читать мою историю не хочет, то можно сразу читать с жирного заголовка ниже.

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

Первый вариант быстро отпал — инструкция такого варианта не предлагала, а на официальном форуме D-Link на этот вопрос было предложено одно решение — полный сброс настроек. И этот вариант директор сразу забраковал.

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

В первую очередь попробовал заготовленные пароли на самом телефоне — мимо. Ну что же, может веб интерфейс меня порадует? Спросил у сотрудников IP-адрес телефона — в ответ получил удивленное лицо и фразу о том, что понятия об этом не имеют. И это вселяло надежду, что он всё же не поменян. Подключившись к коммутатору, который стоял рядышком с телефоном, с помощью nmap-а быстренько нашел нужную мне цель, но и тут меня ждало разочарование — пароли для веб-интерфейса тоже не подошли.

Следующее, и, на тот момент, последнее, что было по плану — надежда на слабый пароль.

Глянув в исходники страницы входа, чтобы зарядить брутфорс формы через гидру (THC-Hydra), немного ужаснулся, обнаружив там экранов 10-15 JavaScript-кода. Оказывается, чтобы не отправлять пароль в открытом виде через HTTP, он, силой программистов D-Link-а, уходит в следующем виде:

<username> + md5(<username> + ":" + <password> + ":" + <salt>)

Реализация md5 на JavaScript тоже прилагалась. По всей видимости, дешевая замена HTTPS. Не стал даже проверять, каждый ли раз выдается новая соль (а это, скажу немного забегая вперед, в данном случае возможно — пароль-то хранится в открытом виде) или replay-атакам могут стать серьезной угрозой для «HTTPS от D-Link», т.к. решил пока больше не мучить web-сервис, ибо не было никакого желания готовить специальный словарь для брутфорса.

Куда больше было желания побрутфорсить telnet, который тоже шел в стандартной комплектации и отключен не был. Однако скорость брутфорса в 20-30 паролей в секунду немного расстроила. Запустил словарик топ-500 паролей и решил подождать, снова понадеявшись на удачу.

Заскучав минуты через 3 после начала брута, решил пройтись по телефону Nessus-ом. Однако в результатах скана были только открытые порты, что сразу показалось странным, так как, как минимум на использование telnet-а он должен был выругаться. Оказывается, по умолчанию Nessus не сканирует сетевые принтеры, телефоны и прочие дохлые устройства, чтобы они не умерли под его напором. Поставив нужную галочку снова запустил скан и тут же увидел ожидаемое желтое сообщение о том, что используется небезопасный протокол telnet. Потом ещё одно, весьма предсказуемое «IP Forwarding Enabled» — логично, через него ведь можно подключать компьютер, если не хватает портов в коммутаторе. А после я увидел уже что-то интересное:



Описание уязвимости говорило о том, что на порту 17185/udp висит сервис отладки VxWorks, через который есть возможность читать память устройства. Да, это действительно может быть полезно. И модуль для Metasploit-а, как оказалось, есть в наличии.

Кому нужно сбросить пароль, могут начинать читать отсюда:

Остается дело за малым, слить дамп памяти и надеяться на то, что пароль лежит там в открытом виде.
Запускаем Metasploit:
msfconsole

Выбираем нужный модуль:
use auxiliary/admin/vxworks/wdbrpc_memory_dump

Настроек у модуля весьма мало:



Достаточно указать только IP-адрес жертвы телефона, из которого нужно выковырять пароль. Пусть будет 192.168.1.177:
set rhost 192.168.1.177

Далее запускаем модуль командой run и видим, как начинает загружаться дамп памяти:


Поиск пароля в дампе решил начать конечно же со strings. Предполагая, что логин «admin» бывшие владельцы данного устройства менять не стали, сразу решил грепнуть по предполагаемому логину, выводя по 5 строчек до и после слова «admin». В итоге получилась команда
strings vxworks_memory.dmp | grep -A 5 -B 5 admin

Которая, о чудо, сразу дала нужный результат:



При этом, несмотря на то, что текста вывелось достаточно много, нужный мне результат был почти в самом низу, даже полоску прокрутки не пришлось трогать. И в открытом виде… Победа!

P.S. Кстати, пароль-то был не плох — 12 символов, большие/маленькие буквы и цифры и с виду — абсолютно случайные. Похоже тот кто его ставил, знал о важности парольной защиты. Но, похоже, не знал, что обновлять прошивки устройств не менее важно…
Tags:
Hubs:
+36
Comments 18
Comments Comments 18

Articles