From 3bda5475b8ad6573db39147a6129ac5b14106851 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 20 Apr 2025 14:57:38 +0000 Subject: [PATCH] Translated ['src/pentesting-web/account-takeover.md'] to es --- src/pentesting-web/account-takeover.md | 24 ++++----- theme/ht_searcher.js | 70 ++++++++++++++++++++++---- 2 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/pentesting-web/account-takeover.md b/src/pentesting-web/account-takeover.md index 0e43eaa54..649551c2e 100644 --- a/src/pentesting-web/account-takeover.md +++ b/src/pentesting-web/account-takeover.md @@ -4,20 +4,20 @@ ## **Problema de Autorización** -Se debe intentar cambiar el correo electrónico de una cuenta, y el proceso de confirmación **debe ser examinado**. Si se encuentra **débil**, el correo electrónico debe ser cambiado al del objetivo y luego confirmado. +Se debe intentar cambiar el correo electrónico de una cuenta, y el proceso de confirmación **debe ser examinado**. Si se encuentra **débil**, el correo electrónico debe ser cambiado al del víctima previsto y luego confirmado. ## **Problema de Normalización de Unicode** -1. La cuenta del objetivo `victim@gmail.com` +1. La cuenta del víctima previsto `victim@gmail.com` 2. Se debe crear una cuenta usando Unicode\ por ejemplo: `vićtim@gmail.com` Como se explicó en [**esta charla**](https://www.youtube.com/watch?v=CiIyaZ3x49c), el ataque anterior también podría realizarse abusando de proveedores de identidad de terceros: -- Crear una cuenta en el proveedor de identidad de terceros con un correo electrónico similar al del objetivo usando algún carácter unicode (`vićtim@company.com`). +- Crear una cuenta en el proveedor de identidad de terceros con un correo electrónico similar al del víctima usando algún carácter unicode (`vićtim@company.com`). - El proveedor de terceros no debería verificar el correo electrónico. -- Si el proveedor de identidad verifica el correo electrónico, tal vez puedas atacar la parte del dominio como: `victim@ćompany.com` y registrar ese dominio y esperar que el proveedor de identidad genere la versión ascii del dominio mientras la plataforma del objetivo normaliza el nombre de dominio. -- Iniciar sesión a través de este proveedor de identidad en la plataforma del objetivo que debería normalizar el carácter unicode y permitirte acceder a la cuenta del objetivo. +- Si el proveedor de identidad verifica el correo electrónico, tal vez puedas atacar la parte del dominio como: `victim@ćompany.com` y registrar ese dominio y esperar que el proveedor de identidad genere la versión ascii del dominio mientras la plataforma del víctima normaliza el nombre de dominio. +- Iniciar sesión a través de este proveedor de identidad en la plataforma del víctima que debería normalizar el carácter unicode y permitirte acceder a la cuenta del víctima. Para más detalles, consulta el documento sobre Normalización de Unicode: @@ -31,9 +31,9 @@ Si el sistema objetivo permite que el **enlace de restablecimiento sea reutiliza ## **Pre Toma de Control de Cuenta** -1. El correo electrónico de la víctima debe ser utilizado para registrarse en la plataforma, y se debe establecer una contraseña (se debe intentar confirmarla, aunque carecer de acceso a los correos electrónicos de la víctima podría hacer esto imposible). -2. Se debe esperar hasta que la víctima se registre usando OAuth y confirme la cuenta. -3. Se espera que el registro regular sea confirmado, permitiendo el acceso a la cuenta de la víctima. +1. El correo electrónico del víctima debe ser utilizado para registrarse en la plataforma, y se debe establecer una contraseña (se debe intentar confirmarla, aunque carecer de acceso a los correos del víctima podría hacer esto imposible). +2. Se debe esperar hasta que el víctima se registre usando OAuth y confirme la cuenta. +3. Se espera que el registro regular sea confirmado, permitiendo el acceso a la cuenta del víctima. ## **Configuración Incorrecta de CORS para Toma de Control de Cuenta** @@ -61,7 +61,7 @@ xss-cross-site-scripting/ ## **Same Origin + Cookies** -Si encuentras un XSS limitado o una toma de control de subdominio, podrías jugar con las cookies (fijándolas, por ejemplo) para intentar comprometer la cuenta de la víctima: +Si encuentras un XSS limitado o una toma de control de subdominio, podrías jugar con las cookies (fijándolas, por ejemplo) para intentar comprometer la cuenta del víctima: {{#ref}} hacking-with-cookies/ @@ -75,7 +75,7 @@ reset-password.md ## **Manipulación de Respuesta** -Si la respuesta de autenticación podría ser **reducida a un simple booleano, solo intenta cambiar false a true** y ver si obtienes algún acceso. +Si la respuesta de autenticación podría ser **reducida a un simple booleano, solo intenta cambiar falso a verdadero** y ver si obtienes algún acceso. ## OAuth para Toma de Control de Cuenta @@ -105,8 +105,8 @@ De [este informe](https://dynnyd20.medium.com/one-click-account-take-over-e50092 - El atacante solicita cambiar su correo electrónico por uno nuevo. - El atacante recibe un enlace para confirmar el cambio de correo electrónico. -- El atacante envía el enlace a la víctima para que lo haga clic. -- El correo electrónico de la víctima se cambia al indicado por el atacante. +- El atacante envía el enlace al víctima para que lo haga clic. +- El correo electrónico del víctima se cambia al indicado por el atacante. - El atacante puede recuperar la contraseña y tomar el control de la cuenta. Esto también ocurrió en [**este informe**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea). diff --git a/theme/ht_searcher.js b/theme/ht_searcher.js index 52e150d9a..e77213e96 100644 --- a/theme/ht_searcher.js +++ b/theme/ht_searcher.js @@ -471,16 +471,66 @@ window.search = window.search || {}; showResults(true); } - var branch = lang === "en" ? "master" : lang - fetch(`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.json`) - .then(response => response.json()) - .then(json => init(json)) - .catch(error => { // Try to load searchindex.js if fetch failed - var script = document.createElement('script'); - script.src = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`; - script.onload = () => init(window.search); - document.head.appendChild(script); - }); + (async function loadSearchIndex(lang = window.lang || 'en') { + /* ───────── paths ───────── */ + const branch = lang === 'en' ? 'master' : lang; + const baseRemote = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/${branch}`; + const remoteJson = `${baseRemote}/searchindex.json`; + const remoteJs = `${baseRemote}/searchindex.js`; + const localJson = './searchindex.json'; + const localJs = './searchindex.js'; + const TIMEOUT_MS = 5_000; + + /* ───────── helpers ───────── */ + const fetchWithTimeout = (url, opt = {}) => + Promise.race([ + fetch(url, opt), + new Promise((_, r) => setTimeout(() => r(new Error('timeout')), TIMEOUT_MS)) + ]); + + const loadScript = src => + new Promise((resolve, reject) => { + const s = document.createElement('script'); + s.src = src; + s.onload = resolve; + s.onerror = reject; + document.head.appendChild(s); + }); + + /* ───────── 1. remote JSON ───────── */ + try { + const r = await fetchWithTimeout(remoteJson); + if (!r.ok) throw new Error(r.status); + return init(await r.json()); + } catch (e) { + console.warn('Remote JSON failed →', e); + } + + /* ───────── 2. remote JS ───────── */ + try { + await loadScript(remoteJs); + return init(window.search); + } catch (e) { + console.warn('Remote JS failed →', e); + } + + /* ───────── 3. local JSON ───────── */ + try { + const r = await fetch(localJson); + if (!r.ok) throw new Error(r.status); + return init(await r.json()); + } catch (e) { + console.warn('Local JSON failed →', e); + } + + /* ───────── 4. local JS ───────── */ + try { + await loadScript(localJs); + return init(window.search); + } catch (e) { + console.error('Local JS failed →', e); + } + })(); // Exported functions search.hasFocus = hasFocus;