Acceso SSH a TP-LINK TL-ER5120
Queriendo acceder por telnet o ssh a mi TL-ER5120v4 observo que no responde ni al puerto ssh 22 ni al telnet 23. Pero buscando en el menú de administrador descubro que activando SYSTEM TOOLS -> DIAGNOSTICS -> REMOTE ASSISTANCE me habilita en red local el acceso ssh (si lo queremos desde fuera tendremos que permitirlo en Remote Management).
El caso es que una vez activo ya me responde al puerto ssh con putty o con el comando ssh de windows. Pero no me loguea vía ssh con ninguna clave conocida.
Veo por internet que las claves SSH de tp-link solo las sabe tp-link y las usa para dar soporte remoto pero que vienen en su firmware y se puede sacar fácilmente. Hay 2 opciones. La primera para los equipos más antiguos es sacarlo del fichero shadow. Tan sencillo como bajar el firm que tiene nuestro equipo, descomprimirlo con 7zip y navegar a etc/shadow donde veremos algo así:
root:$1$GTN.gpri$DlSyKvZKMR9A9Uj9e9wR3/:15502:0:99999:7:::
nuestro usuario es root y nuestra clave está encriptada en md5, pero como son claves conocidas admin 1234 etc… si ponemos esa cadena en Google seguro que encontramos la clave descodificada, por ejemplo si ponemos en google
$1$GTN.gpri$DlSyKvZKMR9A9Uj9e9wR3/
nos lleva a esta web https://blog.xynos.co.uk/2020/03/hashcat-fun.html donde vemos que la clave es sohoadmin
pues ya tenemos usuario y clave.
Pero en los equipos mas nuevos en el fichero shadow encontraremos algo asi:
root::16800:0:99999:7:::
donde solo podemos obtener el usuario “root” pero la clave no viene definida, y esta se genera al vuelo al arrancar el equipo. La generación podemos verla en el firmware en la ruta etc/init.d/dropbear donde vemos el código que genera la clave ssh.
getNewPasswd()
{
. /lib/functions.sh
local macAddr=""
local username=""
macAddr=$(uci_get tddp macaddr macaddr)
username=$(uci_get "accountmgnt.@account[0].username")
echo "macAddr is $macAddr" > /dev/console
#echo "username = $username" > /dev/console
local key=$(echo -n "$macAddr""$username" | md5sum)
key=$(echo ${key:0:16})
#echo "key is $key" > /dev/console
echo ${key}
}
Se genera combinando el usuario de acceso web junto con la MAC de la LAN, creando su md5 y usando solo sus primeros 16 caracteres.
Desglóselo
macAddr hace referencia a la MAC de la LAN. Se encuentra aquí Red -> MAC
D8:47:32:12:34:56
¡OJO! La mac se separa con : no con – ya que en esa sección muchas veces la separan con –
username hace referencia al usuario que se creó durante el proceso de configuración
administrator
la clave local junta las dos piezas y las canaliza a md5
D8:47:32:12:34:56administrator
Podemos utilizar esta web: https://www.md5.cz/
d53ffaa1f8b8ce3b62f6b60673800d07
key=$(echo ${key:0:16} toma el hash, y sólo utiliza los 16 primeros caracteres de ese hash como contraseña.
d53ffaa1f8b8ce3b
Ahora tenemos la contraseña
Por cierto si queremos acceder desde putty no tendremos ningún problema pero si entramos con el comando de Windows puede que nos de un error al ejecutar
ssh [email protected]
el error es
Unable to negotiate with 172.16.0.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,[email protected]
Simplemente debemos llamarlo así
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 [email protected]
y ya nos dejará acceder
También he encontrado algún linux que hay que añadirle más parámetros para que conecte vía ssh:
ssh -o MACs=hmac-sha1 -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=ssh-dss,ssh-rsa [email protected]