diff --git a/src/pentesting-web/account-takeover.md b/src/pentesting-web/account-takeover.md index 553ecc0d3..23a1468b7 100644 --- a/src/pentesting-web/account-takeover.md +++ b/src/pentesting-web/account-takeover.md @@ -16,7 +16,7 @@ Kao što je objašnjeno u [**ovom predavanju**](https://www.youtube.com/watch?v= - Kreirati nalog kod treće strane sa sličnim email-om kao žrtva koristeći neki unicode karakter (`vićtim@company.com`). - Treća strana ne bi trebala da verifikuje email -- Ako identitetski provajder verifikuje email, možda možete napasti deo domena kao: `victim@ćompany.com` i registrovati taj domen i nadati se da identitetski provajder generiše ascii verziju domena dok platforma žrtve normalizuje naziv domena. +- Ako identitetski provajder verifikuje email, možda možete napasti deo domena kao što je: `victim@ćompany.com` i registrovati taj domen i nadati se da identitetski provajder generiše ascii verziju domena dok platforma žrtve normalizuje naziv domena. - Prijavite se putem ovog identitetskog provajdera na platformu žrtve koja bi trebala normalizovati unicode karakter i omogućiti vam pristup nalogu žrtve. Za više detalja, pogledajte dokument o normalizaciji Unicode-a: @@ -31,7 +31,7 @@ Ako ciljni sistem dozvoljava **ponovno korišćenje reset linka**, treba uložit ## **Pre preuzimanja naloga** -1. Email žrtve treba koristiti za registraciju na platformi, i treba postaviti lozinku (pokušaj potvrde treba izvršiti, iako nedostatak pristupa email-ovima žrtve može učiniti ovo nemogućim). +1. Email žrtve treba koristiti za registraciju na platformi, a lozinka treba biti postavljena (pokušaj potvrde treba izvršiti, iako nedostatak pristupa email-ovima žrtve može učiniti ovo nemogućim). 2. Treba čekati dok žrtva ne registruje koristeći OAuth i potvrdi nalog. 3. Nadamo se da će redovna registracija biti potvrđena, omogućavajući pristup nalogu žrtve. @@ -61,7 +61,7 @@ xss-cross-site-scripting/ ## **Ista domena + Kolačići** -Ako pronađete ograničen XSS ili preuzimanje poddomena, mogli biste se igrati sa kolačićima (fiksirajući ih na primer) kako biste pokušali da kompromitujete nalog žrtve: +Ako pronađete ograničen XSS ili preuzimanje poddomena, mogli biste se igrati sa kolačićima (fiksirajući ih, na primer) kako biste pokušali da kompromitujete nalog žrtve: {{#ref}} hacking-with-cookies/ @@ -75,7 +75,7 @@ reset-password.md ## **Manipulacija odgovorom** -Ako se odgovor na autentifikaciju može **smanjiti na jednostavnu boolean vrednost, samo pokušajte da promenite false u true** i vidite da li dobijate bilo kakav pristup. +Ako se odgovor na autentifikaciju može **smanjiti na jednostavnu boolean vrednost, pokušajte da promenite false u true** i vidite da li dobijate bilo kakav pristup. ## OAuth za preuzimanje naloga @@ -86,16 +86,16 @@ oauth-to-account-takeover.md ## Injekcija Host zaglavlja 1. Host zaglavlje se menja nakon iniciranja zahteva za resetovanje lozinke. -2. `X-Forwarded-For` proxy zaglavlje se menja na `attacker.com`. -3. Host, Referrer i Origin zaglavlja se istovremeno menjaju na `attacker.com`. +2. `X-Forwarded-For` proxy zaglavlje se menja u `attacker.com`. +3. Host, Referrer i Origin zaglavlja se istovremeno menjaju u `attacker.com`. 4. Nakon iniciranja resetovanja lozinke i zatim odabira ponovnog slanja maila, koriste se sve tri prethodno navedene metode. ## Manipulacija odgovorom -1. **Manipulacija kodom**: Status kod se menja na `200 OK`. +1. **Manipulacija kodom**: Status kod se menja u `200 OK`. 2. **Manipulacija kodom i telom**: -- Status kod se menja na `200 OK`. -- Telo odgovora se menja na `{"success":true}` ili prazan objekat `{}`. +- Status kod se menja u `200 OK`. +- Telo odgovora se menja u `{"success":true}` ili prazan objekat `{}`. Ove tehnike manipulacije su efikasne u scenarijima gde se JSON koristi za prenos i prijem podataka. @@ -104,7 +104,7 @@ Ove tehnike manipulacije su efikasne u scenarijima gde se JSON koristi za prenos Iz [ovog izveštaja](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea): - Napadač traži da promeni svoj email na novi -- Napadač dobija link za potvrdu promene email-a +- Napadač prima link za potvrdu promene email-a - Napadač šalje žrtvi link da ga klikne - Email žrtve se menja na onaj koji je naznačio napadač - Napadač može povratiti lozinku i preuzeti nalog 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;