Netcat es un programa disponible en todas las plataformas, conocido como "the swiss army knife", por la versatilidad de uso que ofrece.
root@beta6:~# nc -h
[v1.10-41]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
¿Como podemos usarlo?
1. Como cliente de telnet a cualquier puerto.
Suele usarse para hacer fingerprint de servicios a menudo, o como cliente de telnet a secas, por ejemplo en el puerto 23 de tu router.
Ej.
nc 192.168.1.1 23
2. Como servidor.
2.1. Redireccionando la salida de un programa.
Ej.
Linux/Unix
nc -l -p 23 -e /bin/bash
Windows
nc -l -p 23 -e cmd.exe
Con estos comandos, obtenemos una shell remota de otro sistema. Ojo, es insegura, ya que hereda los permisos del usuario en el que lo ejecutamos pero no pregunta por la password. Obviamente, la conexión será con un cliente telnet o con el mismo netcat en el apartado 1.
2.2. Redireccionando la salida de un programa mediante pipes | .
Ej.
Clonar un disco, una particion o un archivo en linux de nuestro equipo al servidor de netcat
Disco:
Servidor:
nc -l -p 1024 -q 3 | dd of=/dev/sda
Cliente:
dd if=/dev/sda | nc 192.168.1.101 1024
Archivo (upload) a server:
Servidor:
nc -l -p 1024 | dd of=archivo.ext
Cliente:
dd if=archivo.ext | nc 192.168.1.101 1024
Archivo (download) a client:
Server:
dd if=archivo.ext|nc -l -p 1024
Client:
nc 192.168.1.101 1024| dd of=archivo.ext
El dd también se puede cambiar por el comando cat o zcat y redirecciones, lógicamente.
Esto se puede complicar mas, si queremos comprimir el archivo mientras lo enviamos.
Ej.
Servidor:
nc -l -p 1024 | gunzip -c | dd of=archivo.ext
Cliente:
dd if=archivo.ext | gzip -c | nc 192.168.1.101 1024
2.3. Si queremos testear el cortafuegos de una máquina, podemos también usar netcat. Ponemos en dicha máquina el netcat como servidor:
nc -l -p 1024
y lanzamos en el cliente nmap :
nmap -sS -p1024 192.168.1.101
De esa forma vemos si está abierto el puerto.
2.4. Y que tal un chat por UDP (sin cifrado ni pass, en texto claro) ?
Ej.
Server :
nc -u -l -p 1024
Client:
nc -u 192.168.1.101 1024
Ahora todo lo que tecleemos en consola, aparece en el otro pc y viceversa.
Si lo queremos cifrado, tendremos que usar una versión de netcat con cifrado, por ejemplo socat, que admite cifrado y muchas más opciones que netcat; eso sí, es mas complejo.
Estos son usos útiles de netcat que suelo emplear con mis máquinas y me sacaron de más de un atolladero. Sé que hay muchos más usos, pero estos son los que considero mejores.
blog comments powered by