Ко мне, через двух знакомых, обратился директор одного таксопарка с просьбой сбросить пароль от IP-телефона D-Link DPH-400S. Историю телефона я не знаю и интересоваться не стал, но, как я понял, есть работающее и настроенное оборудование (в том числе и этот многоканальный телефон), которое никто не обслуживает. Пароли тоже никто не знает. А есть желание настроить интеграцию с компьютером, которую определенные люди сделать могут, но для этого нужен пароль от телефона.
Как мне сказал директор, уже полдесятка людей заявили, что без сброса настроек это невозможно. Оказалось всё же возможно. А о том, как получилось восстановить пароль — небольшая история под катом.
Когда я услышал про эту задачу, сразу пришли в голову две стандартных мысли — поискать штатный способ сброса пароля без полного обнуления конфига и, конечно же, пароли по-умолчанию. Ибо, с чем черт не шутит, и кто знает, что за «специалисты» уже приходили смотреть телефон.
Первый вариант быстро отпал — инструкция такого варианта не предлагала, а на официальном форуме D-Link на этот вопрос было предложено одно решение — полный сброс настроек. И этот вариант директор сразу забраковал.
Поэтому оставалось надеяться на удачу — нагуглил несколько вариантов паролей от самого телефона через кнопочный интерфейс и штук 5 паролей от веб-доступа и, вооружившись Kali Linux (на случай, если всё же по-хорошему телефон сдаться не захочет) пошел к «заказчику».
В первую очередь попробовал заготовленные пароли на самом телефоне — мимо. Ну что же, может веб интерфейс меня порадует? Спросил у сотрудников IP-адрес телефона — в ответ получил удивленное лицо и фразу о том, что понятия об этом не имеют. И это вселяло надежду, что он всё же не поменян. Подключившись к коммутатору, который стоял рядышком с телефоном, с помощью nmap-а быстренько нашел нужную мне цель, но и тут меня ждало разочарование — пароли для веб-интерфейса тоже не подошли.
Следующее, и, на тот момент, последнее, что было по плану — надежда на слабый пароль.
Глянув в исходники страницы входа, чтобы зарядить брутфорс формы через гидру (THC-Hydra), немного ужаснулся, обнаружив там экранов 10-15 JavaScript-кода. Оказывается, чтобы не отправлять пароль в открытом виде через HTTP, он, силой программистов D-Link-а, уходит в следующем виде:
Реализация md5 на JavaScript тоже прилагалась. По всей видимости, дешевая замена HTTPS. Не стал даже проверять, каждый ли раз выдается новая соль (а это, скажу немного забегая вперед, в данном случае возможно — пароль-то хранится в открытом виде) или replay-атакам могут стать серьезной угрозой для «HTTPS от D-Link», т.к. решил пока больше не мучить web-сервис, ибо не было никакого желания готовить специальный словарь для брутфорса.
Куда больше было желания побрутфорсить telnet, который тоже шел в стандартной комплектации и отключен не был. Однако скорость брутфорса в 20-30 паролей в секунду немного расстроила. Запустил словарик топ-500 паролей и решил подождать, снова понадеявшись на удачу.
Заскучав минуты через 3 после начала брута, решил пройтись по телефону Nessus-ом. Однако в результатах скана были только открытые порты, что сразу показалось странным, так как, как минимум на использование telnet-а он должен был выругаться. Оказывается, по умолчанию Nessus не сканирует сетевые принтеры, телефоны и прочие дохлые устройства, чтобы они не умерли под его напором. Поставив нужную галочку снова запустил скан и тут же увидел ожидаемое желтое сообщение о том, что используется небезопасный протокол telnet. Потом ещё одно, весьма предсказуемое «IP Forwarding Enabled» — логично, через него ведь можно подключать компьютер, если не хватает портов в коммутаторе. А после я увидел уже что-то интересное:
![](https://habrastorage.org/r/w1560/files/b29/d4c/d81/b29d4cd81429478bb1cb384ac7676520.png)
Описание уязвимости говорило о том, что на порту 17185/udp висит сервис отладки VxWorks, через который есть возможность читать память устройства. Да, это действительно может быть полезно. И модуль для Metasploit-а, как оказалось, есть в наличии.
Кому нужно сбросить пароль, могут начинать читать отсюда:
Остается дело за малым, слить дамп памяти и надеяться на то, что пароль лежит там в открытом виде.
Запускаем Metasploit:
Выбираем нужный модуль:
Настроек у модуля весьма мало:
![](https://habrastorage.org/r/w1560/files/234/5a4/deb/2345a4deb3e14b01b009edbb91e0a220.png)
Достаточно указать только IP-адресжертвы телефона, из которого нужно выковырять пароль. Пусть будет 192.168.1.177:
Далее запускаем модуль командой run и видим, как начинает загружаться дамп памяти:
![](https://habrastorage.org/r/w1560/files/2c9/576/b8e/2c9576b8ec3e44e2b925036839bb9115.png)
Поиск пароля в дампе решил начать конечно же со strings. Предполагая, что логин «admin» бывшие владельцы данного устройства менять не стали, сразу решил грепнуть по предполагаемому логину, выводя по 5 строчек до и после слова «admin». В итоге получилась команда
Которая, о чудо, сразу дала нужный результат:
![](https://habrastorage.org/r/w1560/files/a17/642/062/a17642062a75450fa07cedb6b86afc08.png)
При этом, несмотря на то, что текста вывелось достаточно много, нужный мне результат был почти в самом низу, даже полоску прокрутки не пришлось трогать. И в открытом виде… Победа!
P.S. Кстати, пароль-то был не плох — 12 символов, большие/маленькие буквы и цифры и с виду — абсолютно случайные. Похоже тот кто его ставил, знал о важности парольной защиты. Но, похоже, не знал, что обновлять прошивки устройств не менее важно…
Как мне сказал директор, уже полдесятка людей заявили, что без сброса настроек это невозможно. Оказалось всё же возможно. А о том, как получилось восстановить пароль — небольшая история под катом.
Если кто-то попал сюда в поисках способа восстановления пароля, а читать мою историю не хочет, то можно сразу читать с жирного заголовка ниже.
Когда я услышал про эту задачу, сразу пришли в голову две стандартных мысли — поискать штатный способ сброса пароля без полного обнуления конфига и, конечно же, пароли по-умолчанию. Ибо, с чем черт не шутит, и кто знает, что за «специалисты» уже приходили смотреть телефон.
Первый вариант быстро отпал — инструкция такого варианта не предлагала, а на официальном форуме 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» — логично, через него ведь можно подключать компьютер, если не хватает портов в коммутаторе. А после я увидел уже что-то интересное:
![](https://habrastorage.org/files/b29/d4c/d81/b29d4cd81429478bb1cb384ac7676520.png)
Описание уязвимости говорило о том, что на порту 17185/udp висит сервис отладки VxWorks, через который есть возможность читать память устройства. Да, это действительно может быть полезно. И модуль для Metasploit-а, как оказалось, есть в наличии.
Кому нужно сбросить пароль, могут начинать читать отсюда:
Остается дело за малым, слить дамп памяти и надеяться на то, что пароль лежит там в открытом виде.
Запускаем Metasploit:
msfconsole
Выбираем нужный модуль:
use auxiliary/admin/vxworks/wdbrpc_memory_dump
Настроек у модуля весьма мало:
![](https://habrastorage.org/files/234/5a4/deb/2345a4deb3e14b01b009edbb91e0a220.png)
Достаточно указать только IP-адрес
set rhost 192.168.1.177
Далее запускаем модуль командой run и видим, как начинает загружаться дамп памяти:
![](https://habrastorage.org/files/2c9/576/b8e/2c9576b8ec3e44e2b925036839bb9115.png)
Поиск пароля в дампе решил начать конечно же со strings. Предполагая, что логин «admin» бывшие владельцы данного устройства менять не стали, сразу решил грепнуть по предполагаемому логину, выводя по 5 строчек до и после слова «admin». В итоге получилась команда
strings vxworks_memory.dmp | grep -A 5 -B 5 admin
Которая, о чудо, сразу дала нужный результат:
![](https://habrastorage.org/files/a17/642/062/a17642062a75450fa07cedb6b86afc08.png)
При этом, несмотря на то, что текста вывелось достаточно много, нужный мне результат был почти в самом низу, даже полоску прокрутки не пришлось трогать. И в открытом виде… Победа!
P.S. Кстати, пароль-то был не плох — 12 символов, большие/маленькие буквы и цифры и с виду — абсолютно случайные. Похоже тот кто его ставил, знал о важности парольной защиты. Но, похоже, не знал, что обновлять прошивки устройств не менее важно…