Skip to content

#gophish #phishing #reallife

#1 Instalación

bash
wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
bash
sudo ./gophish

Hay que cambiar el panel de administración para que escuche por el puerto 3333

#2 Crear plantillas

Tendremos que añadir {{.FirstName}} {{.LastName}} {{.Tracker}} {{.Url}} al html de las plantillas

#3 Certificado SSL del dominio

Para tener el candadito verde en el dominio

bash
sudo apt update

sudo apt upgrade

sudo apt install snapd

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot
bash
sudo certbot certonly --manual --preferred-challenges=dns -d <DOMINIO>.com -d *.<DOMINIO>.com

Creamos el TXT en el panel del dominio como nos piden

Verificamos si está ya accediendo a

https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.DOMAIN

bash
sudo mv /etc/letsencrypt/archive/domain.com/privkey1.pem /gophish/certificate/privkey1.pem
bash
sudo mv /etc/letsencrypt/archive/domain.com/fullchain1.pem /gophish/certificate/fullchain1.pem
bash
sudo chown gophish-adminuser-gophish-adminuser fullchain1.pem privkey1.pem
chmod 644 fullchain1.pem
chmod 600 privkey1.pem

❗Este certificado se usará desde nginx, en el paso 6 se terminará de configurar este certificado, de momento es normal que sigamos viendo el candado rojo

#4 Clonar panel de login con plugin

SingleFile - Microsoft Edge Addons

Plugin para clonar web

Ahora habría que crear una landing Page desde gophish copiando y pegando el código que hemos extraído con la extensión

#5 Servidor de correo

Para hacerlo de forma manual podemos hacerlo con poste.io, ahora bien , si queremos evitar dolores de cabeza, lo mejor que podemos hacer es comprarnos 5 correos, que no suele salir por mas de dos euros en nuestro proveedor de dominio.

POSTE.IO 📮

bash
snap install docker

Matamos todo lo que está en 25, 80, 8443, 110, 143, 587 antes

bash
 docker run \
    --net=host \
    -e TZ=Europe/Prague -e HTTPS_PORT=8443 \
    -v /your-data-dir/data:/data \
    --name "mailserver" \
    -h "mail.example.com" \
    -d \
    -t analogic/poste.io

Ponemos un registro tipo A que apunte a la IP pública de nuestra VPS

y uno MX

Probar a enviar un email a https://www.mail-tester.com/

COMPRAR CORREOS 💵

Añadir un registro de tipo A y otro MX en el dominio

Configurarlo adecuadamente en el Sending Profile

#6 PROXY INVERSO NGINX PARA EVITAR CRAWLERS Y BOTS

Lo mejor que podemos hacer para que no nos tiren el dominio a las horas es hacer una whitelist para permitir que solo ciertas IPs pueden acceder a la landing page

Lo primero será cambiar el config.json del gophish para que la landing se vea desde el 8080, ya que pondremos un nginx por delante

json
{
        "admin_server": {
                "listen_url": "0.0.0.0:3333",
                "use_tls": true,
                "cert_path": "gophish_admin.crt",
                "key_path": "gophish_admin.key",
                "trusted_origins": []
        },
        "phish_server": {
                "listen_url": "127.0.0.1:8080",
                "use_tls": false,
                "cert_path": "...",
                "key_path": "..."
        },
        "db_name": "sqlite3",
        "db_path": "gophish.db",
        "migrations_prefix": "db/db_",
        "contact_address": "",
        "logging": {
                "filename": "",
                "level": ""
        }
}

Comandos & Setup

bash
sudo apt-get update

sudo apt-get install nginx -y

sudo systemctl status nginx

Tras cada cambio

bash
sudo nginx -t
sudo systemctl restart nginx

Modo Blacklist

El siguiente es un script para crear /etc/nginx/blacklist.conf que bloqueará IPs de google, microsoft ... y spiders y bots

python
#!/bin/bash

# Archivo de salida
OUTPUT_FILE="/etc/nginx/blacklist.conf"

# --- PARTE 1: BLOQUEO POR IPs (ASNs) ---
# AS15169 = Google
# AS8075  = Microsoft
# AS16509 = Amazon AWS
# AS14618 = Forcepoint
# AS62044 = Zscaler
# AS11835 = Palo Alto
# AS25961 = Symantec
# AS12486 = Mimecast
# AS40528 = Proofpoint
# AS14061 = DigitalOcean
# AS13335 = Cloudflare (Opcional, a veces envían crawlers)

ASNS=("AS15169" "AS8075" "AS16509" "AS14618" "AS62044" "AS11835" "AS25961" "AS12486" "AS40528" "AS14061")

echo "[*] --- FASE 1: Generando lista de IPs (Red) ---"
echo "# Blacklist generada el $(date)" > $OUTPUT_FILE

for asn in "${ASNS[@]}"; do
    echo -n "[...] Descargando IPs de $asn ... "
    whois -h whois.radb.net -- "-i origin $asn" | \
    grep "^route:" | \
    awk '{print "deny " $2 ";"}' >> $OUTPUT_FILE
    echo "OK"
done

# --- PARTE 2: BLOQUEO POR USER-AGENT ---
echo "[*] --- FASE 2: Añadiendo bloqueo de User-Agents ---"

# Añadimos un bloque 'if' al final del mismo archivo.
# Nginx leerá las IPs primero, y si pasa, leerá esto.

cat <<EOF >> $OUTPUT_FILE

# -------------------------------------------
# BLOQUEO POR USER-AGENT (Nombres de Robots)
# -------------------------------------------

if (\$http_user_agent ~* (google|bing|yahoo|duckduckgo|baidu|yandex|majestic|ahrefs|semrush|spider|crawl|slurp|bot)) {
    return 403;
}

# -------------------------------------------
# FIN DE BLACKLIST
# -------------------------------------------
EOF

echo "[*] Total de líneas generadas:"
wc -l $OUTPUT_FILE

echo "[*] Verificando sintaxis de Nginx..."
nginx -t

if [ $? -eq 0 ]; then
    echo "[*] Sintaxis correcta. Recargando Nginx..."
    systemctl reload nginx
    echo "[SUCCESS] Tu servidor está blindado por IP y por Nombre."
else
    echo "[ERROR] Algo salió mal con la sintaxis. Revisa el archivo generados."
fi

En modo blacklist /etc/nginx/sites-available/default tiene que estar así:

nginx
# BLOQUE 1: Puerto 80 (HTTP)
# Su única misión es redirigir todo el tráfico a HTTPS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Cambia esto por tu dominio real si quieres, o déjalo con _
    server_name domain.com;

    # Redirección obligatoria a HTTPS
    return 301 https://$host$request_uri;
}

# BLOQUE 2: Puerto 443 (HTTPS)
# Aquí es donde ocurre la magia, el SSL y la conexión a Gophish
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name domain.com;

    # --- CERTIFICADOS SSL ---
    # Uso comillas por si acaso hay espacios en las rutas
    ssl_certificate     "/home/gophish-adminuser/gophish/certificate/fullchain.pem";
    ssl_certificate_key "/home/gophish-adminuser/gophish/certificate/privkey.pem";

    # --- EL ESCUDO (Tu Blacklist) ---
    # Esto debe ir AQUÍ, en el bloque HTTPS
    include /etc/nginx/blacklist.conf;

    # --- LOGS (Para que veas quién entra) ---
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # --- CONEXIÓN A GOPHISH ---
    location / {
        # Conecta al Gophish que tienes escuchando en el 8080 (según tu config.json)
        proxy_pass http://127.0.0.1:8080;

        #Whitelist
        #allow 79.116.91.226;
        #deny all;
        #error_page 403 = @redireccion_segura;

        # Cabeceras obligatorias para evitar bucles y pasar la IP real
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https; # Vital para que Gophish sepa que es seguro
    }

    #location @redireccion_segura {
    #    return 301 https://www.google.com;
        # O redirige al sitio REAL de la empresa víctima para confundir más
    #}
}

Modo WhiteList

Aquí en allow pondríamos el listado de ips que queremos admitir.

/etc/nginx/sites-available/default

nginx
# BLOQUE 1: Puerto 80 (HTTP)
# Su única misión es redirigir todo el tráfico a HTTPS
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Cambia esto por tu dominio real si quieres, o déjalo con _
    server_name domain.com;

    # Redirección obligatoria a HTTPS
    return 301 https://$host$request_uri;
}

# BLOQUE 2: Puerto 443 (HTTPS)
# Aquí es donde ocurre la magia, el SSL y la conexión a Gophish
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;

    server_name domain.com;

    # --- CERTIFICADOS SSL ---
    # Uso comillas por si acaso hay espacios en las rutas
    ssl_certificate     "/home/gophish-adminuser/gophish/certificate/fullchain.pem";
    ssl_certificate_key "/home/gophish-adminuser/gophish/certificate/privkey.pem";

    # --- EL ESCUDO (Tu Blacklist) ---
    # Esto debe ir AQUÍ, en el bloque HTTPS
    #include /etc/nginx/blacklist.conf;

    # --- LOGS (Para que veas quién entra) ---
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    # --- CONEXIÓN A GOPHISH ---
    location / {
        # Conecta al Gophish que tienes escuchando en el 8080 (según tu config.json)
        proxy_pass http://127.0.0.1:8080;

        #Whitelist
        allow 79.116.91.226;
        deny all;
        error_page 403 = @redireccion_segura;

        # Cabeceras obligatorias para evitar bucles y pasar la IP real
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https; # Vital para que Gophish sepa que es seguro
    }

    location @redireccion_segura {
        return 301 https://www.google.com;
        # O redirige al sitio REAL de la empresa víctima para confundir más
    }
}

#7 Quitar Cabecera de Gophish

Cuando configuremos cada sending profile tenemos que evitar que se envíe la cabecera X-Mailer: Gophish, para eso la podemos sobreescribir:

HTTP
X-Mailer: Microsoft office outlook, build 17.551210

#8 Cambiar el parámetro RID

Aunque optativo es recomendable para evadir filtros antispam, para hacerlo habría que editar el código fuente y recompilar

#9 Registros DNS

  • Registro tipo A que apunte a la VPS : uno por el dominio y por cada subdominio.
  • Registros MX: si compramos los correos se deberían configurar solos.
  • El registro TXT del acm challengue que hemos configurado al principio.
  • Registro TXT : _dmarc "v=DMARC1;p=none"
  • Registro TXT : @ "v=spfv1 include:_spf-eu.ionos.com ~all"

Notas personales de seguridad ofensiva.