No sé vosotros, pero últimamente parece que los mensajes de estafa me persiguen. Uno tras otro, intentando colarse en mi bandeja de entrada para robarme datos bancarios. Esta vez, me llegó uno tan cutre que no pude resistirme. Eso sí, antes de nada, he censurado la URL en la imagen, que no pienso darles ni un ápice de publicidad a estos ladrones.
Normalmente, suelo pasar de estas cosas. Bloqueo y a otra cosa. Pero esa chispa de curiosidad (y un poco de mala leche, para qué engañarnos) me hizo pensar: ¿Qué pasaría si investigo un poco más? Así que, con mi vena de Sherlock encendida, me puse manos a la obra en un entorno seguro, por supuesto.
La primera sorpresa: ¿No funciona en el PC? ¡Vaya truco!
Al abrir la URL desde el ordenador… nada, cero, página caída. “¡Vaya!”, pensé, “se me han adelantado y ya les han tumbado la web”. Pero algo no cuadraba. Tenía el gusanillo en el estómago, así que probé a entrar desde el móvil.
¡Bingo! La página funcionaba perfectamente desde el móvil.
Esto ya se estaba poniendo interesante. Resulta que estos genios del mal habían configurado la web para que, si detectaba que entrabas desde un ordenador, devolviera un bonito error 404. Pero desde el móvil, la estafa seguía funcionando a todo gas.
¿Ingenioso, eh? Ahora ya no era solo curiosidad, era un reto. Y no iba a parar hasta descubrir cómo lo habían hecho.
El plan maestro (o eso pensaba yo al principio)
El primer paso estaba claro: simular que mi PC era un móvil. Cambié el user agent para hacerme pasar por un iPhone y… 404 otra vez. Vale, el juego empezaba a ponerse serio.
Probé de todo: Primero scripts simples con Playwright,
const { webkit } = require('playwright');
(async () => {
const browser = await webkit.launch();
const context = await browser.newContext({
viewport: { width: 375, height: 812 },
userAgent: "Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
});
const page = await context.newPage();
await page.goto('https://url.com/');
console.log(await page.content());
await browser.close();
})();
Pero nada…
Luego con proxies de móvil con BrightData, le di una oportunidad porque tenia una prueba gratuita
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
// Activa el modo stealth para evitar detecciones de bot
puppeteer.use(StealthPlugin());
(async () => {
// Configura el proxy con tus credenciales
const PROXY_SERVER = 'https://brd.superproxy.io:9222'; // Dirección del proxy
const PROXY_USERNAME = '';
const PROXY_PASSWORD = '';
// Inicializa el navegador con el proxy configurado
const browser = await puppeteer.launch({
headless: false, // Para ver el navegador en acción. Cámbialo a true para ocultarlo.
ignoreHTTPSErrors: true,
args: [
`--proxy-server=${PROXY_SERVER}`,
'--no-sandbox',
'--disable-setuid-sandbox',
'--disable-dev-shm-usage',
'--disable-accelerated-2d-canvas',
'--disable-gpu',
'--allow-insecure-localhost', // Permite SSL inseguro en localhost
'--ignore-certificate-errors', // Ignora errores de certificados
'--ignore-certificate-errors-spki-list' // Ignora HSTS y SPKI
]
});
const page = await browser.newPage();
// Autenticación en el proxy
await page.authenticate({
username: PROXY_USERNAME,
password: PROXY_PASSWORD
});
// Configura el User-Agent para simular un iPhone
await page.setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148");
await page.setViewport({ width: 375, height: 812 });
// Navega a la URL deseada
await page.goto('https://web maliciosa', { waitUntil: 'networkidle0' });
// Espera unos segundos para que cargue el contenido dinámico
await new Promise(resolve => setTimeout(resolve, 5000));
// Obtén el HTML del contenido de la página
const content = await page.content();
console.log(content);
// Guarda el contenido en un archivo HTML para analizarlo
const fs = require('fs');
fs.writeFileSync('abanca-page.html', content);
// Cierra el navegador
await browser.close();
})();
Y tampoco funcionó…
Incluso me metí en BrowserStack para simular una conexión desde un iPhone en la nube (¡maldito free tier que no me dejó usar el iPhone!). Nada funcionaba. Estos tipos habían hecho un trabajo fino.
Ya estaba a punto de rendirme cuando pensé: ¿Y si analizo las peticiones de mi propio móvil? Bingo. Ahí estaba la clave.
Capturando el rastro con un proxy (nivel espía activado)
La idea era simple: utilizar un proxy para interceptar las peticiones de mi móvil y ver qué narices estaba pasando ahí.
Me instalé mitmproxy y lo configuré en mi iPhone.
Para instalarlo usé
brew install mitmproxy
y inicié su versión web
mitmweb
Podría haber hecho un script para capturar la web que yo querÍa, pero no era necesario, con la versión web me sobraba.
Para configurarlo en el iphone fue sencillo, primero me conecté al proxy desde los ajustes de la wifi (es importante estar en la misma red) y después me instalé el propio certificado ssl de mitmproxy
Después de unos ajustes y de instalar el certificado SSL de mitmproxy en el móvil, conseguí ver todas las peticiones que hacía la web.
¡Era como ver un mapa del tesoro! Cada llamada, cada cookie, cada comprobación que hacían para verificar que yo era un usuario “legítimo”. Incluso descubrí viendo los headers que estaban usando Cloudflare para validar el dispositivo móvil con un sistema de CSRF bastante curioso.
¿El truco? Se basaban en un challenge para verificar si eras humano y, por lo que vi, también para comprobar si eras un móvil de verdad.
Aqui os dejo un video de como iba capturando las peticiones mientras desde el movil enviaba datos fake a los atacantes
El contraataque: Troleando a los estafadores
Con toda la información en la mano, me puse manos a la obra para darles una lección. Utilicé las cookies que había capturado y las repliqué en un script para mandarles registros falsos, pero válidos, creando así una base de datos inservible llena de datos inventados.
Les envié:
- DNI válidos (pero que no existían)
- Contraseñas aleatorias
- Números de teléfono falsos
- Y lo mejor de todo, les rellené un campo donde pedian “cantidad de ingresos” con totalmente aleatorias, para que se hicieran un lío calculando el “botín”.
¿Resultado? Una base de datos llena de registros basura que, con suerte, les habrá fastidiado bastante.
Y para que veáis que me porto bien os dejo el código por si os entra curiosidad ver como yo y mi amigo chatgpt lo hicimos
GitHub - edunavajas/breaking-malicious-website
Moraleja (y advertencia importante)
Os cuento todo esto por pura diversión, pero ojo, no recomiendo que hagáis esto en casa. Entrar en webs maliciosas y toquetear puede ser muy peligroso, tanto para vuestra seguridad como para vuestra legalidad.
Si os encontráis con una estafa online, lo mejor es denunciarla. Aquí os dejo un par de enlaces útiles donde yo ya he denunciado a este sitio:
Reflexión final: Los ciberdelincuentes también innovan (y nosotros debemos ir un paso por delante)
La verdad es que fue una experiencia curiosa. Me recordó que los estafadores no se quedan atrás y están evolucionando constantemente sus métodos. ¿Quién iba a pensar que bloquearían el acceso desde PC pero dejarían abierto el móvil? Ingenioso, sí, pero no lo suficiente.
Esto me dejó claro que, para protegernos, tenemos que mantenernos informados y estar siempre un paso por delante.
Espero que mi aventura os haya servido como advertencia y, por qué no, para echaros unas risas. ¡Ya sabéis, tened cuidado ahí fuera!
PD: Sí, me ayudó ChatGPT con alguna idea, pero la diversión fue toda mía. 😜