
Para uma análise abrangente da segurança física de hardware do roteador NETIS WF2409E, estarei documentando todo o processo de análise de hardware, incluindo a desmontagem do dispositivo, identificação das interfaces de depuração e extração do firmware. Também pretendo registrar detalhes sobre vulnerabilidades encontradas e oferecer recomendações de segurança correspondentes, na esperança de contribuir para melhorias na segurança de dispositivos IoT.

| Categoria | Parâmetro | Descrição |
|---|---|---|
| Informações do dispositivo | Modelo | Netis WF2409E |
| Tipo | Roteador Wireless N 300Mbps | |
| Alimentação | DC 9V/500mA | |
| Versão do hardware | V1.8 | |
| Versão da PCB | PB-7189-M02G-20 | |
| Data de fabricação | 2015-03-23 | |
| País de fabricação | China | |
| Identificadores de rede | Número de série | 2409EEU5B102714 V1.8 |
| Endereço MAC | W8D398DFB68 | |
| SSID padrão | netis_BDFB68 | |
| Senha padrão | password | |
| Endereço de gerenciamento | http://netis.cc | |
| Interfaces de hardware | Porta WAN | 1 (RJ45 azul) |
| Portas LAN | 4 (RJ45 pretas, LAN1-4) | |
| Antenas | 3 antenas externas | |
| Conector de alimentação | Entrada DC (PWR) | |
| Botões funcionais | Default | Redefinição para as configurações de fábrica |
| WPS | Configuração protegida de WiFi |



