netcat


Netcat está considerado como la navaja suiza de redes. Sirve para leer y escribir usando conexiones de red. Puede manejar conexiones TCP/UDP, entrantes/salientes, y desde/a cualquier puerto.
Las mayores diferencias con telnet son:

  • No cierra las conexiones despues de recibir un EOF
  • Puede usarse con UDP


Algunas de sus aplicaciones pueden ser:

  • Pasarse archivos por red
  • Vamos a pasar un un mensaje desde la entrada estandar STDIN a un archivo de logs nohup.out, pasando por el puerto tcp 9091.

    Para eso, dejamos ejecutando en background un netcat en modo listen (-l) en el puerto 9091 (-p 9091)

    Host:~# nohup nc -l -p 9091 &
    [1] 12684
    Host:~# nohup: se añade la salida a «nohup.out»

    Y ahora ejecutamos otro netcat en modo cliente a localhost, puerto 9091

    Host:~# nc localhost 9091
    Hola?
    (control C)
    Host:~#
    [1]+ Done nohup nc -l -p 9091
    Host:~# cat nohup.out
    Hola?


    Nohup es otro comando interesante para dejar procesos en background: sirve para poder dejar procesos en background pero que no mueren si se cierra la sesión, tambien redirige la salida estandar (STDOUT) de los procesos a ./nohup.out.

    Tambien nos podemos pasar archivos directamente, usando pipes:
    Host:~# vi saludo.txt
    Host:~# cat saludo.txt
    Hola, saludos desde el otro lado del socket
    Host:~# nc -l -p 9091 >log.txt &
    [1] 12715

    Ahora conectamos con otro netcat en modo cliente y que cierre la conexión si detecta un EOF (-q 0):

    Host:~# cat saludo.txt | nc localhost 9091 -q 0
    [1]+ Done nc -l -p 9091 >log.txt
    Host:~# cat log.txt
    Hola, saludos desde el otro lado del socket

    Por supuesto, podemos enchufarle cualquier otro comando en la pipe, lo que abre un abanico de posibilidades enorme.

  • Ejecutar shells remotas
  • Dejamos un netcat en modo servidor, que ejecuta bash cuando recibe una conexión (-e /bin/bash):

    Host:~# nohup nc -l -p 9091 -e /bin/bash >log.txt &
    [1] 12754

    Nos conectamos a él (comandos enviados, respuestas del servidor):

    Host:~# nc localhost 9091
    cd /u01
    ls -la
    total 48
    drwxr-xr-x 8 root root 4096 2007-10-20 12:33 .
    drwxr-xr-x 23 root root 4096 2007-10-06 00:54 ..
    drwx------ 2 root root 16384 2005-08-15 21:50 lost+found
    drwxr-xr-x 3 root root 4096 2007-10-20 12:34 temp

    (control C)

    Ahora podemos probar a ejecutar el netcat servidor con otro usuario distinto, para comprobar que es él quien está ejecutando los comandos que le pasamos:

    Host:~# su - foo -c "nohup nc -l -p 9091 -e /bin/bash >log.txt &"
    Host:~# nc localhost 9091
    cd /root
    bash: line 1: cd: /root: Permiso denegado
    (control C)

Enlaces:

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: