Pull to refresh

Взламываем D-Link DSP-W215 Smart Plug

Reading time 4 min
Views 31K
Information Security *Reverse engineering *
Translation
image
D-Link DSP-W215 Smart Plug — беспроводное устройство для мониторинга и контроля за электрическими розетками. Его пока нельзя купить в магазинах Amazon или Best Buy, но прошивка уже доступна для скачивания на сайте D-Link.

TL;DR: DSP-W215 содержит ошибку переполнения буфера, которая позволяет неаутентифицированному пользователю полностью управлять устройством, в том числе и самой розеткой.
Читать дальше →
Total votes 68: ↑67 and ↓1 +66
Comments 14

Взламываем D-Link DSP-W215 Smart Plug. Снова

Reading time 4 min
Views 12K
Information Security *Reverse engineering *
Translation
image
Недавно, D-Link выпустил прошивку v1.02 для DSP-W215, в которой исправлен баг HNAP с переполнением буфера в my_cgi.cgi. Хоть они и быстренько убрали прошивку с сайта: «Вы можете обновить прошивку через мобильное приложение», я успел ее скачать перед моим рейсом в Мюнхен, и 8-часовой перелет предоставил мне достаточно времени для качественного анализа новой версии прошивки.

К сожалению, баг с HNAP был не единственной проблемой этого устройства. Конфигурационный файл lighttpd показывает нам, что my_cgi.cgi используется для обработки некоторых страниц, а не только HNAP-запросов:
alias.url += ( "/HNAP1/" => "/www/my_cgi.cgi",
               "/HNAP1"  => "/www/my_cgi.cgi",
               "/router_info.xml" => "/www/my_cgi.cgi",
               "/post_login.xml" => "/www/my_cgi.cgi",
               "/get_shareport_info" => "/www/my_cgi.cgi",
               "/secmark1524.cgi" => "/www/my_cgi.cgi",
               "/common/info.cgi" => "/www/my_cgi.cgi"
)


Главная функция в my_cgi.cgi имеет два ветвления кода: один для обработки HNAP-запросов, а другой — для всего остального:
image
Читать дальше →
Total votes 45: ↑43 and ↓2 +41
Comments 4

Взламываем D-Link DSP-W215 Smart Plug. Снова и опять

Reading time 3 min
Views 9.6K
Information Security *Reverse engineering *
Translation
Вот мы снова и опять.
image

В последнем эксплоите к DSP-W215 я говорил, чтобы функция get_input_entries не падала, нужно использовать имя «storage_path» в POST-запросе. Так нужно было сделать из-за того, что есть еще одно переполнение буфера, на этот раз в функции get_input_entries, которую вызывает get_input_entries, если имя пост параметра отлично от «storage_path» или «path»:
image

В функцию replace_special_char передается один аргумент — указатель на обрабатываемое POST-значение:
image
Читать дальше →
Total votes 48: ↑44 and ↓4 +40
Comments 0

Взламываем D-Link DSP-W215 Smart Plug: Опять, снова, еще раз

Reading time 4 min
Views 24K
Information Security *Reverse engineering *
Translation
image

В предыдущих сериях:
  1. Взламываем D-Link DSP-W215 Smart Plug
  2. Взламываем D-Link DSP-W215 Smart Plug. Снова
  3. Взламываем D-Link DSP-W215 Smart Plug. Снова и опять


До сих пор, все найденные в DSP-W215 уязвимости могли быть выполнены только из LAN, ну, если вы не глупец и не открыли доступ к Smart Plug из интернета.
Типичным способом атаки устройств со встроенным веб-сервером, доступным только из внутренней сети, типа того, что у DSP-W215 — через CSRF. Проблема этого метода в том, что любой веб-браузер будет кодировать (urlencode) передаваемые данные, например, адрес возврата, но до этого момента мы использовали уязвимости, которые не декодируют (urldecode) наши данные (уязвимость в функции replace_special_char, которую мы эксплуатировали в предыдущей статье, декодирует только ограниченный набор ASCII-символов).

Бинарный файл my_cgi.cgi, который является основной уязвимой целью, содержит функцию-декодировщик «decode», которая декодирует POST-данные. Этой функции передается два аргумента: указатель на закодированные данные и указатель на буфер, где хранятся раскодированные данные:
void decode(char *encode_buf, char *decode_buf);


Эта функция просто проходит циклом по всем байтам в encode_buf и раскодирует или копирует их в decode_buf:
image
Читать дальше →
Total votes 56: ↑46 and ↓10 +36
Comments 17