Bueno, pues como parece que lo más inteligente en este post es el método de comprarse un switch o un hub o aprovechar una tarjeta de red, os voy a poner el código para extraer todo el fichero sin necesidad de gastar dinero o perder tiempo en mierdas de comprar tarjetas, switches, etc.
Aprovecho las pistas que nos han ido dejando por aquí algunos del foro y con mis limitados conocimientos, os pongo el código para conseguirlo. No os voy a dejar pistas, os lo voy a poner tal cual para que sea más sencillo.
Primero, necesitamos saber el serial number de nuestro router. Mirar la pegatina por debajo del router.
Luego tenemos que descargarnos python3 (si no lo tenemos). Recomiendo bajarse una instalación de Ubuntu 18.04 en un pen-drive.
En dicha instalación ya tiene python3. Ejecutamos el siguiente comando:
./decrypt_config.py <SN> config.bin
El fichero config.bin
lo habremos obtenido previamente de un volcado de copia de seguridad de nuestro router.
#!/usr/bin/env python3
#Uso: ./decrypt_config.py <SN> config.bin
import sys
import zlib
from Crypto.Cipher import AES
from hashlib import sha256
from struct import unpack
BASE_K = "8cc72b05705d5c46"
BASE_V = "667b02a85c61c786"
ENC_HEAD_LENGTH = 0x63
DEC_HEAD_LENGTH = 0x48
if len(sys.argv) != 3:
print ("%s <sn> <config.bin>" % sys.argv[0])
sys.exit(1)
try:
plain_k = BASE_K + sys.argv[1]
plain_v = BASE_V + sys.argv[1]
k = sha256(plain_k.encode('utf-8')).digest()
v = sha256(plain_v.encode('utf-8')).digest()
d = AES.new(k, AES.MODE_CBC, v[:16])
o = d.decrypt(open(sys.argv[2], "rb").read()[ENC_HEAD_LENGTH:])
#print (zlib.decompress(o[DEC_HEAD_LENGTH:]))
fs = open(sys.argv[2] + ".dec", "wb")
fs.write(o)
except (ValueError, IOError) as e:
print ("ERROR: %s" % e)
pass
La ejecución anterior, nos habrá generado un archivo config.bin.dec
Antes, tendremos que ir a 'Software y actualizaciones' para indicarle que vamos a usar todos los repositorios y desmarcamos la opción de usar el cd-rom:
En nuestro ubuntu, ejecutamos los siguientes comandos:
sudo su
apt-get install binwalk
exit
A continuación ejecutamos:
binwalk -e config.bin.dec
El comando dará como respuesta:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
72 0x48 Zlib compressed data, best compression
5643 0x160B Zlib compressed data, best compression
Y habrá creado una carpeta con dos ficheros en texto (160B
y 48
):
ubuntu@ubuntu:~/Desktop/_config.bin.dec.extracted$ ls -la
total 140
drwxr-xr-x 2 ubuntu ubuntu 120 nov 18 12:50 .
drwxr-xr-x 3 ubuntu ubuntu 160 nov 18 12:58 ..
-rw-r--r-- 1 ubuntu ubuntu 54622 nov 18 12:50 160B
-rw-r--r-- 1 ubuntu ubuntu 6101 nov 18 12:50 160B.zlib
-rw-r--r-- 1 ubuntu ubuntu 65536 nov 18 12:50 48
-rw-r--r-- 1 ubuntu ubuntu 11672 nov 18 12:50 48.zlib
En el fichero 160B
buscáis por digi
y encontraréis la contraseña de la conexión PPPOE. Ojo, que hay 2 passwords, una es la password del usuario admin
y otra es la password de la conexión PPPoE.
Se lo dedico al chaval que decía que tenía conocimientos limitados en programación, pues sí, totalmente cierto, pero también es cierto que con tus pistas lo he obtenido. Al menos aquí nadie ha puesto 'en claro' y paso a paso cómo se ejecuta. Sólo pequeñas pistas sin más.
Así que creo que ahora sí que se puede dar por solucionado este post. Sería bueno ponerle una chincheta, creo yo.