Add README - Introducción al hacking

This commit is contained in:
Manuel Vergara 2024-02-04 13:16:41 +01:00
parent 77b7afb787
commit 38f97c051c

View File

@ -1 +1,216 @@
# Curso de Introducción al hacking - hack4u # Apuntes Introducción al hacking - hack4u
Manuel Vergara 2024
Este documento contiene los apuntes tomados en el curso «Introducción al hacking» impartido por «hack4u» en febrero de 2023. El curso consta de 53 horas aproximadamente de vídeo-tutoriales. Las prácticas aquí contenidas tuvieron una duración de alrededor de unas n horas.
Los apuntes no fueron pensados para compartirlos, por ello pueden tener lagunas de información o contenido adicional respecto al curso, ya que se redactaron para recordar procedimientos y conceptos que el autor creyó relevantes. Teniendo un documento, a mi parecer, tan completo y entendiendo que el conocimiento debe ser libre se decidió compartirlo.
Si te parece útil este documento puedes agradecerlo a través de las vías de contacto de la web https://vergaracarmona.es
Recuerda,
"Quien se corta su propia leña se calienta dos veces"
## TEMA 1 - Reconocimiento
### 1.1. - nmap
Nmap es una herramienta de escaneo de red gratuita y de código abierto que se utiliza en pruebas de penetración (pentesting) para explorar y auditar redes y sistemas informáticos.
Con Nmap, los profesionales de seguridad pueden identificar los hosts conectados a una red, los servicios que se están ejecutando en ellos y las vulnerabilidades que podrían ser explotadas por un atacante. La herramienta es capaz de detectar una amplia gama de dispositivos, incluyendo enrutadores, servidores web, impresoras, cámaras IP, sistemas operativos y otros dispositivos conectados a una red.
Asimismo, esta herramienta posee una variedad de funciones y características avanzadas que permiten a los profesionales de seguridad adaptar la misma a sus necesidades específicas. Estas incluyen técnicas de escaneo agresivas, capacidades de scripting personalizadas, y un conjunto de herramientas auxiliares que pueden ser utilizadas para obtener información adicional sobre los hosts objetivo.
| Opción | Descripción |
| ------------- | -------------------------------------------------------------------------------------------------------------------- |
| -p | Puertos. Si no pones está opción te enumera los puertos más usados. Para ver todos los puertos puedes usar un guión. |
| --top-ports | Puertos más usados |
| --open | Puertos abiertos |
| -v | Verbose |
| -n | No aplica resolución DNS. |
| -sT | Escaneo de tipo TCP |
| -sS | Escaneo de tipo SYN |
| -sU | Escaneo de tipo UDP |
| -sN | Escaneo de tipo NULL |
| -sF | Escaneo de tipo FIN |
| -sX | Escaneo de tipo XMAS |
| -sA | Escaneo de tipo ACK |
| -sW | Escaneo de tipo WINDOW |
| -sM | Escaneo de tipo Maimon |
| -sR | Escaneo de tipo RPC |
| -sP | Escaneo de tipo Ping |
| -sO | Escaneo de tipo IP |
| -sI | Escaneo de tipo Idle |
| -sY | Escaneo de tipo SCTP INIT |
| -sZ | Escaneo de tipo SCTP COOKIE ECHO |
| -sN | Escaneo de tipo SCTP HEARTBEAT |
| -sQ | Escaneo de tipo SCTP ABORT |
| -sL | Escaneo de tipo SCTP SHUTDOWN |
| -T | Temporizador (paranoid , sneaky , polite , normal , aggressive , insane) |
| -s | Escaneo de tipo Scaneo SYN → (RST (cerrado) , SYN/ACK (abierto) . ACK (established)) |
| -Pn | Para que de por hecho de que el host está activo |
| -sU | Escaneo por UDP (Más lento que TCP) |
| -sn | Comprobar mediante ping que equipos están activos escaneando la red |
| -O | Trata de obtener información del SO (Muy agresivo, hace muchas peticiones) |
| -sV | Versión y servicio que corre por los puertos |
| -f | Fragmentar paquetes |
| --mtu | Para eludir firewall. Tienes que darle un valor multiplo de 8 |
| -D | Recoge tambien otras IPs que envían tráfico. Se añade un valor de IP |
| --data-length | Manipula el tamaño del length de los paquetes |
| --spoof-mac | Manipulas la MAC. Por ejemplo, Dell , 00:00:97:96:9C:88 |
| -sS | Shell Scan Agiliza el escaneo |
| --min-rate | Controlar el total de paquetes que quieres tramitar. Suele usar 5000 paquetes, da garantias del estado del puerto. |
| -sC | Para llamar a los scripts más populares. Scripts: locate .nse |
| --script | Llamar a los scripts por categorias. Ej. "vuln and safe", "vuln or safe" |
Enumerar interfaces:
"""
route -n
"""
Escaneo puerto 22, escaneo temporizado, verbose, sin DNS:
"""
nmap -p22 -sT open 192.168.1.1 -v -n
"""
Capturar en un fichero el tráfico TCP de una interfaz
"""
tcpdum -i wlo1 -w Captura.cap -v
"""
Con wireshark puedes abrir la Captura.cap:
"""
wireshark Captura.cap &>/dev/null & disown
"""
Puedes filtrar en nmap con tcp.port == 22
"""
arp-scan -I wlo1 --localnet
"""
Para escanear las redes y ver solo las Ips puedes aplicar un filtro regex con grep:
nmap -sn 192.168.1.0/24 | grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sort
### 1.2. - Técnicas de evasión de Firewalls (MTU, Data Length, Source Port, Decoy, etc)
Cuando se realizan pruebas de penetración, uno de los mayores desafíos es evadir la detección de los Firewalls, que son diseñados para proteger las redes y sistemas de posibles amenazas. Para superar este obstáculo, Nmap ofrece una variedad de técnicas de evasión que permiten a los profesionales de seguridad realizar escaneos sigilosos y evitar así la detección de los mismos.
Algunos de los parámetros vistos en esta clase son los siguientes:
• MTU (mtu): La técnica de evasión de MTU o “Maximum Transmission Unit” implica ajustar el tamaño de los paquetes que se envían para evitar la detección por parte del Firewall. Nmap permite configurar manualmente el tamaño máximo de los paquetes para garantizar que sean lo suficientemente pequeños para pasar por el Firewall sin ser detectados.
• Data Length (data-length): Esta técnica se basa en ajustar la longitud de los datos enviados para que sean lo suficientemente cortos como para pasar por el Firewall sin ser detectados. Nmap permite a los usuarios configurar manualmente la longitud de los datos enviados para que sean lo suficientemente pequeños para evadir la detección del Firewall.
• Source Port (source-port): Esta técnica consiste en configurar manualmente el número de puerto de origen de los paquetes enviados para evitar la detección por parte del Firewall. Nmap permite a los usuarios especificar manualmente un puerto de origen aleatorio o un puerto específico para evadir la detección del Firewall.
• Decoy (-D): Esta técnica de evasión en Nmap permite al usuario enviar paquetes falsos a la red para confundir a los sistemas de detección de intrusos y evitar la detección del Firewall. El comando -D permite al usuario enviar paquetes falsos junto con los paquetes reales de escaneo para ocultar su actividad.
• Fragmented (-f): Esta técnica se basa en fragmentar los paquetes enviados para que el Firewall no pueda reconocer el tráfico como un escaneo. La opción -f en Nmap permite fragmentar los paquetes y enviarlos por separado para evitar la detección del Firewall.
• Spoof-Mac (spoof-mac): Esta técnica de evasión se basa en cambiar la dirección MAC del paquete para evitar la detección del Firewall. Nmap permite al usuario configurar manualmente la dirección MAC para evitar ser detectado por el Firewall.
• Stealth Scan (-sS): Esta técnica es una de las más utilizadas para realizar escaneos sigilosos y evitar la detección del Firewall. El comando -sS permite a los usuarios realizar un escaneo de tipo SYN sin establecer una conexión completa, lo que permite evitar la detección del Firewall.
• min-rate (min-rate): Esta técnica permite al usuario controlar la velocidad de los paquetes enviados para evitar la detección del Firewall. El comando min-rate permite al usuario reducir la velocidad de los paquetes enviados para evitar ser detectado por el Firewall.
Es importante destacar que, además de las técnicas de evasión mencionadas anteriormente, existen muchas otras opciones en Nmap que pueden ser utilizadas para realizar pruebas de penetración efectivas y evadir la detección del Firewall. Sin embargo, las técnicas que hemos mencionado son algunas de las más populares y ampliamente utilizadas por los profesionales de seguridad para superar los obstáculos que presentan los Firewalls en la realización de pruebas de penetración.
En nmap fragmentas los paquetes con -f. Luego, en wireshark puedes ver los paquetes fragmentados con ip.flags.mg == 0
En wireshark se puede filtrar por el destino de los paquetes con ip.dst == 192.168.1.1
En las capturas se puede el tamaño length que puede determinar si se está escaneando los paquetes. Para manipular este valor se puede añadir la opción data-length a nmap:
nmap -p22 192.168.1.1 --data-length 21
Se puede falsificar direcciones mac con --spoof-mac
1.3. - scripts y categorías en nmap
Una de las características más poderosas de Nmap es su capacidad para automatizar tareas utilizando scripts personalizados. Los scripts de Nmap permiten a los profesionales de seguridad automatizar las tareas de reconocimiento y descubrimiento en la red, además de obtener información valiosa sobre los sistemas y servicios que se están ejecutando en ellos. El parámetro script de Nmap permite al usuario seleccionar un conjunto de scripts para ejecutar en un objetivo de escaneo específico.
Existen diferentes categorías de scripts disponibles en Nmap, cada una diseñada para realizar una tarea específica. Algunas de las categorías más comunes incluyen:
• default: Esta es la categoría predeterminada en Nmap, que incluye una gran cantidad de scripts de reconocimiento básicos y útiles para la mayoría de los escaneos.
• discovery: Esta categoría se enfoca en descubrir información sobre la red, como la detección de hosts y dispositivos activos, y la resolución de nombres de dominio.
• safe: Esta categoría incluye scripts que son considerados seguros y que no realizan actividades invasivas que puedan desencadenar una alerta de seguridad en la red.
• intrusive: Esta categoría incluye scripts más invasivos que pueden ser detectados fácilmente por un sistema de detección de intrusos o un Firewall, pero que pueden proporcionar información valiosa sobre vulnerabilidades y debilidades en la red.
• vuln: Esta categoría se enfoca específicamente en la detección de vulnerabilidades y debilidades en los sistemas y servicios que se están ejecutando en la red.
Con "locate .nse" podemos ver todos los scripts de nmap que podemos usar. Ejemplo de scripts populares que se llaman con la opción -sC
ftp-anon.nse Comprueba si en el servicio de ftp está habilitado el usuario anonymous.
http-robots.txt.nse Comprueba si existe el fichero robots.txt y te reporta su contenido.
Puedes ver las categorias de los scripts con el siguiente comando:
locate .nse | xargs grep "categories" | grep -oP '".*?"' | sort -u
- locate buscar los ficheros.
- xargs emplea una búsqueda en cada una de las líneas (cada fichero)
- grep -oP con un regex extrae el contenido entre comillas.
- sort -u ordena alfabéticamente y muestra líneas únicas.
Categorias:
• "auth"
• "broadcast"
• "brute"
• "default"
• "discovery"
• "dos"
• "exploit"
• "external"
• "fuzzer"
• "intrusive"
• "malware"
• "safe"
• "version"
• "vuln"
Si levantamos un servidor web con:
python3 -m http:server 80
podemos comprobar con el siguiente comando el servicio que ocupa el puerto 80 y nos saldrá:
lsof -i:80
Nos saldrá el pid, con este podemos comprobar la ruta donde se está montando el servidor:
pwdx <n. pid>
Ahora podemos lanzar un script que nos diga las carpetas que tiene la web, actuando como fuzzing
nmap -p80 localhost --script http-enum
Podemos utilizar tcpdump para comprobar lo que hace el script.
tcpdump -i lo -w output.cap
Luego comprobarlo con wireshark o con tshark:
tshark -r output.cap 2>/dev/null
Puedes filtrar con -Y. Por ejemplo:
tshark -r output.cap -Y "http" 2>/dev/null
Puedes leerlo en formato json:
tshark -r output.cap -Y "http" -Tjson 2>/dev/null
Puedes filtrar por el campo tcp.payload. Se debe convertir el hexadecimal para poder leerlo en claro:
tshark -r output.cap -Y "http" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r
A esto, filtras las líneas GET y a estas por el segundo argumento para obtener todas las rutas que prueba el script:
tshark -r output.cap -Y "http" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r | grep "GET" | awk '{print $2}'
Con un sort con rutas únicas y el wc podemos enumerar todas las rutas que prueba el script
tshark -r output.cap -Y "http" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r | grep "GET" | awk '{print $2}' | sort -u | wc -l
Salen 1074 o_O
1.4. - scripts propios en Lua para nmap
Nmap permite a los profesionales de seguridad personalizar y extender sus capacidades mediante la creación de scripts personalizados en el lenguaje de programación Lua. Lua es un lenguaje de scripting simple, flexible y poderoso que es fácil de aprender y de usar para cualquier persona interesada en crear scripts personalizados para Nmap.
Para utilizar Lua como un script personalizado en Nmap, es necesario tener conocimientos básicos del lenguaje de programación Lua y comprender la estructura básica que debe tener el script. La estructura básica de un script de Lua en Nmap incluye la definición de una tabla, que contiene diferentes campos y valores que describen la funcionalidad del script.
Los campos más comunes que se definen en la tabla de un script de Lua en Nmap incluyen:
• description: Este campo se utiliza para proporcionar una descripción corta del script y su funcionalidad.
• categories: Este campo se utiliza para especificar las categorías a las que pertenece el script, como descubrimiento, explotación, enumeración, etc.
• author: Este campo se utiliza para identificar al autor del script.
• license: Este campo se utiliza para especificar los términos de la licencia bajo la cual se distribuye el script.
• dependencies: Este campo se utiliza para especificar cualquier dependencia de biblioteca o software que requiera el script para funcionar correctamente.
• actions: Este campo se utiliza para definir la funcionalidad específica del script, como la realización de un escaneo de puertos, la detección de vulnerabilidades, etc.
Una vez que se ha creado un script de Lua personalizado en Nmap, se puede invocar utilizando el parámetro script y el nombre del archivo del script. Con la creación de scripts personalizados en Lua, es posible personalizar aún más las capacidades de Nmap y obtener información valiosa sobre los sistemas y servicios en la red.
Script sencillo en lua para ver puertos abiertos:
-- HEAD --
description = [[
Script de ejemplo que enumera y reporta puertos abiertos por TCP.
]]
-- RULE --
portrule = function(host, port)
return port.protocol == "tcp" and port.state == "open"
end
-- ACTION --
action = function(host, port)
return ("Puerto %d abierto"):format(port.number)
end
Para ejecutarlo:
nmap --script /home/v/Documents/projectes/lab/example.nse -p22,80 192.168.1.1