Categoría: Hacking Ético

  • Operación Faro — primera investigación con Kali Linux

    Operación Faro — primera investigación con Kali Linux

    El Centro Faro estrena una pequeña web de avisos. El equipo de seguridad sospecha que se ha publicado un documento interno y que alguien ha cambiado la página de inicio.

    Tu misión consiste en crear un pequeño laboratorio en Kali Linux, investigarlo, guardar pruebas y corregir los problemas encontrados. Todos los archivos y datos de esta práctica son ficticios.

    Duración: dos sesiones de 60–75 minutos.
    Modalidad: individual o en pareja.
    Entrega: carpeta del proyecto comprimida en ZIP, con un README.md y las evidencias solicitadas.

    Qué aprenderás

    • Descubrir un servicio con Nmap.
    • Examinar respuestas HTTP con curl.
    • Observar tu propio tráfico con Wireshark.
    • Comprobar cambios en archivos mediante SHA-256.
    • Documentar un hallazgo y verificar su corrección.

    Reglas del laboratorio

    Todas las pruebas de red se realizan exclusivamente contra 127.0.0.1 en tu propio Kali. No sustituyas esta dirección por la IP de un compañero, de la red del centro o de una web pública.

    Cuando se indique «terminal 2», abre otra pestaña o ventana. Mantén abierta la terminal del servidor hasta que se te indique detenerlo.


    Fase 0. Preparar el laboratorio

    Paso 1. Identifica tu sistema

    cat /etc/os-release | head -n 5
    whoami
    pwd

    Anota en tu README.md qué sistema utilizas y cuál es tu nombre de usuario.

    Paso 2. Comprueba las herramientas

    command -v python3
    command -v nmap
    command -v curl
    command -v wireshark
    command -v sha256sum

    Si falta nmap, curl o wireshark, instala la herramienta que necesites. Por ejemplo:

    sudo apt update
    sudo apt install nmap curl wireshark

    Si falta python3 o sha256sum, consulta con el profesor antes de continuar.

    Paso 3. Crea las carpetas

    mkdir -p ~/operacion-faro/{publico,evidencias,privado}
    cd ~/operacion-faro

    Importante: ejecuta los siguientes comandos desde ~/operacion-faro, salvo que se indique otra cosa.

    Paso 4. Crea la página web pública

    Copia el bloque completo, incluidas las dos líneas que contienen EOF:

    cat > publico/index.html <<'EOF'
    <!doctype html>
    <html lang="es">
    <meta charset="utf-8">
    <title>Centro Faro</title>
    <h1>Centro Faro</h1>
    <p>Avisos públicos del centro.</p>
    EOF

    Paso 5. Crea un documento interno ficticio

    Por error, este archivo quedará dentro de la carpeta publicada:

    cat > publico/inventario_interno.txt <<'EOF'
    CENTRO FARO - INVENTARIO FICTICIO
    Equipo: faro-lab-01
    Responsable: Equipo de pruebas
    Sala: Laboratorio A
    Nota: estos datos han sido inventados para esta práctica.
    EOF

    Comprueba los archivos:

    ls -l publico

    Evidencia 0: indica en el README.md para qué crees que sirven Nmap, curl, Wireshark y sha256sum.


    Misión 1. Descubrir la puerta abierta

    Paso 1. Arranca el servidor

    En la terminal 1, dentro de ~/operacion-faro, ejecuta:

    python3 -m http.server 8765 --bind 127.0.0.1 --directory publico

    Deja abierta esa terminal. El servidor debe indicar que escucha en 127.0.0.1, puerto 8765.

    Paso 2. Abre otra terminal

    En la terminal 2, entra en el proyecto:

    cd ~/operacion-faro

    Comprueba que puedes leer la página:

    curl http://127.0.0.1:8765/

    Resultado esperado: aparece el HTML de «Centro Faro».

    Paso 3. Examina los puertos

    nmap -sT -p 8765,8766 127.0.0.1 | tee evidencias/puertos.txt

    Resultado esperado: el puerto 8765 aparece como open. El 8766 normalmente aparecerá como closed; si está abierto, puede estar utilizándolo otro programa.

    Responde en el README.md:

    • ¿Qué significa que el puerto 8765 esté abierto?
    • ¿Qué programa lo está utilizando?
    • ¿Qué representa la dirección 127.0.0.1?

    Evidencia 1: archivo evidencias/puertos.txt y una captura del resultado.


    Misión 2. Encontrar un archivo publicado por error

    Paso 1. Consulta las cabeceras HTTP

    curl -I http://127.0.0.1:8765/

    Localiza el código de estado y el campo Content-Type.

    Paso 2. Solicita el documento interno

    curl -i http://127.0.0.1:8765/inventario_interno.txt | tee evidencias/exposicion.txt

    Resultado esperado: 200 OK y el contenido del inventario ficticio.

    El código 200 indica que el servidor ha entregado el archivo. No significa que publicarlo haya sido una buena decisión.

    Paso 3. Busca la causa

    ls -l publico/inventario_interno.txt

    Observa que el documento está dentro de publico, la carpeta desde la que sirve archivos el servidor.

    Escribe en el README.md una explicación con este esquema:

    Hallazgo → prueba → posible consecuencia → corrección propuesta.

    Evidencia 2: archivo evidencias/exposicion.txt y tu explicación. Guarda esta prueba antes de corregir el problema.


    Misión 3. Observar una petición con Wireshark

    Vas a capturar tu propia comunicación local, entre Kali y el servidor que acabas de iniciar.

    Paso 1. Abre Wireshark

    Ábrelo desde el menú de Kali o ejecuta wireshark en otra terminal. Selecciona la interfaz lo o Loopback e inicia la captura.

    Si no tienes permiso para capturar, comunica el mensaje al profesor. No cambies los permisos del sistema por tu cuenta.

    Paso 2. Genera una petición

    En la terminal 2, ejecuta:

    curl http://127.0.0.1:8765/index.html

    Paso 3. Filtra la captura

    Detén la captura. En el campo de filtro de visualización de Wireshark escribe:

    tcp.port == 8765

    Localiza la petición GET /index.html y la respuesta 200 OK. Si aparecen demasiados paquetes, prueba también este filtro:

    http

    Guarda la captura como evidencias/trafico-local.pcapng y haz una captura de pantalla donde se vean la petición y la respuesta. Antes de entregarla, comprueba que contiene únicamente el tráfico de esta prueba.

    Responde en el README.md:

    • ¿Qué archivo se pidió?
    • ¿Qué respondió el servidor?
    • ¿Por qué puedes leer el nombre del archivo solicitado en esta comunicación HTTP?

    Evidencia 3: archivo .pcapng, captura de pantalla y respuestas.


    Misión 4. Detectar un cambio en la web

    Una huella SHA-256 permite comprobar si los bytes de un archivo siguen siendo los mismos.

    Paso 1. Guarda una copia y calcula la huella

    En la terminal 2, ejecuta:

    cd ~/operacion-faro
    cp publico/index.html privado/index_original.html
    sha256sum publico/index.html | tee evidencias/huella_original.txt
    sha256sum publico/index.html > comprobacion.sha256
    sha256sum -c comprobacion.sha256

    Resultado esperado: publico/index.html: OK.

    Paso 2. Simula una modificación

    printf '\n<!-- Cambio de prueba realizado en clase -->\n' >> publico/index.html
    sha256sum -c comprobacion.sha256 | tee evidencias/comprobacion_cambio.txt

    Resultado esperado: FAILED. El archivo ya no coincide con la huella guardada.

    Importante: una huella diferente demuestra que el contenido cambió. Por sí sola no indica quién lo cambió ni demuestra que hubiera un ataque.

    Paso 3. Restaura y vuelve a comprobar

    cp privado/index_original.html publico/index.html
    sha256sum -c comprobacion.sha256 | tee evidencias/comprobacion_restaurada.txt

    Resultado esperado: OK.

    Evidencia 4: los archivos huella_original.txt, comprobacion_cambio.txt y comprobacion_restaurada.txt. Explica brevemente qué ha demostrado cada comprobación.


    Misión 5. Corregir el problema y verificarlo

    Paso 1. Retira el documento de la carpeta pública

    mv publico/inventario_interno.txt privado/inventario_interno.txt

    Conservamos el archivo como parte del ejercicio, pero ya no está en la carpeta que publica el servidor.

    Paso 2. Repite la petición original

    curl -i http://127.0.0.1:8765/inventario_interno.txt | tee evidencias/despues_correccion.txt

    Resultado esperado: 404 File not found. La ruta ya no entrega el documento.

    Paso 3. Comprueba que la web sigue funcionando

    curl -I http://127.0.0.1:8765/index.html
    sha256sum -c comprobacion.sha256

    Resultado esperado: 200 OK para la página y OK para la huella.

    Paso 4. Detén el servidor

    Vuelve a la terminal 1 y pulsa Ctrl+C. En la terminal 2 comprueba el estado del puerto:

    nmap -sT -p 8765 127.0.0.1 | tee evidencias/puerto_cerrado.txt

    Resultado esperado: closed, siempre que ningún otro programa haya empezado a utilizar el puerto.

    Evidencia 5: archivos despues_correccion.txt y puerto_cerrado.txt. Explica cómo verificaste la corrección.


    Entrega

    Comprime y entrega la carpeta operacion-faro con esta estructura:

    operacion-faro/
    ├── README.md
    ├── comprobacion.sha256
    ├── publico/
    │   └── index.html
    ├── privado/
    │   ├── index_original.html
    │   └── inventario_interno.txt
    └── evidencias/
        ├── puertos.txt
        ├── exposicion.txt
        ├── trafico-local.pcapng
        ├── huella_original.txt
        ├── comprobacion_cambio.txt
        ├── comprobacion_restaurada.txt
        ├── despues_correccion.txt
        ├── puerto_cerrado.txt
        └── capturas_de_pantalla...

    En el README.md, organiza tu trabajo en estos apartados:

    1. Entorno y herramientas utilizadas.
    2. Servicio y puerto descubierto.
    3. Archivo publicado por error.
    4. Tráfico observado en Wireshark.
    5. Comprobación de integridad.
    6. Corrección y verificación.
    7. Tres cosas que has aprendido y una duda que te queda.

    Si alguna herramienta falla, documenta el comando, el error y lo que intentaste. Una incidencia bien explicada también forma parte del trabajo.

    Referencias para el profesor

  • 2.6 – Usuarios y Huellas Digitales en Linux

    2.6 – Usuarios y Huellas Digitales en Linux

    whoami

    El equivalente digital de mirarse al espejo.
    Muestra el usuario efectivo que está ejecutando el comando.
    Perfecto para explicar la diferencia entre:

    • usuario real (el que inicia sesión),
    • usuario efectivo (el que el sistema usa para permisos, especialmente tras un sudo).

    id

    Un pequeño radiotelescopio hacia tu identidad numérica.
    Muestra:

    • UID (identificador del usuario)
    • GID (grupo principal)
    • grupos secundarios
      Es una forma directa de ver permisos y roles dentro del sistema. Ideal para ejercicios de administración y forense.

    who / w / users

    El “quién está ahora mismo en la nave”.
    Sirve para ver sesiones activas y cómo han entrado:

    • tty
    • pts (sesiones remotas)
    • SSH
    • tiempo conectado

    • En ciberseguridad es una herramienta rápida para detectar conexiones sospechosas.

    env

    El baúl entero de variables de entorno.
    Aquí viven cosas como:

    • $USER
    • $HOME
    • $SHELL
    • $PATH

      Además permite explicar a los alumnos por qué una aplicación “sabe” dónde buscar binarios o dónde está su carpeta de configuración.

    echo $USER

    Una forma simple de leer la variable que indica el nombre del usuario que ha iniciado sesión.
    Comparar whoami vs $USER es didáctico:
    $USER → quien inició sesión
    whoami → usuario efectivo (útil para mostrar cómo sudo cambia el contexto)


    echo $HOME

    Viene genial para scripts o explicaciones sobre la organización del sistema.
    Muestra la ruta al directorio personal, que siempre es sagrado en Linux.


    echo $SHELL

    Permite enseñar la diferencia entre bash, zsh, fish…
    Ideal para que entiendan por qué su terminal “se comporta raro” tras instalar algo.


    hostname

    La identidad pública del sistema en la red.
    Junto con hostname -I, sirve para explicar la distinción entre:

    • identidad del equipo,
    • interfaces,
    • direcciones IP que usa para comunicarse.

    logname

    La versión más purista de “quién inició esta sesión”, incluso si has hecho un su o un sudo.
    Muy útil en prácticas de forense porque te permite reconstruir acciones de usuarios.


    tty

    Muestra el dispositivo de terminal actual.
    En remoto se verá algo como /dev/pts/1.
    Perfecto para entender:

    • sesiones locales,
    • sesiones remotas,
    • multiplexación de terminales.

    ps aux | grep $USER

    Una puerta a ver “qué está ejecutando realmente tu identidad”.
    A los alumnos les ayuda a comprender procesos, permisos, señales y contextos.


    finger (si lo instalas)

    Pinta un pequeño perfil del usuario:

    • shell
    • home
    • nombre real

      Antiguo pero didáctico como pocas cosas.

    Actividad: “¿Quién eres en esta máquina?” – Identidad y sesiones en Linux

    Imagina que el sistema es una estación espacial. Cada alumno entra por una compuerta distinta, a veces cambia de traje (sudo), y el objetivo es reconstruir quién hizo qué.


    Todo ocurre en un Ubuntu normal.


    FASE 1 — Identidad básica

    Ejecuta:

    
    
    
    
    
    whoami
    echo $USER
    id
    logname
    

    Descubrir que el sistema te reconoce por varias “capas”.

    Explicación:

    • whoami → usuario efectivo.
    • $USER → usuario que inició sesión.
    • id → UID, GID, grupos.
    • logname → el user original aunque hayan hecho su.

    Pequeño reto:
    Pídeles que intenten entender por qué sudo whoami devuelve root,
    pero echo $USER sigue mostrando su usuario normal.


    FASE 2 — Dónde están realmente

    Ejecutar

    
    
    
    
    
    pwd
    echo $HOME
    echo $SHELL
    tty
    

    Esto muestra:

    • dónde están,
    • cuál es su shell,
    • qué terminal están usando (local, SSH, pts…).

    Ejercicio: Compartir un terminal local (tty1) con una sesión SSH


    FASE 3 — Quién más está en la nave

    Ahora miramos el estado de la estación:

    
    
    
    
    
    who
    w
    users
    hostname
    hostname -I
    

    Objetivo: identificar todas las sesiones activas.
    Puedes entrar desde otra máquina para ver “un intruso”.

    Mini-misión:
    Que usen who para averiguar:

    • quién está conectado,
    • desde qué terminal,
    • desde qué IP si es SSH,
    • desde cuándo.

    Esto introduce sin ruido en análisis forense real.


    FASE 4 — Cambio de identidad

    
    
    
    
    
    sudo -i
    whoami
    echo $USER
    id
    logname
    tty
    

    Aquí ocurre la magia:

    • whoami → root
    • $USER → su usuario original
    • logname → quien realmente abrió la sesión
    • tty → la misma porque no abren una nueva


    FASE 5 — Ver qué hace cada identidad

    En otra terminal, que ejecuten:

    
    
    
    
    
    ps aux | grep $USER
    ps aux | grep root
    

    Fijate que root suele llevar servicios, demonios, etc.

    FASE 6 — Prueba forense

    Prueba a ejecutar con un usuario un comando secreto en su sesión, por ejemplo:

    
    
    
    
    
    mkdir /tmp/estacion-alpha
    echo "Hola profe" > /tmp/mensaje.txt
    touch ~/algo_raro
    

    Luego cambia de usuario :

    “Reconstruid qué usuarios han hecho qué”

    Utilizando:

    
    
    
    
    
    ls -l /tmp
    ls -l /home/*
    who
    logname
    id username
    

    La identidad del sistema queda impregnada en permisos, UID, GID, sesiones y ficheros creados.


    Hackeo benévolo

    Se hace SSH desde otro equipo con:

    
    
    
    
    
    ssh usuario@IP
    

    Luego ejecuta:

    
    
    
    
    
    who
    w
    tty
    hostname -I
    

    Los demás deben encontrar:

    • quién ha entrado
    • desde qué IP
    • en qué terminal
    • cuánto tiempo lleva conectado
      Esta parte siempre les encanta porque parece CSI, pero sin dramatismos digitales.