From 1f6f61c8f56dd05e4bf0978e8bf2c1ac226dd2e5 Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 20 Apr 2025 14:57:42 +0000 Subject: [PATCH] Translated ['src/pentesting-web/account-takeover.md'] to uk --- src/pentesting-web/account-takeover.md | 10 ++-- theme/ht_searcher.js | 70 ++++++++++++++++++++++---- 2 files changed, 65 insertions(+), 15 deletions(-) diff --git a/src/pentesting-web/account-takeover.md b/src/pentesting-web/account-takeover.md index 446701728..b2b909f84 100644 --- a/src/pentesting-web/account-takeover.md +++ b/src/pentesting-web/account-takeover.md @@ -4,7 +4,7 @@ ## **Проблема авторизації** -Електронну пошту облікового запису слід спробувати змінити, і процес підтвердження **повинен бути перевірений**. Якщо він виявиться **слабким**, електронну пошту слід змінити на електронну пошту запланованої жертви, а потім підтвердити. +Електронну пошту облікового запису слід спробувати змінити, і процес підтвердження **повинен бути перевірений**. Якщо він виявиться **слабким**, електронну пошту слід змінити на адресу запланованої жертви, а потім підтвердити. ## **Проблема нормалізації Unicode** @@ -37,7 +37,7 @@ unicode-injection/unicode-normalization.md ## **Неправильна конфігурація CORS для взлому облікового запису** -Якщо сторінка містить **неправильні конфігурації CORS**, ви можете **вкрасти чутливу інформацію** у користувача, щоб **взяти під контроль його обліковий запис** або змусити його змінити інформацію для авторизації з тією ж метою: +Якщо сторінка містить **неправильні конфігурації CORS**, ви можете **вкрасти чутливу інформацію** у користувача, щоб **взяти під контроль його обліковий запис** або змусити його змінити інформацію про авторизацію з тією ж метою: {{#ref}} cors-bypass.md @@ -45,7 +45,7 @@ cors-bypass.md ## **CSRF для взлому облікового запису** -Якщо сторінка вразлива до CSRF, ви можете змусити **користувача змінити свій пароль**, електронну пошту або аутентифікацію, щоб потім отримати до неї доступ: +Якщо сторінка вразлива до CSRF, ви можете змусити **користувача змінити свій пароль**, електронну пошту або аутентифікацію, щоб потім отримати до них доступ: {{#ref}} csrf-cross-site-request-forgery.md @@ -106,7 +106,7 @@ oauth-to-account-takeover.md - Зловмисник запитує зміну своєї електронної пошти на нову - Зловмисник отримує посилання для підтвердження зміни електронної пошти - Зловмисник надсилає жертві посилання, щоб вона його натиснула -- Електронна пошта жертви змінюється на ту, що вказав зловмисник +- Електронна пошта жертви змінюється на вказану зловмисником - Зловмисник може відновити пароль і взяти під контроль обліковий запис Це також сталося в [**цьому звіті**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea). @@ -114,7 +114,7 @@ oauth-to-account-takeover.md ### Обхід перевірки електронної пошти для взлому облікового запису - Зловмисник входить з attacker@test.com і підтверджує електронну пошту під час реєстрації. - Зловмисник змінює підтверджену електронну пошту на victim@test.com (без вторинної перевірки при зміні електронної пошти) -- Тепер веб-сайт дозволяє victim@test.com увійти, і ми обійшли перевірку електронної пошти жертви. +- Тепер веб-сайт дозволяє victim@test.com увійти, і ми обійшли перевірку електронної пошти користувача жертви. ### Старі куки 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;