This commit is contained in:
Manuel Vergara 2024-02-05 00:43:08 +01:00
parent 015afce31f
commit 3e10abd0ab
4 changed files with 419 additions and 30 deletions

View File

@ -1 +1,176 @@
# TEMA 1 - Conceptos básicos
- [TEMA 1 - Conceptos básicos](#tema-1---conceptos-básicos)
- [1.1 Direcciones IP](#11-direcciones-ip)
- [1.2 Direcciónes MAC](#12-direcciónes-mac)
- [1.3 Protocolos comunes](#13-protocolos-comunes)
- [1.4 Modelo OSI](#14-modelo-osi)
- [1.5 Subnetting](#15-subnetting)
## 1.1 Direcciones IP
Las direcciones IP son identificadores numéricos únicos que se utilizan para identificar dispositivos en una red, como ordenadores, routers, servidores y otros dispositivos conectados a Internet.
Existen dos versiones de direcciones IP: IPv4 e IPv6. La versión IPv4 utiliza un formato de dirección de 32 bits y se utiliza actualmente en la mayoría de las redes. La versión IPv6 utiliza un formato de dirección de 128 bits y se está implementando gradualmente en todo el mundo para hacer frente a la escasez de direcciones IPv4.
Las direcciones IPv4 se representan como cuatro números separados por puntos, como 192.168.0.1, mientras que las direcciones IPv6 se representan en notación hexadecimal y se separan por dos puntos, como 2001:0db8:85a3:0000:0000:8a2e:0370:7334.
## 1.2 Direcciónes MAC
La dirección MAC es un número hexadecimal de 12 dígitos (número binario de 6 bytes), que está representado principalmente por notación hexadecimal de dos puntos.
Los primeros 6 dígitos (digamos 00:40:96) del MAC Address identifican al fabricante, llamado OUI (Identificador Único Organizacional). El Comité de la Autoridad de Registro de IEEE asigna estos prefijos MAC a sus proveedores registrados.
Los seis dígitos más a la derecha representan el controlador de interfaz de red, que es asignado por el fabricante.
Es decir, los primeros 3 bytes (24 bits) representan el fabricante de la tarjeta, y los últimos 3 bytes (24 bits) identifican la tarjeta particular de ese fabricante. Cada grupo de 3 bytes se puede representar con 6 dígitos hexadecimales, formando un número hexadecimal de 12 dígitos que representa la MAC completa.
Para una búsqueda de fabricante utilizando direcciones MAC, se requieren al menos los primeros 3 bytes (6 caracteres) de la dirección MAC. Una de las herramientas que vemos en esta clase para lograr dicho fin es macchanger, una herramienta de GNU/Linux para la visualización y manipulación de direcciones MAC.
## 1.3 Protocolos comunes
Los protocolos TCP (Transmission Control Protocol) y UDP (User Datagram Protocol) son dos de los protocolos de red más comunes utilizados en la transferencia de datos a través de redes de ordenadores.
El protocolo TCP, es un protocolo orientado a la conexión que proporciona una entrega de datos confiable, mientras que el protocolo UDP, es un protocolo no orientado a conexión el cual no garantiza la entrega de datos.
Una parte crucial del protocolo TCP es el Three-Way Handshake, un procedimiento utilizado para establecer una conexión entre dos dispositivos. Este procedimiento consta de tres pasos: SYN, SYN-ACK y ACK, en los que se sincronizan los números de secuencia y de reconocimiento de los paquetes entre los dispositivos. El Three-Way Handshake es fundamental para establecer una conexión confiable y segura a través de TCP.
Puertos TCP comunes:
- 21: FTP (File Transfer Protocol) permite la transferencia de archivos entre sistemas.
- 22: SSH (Secure Shell) un protocolo de red seguro que permite a los usuarios conectarse y administrar sistemas de forma remota.
- 23: Telnet un protocolo utilizado para la conexión remota a dispositivos de red.
- 80: HTTP (Hypertext Transfer Protocol) el protocolo que se utiliza para la transferencia de datos en la World Wide Web.
- 443: HTTPS (Hypertext Transfer Protocol Secure) la versión segura de HTTP, que utiliza encriptación SSL/TLS para proteger las comunicaciones web.
Puertos UDP comunes:
- 53: DNS (Domain Name System) un sistema que traduce nombres de dominio en direcciones IP.
- 67/68: DHCP (Dynamic Host Configuration Protocol) un protocolo utilizado para asignar direcciones IP y otros parámetros de configuración a los dispositivos en una red.
- 69: TFTP (Trivial File Transfer Protocol) un protocolo simple utilizado para transferir archivos entre dispositivos en una red.
- 123: NTP (Network Time Protocol) un protocolo utilizado para sincronizar los relojes de los dispositivos en una red.
- 161: SNMP (Simple Network Management Protocol) un protocolo utilizado para administrar y supervisar dispositivos en una red.
Cabe destacar que estos son solo algunos de los más comunes. Existen muchos más puertos los cuales operan tanto por TCP como por UDP.
A medida que avancemos en el curso, tendremos la oportunidad de ver muchos otros puertos y protocolos utilizados en redes de ordenadores. Asimismo, veremos técnicas para analizar y explotar vulnerabilidades en su implementación.
## 1.4 Modelo OSI
En redes de ordenadores, el modelo OSI (Open Systems Interconnection) es una estructura de siete capas que se utiliza para describir el proceso de comunicación entre dispositivos. Cada capa proporciona servicios y funciones específicas, que permiten a los dispositivos comunicarse a través de la red.
A continuación, se describen brevemente las siete capas del modelo OSI:
- Capa física: Es la capa más baja del modelo OSI, que se encarga de la transmisión de datos a través del medio físico de la red, como cables de cobre o fibra óptica.
- Capa de enlace de datos: Esta capa se encarga de la transferencia confiable de datos entre dispositivos en la misma red. También proporciona funciones para la detección y corrección de errores en los datos transmitidos.
- Capa de red: La capa de red se ocupa del enrutamiento de paquetes de datos a través de múltiples redes. Esta capa utiliza direcciones lógicas, como direcciones IP, para identificar dispositivos y rutas de red.
- Capa de transporte: La capa de transporte se encarga de la entrega confiable de datos entre dispositivos finales, proporcionando servicios como el control de flujo y la corrección de errores.
- Capa de sesión: Esta capa se encarga de establecer y mantener las sesiones de comunicación entre dispositivos. También proporciona servicios de gestión de sesiones, como la autenticación y la autorización.
- Capa de presentación: La capa de presentación se encarga de la representación de datos, proporcionando funciones como la codificación y decodificación de datos, la compresión y el cifrado.
- Capa de aplicación: La capa de aplicación proporciona servicios para aplicaciones de usuario finales, como correo electrónico, navegadores web y transferencia de archivos.
Comprender la estructura en capas del modelo OSI es esencial para cualquier analista de seguridad, ya que permite tener una visión completa del funcionamiento de la red y de las posibles vulnerabilidades que puedan existir en cada una de las capas.
Esto nos permite identificar de manera efectiva los puntos débiles de la red y aplicar medidas de seguridad adecuadas para protegerla de posibles ataques.
## 1.5 Subnetting
Subnetting es una técnica utilizada para dividir una red IP en subredes más pequeñas y manejables. Esto se logra mediante el uso de máscaras de red, que permiten definir qué bits de la dirección IP corresponden a la red y cuáles a los hosts.
Para interpretar una máscara de red, se deben identificar los bits que están en “1“. Estos bits representan la porción de la dirección IP que corresponde a la red. Por ejemplo, una máscara de red de 255.255.255.0 indica que los primeros tres octetos de la dirección IP corresponden a la red, mientras que el último octeto se utiliza para identificar los hosts.
Ahora bien, cuando hablamos de CIDR (acrónimo de Classless Inter-Domain Routing), a lo que nos referimos es a un método de asignación de direcciones IP más eficiente y flexible que el uso de clases de redes IP fijas. Con CIDR, una dirección IP se representa mediante una dirección IP base y una máscara de red, que se escriben juntas separadas por una barra (/).
Por ejemplo, la dirección IP 192.168.1.1 con una máscara de red de 255.255.255.0 se escribiría como 192.168.1.1/24.
La máscara de red se representa en notación de prefijo, que indica el número de bits que están en “1” en la máscara. En este caso, la máscara de red 255.255.255.0 tiene 24 bits en “1” (los primeros tres octetos), por lo que su notación de prefijo es /24.
Para calcular la máscara de red a partir de una notación de prefijo, se deben escribir los bits “1” en los primeros bits de una dirección IP de 32 bits y los bits “0” en los bits restantes. Por ejemplo, la máscara de red /24 se calcularía como 11111111.11111111.11111111.00000000 en binario, lo que equivale a 255.255.255.0 en decimal.
En cuanto a clases de direcciones IP, existen tres tipos de máscaras de red: Clase A, Clase B y Clase C.
- Las redes de clase A usan una máscara de subred predeterminada de 255.0.0.0 y tienen de 0 a 127 como su primer octeto. La dirección 10.52.36.11, por ejemplo, es una dirección de clase A. Su primer octeto es 10, que está entre 1 y 126, ambos incluidos.
- Las redes de clase B usan una máscara de subred predeterminada de 255.255.0.0 y tienen de 128 a 191 como su primer octeto. La dirección 172.16.52.63, por ejemplo, es una dirección de clase B. Su primer octeto es 172, que está entre 128 y 191, ambos inclusive.
- Las redes de clase C usan una máscara de subred predeterminada de 255.255.255.0 y tienen de 192 a 223 como su primer octeto. La dirección 192.168.123.132, por ejemplo, es una dirección de clase C. Su primer octeto es 192, que está entre 192 y 223, ambos incluidos.
Es importante tener en cuenta que, además de estos tres tipos de máscaras de red, también existen máscaras de red personalizadas que se pueden utilizar para crear subredes de diferentes tamaños dentro de una red.
Tal y como mencionamos en la descripción de la clase anterior sobre los CIDRs (Classless Inter-Domain Routing), se trata de un método de asignación de direcciones IP que permite dividir una dirección IP en una parte que identifica la red y otra parte que identifica el host. Esto se logra mediante el uso de una máscara de red, que se representa en notación CIDR como una dirección IP base seguida de un número que indica la cantidad de bits que corresponden a la red.
Con CIDR, se pueden asignar direcciones IP de forma más precisa, lo que reduce la cantidad de direcciones IP desperdiciadas y facilita la administración de la red.
El número que sigue a la dirección IP base en la notación CIDR se llama prefijo o longitud de prefijo, y representa el número de bits en la máscara de red que están en “1“.
Por ejemplo, una dirección IP con un prefijo de /24 indica que los primeros 24 bits de la dirección IP corresponden a la red, mientras que los 8 bits restantes se utilizan para identificar los hosts.
Para calcular la cantidad de hosts disponibles en una red CIDR, se deben contar el número de bits “0” en la máscara de red y elevar 2 a la potencia de ese número. Esto se debe a que cada bit “0” en la máscara de red representa un bit que se puede utilizar para identificar un host.
Por ejemplo, una máscara de red de 255.255.255.0 (/24) tiene 8 bits en “0“, lo que significa que hay 2^8 = 256 direcciones IP disponibles para los hosts en esa red.
A continuación, se representan algunos ejemplos prácticos de CIDR:
- Una dirección IP con un prefijo de /28 (255.255.255.240) permite hasta 16 direcciones IP para los hosts (2^4), ya que los primeros 28 bits corresponden a la red.
- Una dirección IP con un prefijo de /26 (255.255.255.192) permite hasta 64 direcciones IP para los hosts (2^6), ya que los primeros 26 bits corresponden a la red.
- Una dirección IP con un prefijo de /22 (255.255.252.0) permite hasta 1024 direcciones IP para los hosts (2^10), ya que los primeros 22 bits corresponden a la red.
Si aún te quedan dudas y necesitas reforzar el contenido con más ejemplos prácticos, no te preocupes, en las clases siguientes estaremos entrando mucho más en materia.
A continuación, se detalla paso a paso cómo hemos ido calculando cada apartado:
Cálculo de la máscara de red:
La dirección IP que se nos dio es 192.168.1.0/26, lo que significa que los primeros 26 bits de la dirección IP corresponden a la red y los últimos 6 bits corresponden a los hosts.
Para calcular la máscara de red, necesitamos colocar los primeros 26 bits en 1 y los últimos 6 bits en 0. En binario, esto se ve así:
11111111.11111111.11111111.11000000
Cada octeto de la máscara de red se compone de 8 bits. El valor de cada octeto se determina convirtiendo los 8 bits a decimal. En este caso, los primeros 24 bits son todos 1s, lo que significa que el valor decimal de cada uno de estos octetos es 255. El último octeto tiene los últimos 6 bits en 0, lo que significa que su valor decimal es 192.
Por lo tanto, la máscara de red para esta dirección IP es 255.255.255.192.
Cálculo del total de hosts a repartir:
En este caso, se pueden utilizar los 6 bits que quedan disponibles para representar la parte de host. En una máscara de red de 26 bits, los 6 bits restantes representan 2^6 2 = 62 hosts disponibles para asignar.
El número máximo de hosts disponibles se calcula como 2^(n) 2, donde n es la cantidad de bits utilizados para representar la parte de host en la máscara de red.
Cálculo del Network ID:
Para calcular el Network ID, lo que debemos hacer es aplicar la máscara de red a la dirección IP de la red. En este caso, la máscara de red es 255.255.255.192, lo que significa que los primeros 26 bits de la dirección IP pertenecen a la parte de red.
Para calcular el Network ID, convertimos tanto la dirección IP como la máscara de red en binario y luego hacemos una operación “AND” lógica entre los dos. La operación “AND” compara los bits correspondientes en ambas direcciones y devuelve un resultado en el que todos los bits coincidentes son iguales a “1” y todos los bits no coincidentes son iguales a “0“.
En este caso, la dirección IP es 192.168.1.0 en decimal y se convierte en binario como 11000000.10101000.00000001.00000000. La máscara de red es 255.255.255.192 en decimal y se convierte en binario como 11111111.11111111.11111111.11000000.
Luego, aplicamos la operación “AND” entre estos dos valores binarios bit a bit. Los bits correspondientes en ambos valores se comparan de la siguiente manera:
El resultado final es el Network ID, que es 192.168.1.0. Este es el identificador único de la subred a la que pertenecen los hosts.
Cálculo de la Broadcast Address:
La Broadcast Address es la dirección de red que se utiliza para enviar paquetes a todos los hosts de la subred. Para calcularla, necesitamos saber el Network ID y la cantidad de hosts disponibles en la subred.
En el ejemplo que estamos trabajando, ya hemos calculado el Network ID como 192.168.1.0. La cantidad de hosts disponibles se calcula como 2^(n) 2, donde n es la cantidad de bits utilizados para representar la parte de host en la máscara de red. En este caso, n es igual a 6, ya que hay 6 bits disponibles para la parte de host.
Para calcular la Broadcast Address, debemos asignar todos los bits de la parte del host de la dirección IP a “1“. En este caso, la dirección IP es 192.168.1.0 y se convierte en binario como 11000000.10101000.00000001.00000000.
Para encontrar la dirección Broadcast, llenamos con unos la parte correspondiente a los bits de host, es decir, los últimos 6 bits:
11000000.10101000.00000001.00111111 (dirección IP con bits de host asignados a “1“)
Luego, convertimos este valor binario de regreso a decimal y obtenemos la dirección de Broadcast: 192.168.1.63. Esta es la dirección a la que se enviarán los paquetes para llegar a todos los hosts de la subred.
Os dejamos por aquí la página web correspondiente al conversor de CIDR a IPv4: https://www.ipaddressguide.com/cidr
A continuación, se proporciona el recurso que utilizamos en esta clase: IP Calculator: https://blog.jodies.de/ipcalc

View File

@ -2,25 +2,25 @@
Índice:
- [TEMA 2 - Reconocimiento](#tema-2---reconocimiento)
- [1.1. - nmap](#11---nmap)
- [1.2. - Técnicas de evasión de Firewalls (MTU, Data Length, Source Port, Decoy, etc)](#12---técnicas-de-evasión-de-firewalls-mtu-data-length-source-port-decoy-etc)
- [1.3. - scripts y categorías en nmap](#13---scripts-y-categorías-en-nmap)
- [1.4. - scripts propios en Lua para nmap](#14---scripts-propios-en-lua-para-nmap)
- [1.5 Alternativas para la enumeración de puertos usando descriptores de archivo](#15-alternativas-para-la-enumeración-de-puertos-usando-descriptores-de-archivo)
- [1.6 Descubrimiento de equipos en la red local (ARP e ICMP) y Tips](#16-descubrimiento-de-equipos-en-la-red-local-arp-e-icmp-y-tips)
- [1.7 Fijando un target en HackerOne](#17-fijando-un-target-en-hackerone)
- [1.8 Descubrimiento de correos electrónicos](#18-descubrimiento-de-correos-electrónicos)
- [1.9 Reconocimiento de imágenes](#19-reconocimiento-de-imágenes)
- [1.10 Enumeración de subdominios](#110-enumeración-de-subdominios)
- [1.11 Credenciales y brechas de seguridad](#111-credenciales-y-brechas-de-seguridad)
- [1.12 Identificación de las tecnologías en una página](#112-identificación-de-las-tecnologías-en-una-página)
- [1.13 Fuzzing y enumeración de archivos en un un servidor web](#113-fuzzing-y-enumeración-de-archivos-en-un-un-servidor-web)
- [1.14 Google Dorks / Google Hacking - 18 Dorks muy usados](#114-google-dorks--google-hacking---18-dorks-muy-usados)
- [1.15 Identificación y verificación externa de la versión del SO](#115-identificación-y-verificación-externa-de-la-versión-del-so)
- [2.1. - nmap](#21---nmap)
- [2.2. - Técnicas de evasión de Firewalls (MTU, Data Length, Source Port, Decoy, etc)](#22---técnicas-de-evasión-de-firewalls-mtu-data-length-source-port-decoy-etc)
- [2.3. - scripts y categorías en nmap](#23---scripts-y-categorías-en-nmap)
- [2.4. - scripts propios en Lua para nmap](#24---scripts-propios-en-lua-para-nmap)
- [2.5 Alternativas para la enumeración de puertos usando descriptores de archivo](#25-alternativas-para-la-enumeración-de-puertos-usando-descriptores-de-archivo)
- [2.6 Descubrimiento de equipos en la red local (ARP e ICMP) y Tips](#26-descubrimiento-de-equipos-en-la-red-local-arp-e-icmp-y-tips)
- [2.7 Fijando un target en HackerOne](#27-fijando-un-target-en-hackerone)
- [2.8 Descubrimiento de correos electrónicos](#28-descubrimiento-de-correos-electrónicos)
- [2.9 Reconocimiento de imágenes](#29-reconocimiento-de-imágenes)
- [2.10 Enumeración de subdominios](#210-enumeración-de-subdominios)
- [2.11 Credenciales y brechas de seguridad](#211-credenciales-y-brechas-de-seguridad)
- [2.12 Identificación de las tecnologías en una página](#212-identificación-de-las-tecnologías-en-una-página)
- [2.13 Fuzzing y enumeración de archivos en un un servidor web](#213-fuzzing-y-enumeración-de-archivos-en-un-un-servidor-web)
- [2.14 Google Dorks / Google Hacking - 18 Dorks muy usados](#214-google-dorks--google-hacking---18-dorks-muy-usados)
- [2.15 Identificación y verificación externa de la versión del SO](#215-identificación-y-verificación-externa-de-la-versión-del-so)
## 1.1. - nmap
## 2.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.
@ -101,7 +101,7 @@ Para escanear las redes y ver solo las Ips puedes aplicar un filtro regex con gr
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)
## 2.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.
@ -128,7 +128,7 @@ 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
## 2.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.
@ -230,7 +230,7 @@ tshark -r output.cap -Y "http" -Tfields -e tcp.payload 2>/dev/null | xxd -ps -r
Salen 1074 o_O
## 1.4. - scripts propios en Lua para nmap
## 2.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.
@ -252,7 +252,7 @@ Para ejecutarlo:
nmap --script /home/v/Documents/projectes/lab/example.nse -p22,80 192.168.1.1
```
## 1.5 Alternativas para la enumeración de puertos usando descriptores de archivo
## 2.5 Alternativas para la enumeración de puertos usando descriptores de archivo
La enumeración de puertos es una tarea crucial en las pruebas de penetración y seguridad de redes. Tal y como hemos visto, Nmap es una herramienta de línea de comandos ampliamente utilizada para esta tarea, pero existen alternativas para realizar la enumeración de puertos de manera efectiva sin utilizar herramientas externas.
@ -264,7 +264,7 @@ Aunque esta alternativa puede ser menos precisa y más lenta que el uso de herra
[Script en bash](portScan.sh) para descubrir puertos abiertos.
## 1.6 Descubrimiento de equipos en la red local (ARP e ICMP) y Tips
## 2.6 Descubrimiento de equipos en la red local (ARP e ICMP) y Tips
El descubrimiento de equipos en la red local es una tarea fundamental en la gestión de redes y en las pruebas de seguridad. Existen diferentes herramientas y técnicas para realizar esta tarea, que van desde el escaneo de puertos hasta el análisis de tráfico de red.
@ -303,7 +303,7 @@ masscan -p1-65535 -Pn 192.168.1.1 --rate 5000
```
## 1.7 Fijando un target en HackerOne
## 2.7 Fijando un target en HackerOne
En esta clase exploraremos la plataforma HackerOne, una plataforma de BugBounty que permite a empresas y organizaciones que desean ser auditadas, “conectar” con hackers éticos para encontrar vulnerabilidades de seguridad en sus sistemas y aplicaciones de forma legal.
@ -313,7 +313,7 @@ En esta clase, se explicará cómo validar un objetivo en HackerOne y cómo defi
- Enlace a la web de HackerOne: https://www.hackerone.com/
## 1.8 Descubrimiento de correos electrónicos
## 2.8 Descubrimiento de correos electrónicos
@ -334,7 +334,7 @@ A continuación, se proporcionan los enlaces a las herramientas online vistas en
En conclusión, la recolección de correos electrónicos es una tarea importante en la fase inicial de OSINT y puede proporcionar información valiosa. Sin embargo, es importante tener en cuenta que la recolección de correos electrónicos por sí sola no permite identificar directamente posibles vulnerabilidades en una red o sistema.
## 1.9 Reconocimiento de imágenes
## 2.9 Reconocimiento de imágenes
En esta clase, exploraremos cómo las tecnologías de reconocimiento de imágenes pueden ser utilizadas para obtener información valiosa sobre las personas y los lugares.
@ -345,7 +345,7 @@ El funcionamiento de PimEyes se basa en el análisis de patrones faciales, que s
- Enlace a la web de PimEyes: https://pimeyes.com/en
## 1.10 Enumeración de subdominios
## 2.10 Enumeración de subdominios
IMPORTANTE: Recientemente, hemos notado un problema con la herramienta “sublist3r” del repositorio que presentamos en el vídeo: no está mostrando los subdominios del dominio que introduces durante el proceso de reconocimiento.
@ -377,7 +377,7 @@ A continuación, os adjuntamos los enlaces a las herramientas vistas en esta cla
- Wfuzz (Herramienta activa): https://github.com/xmendez/wfuzz
- Sublist3r (Herramienta pasiva): https://github.com/huntergregal/Sublist3r
## 1.11 Credenciales y brechas de seguridad
## 2.11 Credenciales y brechas de seguridad
La seguridad de la información es un tema crítico en el mundo digital actual, especialmente cuando se trata de datos sensibles como contraseñas, información financiera o de identidad. Los ataques informáticos son una amenaza constante para cualquier empresa u organización, y una de las principales técnicas utilizadas por los atacantes es la explotación de las credenciales y brechas de seguridad.
@ -391,7 +391,7 @@ A continuación, se proporciona el enlace a la utilidad online de ejemplo que se
- DeHashed: https://www.dehashed.com/
## 1.12 Identificación de las tecnologías en una página
## 2.12 Identificación de las tecnologías en una página
Desde el punto de vista de la seguridad, es fundamental conocer las tecnologías y herramientas que se utilizan en una página web. La identificación de estas tecnologías permite a los expertos en seguridad evaluar los riesgos potenciales de un sitio web, identificar vulnerabilidades y diseñar estrategias efectivas para proteger la información sensible y los datos críticos.
@ -410,7 +410,7 @@ A continuación, os proporcionamos los enlaces correspondientes a las herramient
- Builtwith: https://builtwith.com/
## 1.13 Fuzzing y enumeración de archivos en un un servidor web
## 2.13 Fuzzing y enumeración de archivos en un un servidor web
En esta clase, hacemos uso de las herramientas Wfuzz y Gobuster para aplicar Fuzzing. Esta técnica se utiliza para descubrir rutas y recursos ocultos en un servidor web mediante ataques de fuerza bruta. El objetivo es encontrar recursos ocultos que podrían ser utilizados por atacantes malintencionados para obtener acceso no autorizado al servidor.
@ -460,7 +460,7 @@ BurpSuite Proffessional es la versión de pago desarrollada por la empresa PortS
- Herramientas avanzadas: Incluye funcionalidades avanzadas, como el módulo de intrusión, el rastreador de vulnerabilidades y el generador de payloads, que facilitan la identificación y explotación de vulnerabilidades en aplicaciones web.
## 1.14 Google Dorks / Google Hacking - 18 Dorks muy usados
## 2.14 Google Dorks / Google Hacking - 18 Dorks muy usados
El Google Dork es una técnica de búsqueda avanzada que utiliza operadores y palabras clave específicas en el buscador de Google para encontrar información que normalmente no aparece en los resultados de búsqueda regulares.
@ -473,7 +473,7 @@ Es importante tener en cuenta que la técnica de Google Dorking no es ilegal en
https://pentest-tools.com/information-gathering/google-hacking
## 1.15 Identificación y verificación externa de la versión del SO
## 2.15 Identificación y verificación externa de la versión del SO

View File

@ -1 +1,175 @@
# TEMA 3 - Configuración de laboratorios locales de Docker
Índice:
- [TEMA 3 - Configuración de laboratorios locales de Docker](#tema-3---configuración-de-laboratorios-locales-de-docker)
- [3.1 Introducción a Docker](#31-introducción-a-docker)
- [3.2 Despliegue de máquinas vulnerables con Docker-Compose](#32-despliegue-de-máquinas-vulnerables-con-docker-compose)
## 3.1 Introducción a Docker
Docker es una plataforma de contenedores de software que permite crear, distribuir y ejecutar aplicaciones en entornos aislados. Esto significa que se pueden empaquetar las aplicaciones con todas sus dependencias y configuraciones en un contenedor que se puede mover fácilmente de una máquina a otra, independientemente de la configuración del sistema operativo o del hardware.
Algunas de las ventajas que se presentan a la hora de practicar hacking usando Docker son:
- Aislamiento: los contenedores de Docker están aislados entre sí, lo que significa que si una aplicación dentro de un contenedor es comprometida, el resto del sistema no se verá afectado.
- Portabilidad: los contenedores de Docker se pueden mover fácilmente de un sistema a otro, lo que los hace ideales para desplegar entornos vulnerables para prácticas de hacking.
- Reproducibilidad: los contenedores de Docker se pueden configurar de forma precisa y reproducible, lo que es importante en el hacking para poder recrear escenarios de ataque.
Para **instalar Docker** en Linux, se puede utilizar el comando “apt install docker.io“, que instalará el paquete Docker desde el repositorio de paquetes del sistema operativo. Es importante mencionar que, dependiendo de la distribución de Linux que se esté utilizando, el comando puede variar. Por ejemplo, en algunas distribuciones como CentOS o RHEL se utiliza “yum install docker” en lugar de “apt install docker.io“.
Una vez que Docker ha sido instalado, es necesario iniciar el demonio de Docker para que los contenedores puedan ser creados y administrados. Para iniciar el demonio de Docker, se puede utilizar el comando “service docker start“. Este comando iniciará el servicio del demonio de Docker, que es responsable de gestionar los contenedores y asegurarse de que funcionen correctamente.
Un archivo **Dockerfile** se compone de varias secciones, cada una de las cuales comienza con una palabra clave en mayúsculas, seguida de uno o más argumentos.
Algunas de las secciones más comunes en un archivo Dockerfile son:
- FROM: se utiliza para especificar la imagen base desde la cual se construirá la nueva imagen.
- RUN: se utiliza para ejecutar comandos en el interior del contenedor, como la instalación de paquetes o la configuración del entorno.
- COPY: se utiliza para copiar archivos desde el sistema host al interior del contenedor.
- CMD: se utiliza para especificar el comando que se ejecutará cuando se arranque el contenedor.
Además de estas secciones, también se pueden incluir otras instrucciones para configurar el entorno, instalar paquetes adicionales, exponer puertos de red y más.
Para **crear una imagen** de Docker, es necesario tener un archivo Dockerfile que defina la configuración de la imagen. Una vez que se tiene el Dockerfile, se puede utilizar el comando “docker build” para construir la imagen. Este comando buscará el archivo Dockerfile en el directorio actual y utilizará las instrucciones definidas en el mismo para construir la imagen.
Algunas de las instrucciones que vemos en esta clase son:
docker build: es el comando que se utiliza para construir una imagen de Docker a partir de un Dockerfile.
La sintaxis básica es la siguiente:
`docker build [opciones] ruta_al_Dockerfile`
El parámetro “-t” se utiliza para etiquetar la imagen con un nombre y una etiqueta. Por ejemplo, si se desea etiquetar la imagen con el nombre “mi_imagen” y la etiqueta “v1“, se puede usar la siguiente sintaxis:
`docker build -t mi_imagen:v1 ruta_al_Dockerfile`
El punto (“.“) al final de la ruta al Dockerfile se utiliza para indicar al comando que busque el Dockerfile en el directorio actual. Si el Dockerfile no se encuentra en el directorio actual, se puede especificar la ruta completa al Dockerfile en su lugar. Por ejemplo, si el Dockerfile se encuentra en “/home/usuario/proyecto/“, se puede usar la siguiente sintaxis:
`docker build -t mi_imagen:v1 /home/usuario/proyecto/`
docker pull: es el comando que se utiliza para descargar una imagen de Docker desde un registro de imágenes.
La sintaxis básica es la siguiente:
`docker pull nombre_de_la_imagen:etiqueta`
Por ejemplo, si se desea descargar la imagen “ubuntu” con la etiqueta “latest”, se puede usar la siguiente sintaxis:
`docker pull ubuntu:latest`
docker images: es el comando que se utiliza para listar las imágenes de Docker que están disponibles en el sistema.
La sintaxis básica es la siguiente:
`docker images [opciones]`
Durante la construcción de la imagen, Docker descargará y almacenará en caché las capas de la imagen que se han construido previamente, lo que hace que las compilaciones posteriores sean más rápidas.
Ya habiendo construido en la clase anterior nuestra primera imagen, ¡ya estamos preparados para desplegar nuestros contenedores!
El comando “docker run” se utiliza para crear y arrancar un contenedor a partir de una imagen. Algunas de las opciones más comunes para el comando “docker run” son:
“-d” o “detach“: se utiliza para arrancar el contenedor en segundo plano, en lugar de en primer plano.
“-i” o “interactive“: se utiliza para permitir la entrada interactiva al contenedor.
“-t” o “tty“: se utiliza para asignar un seudoterminal al contenedor.
name“: se utiliza para asignar un nombre al contenedor.
Para arrancar un contenedor a partir de una imagen, se utiliza el siguiente comando:
`docker run [opciones] nombre_de_la_imagen`
Por ejemplo, si se desea arrancar un contenedor a partir de la imagen “mi_imagen“, en segundo plano y con un seudoterminal asignado, se puede utilizar la siguiente sintaxis:
`docker run -dit mi_imagen`
Una vez que el contenedor está en ejecución, se puede utilizar el comando “docker ps” para listar los contenedores que están en ejecución en el sistema. Algunas de las opciones más comunes son:
“-a” o “all“: se utiliza para listar todos los contenedores, incluyendo los contenedores detenidos.
“-q” o “quiet“: se utiliza para mostrar sólo los identificadores numéricos de los contenedores.
Por ejemplo, si se desea listar todos los contenedores que están en ejecución en el sistema, se puede utilizar la siguiente sintaxis:
`docker ps -a`
Para ejecutar comandos en un contenedor que ya está en ejecución, se utiliza el comando “docker exec” con diferentes opciones. Algunas de las opciones más comunes son:
“-i” o “interactive“: se utiliza para permitir la entrada interactiva al contenedor.
“-t” o “tty“: se utiliza para asignar un seudoterminal al contenedor.
Por ejemplo, si se desea ejecutar el comando “bash” en el contenedor con el identificador “123456789“, se puede utilizar la siguiente sintaxis:
`docker exec -it 123456789 bash`
A continuación, se detallan algunos de los comandos vistos en esta clase:
- `docker rm $(docker ps -a -q) force`: este comando se utiliza para eliminar todos los contenedores en el sistema, incluyendo los contenedores detenidos. La opción “-q” se utiliza para mostrar sólo los identificadores numéricos de los contenedores, y la opción “force” se utiliza para forzar la eliminación de los contenedores que están en ejecución. Es importante tener en cuenta que la eliminación de todos los contenedores en el sistema puede ser peligrosa, ya que puede borrar accidentalmente contenedores importantes o datos importantes. Por lo tanto, se recomienda tener precaución al utilizar este comando.
- `docker rm id_contenedor`: este comando se utiliza para eliminar un contenedor específico a partir de su identificador. Es importante tener en cuenta que la eliminación de un contenedor eliminará también cualquier cambio que se haya realizado dentro del contenedor, como la instalación de paquetes o la modificación de archivos.
- `docker rmi $(docker images -q)`: este comando se utiliza para eliminar todas las imágenes de Docker en el sistema. La opción “-q” se utiliza para mostrar sólo los identificadores numéricos de las imágenes. Es importante tener en cuenta que la eliminación de todas las imágenes de Docker en el sistema puede ser peligrosa, ya que puede borrar accidentalmente imágenes importantes o datos importantes. Por lo tanto, se recomienda tener precaución al utilizar este comando.
- `docker rmi id_imagen`: este comando se utiliza para eliminar una imagen específica a partir de su identificador. Es importante tener en cuenta que la eliminación de una imagen eliminará también cualquier contenedor que se haya creado a partir de esa imagen. Si se desea eliminar una imagen que tiene contenedores en ejecución, se deben detener primero los contenedores y luego eliminar la imagen.
El port forwarding, también conocido como reenvío de puertos, nos permite redirigir el tráfico de red desde un puerto específico en el host a un puerto específico en el contenedor. Esto nos permitirá acceder a los servicios que se ejecutan dentro del contenedor desde el exterior.
Para utilizar el port forwarding, se utiliza la opción “-p” o “publish” en el comando “docker run“. Esta opción se utiliza para especificar la redirección de puertos y se puede utilizar de varias maneras. Por ejemplo, si se desea redirigir el puerto 80 del host al puerto 8080 del contenedor, se puede utilizar la siguiente sintaxis:
`docker run -p 80:8080 mi_imagen`
Esto redirigirá cualquier tráfico entrante en el puerto 80 del host al puerto 8080 del contenedor. Si se desea especificar un protocolo diferente al protocolo TCP predeterminado, se puede utilizar la opción “-p” con un formato diferente. Por ejemplo, si se desea redirigir el puerto 53 del host al puerto 53 del contenedor utilizando el protocolo UDP, se puede utilizar la siguiente sintaxis:
`docker run -p 53:53/udp mi_imagen`
Las monturas, por otro lado, nos permiten compartir un directorio o archivo entre el sistema host y el contenedor. Esto nos permitirá persistir la información entre ejecuciones de contenedores y compartir datos entre diferentes contenedores.
Para utilizar las monturas, se utiliza la opción “-v” o “volume” en el comando “docker run“. Esta opción se utiliza para especificar la montura y se puede utilizar de varias maneras. Por ejemplo, si se desea montar el directorio “/home/usuario/datos” del host en el directorio “/datos” del contenedor, se puede utilizar la siguiente sintaxis:
`docker run -v /home/usuario/datos:/datos mi_imagen`
Esto montará el directorio “/home/usuario/datos” del host en el directorio “/datos” del contenedor. Si se desea especificar una opción adicional, como la de montar el directorio en modo de solo lectura, se puede utilizar la opción “-v” con un formato diferente. Por ejemplo, si se desea montar el directorio en modo de solo lectura, se puede utilizar la siguiente sintaxis:
`docker run -v /home/usuario/datos:/datos:ro mi_imagen`
En la siguiente clase, veremos cómo desplegar máquinas vulnerables usando Docker-Compose.
Docker Compose es una herramienta de orquestación de contenedores que permite definir y ejecutar aplicaciones multi-contenedor de manera fácil y eficiente. Con Docker Compose, podemos describir los diferentes servicios que componen nuestra aplicación en un archivo YAML y, a continuación, utilizar un solo comando para ejecutar y gestionar todos estos servicios de manera coordinada.
En otras palabras, Docker Compose nos permite definir y configurar múltiples contenedores en un solo archivo YAML, lo que simplifica la gestión y la coordinación de múltiples contenedores en una sola aplicación. Esto es especialmente útil para aplicaciones complejas que requieren la interacción de varios servicios diferentes, ya que Docker Compose permite definir y configurar fácilmente la conexión y la comunicación entre estos servicios.
## 3.2 Despliegue de máquinas vulnerables con Docker-Compose
AVISO: En caso de que veáis que no estáis pudiendo instalar nano o alguna utilidad en el contenedor, eliminad todo el contenido del archivo /etc/apt/sources.list existente en el CONTENEDOR y metedle esta línea:
```
deb http://archive.debian.org/debian/ jessie contrib main non-free
```
Posteriormente, haced un apt update y probad a instalar nuevamente la herramienta que queráis, ya no os debería de dar problemas.
Si estáis enfrentando dificultades con el contenedor de Elasticsearch y notáis que el contenedor no se crea después de ejecutar docker-compose up -d, intentad modificar un parámetro del sistema con el siguiente comando en la consola:
```
sudo sysctl -w vm.max_map_count=262144.
```
Después de hacerlo, intentad de nuevo ejecutar docker-compose up -d, se debería solucionar el problema.
A continuación, os proporcionamos el enlace al proyecto de Github que estamos usando para esta clase:
- Vulhub: https://github.com/vulhub/vulhub
Asimismo, por aquí os compartimos el enlace al recurso donde se nos ofrece el script en Javascript encargado de establecer la Reverse Shell:
- NodeJS Reverse Shell: https://github.com/appsecco/vulnerable-apps/tree/master/node-reverse-shell
Enlace del proyecto correspondiente a la vulnerabilidad de ImageMagick (ImageTragick) que tocamos en esta clase:
- Proyecto de Github: https://github.com/vulhub/vulhub/tree/master/imagemagick/imagetragick

View File

@ -1 +1,41 @@
# TEMA 4 - Enumeración de servicios comunes y gestores de contenido
## 4.1 Enumeración FTP
## 4.2 Enumeración SSH
## 4.3 Enumeración HTTP y HTTPS
## 4.4 Enumeración SMB
## 4.5 Enumeración WordPress
## 4.6 Enumeración Joomla
## 4.7 Enumeración Drupal
## 4.8 Enumeración Magento
## 4.9 Odsidian