- Discord: https://discord.gg/wkWr6Dj46D
- Telegram: https://t.me/hardwarehackinges
Importante hacer estos pasos antes de conectar el Bus Pirate
La manera más rápida y eficaz es abrir el Administrador de Dispositivos (device manager) buscándolo en el sistema.
También podemos usar la secuencia win+r escribiendo devmgmt.msc
Una vez se nos abra el administrador de dispositivos nos interesa la parte Puertos (COM y LPT).
Al desplegarlo obtendremos los puertos previos a conectar el Bus Pirate
Al conectar el Bus Pirate aparece el nuevo puerto COM que tendremos que utilizar. En el caso de la imagen USB Serial Port (COM4).
Usamos este esquema para conectarnos:
schema by David Sánchez
Tiene que quedar asi:
Ahora nos conectaremos usando algun software como TeraTerm o Putty, en mi caso usare TeraTerm.
- Lo abrimos y seleccionamos la interfaz COM correspondiente del BusPirate
- Ahora configuramos la interfaz serial dentro de Setup->Serial Port
- Y lo dejamos con esta configuracion de 115200 baudios de velocidad, 8 bits de datos, ninguno de paridad y uno de stop.
- Ahora para no quedarnos ciegos vamos a la configuración de fuente y aumentamos el tamaño y lo dejamos en 14.
- Abrimos el menu del buspirate presionando m+enter
- Presionamos el 4 y damos enter, dos veces
Presionamos W mayúscula y P mayúscula y ya podriamos leer la memoria y escribir
Usamos la macro de búsqueda de direcciones de 7bit para obtener la dirección de escritura y de lectura.
Escribimos (1) y damos a enter
Con los corchetes indicamos el principio y el final de cada comando I2C.
El primer byte en hexadecimal es la dirección que indica si escribimos o leemos.
Los dos siguientes bytes son la direccion donde se va a escribir.
Los bytes 0x41 0x41 0x41 son el contenido que se escribira en la dirección selecionada de manera consecutiva.
Para leer una dirección tenemos que usar la direccion de escritura de la eeprom.
Hay que escribir la direccion para luego poder leer el contenido aunque no sobreescribamos nada.
Se sigue el mismo patrón que escribiendo pero sin Bytes de contenido.
[0xA0 0x00 0x69]
Después de seleccionar la direccion 0x69 escribimos el byte de lectura y una r para leer un byte, en el caso que queramos leer varios bytes escribimos 'r:(numero de veces)' para que sea una lectura secuencial.
[0xa1 r:20]
Tenemos flasheado el CTF de Dreg, para leer la flag de la EEPROM introducimos estos comandos:
[0xA0 0x00 0x69]
[0xa1 r:20]Para saber mas sobre el protocolo I2C con el bus pirate lee esto.
Usamos un conversor de hexadecimal y obtenemos este resultado.
- TP-Link TL-WR841N
- Soldador Estaño
- FLux
- USB a TTL o Buspirate
- Multimetro
- Cable Ethernet o Wifi
- Pines para UART
- Ordenador
El modelo que vamos a analizar es el TP-Link TL-WR841N V14
Lo primero que debemos hacer es quitar los dos tornillos que hay en la parte inferior y después haremos palanca con algún trozo de plástico, yo he usado una púa de guitarra.
Y ya tendríamos acceso directo a la PCB del router.
Una vez abierto el router hay que identificar todos los componentes posibles.
- Circulo Rojo: Es la memoria RAM. Mirando la ficha técnica de la Versión 14 en OpenWRT podemos ver que tiene 32 MiB.
- Circulo Amarillo: Es el SOC (System-On-Chip) MT7628NN.
- Circulo Azul: Es la memoria flash EN25Q32(A/B). Aquí es donde se guarda el bootloader y el sistema de archivos etc.
- Circulo Rosa: Es la Interfaz UART que usaremos para obtener terminal de root y obtener el sistema de archivos. La resistencia R18 bloquea la escritura UART, luego habrá que quitarla.
Soldar pines a UART no es complicado simplemente necesitaremos:
- Soldador de estaño
- Estaño a poder ser de calidad (se notan mucho los acabados.)
- Pines
Aqui vemos como se ha eliminado la R18 que impide la escritura a través de UART y los pines listos para conectarnos. En este caso hemos conectado el RX, el TX y el GND. El VCC no es necesario porque la alimentación la daremos usando el adaptador de corriente del router.
Aqui podemos ver como he conectado todos los pines desde el USB_UART-to-TTL, una cosa IMPORTANTE es que para que funcione la escritura necesitamos que el cable de datos TX vaya a 5V, porque si lo ponemos a 3,3V no funcionara correctamente.
Ahora para conectarnos correctamente lo primero es entender el protocolo SERIAL ,lo mas importante es que el pin RX del adaptador TTL-USB tiene que ir al TX del router y el TX del adaptador TTL-USB al RX del router además de conectar los dos GNDs.
Ahora nos conectaremos usando algun software como TeraTerm o Putty, en mi caso usare TeraTerm.
- Lo abrimos y seleccionamos la interfaz COM correspondiente del TTL-USB
- Ahora configuramos la interfaz serial dentro de Setup->Serial Port
- Y lo dejamos con esta configuracion de 115200 baudios de velocidad, 8 bits de datos, ninguno de paridad y uno de stop.
- Ahora para no quedarnos ciegos vamos a la configuración de fuente y aumentamos el tamaño y lo dejamos en 14.
- Tras esto enchufamos el router a la corriente y veremos el bootloader cargando.
Tras esto ya podemos escribir comandos pero antes vamos a ver como se haría con el bus pirate.
Ahora explicaremos paso a paso con el bus pirate:
La configuración del emulador de terminal es la misma que en el USB-to-TTL ahora lo importante es como conectemos los cables, aqui tenemos un esquema de que es cada color:
- Ahora debemos conectar el MOSI(GRIS) al RX y el MISO(NEGRO) al TX, el GND(MARRON) al GND del router además de conectar el VPU(VERDE) al 5V(NARANJA) del propio bus pirate
- Lo siguiente es conectarse usando TeraTerm y con la misma configuración de antes e interactuar con el menu del bus pirate.
Escribimos 'm' y pulsamos intro
Elegimos el modo 3 (UART)
Pulsamos enter 4 veces para elegir todo por defecto es decir: Sin bit de paridad, 1 bit de parada , y con el colector abierto (Open Drain) para meterle por VPU esos 5V que necesita.
Pulsamos 'W' mayúscula para dar corriente, pulsamos 'P' mayúscula para activar las resistencias pull-up y solo nos falta activar el live monitor para recibir la shell de UART.
Esto lo haremos usando la macro (1) que es el Transparent bridge aunque si ponemos (0) nos saldra la lista de macros.
Ahora conectamos el router a la corriente y obtendremos shell.
Lo primero que haremos para extraer el sistema de archivos es instalar un servidor TFTP (Trivial FIle Transfer Protocol), en mi caso instale la version Tftpd64-4.62-setup.exe una vez instalada hay que abrirlo y dejar la configuración de esta manera:
Tras configurarlo nos conectamos al router por wifi o por cable y revisamos que ip nos ha dado:
Con esto ya sabemos que desde el terminal del router tenemos transferir por TFTP a 192.168.0.100
Para comprobar que estamos conectados al router por red introducimos la puerta de enlace en el navegador:
Una vez conectados es el momento de extraer el sistema de archivos y el firmware completo.
Tenemos una terminal muy limitada, para tener mas herramientas hay que subir una copia de busybox-mipsel.
Este router utiliza el subsistema MTD, que se divide en bloques. Concatenamos todos los bloques en orden para obtener el contenido de la flash, para más información de MTD.
Los bloques se encuentran en el directorio /dev y empiezan por la palabra mtd:
Copiamos todos los archivos de mtd con el script transfer.sh.
Metemos los archivos en kali y los concatenamos siguiendo estos comandos:
cat mtdblock0 > firmware
cat mtdblock1 >> firmware
cat mtdblock2 >> firmware
cat mtdblock3 >> firmware
cat mtdblock4 >> firmwareDescomprimimos y extraemos con binwalk para después poder analizarlo:
binwalk -eM firmware
















































