Netcat es una herramienta de Unix utilizada para leer y escribir a través de conexiones de red mediante los protocolos TCP y UDP. GNU Netcat dispone de tres funcionalidades principales: modo conexión, modo escucha y modo tunel. A lo largo de este post se describen los tres modos.
Netcat fue desarrollado inicialmente por Hobbit, aunque actualmente se ha convertido en un proyecto open source basado en licencia GPL que reside en
netcat.sourceforge.net.
La instalación de Netcat es la típica de las herramientas Unix:
Netcat fue desarrollado inicialmente por Hobbit, aunque actualmente se ha convertido en un proyecto open source basado en licencia GPL que reside en
netcat.sourceforge.net.
La instalación de Netcat es la típica de las herramientas Unix:
$ tar xvfz netcat-0.7.0.tar.gz $ cd netcat-0.7.0 $ ./configure $ make $ make install
Una vez instalado, el parámetro -V, muestra la versión de netcat:
$ nc -V netcat (The GNU Netcat) 0.7.0 Copyright (C) 2002 - 2003 Giovanni Giacobbi This program comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of this program under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. Original idea and design by Avian Research, Written by Giovanni Giacobbi .
Con el parámetro -h obtenemos un listado con las opciones disponibles:
$ nc -h GNU netcat 0.7.0, a rewrite of the famous networking tool. Basic usages: connect to somewhere: netcat [options] hostname port [port] ... listen for inbound: netcat -l -p port [options] [hostname] [port] ... tunnel to somewhere: netcat -L hostname:port -p port [options] Mandatory arguments to long options are mandatory for short options too. Options: -c, --close close connection on EOF from stdin -e, --exec=PROGRAM program to exec after connect -g, --gateway=LIST source-routing hop point[s], up to 8 -G, --pointer=NUM source-routing pointer: 4, 8, 12, ... -h, --help display this help and exit -i, --interval=SECS delay interval for lines sent, ports scanned -l, --listen listen mode, for inbound connects -L, --tunnel=ADDRESS:PORT forward local port to remote address -n, --dont-resolve numeric-only IP addresses, no DNS -o, --output=FILE output hexdump traffic to FILE (implies -x) -p, --local-port=NUM local port number -r, --randomize randomize local and remote ports -s, --source=ADDRESS local source address (ip or hostname) -t, --tcp TCP mode (default) -T, --telnet answer using TELNET negotiation -u, --udp UDP mode -v, --verbose verbose (use twice to be more verbose) -V, --version output version information and exit -x, --hexdump hexdump incoming and outgoing traffic -w, --wait=SECS timeout for connects and final net reads -z, --zero zero-I/O mode (used for scanning) Remote port number can also be specified as range. Example: '1-1024'
Netcat en modo conexión
El modo conexión de netcat es el más sencillo de los existentes. Se comporta de una forma similar a telnet, aunque es una herramienta mucho más avanzada. Por ejemplo, para realizar una conexión TCP (conexión por defecto) pasaremos como parámetro el nombre del host y el puerto:
$ nc localhost 22 SSH-1.99-OpenSSH_3.6.1p2
si deseamos que netcat se comporte como telnet añadiremos la opción -T:
nc -T localhost 23 Fedora Core release 1 (Yarrow) Kernel 2.4.22-1.2135.nptl on an i686 login:
Añadiendo la opción -x, netcat ofrece la salida en hexadecimal:
$ nc -x localhost 22 SSH-1.99-OpenSSH_3.6.1p2 Received 25 bytes from the socket 00000000 53 53 48 2D 31 2E 39 39 2D 4F 70 65 6E 53 53 48 SSH-1.99-OpenSSH 00000010 5F 33 2E 36 2E 31 70 32 0A _3.6.1p2.
Otra opción que puede resultar interesante es -v (verbose) o -v -v que oferce cierta información sobre la conexión:
$ nc -v localhost 22 localhost [127.0.0.1] 22 (ssh) open SSH-1.99-OpenSSH_3.6.1p2
$ nc -v -v localhost 22 Notice: Real hostname for localhost [127.0.0.1] is NEPTUNO localhost [127.0.0.1] 22 (ssh) open SSH-1.99-OpenSSH_3.6.1p2
Netcat trabaja con dos protocolos: TCP y UDP. El parámetro utilizado para las conexiones TCP es -t, aunque no es necesario, dado que esta es la opción por defecto. Para realizar conexiones UDP, puede utilizar el parámetro -u. Por ejemplo, enviar datos a un host + puerto UDP es tan sencillo como:
$ echo "datos enviados" | nc -u localhost 1234
Por ejemplo, realize la siguiente prueba: Abra tres terminales y escriba en el primero:
nc -u -l localhost -p 1234
(Este comando mantine a netcat a la escucha en un puerto udp, se estudiará con detalle en el siguiente apartado)
En el segundo:
$ /usr/sbin/tcpdump -s 0 -xX udp -i lo tcpdump: listening on lo
y en el tercero:
echo "datos enviados" | nc -u localhost 1234
Observaremos que la salida de tcpdump con los datos UDP capturados es la
siguiente:
siguiente:
21:14:46.787266 NEPTUNO.32885 > NEPTUNO.1234: udp 15 (DF) 0x0000 4500 002b b17e 4000 4011 8b41 7f00 0001 E..+.~@.@..A.... 0x0010 7f00 0001 8075 04d2 0017 79d5 6461 746f .....u....y.dato 0x0020 7320 656e 7669 6164 6f73 0a s.enviados.
Netcat en modo escucha
El modo de escucha de netcat es un complemento interesante. Este nos permite abrir sockets en la máquina local, a los que posteriormente poderemos conectarnos. En el apartado anterior (modo conexión) se ha realizado un ejemplo sencillo del modo de escucha.
El modo de escucha de netcat es un complemento interesante. Este nos permite abrir sockets en la máquina local, a los que posteriormente poderemos conectarnos. En el apartado anterior (modo conexión) se ha realizado un ejemplo sencillo del modo de escucha.
Se utiliza la opción -l para indicarle a netcat que deseamos ejecutar la herramienta en modo escucha (listen), indicamos con la opción -p, el puerto en el que deseamos abrir el socket y añadimos -u si deseamos utilizar el protocolo UDP. Recordemos que por defecto netcat utiliza TCP:
nc -u -l localhost -p 1234
Con netstat podemos ver los puertos abiertos de nuestro sistema y el programa asociado a esos puertos:
$ netstat -lunp | grep nc (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) udp 0 0 0.0.0.0:1234 0.0.0.0:* 3624/nc
Una opción que ha sido utilizada durante mucho tiempo como puerta trasera simple, es la opción -e de netcat. Esta opción permite asociar un programa a la conexión establecida.
Por ejemplo, con el siguiente comando dejamos una shell escuchando en el puerto 1234.
Por ejemplo, con el siguiente comando dejamos una shell escuchando en el puerto 1234.
$ nc -l localhost -p 1234 -e /bin/bash
Podemos conectarnos a ella con netcat y utilizarla de un modo similar a la utilidad Telnet:
$ nc localhost 1234 uname -o GNU/Linux date jue dic 18 21:50:07 CET 2003
Netcat en modo tunel
GNU Netcat puede utilizarse para crear túneles de una forma sencilla. Veamos un ejemplo en el que enlazamos el puerto de telnet (23) de una máquina remota al puerto 1234 de la máquina local.
En un terminal escribimos:
GNU Netcat puede utilizarse para crear túneles de una forma sencilla. Veamos un ejemplo en el que enlazamos el puerto de telnet (23) de una máquina remota al puerto 1234 de la máquina local.
En un terminal escribimos:
$ nc -L remoto:23 -p 1234
En otro terminal nos conectamos al tunel:
$ telnet localhost 1234 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Fedora Core release 1 (Yarrow) Kernel 2.4.22-1.2135.nptl on an i686 login:
De esta forma hemos conectado el puerto remoto 23 de la máquina "remoto" al puerto local 1234.
En modo tunel puede resultar interessante la opción -x, que realizará un volcado de toda la información que pase por el tunel.
En modo tunel puede resultar interessante la opción -x, que realizará un volcado de toda la información que pase por el tunel.
$ nc -L localhost:23 -p 1234 -x Sent 12 bytes to the socket 00000000 FF FD 18 FF FD 20 FF FD 23 FF FD 27 ..... ..#..' Received 12 bytes from the socket 00000000 FF FB 18 FF FB 20 FF FB 23 FF FB 27 ..... ..#..' Sent 24 bytes to the socket 00000000 FF FA 20 01 FF F0 FF FA 23 01 FF F0 FF FA 27 01 .. .....#.....'. 00000010 FF F0 FF FA 18 01 FF F0 ........ Received 107 bytes from the socket 00000000 FF FA 20 00 33 38 34 30 30 2C 33 38 34 30 30 FF .. .38400,38400. 00000010 F0 FF FA 23 00 4E 45 50 54 55 4E 4F 3A 30 2E 30 ...#.NEPTUNO:0.0 00000020 FF F0 FF FA 27 00 03 58 41 55 54 48 4F 52 49 54 ....'..XAUTHORIT 00000030 59 01 2F 68 6F 6D 65 2F 64 6C 65 72 63 68 2F 2E Y./home/dlerch/. 00000040 58 61 75 74 68 6F 72 69 74 79 00 44 49 53 50 4C Xauthority.DISPL 00000050 41 59 01 4E 45 50 54 55 4E 4F 3A 30 2E 30 FF F0 AY.NEPTUNO:0.0.. 00000060 FF FA 18 00 58 54 45 52 4D FF F0 ....XTERM.. Sent 15 bytes to the socket 00000000 FF FB 03 FF FD 01 FF FD 1F FF FB 05 FF FD 21 ..............! Received 24 bytes from the socket 00000000 FF FD 03 FF FC 01 FF FB 1F FF FA 1F 00 50 00 28 .............P.( 00000010 FF F0 FF FD 05 FF FB 21 .......! Sent 73 bytes to the socket 00000000 FF FB 01 46 65 64 6F 72 61 20 43 6F 72 65 20 72 ...Fedora Core r 00000010 65 6C 65 61 73 65 20 31 20 28 59 61 72 72 6F 77 elease 1 (Yarrow 00000020 29 0D 0A 4B 65 72 6E 65 6C 20 32 2E 34 2E 32 32 )..Kernel 2.4.22 00000030 2D 31 2E 32 31 33 35 2E 6E 70 74 6C 20 6F 6E 20 -1.2135.nptl on 00000040 61 6E 20 69 36 38 36 0D 0A an i686.. Sent 7 bytes to the socket 00000000 6C 6F 67 69 6E 3A 20 login: Received 3 bytes from the socket 00000000 FF FD 01 ...
Uso de Netcat como scanner
Las funciones de escaner de netcat son muy simples. Puede utilizarse para detectar los servicios de una máquina, pero no dispone de las funciones de escaneo avanzadas de que disponen escáneres como nmap.
El parámetro utilizado para el escaneo es -z. A continuación se especifica la máquina y el rango de puertos a escanear.
Las funciones de escaner de netcat son muy simples. Puede utilizarse para detectar los servicios de una máquina, pero no dispone de las funciones de escaneo avanzadas de que disponen escáneres como nmap.
El parámetro utilizado para el escaneo es -z. A continuación se especifica la máquina y el rango de puertos a escanear.
nc -v -z localhost 20-24 localhost [127.0.0.1] 22 (ssh) open localhost [127.0.0.1] 23 (telnet) open
No hay comentarios:
Publicar un comentario