| Parâmetro | Especificação |
|---|---|
| Modelo do processador | RealTek RTL8196E |
| Arquitetura | 16-bit |
| Frequência de clock | 380MHz |
| Data de compilação | 2014.09.29 |
| Parâmetro | Descrição |
|---|---|
| Tipo de bootloader | Bootloader proprietário RealTek |
| Endereço de carregamento do kernel | 0x80500000 |
| Endereço inicial de execução | 0x80003440 |
| Faixa de busca de assinatura | 0x10000-0x170000 |
| Parâmetro | Valor |
|---|---|
| Endereço IP | 192.168.0.1 |
| Máscara de sub-rede | 255.255.255.0 |
| Endereço MAC | 04:8d:38:bd:fb:69 |
| Interface sem fio | wlan0 (incluindo va0-va3, vxd) |
| Parâmetro | Valor |
|---|---|
| Modelo do dispositivo | netis WF2419E_RU |
| Versão do firmware | V2.5.40200 |
| Data do firmware | 2016.09.02 |
| Versão do BusyBox | v1.00-pre8 (2015.01.23) |
É importante notar que este dispositivo provavelmente não usa U-Boot. Principais indícios:
---RealTek(RTL8196E)at 2014.09.29-19:16+0800 v1.0 [16bit](https://github.com/victorique-123/cve-2023-38829-netis-wf2409e_report/blob/master/380MHz)
Comandos do Bootloader :
<RealTek> FLR 80000000 0 100 #Leitura da Flash DB 80000000 100 #Visualização do conteúdo da memória



/dev/mtdblock1 montado como diretório raiz /none montado como sistema de arquivos de processos /proctmpfs montado como sistema de arquivos temporário /varO sistema de arquivos raiz está configurado da seguinte forma:
/dev/mtdblock1Isso indica o uso de memória flash MTD como meio de armazenamento, com os arquivos do sistema protegidos e otimizados em volume usando somente leitura e compressão squashfs.
O sistema de arquivos de processos está configurado da seguinte forma:
O sistema de arquivos temporário está configurado da seguinte forma:


binwalk -E --save netis.bin


binwalk netis.bin

E obter:

| Deslocamento | Cabeçalho da partição |
|---|---|
| 0x12F0 | ![]() |
| 0x32818 | ![]() |

etc/passwd:
Usando o serviço de descriptografia de hashes https://hashes.com/en/decrypt/hash, a senha do root foi recuperada com sucesso como realtek.

web/welcome.htm:Esta é a página da interface web padrão

Pesquisa de dispositivos no FOFA através de características no web/welcome.htm:
Comandos de pesquisa:
body="./images/logo_netis.png" && body="display:block; height:60px; float:left;"


Para acessar o painel de administração do dispositivo, pode ser necessária autenticação com login e senha

Após autenticação bem-sucedida, é possível entrar no painel de administração

Primeiro, usando o comando ~/squashfs-root/web$ find, foram encontrados os diretórios disponíveis e, usando o Burpsuit, foi verificada sua acessibilidade:| | 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== |
Potenciais locais de informações:
Após a verificação, podemos encontrar no arquivo ==/version.txt== as seguintes informações:

A extração dessas informações foi implementada com um script Python:

Atualmente, as seguintes vulnerabilidades foram encontradas neste dispositivo. A vulnerabilidade CVE-2023-38829 é uma vulnerabilidade de injeção de comandos existente no módulo de teste de rede do roteador NETIS SYSTEMS Router WF2409E nas funções ping e traceroute. Através da interface web de gerenciamento é possível injetar comandos maliciosos nos parâmetros dessas funções, resultando na execução de comandos.
Para verificar a presença dessa vulnerabilidade, entrei no painel de controle do roteador e testei a vulnerabilidade nas funções ping e traceroute.
Aqui injetei o comando cd && ls && cd etc/ && cat passwd, que exibiu o conteúdo do arquivo de senhas.
Abaixo está a saída do painel de controle do roteador após a injeção do comando, confirmando a presença da vulnerabilidade.

Análise CVSS 3.1 das vulnerabilidades de injeção de comandos encontradas:
Avaliação das métricas base:
Métricas de impacto:


Pontuação final: 9.2/10 pontos, classificada como "crítica". CVSS-Vector: AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:F/RL:O/RC:C
Essa alta pontuação de vulnerabilidade se deve aos seguintes motivos:
Vamos primeiro encontrar os arquivos que podem conter vulnerabilidades:
find . -name "*.cgi" ./web/cgi-bin/cgitest.cgi ./bin/cgitest.cgi
Eu suponho que as vulnerabilidades podem se manifestar em programas CGI, então inicialmente tentarei analisar o arquivo ./web/cgi-bin/cgitest.cgi com o IDA Pro.
Primeiro, é necessário encontrar locais de chamada de funções semelhantes. Através da busca foi possível encontrar a string "killall ping".
Ao analisar o local da chamada, pode-se ver que o programa, após inicializar as funções ping e traceroute, chama /bin/network_test.sh

E o local onde se encontra a vulnerabilidade está justamente no módulo de teste de rede. Ok, precisamos analisar /bin/network_test.sh.
Inicialmente, é necessário realizar uma busca.

Encontramos a função network_test_sh:
......

Ao analisar detalhadamente a função, é possível encontrar os módulos de execução de comandos e salvamento de resultados.

Neles: Execução do comando ping: ping -c %d -s %d %s -W %d > %s &
Execução do comando traceroute: traceroute -I -m %d %s > %s &
# Ситуация с командой ping
loc_4205B8:
lw v0, 0x108+var\_D4(sp) #прямая загрузка параметров
lw a3, 0x108+var\_D8(sp)
la t9, sprintf #прямой вызов sprintf #отсутствует проверка параметров перед sprintf
```
Aqui você encontrará uma lista completa de opções comuns para todos os utilitários, bem como uma lista de opções para cada ferramenta específica. Abaixo está a tradução das opções padrão:
| Опция | Сокращение | Описание |
|-------|------------|----------|
| `--help` | `-h` | Показать справочное сообщение и выйти |
| `--version` | `-V` | Показать версию программы и выйти |
| `--verbose` | `-v` | Включить подробный вывод (можно указывать несколько раз) |
| `--quiet` | `-q` | Подавить вывод, кроме ошибок |
| `--output <file>` | `-o <file>` | Записать вывод в указанный файл |
| `--config <file>` | `-c <file>` | Использовать указанный конфигурационный файл |
```bash
# Пример использования общих опций
tool_name --verbose --output result.txt input_data.csv
```
Для получения дополнительной информации о конкретных опциях обратитесь к документации соответствующего инструмента.```
# Ситуация с командой traceroute
loc_420574:
la $t9, sprintf #также прямой вызов sprintf
lw $a2, 0x108+var_D0($sp) #также отсутствует проверка параметров
```
Давайте рассмотрим основные функции:
* **Автоматическое обнаружение** - инструмент может автоматически обнаруживать уязвимости в веб-приложениях.
* **Поддержка различных типов атак** - поддерживает SQL injection, XSS, LFI, RFI и другие.
* **Модульная архитектура** - легко добавлять новые модули для специфических задач.
* **Генерация отчетов** - создает подробные отчеты в форматах HTML, PDF и JSON.
* **Интеграция с CI/CD** - может быть встроен в пайплайны непрерывной интеграции.
Для начала работы выполните команду:
```bash
python3 tool.py --target example.com --mode fast
```
Для более детального сканирования используйте режим `full`:
```bash
python3 tool.py --target example.com --mode full
la $t9, run_by_system jalr $t9 ; run_by_system #прямой вызов system для выполнения команды move $a0, $s1 #отсутствуют проверки безопасности

O código não possui validação suficiente dos parâmetros de entrada, o que cria um risco potencial de injeção de comandos. Um atacante pode controlar o parâmetro IP transmitido para executar comandos shell, por exemplo:```
# Нормальный ввод 192.168.0.1
# Примеры вредоносного ввода
192.168.0.1; rm -rf / #удаление файлов
192.168.0.1 & id & #выполнение произвольных команд
Este script utiliza a vulnerabilidade de injeção de comandos na interface web do dispositivo para executar comandos remotamente, criando requisições HTTP especiais. O script realiza a exploração da vulnerabilidade através de duas requisições HTTP POST: a primeira injeta o comando, a segunda obtém o resultado da execução.
O primeiro pacote (netcore_set.cgi) é destinado a: injeção e execução do comando

O segundo pacote (netcore_get.cgi) é destinado a: obter o resultado da execução do comando

2. Codificação URL de todos os parâmetros
3. Envio de requisição POST para netcore_set.cgi
### 11.3 Segunda Etapa: obtenção de resultados
1. Formação da segunda requisição POST:```
{ "mode_name": "netcore_get",
"noneed": "noneed" }
Para testar o script, criei um arquivo ceshi no host e tentei carregá-lo no dispositivo através do script



Sucesso!
Na verdade, esta vulnerabilidade permite obter controle total sobre o dispositivo, pois o dispositivo usa acesso root por padrão
| Parâmetro verificado | Estado | Observação |
|---|
| Indicador de alimentação | Funcional | Acende de forma estável ao ligar |
| Indicadores de rede | Funcionais | Piscam ao conectar |
| Estado da porta WAN | Funcional | Conexão normal com a rede |
| Estado das portas LAN | Funcionais | Todas as 4 portas funcionam |
| Função WiFi | Funcional | Antenas intactas, sinal normal |
| Função WPS | Funcional | Botão responde |
| Função de redefinição | Funcional | Botão Default funciona |
| Nº | Modelo do chip | Fabricante | Função principal | Especificações técnicas | Observações |
|---|
| 1 | EM63A165TS-6G | EtronTech | Memória do sistema | - Capacidade 32 Mbit - Frequência 166MHz - Arquitetura SDRAM - Invólucro TSOP-II | - Usada para armazenamento temporário de dados - Suporta cálculos do processador principal |
| 2 | FR9886 61504 | Desconhecido | Gerenciamento de energia | - Invólucro SOIC-8 - Circuito integrado | - DC-DC - Responsável pela regulação de tensão - Garante alimentação estável do sistema |
| 3 | RTL8196E | Realtek/RMC | Processador principal | - Arquitetura MIPS - Design SoC - Fabricado em Taiwan | - Processador central do sistema - Responsável pelos cálculos principais e gerenciamento - Processamento de rede integrado |
| 4 | MX25L3206E | Macronix | Memória Flash | - Capacidade 32Mb (4MB) - Interface SPI - Invólucro SOIC | - Armazenamento do firmware do sistema - Salvamento de dados de configuração |
| 5 | RTL8192ER | Realtek/RMC | Comunicação sem fio | - Controlador WiFi - Invólucro QFN | - Processamento de sinais sem fio - Suporte a funções WiFi |
| Parâmetro | Valor | Valor hexadecimal |
|---|
| Modelo do chip | MX25L3205D | - |
| Capacidade total | 4MB | 0x400000 |
| Tamanho do bloco | 64KB | 0x10000 |
| Tamanho do setor | 4KB | 0x1000 |
| Tamanho da página | 256B | 0x100 |
| Nome do serviço | Status | Observação |
|---|
| Servidor DHCP | Em execução | Normal |
| Servidor HTTP (Boa) | Em execução | Reinicializações anormais |
| IAPP | Em execução | IEEE 802.11f |
| MiniIGD | Em execução | v1.08.1 |
| mini_upnpd | Erro | Arquivo não encontrado |
| telnetd | Erro | Arquivo não encontrado |
| ota_init.sh | Erro | Arquivo não encontrado |
| Comando | Sintaxe | Função |
|---|
| HELP | ? | Mostrar ajuda |
| DB/DW | DB/DW <endereço> | Leitura de memória byte/word |
| EB/EW | EB/EW <endereço> | Gravação na memória byte/word |
| FLR | FLR | Leitura de dados da Flash para a RAM |
| FLW | FLW <dst_ROM><src_RAM> | Gravação de dados da RAM para a Flash |
| IPCONFIG | IPCONFIG <Endereço IP> | Configuração do endereço IP |
| LOADADDR | LOADADDR <endereço> | Definição do endereço de carregamento |
| CMP | CMP | Comparação de dados na memória |
| J | J <endereço> | Salto para execução |
| MDIOR/MDIOW | MDIOR/W [data] | Leitura/gravação de registros PHY |
| PHYR/PHYW | PHYR/W [data] | Leitura/gravação de registros PHY (método alternativo) |
| PORT1 | PORT1 | Teste de patch da porta 1 |
| AUTOBURN | AUTOBURN 0/1 | Controle de gravação automática |
| Tipo de comando | Comandos disponíveis |
|---|
| Comandos básicos | ., :, cd, help, exit |
| Controle de execução | break, continue, eval, exec |
| Operações com variáveis | export, read, readonly, set, shift |
| Gerenciamento de processos | times, trap, wait |
| Gerenciamento de permissões | login, newgrp, umask |
| Categoria | Ferramentas | Função |
|---|
| Ferramentas de rede | iptables ip6tables brctl ifconfig | Configuração de firewall, firewall IPv6, gerenciamento de bridge, configuração de interfaces de rede |
| Gerenciamento do sistema | busybox ps kill mount | Conjunto de ferramentas básicas, visualização de processos, gerenciamento de processos, montagem de sistema de arquivos |
| Comunicação VPN | pppd pptp l2tpd pptpctrl | Daemon PPP, cliente PPTP, daemon L2TP, gerenciamento PPTP |
| Gerenciamento de rede sem fio | iwcontrol iwpriv wlanapp.sh wps_init.sh | Controle de rede sem fio, comandos privados de rede sem fio, gerenciamento de aplicativos sem fio, inicialização WPS |
| Scripts de firewall | firewall.sh firewall_ipv6.sh firewall_pptp.sh | Firewall principal, firewall IPv6, firewall PPTP |
| DHCP/DNS | dhcpc.sh dhcpd.sh dnrd | Cliente DHCP, servidor DHCP, encaminhamento DNS |
| Serviço web | boa webs cgitest.cgi | Servidor web, gerenciamento web, teste CGI |
| Caminho | Tipo de informação | Descrição |
|---|
| /proc/cpuinfo | Informações da CPU | Informações detalhadas do processador |
| /proc/meminfo | Informações de memória | Estado de uso da memória do sistema |
| /proc/mtd | Informações das partições | Divisão da memória Flash |
| /proc/net/* | Informações de rede | Estado das interfaces de rede e conexões |
| /proc/sys/* | Parâmetros do sistema | Parâmetros ajustáveis do sistema |
| /proc/version | Informações da versão | Informações da versão do kernel |
| Componente | Descrição | Especificações técnicas |
|---|
| RTL8196E | Processador principal | - Arquitetura MIPS - Design SoC - Fabricação em Taiwan - Processador central do sistema - Responsável pelos cálculos principais e gerenciamento - Funções de processamento de rede integradas |
| EM63A165TS-6G | Memória do sistema | - Capacidade 32 Mbit - Frequência 166 MHz - Arquitetura SDRAM - Invólucro TSOP-II - Armazenamento temporário de dados do sistema - Suporta cálculos do processador principal |
| MX25L3206E | Memória Flash | - Capacidade 32 Mbit (4 MB) - Interface SPI - Invólucro SOIC - Armazenamento do firmware do sistema - Salvamento de dados de configuração |
| RTL8192ER | Rede sem fio | - Controlador WiFi - Invólucro QFN - Processamento de sinais sem fio - Suporte a WiFi |
| FR9886 61504 | Gerenciamento de energia | - Invólucro SOIC-8 - Circuito integrado - DC-DC - Responsável pela regulação de tensão - Garante alimentação estável do sistema |
| Arquivo | Deslocamento (decimal) | Deslocamento (hexadecimal) | Descrição | Informações adicionais |
|---|
| netis.bin | 4848 | 0x12F0 | Dados compactados LZMA | Tamanho do dicionário: 8388608 bytes, tamanho após descompressão: 56464 bytes; requer análise do conteúdo após descompressão |
| netis.bin | 206872 | 0x32818 | Dados compactados LZMA | Tamanho do dicionário: 8388608 bytes, tamanho após descompressão: 3278684 bytes; contém o kernel Linux 2.6.30 completo |
| netis.bin | 1507328 | 0x170000 | Sistema de arquivos SquashFS | Little-endian byte, compactação gzip, tamanho: 2628241 bytes |
| 0x170000 | ![]() |
| 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== |
| Número da vulnerabilidade | Tipo de vulnerabilidade | Modelo | Versão | Relatório/exploit |
|---|
| CVE-2023-42336 | divulgação de informações sensíveis | Netis | wf2409e_firmware < 1.0.1.705 wf3409e < v4 | https://github.com/adhikara13/CVE/blob/main/netis_WF2409E/Root_Hard_Code.md |
| CVE-2023-38829 | execução remota de código | Netis | wf2409e_firmware < 3.6.42541 wf3409e < - | https://github.com/adhikara13/CVE-2023-38829-NETIS-WF2409E |