Translated ['src/pentesting-web/account-takeover.md'] to tr

This commit is contained in:
Translator 2025-04-20 14:57:38 +00:00
parent ff23b8fd10
commit f0f222e730
2 changed files with 70 additions and 20 deletions

View File

@ -16,8 +16,8 @@ Bir hesabın e-posta adresinin değiştirilmesi denenmeli ve onay süreci **ince
- Kurbanın e-posta adresine benzer bir e-posta ile üçüncü taraf kimlik sağlayıcısında bir hesap oluşturun, bazı unicode karakterleri kullanarak (`vićtim@company.com`).
- Üçüncü taraf sağlayıcı e-postayı doğrulamamalıdır.
- Eğer kimlik sağlayıcı e-postayı doğruluyorsa, belki de `victim@ćompany.com` gibi alan kısmına saldırabilir ve o alanı kaydedip kimlik sağlayıcının alanın ascii versiyonunu oluşturmasını umabilirsiniz, kurban platformu alan adını normalize ederken.
- Bu kimlik sağlayıcı aracılığıyla kurban platformuna giriş yapın, bu platform unicode karakterini normalize etmeli ve kurban hesabına erişmenize izin vermelidir.
- Eğer kimlik sağlayıcı e-postayı doğruluyorsa, belki de alan kısmını saldırıya uğratabilirsiniz: `victim@ćompany.com` ve o alanı kaydedip kimlik sağlayıcının alanın ascii versiyonunu oluşturmasını umabilirsiniz, kurban platformu alan adını normalize ederken.
- Bu kimlik sağlayıcı aracılığıyla kurban platformuna giriş yapın, kimlik sağlayıcı unicode karakterini normalize etmeli ve kurban hesabına erişmenize izin vermelidir.
Daha fazla ayrıntı için Unicode Normalizasyonu belgesine bakın:
@ -45,7 +45,7 @@ cors-bypass.md
## **CSRF ile Hesap Ele Geçirme**
Sayfa CSRF'ye karşı savunmasızsa, **kullanıcının şifresini**, e-posta adresini veya kimlik doğrulamasını değiştirmesini sağlayabilir ve böylece erişim sağlayabilirsiniz:
Sayfa CSRF'ye karşı savunmasızsa, **kullanıcının şifresini**, e-posta adresini veya kimlik doğrulamasını değiştirmesini sağlayabilir ve ardından buna erişebilirsiniz:
{{#ref}}
csrf-cross-site-request-forgery.md
@ -67,7 +67,7 @@ Sınırlı bir XSS veya bir alt alan ele geçirme bulursanız, çerezlerle oynam
hacking-with-cookies/
{{#endref}}
## **Şifre Sıfırlama Mekanizmasına Saldırma**
## **Şifre Sıfırlama Mekanizmasına Saldırı**
{{#ref}}
reset-password.md
@ -75,7 +75,7 @@ reset-password.md
## **Yanıt Manipülasyonu**
Eğer kimlik doğrulama yanıtı **basit bir boolean'a indirgenebiliyorsa, false'u true olarak değiştirmeyi deneyin** ve erişim elde edip edemediğinizi görün.
Eğer kimlik doğrulama yanıtı **basit bir boolean'a indirgenebiliyorsa, false'u true olarak değiştirmeyi deneyin** ve herhangi bir erişim elde edip edemediğinizi görün.
## OAuth ile Hesap Ele Geçirme
@ -88,7 +88,7 @@ oauth-to-account-takeover.md
1. Şifre sıfırlama isteği başlatıldıktan sonra Host başlığı değiştirilir.
2. `X-Forwarded-For` proxy başlığı `attacker.com` olarak değiştirilir.
3. Host, Referrer ve Origin başlıkları aynı anda `attacker.com` olarak değiştirilir.
4. Şifre sıfırlama başlatıldıktan sonra, e-postayı yeniden göndermeyi seçerek, yukarıda belirtilen üç yöntem de kullanılır.
4. Şifre sıfırlama başlatıldıktan sonra, e-postayı yeniden göndermeyi seçerken, yukarıda belirtilen üç yöntem de kullanılır.
## Yanıt Manipülasyonu
@ -99,7 +99,7 @@ oauth-to-account-takeover.md
Bu manipülasyon teknikleri, JSON'un veri iletimi ve alımı için kullanıldığı senaryolarda etkilidir.
## Mevcut oturumun e-posta adresini değiştirme
## Mevcut Oturumun E-posta Adresini Değiştirme
[bu rapordan](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea):
@ -113,13 +113,13 @@ Bu, [**bu raporda**](https://dynnyd20.medium.com/one-click-account-take-over-e50
### Hesap Ele Geçirme için E-posta Doğrulamasını Atlatma
- Saldırgan attacker@test.com ile giriş yapar ve kaydolduğunda e-postayı doğrular.
- Saldırgan doğrulanan e-postayı victim@test.com olarak değiştirir (e-posta değişikliği için ikinci bir doğrulama yok).
- Saldırgan doğrulanmış e-postayı victim@test.com olarak değiştirir (e-posta değişikliği için ikinci bir doğrulama yoktur).
- Artık web sitesi victim@test.com ile giriş yapmaya izin verir ve kurban kullanıcının e-posta doğrulamasını atlatmış oluruz.
### Eski Çerezler
[**bu yazıda**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9) açıklandığı gibi, bir hesaba giriş yapmak, çerezleri kimlik doğrulaması yapılmış bir kullanıcı olarak kaydetmek, çıkış yapmak ve sonra tekrar giriş yapmak mümkündü.\
Yeni girişle, farklı çerezler oluşturulsa da eski çerezler tekrar çalışmaya başladı.
[**bu yazıda**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9) açıklandığı gibi, bir hesaba giriş yapmak, çerezleri kimlik doğrulaması yapılmış bir kullanıcı olarak kaydetmek, çıkış yapmak ve ardından tekrar giriş yapmak mümkündü.\
Yeni girişle, farklı çerezler oluşturulmuş olsa da, eski çerezler tekrar çalışmaya başladı.
## Referanslar

View File

@ -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;