Sacándole jugo al router por ssh

De una forma sencilla y sin mucha complicación podemos ejecutar scripts y comandos interesantes de manera remota en un router por ssh.

Basta con generar las claves pública y privada de cifrado y configurar la clave pública en el router.

He hecho un pequeño script que puede resultar interesante, personalmente lo he metido en una carpeta configurada en el path y lo he llamado r.bat, de esta manera, tan solo tengo que pulsar inicio+R y después r + letra

Las distintas funcionalidades (argumentos) que tiene son:

<a> mira la tabla arp del router

<s> mira la velocidad de bajada y subida que le llega al router (solo compatible con ciertos routers)

<w> con una lista blanca de direcciones MAC, avisa de las macs desconocidas que haya en la red

<dns> ve las peticiones dns de todos los usuario (solo peticiones no encriptadas)

<pass> muestra contraseñas de la red enviadas en texto plano (ftp,http,smtp…)

<arpr> muestra peticiones arp en vivo para ver si hay ataques de spoofing

<r> reinicia el router (esta es la opción que más uso, ya que con solo poner r r en ejecutar de windows nos evita tener que abrir el navegador, loguear y reiniciar el router.

<sin argumentos> inicia una terminal putty para poder enviar todos los comandos que quieras de manera interactiva.

<argumento no definido> ejecuta el comando enviado como argumento

Esto lo conseguimos con la herramienta plink de putty, que nos permite hacer conexiones directas por ssh para ejecutar comandos sin necesidad de crear una conexión interactiva.

El comando que se usa es: plink.exe -i admin@

Aquí os dejo el script:

@echo off
REM plink.exe -i P:\Documents\Downloads\routerAsus\sshKeys\pri.ppk admin@192.168.1.1 COMANDO

set router_folder=P:\Documents\Downloads\routerAsus
set private_key=%router_folder%\sshKeys\pri.ppk
set plink=plink.exe -no-antispoof

IF        "%1"=="arp" (
REM	mira la tabla arp del router
	set command=/sbin/arp
) ELSE IF "%1"=="a" (
REM	mira la tabla arp del router
	set command=/sbin/arp
) ELSE IF "%1"=="s" (
REM	mira la velocidad de bajada/subida y la tabla arp del router
	set command=-m %router_folder%\scripts\status.txt
) ELSE IF "%1"=="w" (
REM	con una lista blanca avisa si alguien desconocido está conectado a la red
	set command=-m %router_folder%\scripts\arpwhitelist.txt
) ELSE IF "%1"=="dns" (
REM	a la escucha de peticiones dns (si son encriptadas no las mostrará)
	set command=/userfs/bin/tcpdump -i br0 -n dst port 53
) ELSE IF "%1"=="pass" (
REM	muestra contraseñas de la red enviadas en texto plano (ftp,http,smtp...)
	set plink=start putty.exe
	set command=-m %router_folder%\scripts\tcpdumppass.txt
) ELSE IF "%1"=="arpr" (
REM	muestra peticiones arp para ver si hay ataques de spoofing
	set command=/userfs/bin/tcpdump -i br0 -n arp
) ELSE IF "%1"=="r" (
REM	reinicia el router
	set command=/sbin/reboot
) ELSE IF "%1"=="" (
REM	ssh al router (para una sesion interactiva funciona mejor putty)
	set plink=start putty.exe
	set command=
) ELSE (
REM	si es cualquier otro argumento, lo ejecuta como comando en el router
	set command=%1
)


%plink% -i %private_key% admin@192.168.1.1 %command%


if not "%command%"=="" pause



Las opciones <dns>, <pass> y <arp> solo funcionarán si el router soporta tcpdump, el archiconocido sniffer que tiene posibilidades infinitas en cuanto a escucha de la red.

Aquí podemos ver la opción <dns> en funcionamiento.

Arriba una consola de máquina virtual haciendo pings a distintas direcciones (que podrían haber sido conexiones del navegador a esas páginas webs)

Y debajo en la máquina física habiendo ejecutado r dns en inicio+ejecutar se pone en marcha el sniffer del router a la escucha de peticiones dns.

 

Añado aquí los txt que ejecuta el script:

 

arpwhitelist.txt

Este script (adjunto debajo) es el que llama nuestro bat superior en la opción y que se ejecutará en el router como un script unix.

Arriba añadiremos las MACs conocidas, y al ejecutar cada 10 segundos nos reportará si hay alguna mac que no sea ninguna de esas conectada a nuestra red.

 

WHITELIST=""
WHITELIST="${WHITELIST} 00:00:23:43:00:33" # desktop
WHITELIST="${WHITELIST} 11:D1:11:33:CA:22" # laptop
WHITELIST="${WHITELIST} 22:9D:22:22:A5:11" # bq
WHITELIST="${WHITELIST} 33:11:29:2B:33:00" # vmware ubuntu

while true
do 
	echo -e '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'
	arpcmd=`/sbin/arp -a | awk -F 'at ' '{print $2}' | awk -F ' ' '{print $1}'`
	macsonline=`echo $arpcmd | wc -w`
	WHITELISTMACS=`echo $WHITELIST | wc -w`

	if test $macsonline -ge 1
	then
		FOUNDUNKNOWN=0
		for i in $(seq 1 $macsonline)
		do
			UNKNOWNMAC=1
			for j in $(seq 1 $WHITELISTMACS)
			do
				if test `echo $arpcmd | cut -f$i -d" "` ==  `echo $WHITELIST | cut -f$j -d" "`
				then
					UNKNOWNMAC=0
				fi
			done

			if test $UNKNOWNMAC -gt 0
			then
				/sbin/arp -a | grep `echo $arpcmd | cut -f$i -d" "`
				FOUNDUNKNOWN=1
			fi
		done

		if test $FOUNDUNKNOWN -lt 1
		then
			echo "all devices are known ->$macsonline online from whitelist"
		fi
	fi

	sleep 10
done

status.txt

Como dije antes, este solo es compatible con algunos routers. Cada 10 segundos nos muestra la velocidad de subida y bajada que le llega al router.

 

while true
do 
	echo -e '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n'
	printf "Download rate: "
	/userfs/bin/tcapi get Info_Adsl DataRateDown
	printf "Upload   rate:  "  
	/userfs/bin/tcapi get Info_Adsl DataRateUp

	echo -e '\n'
	/sbin/arp -a
	sleep 10
done

tcpdumppass.txt

Si nuestro router soporta tcpdump podremos ver todas las contraseñas no encriptadas que circulan por la red sin necesidad de servidores proxy intermedios ni ataques man in the middle.

 

/userfs/bin/tcpdump -i br0 -n port http or port ftp or port smtp or port imap or port pop3 or port telnet -l -A | egrep -i -B5 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass |user '

 

Esto nos debería hacer replantearnos el usar protocolos nada seguros como el FTP, o conectarnos a webs que no tienen certificado HTTPS activo.

Instrucciones de configuración de claves para que funcione el script:

=> Generar las claves con puttygen (herramienta de putty)

=> En el router introducir clave pública en una sola línea (pegar directamente la que genera puttygen)

=> En el script usaremos la clave privada PPK generada que usará putty o plink para la ejecución remota de comandos sin necesidad de contraesñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

nasa pic of the day