mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/account-takeover.md'] to fr
This commit is contained in:
parent
bc3c61ab1a
commit
c074f9ac38
@ -1,12 +1,12 @@
|
|||||||
# Prise de contrôle de compte
|
# Prise de Contrôle de Compte
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## **Problème d'autorisation**
|
## **Problème d'Autorisation**
|
||||||
|
|
||||||
L'email d'un compte doit être tenté d'être changé, et le processus de confirmation **doit être examiné**. S'il est jugé **faible**, l'email doit être changé pour celui de la victime visée et ensuite confirmé.
|
L'email d'un compte doit être tenté d'être changé, et le processus de confirmation **doit être examiné**. S'il est jugé **faible**, l'email doit être changé pour celui de la victime visée et ensuite confirmé.
|
||||||
|
|
||||||
## **Problème de normalisation Unicode**
|
## **Problème de Normalisation Unicode**
|
||||||
|
|
||||||
1. Le compte de la victime visée `victim@gmail.com`
|
1. Le compte de la victime visée `victim@gmail.com`
|
||||||
2. Un compte doit être créé en utilisant Unicode\
|
2. Un compte doit être créé en utilisant Unicode\
|
||||||
@ -15,27 +15,27 @@ par exemple : `vićtim@gmail.com`
|
|||||||
Comme expliqué dans [**cette présentation**](https://www.youtube.com/watch?v=CiIyaZ3x49c), l'attaque précédente pourrait également être réalisée en abusant des fournisseurs d'identité tiers :
|
Comme expliqué dans [**cette présentation**](https://www.youtube.com/watch?v=CiIyaZ3x49c), l'attaque précédente pourrait également être réalisée en abusant des fournisseurs d'identité tiers :
|
||||||
|
|
||||||
- Créer un compte chez le fournisseur d'identité tiers avec un email similaire à celui de la victime en utilisant un caractère unicode (`vićtim@company.com`).
|
- Créer un compte chez le fournisseur d'identité tiers avec un email similaire à celui de la victime en utilisant un caractère unicode (`vićtim@company.com`).
|
||||||
- Le fournisseur tiers ne doit pas vérifier l'email.
|
- Le fournisseur tiers ne doit pas vérifier l'email
|
||||||
- Si le fournisseur d'identité vérifie l'email, vous pouvez peut-être attaquer la partie domaine comme : `victim@ćompany.com` et enregistrer ce domaine en espérant que le fournisseur d'identité génère la version ascii du domaine pendant que la plateforme de la victime normalise le nom de domaine.
|
- Si le fournisseur d'identité vérifie l'email, peut-être pouvez-vous attaquer la partie domaine comme : `victim@ćompany.com` et enregistrer ce domaine en espérant que le fournisseur d'identité génère la version ascii du domaine pendant que la plateforme de la victime normalise le nom de domaine.
|
||||||
- Se connecter via ce fournisseur d'identité sur la plateforme de la victime qui devrait normaliser le caractère unicode et vous permettre d'accéder au compte de la victime.
|
- Se connecter via ce fournisseur d'identité sur la plateforme de la victime qui devrait normaliser le caractère unicode et vous permettre d'accéder au compte de la victime.
|
||||||
|
|
||||||
Pour plus de détails, référez-vous au document sur la normalisation Unicode :
|
Pour plus de détails, référez-vous au document sur la Normalisation Unicode :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
unicode-injection/unicode-normalization.md
|
unicode-injection/unicode-normalization.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **Réutilisation du jeton de réinitialisation**
|
## **Réutilisation du Token de Réinitialisation**
|
||||||
|
|
||||||
Si le système cible permet que le **lien de réinitialisation soit réutilisé**, des efforts doivent être faits pour **trouver plus de liens de réinitialisation** en utilisant des outils tels que `gau`, `wayback`, ou `scan.io`.
|
Si le système cible permet que le **lien de réinitialisation soit réutilisé**, des efforts doivent être faits pour **trouver plus de liens de réinitialisation** en utilisant des outils tels que `gau`, `wayback`, ou `scan.io`.
|
||||||
|
|
||||||
## **Pré prise de contrôle de compte**
|
## **Pré Prise de Contrôle de Compte**
|
||||||
|
|
||||||
1. L'email de la victime doit être utilisé pour s'inscrire sur la plateforme, et un mot de passe doit être défini (une tentative de confirmation doit être faite, bien que l'absence d'accès aux emails de la victime puisse rendre cela impossible).
|
1. L'email de la victime doit être utilisé pour s'inscrire sur la plateforme, et un mot de passe doit être défini (une tentative de confirmation doit être faite, bien que l'absence d'accès aux emails de la victime puisse rendre cela impossible).
|
||||||
2. Il faut attendre que la victime s'inscrive en utilisant OAuth et confirme le compte.
|
2. Il faut attendre que la victime s'inscrive en utilisant OAuth et confirme le compte.
|
||||||
3. On espère que l'inscription régulière sera confirmée, permettant l'accès au compte de la victime.
|
3. On espère que l'inscription régulière sera confirmée, permettant l'accès au compte de la victime.
|
||||||
|
|
||||||
## **Mauvaise configuration CORS pour prise de contrôle de compte**
|
## **Mauvaise Configuration CORS pour Prise de Contrôle de Compte**
|
||||||
|
|
||||||
Si la page contient des **mauvaises configurations CORS**, vous pourriez être en mesure de **voler des informations sensibles** de l'utilisateur pour **prendre le contrôle de son compte** ou le faire changer ses informations d'authentification dans le même but :
|
Si la page contient des **mauvaises configurations CORS**, vous pourriez être en mesure de **voler des informations sensibles** de l'utilisateur pour **prendre le contrôle de son compte** ou le faire changer ses informations d'authentification dans le même but :
|
||||||
|
|
||||||
@ -43,15 +43,15 @@ Si la page contient des **mauvaises configurations CORS**, vous pourriez être e
|
|||||||
cors-bypass.md
|
cors-bypass.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **CSRF pour prise de contrôle de compte**
|
## **CSRF pour Prise de Contrôle de Compte**
|
||||||
|
|
||||||
Si la page est vulnérable au CSRF, vous pourriez être en mesure de faire **modifier le mot de passe**, l'email ou l'authentification de l'utilisateur afin que vous puissiez ensuite y accéder :
|
Si la page est vulnérable au CSRF, vous pourriez être en mesure de faire en sorte que **l'utilisateur modifie son mot de passe**, son email ou son authentification afin que vous puissiez ensuite y accéder :
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
csrf-cross-site-request-forgery.md
|
csrf-cross-site-request-forgery.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **XSS pour prise de contrôle de compte**
|
## **XSS pour Prise de Contrôle de Compte**
|
||||||
|
|
||||||
Si vous trouvez une XSS dans l'application, vous pourriez être en mesure de voler des cookies, du stockage local, ou des informations de la page web qui pourraient vous permettre de prendre le contrôle du compte :
|
Si vous trouvez une XSS dans l'application, vous pourriez être en mesure de voler des cookies, du stockage local, ou des informations de la page web qui pourraient vous permettre de prendre le contrôle du compte :
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ Si vous trouvez une XSS dans l'application, vous pourriez être en mesure de vol
|
|||||||
xss-cross-site-scripting/
|
xss-cross-site-scripting/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **Même origine + Cookies**
|
## **Même Origine + Cookies**
|
||||||
|
|
||||||
Si vous trouvez une XSS limitée ou une prise de contrôle de sous-domaine, vous pourriez jouer avec les cookies (en les fixant par exemple) pour essayer de compromettre le compte de la victime :
|
Si vous trouvez une XSS limitée ou une prise de contrôle de sous-domaine, vous pourriez jouer avec les cookies (en les fixant par exemple) pour essayer de compromettre le compte de la victime :
|
||||||
|
|
||||||
@ -67,54 +67,54 @@ Si vous trouvez une XSS limitée ou une prise de contrôle de sous-domaine, vous
|
|||||||
hacking-with-cookies/
|
hacking-with-cookies/
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **Attaque du mécanisme de réinitialisation de mot de passe**
|
## **Attaque du Mécanisme de Réinitialisation de Mot de Passe**
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
reset-password.md
|
reset-password.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## **Manipulation de réponse**
|
## **Manipulation de Réponse**
|
||||||
|
|
||||||
Si la réponse d'authentification peut être **réduite à un simple booléen, essayez simplement de changer false en true** et voyez si vous obtenez un accès.
|
Si la réponse d'authentification peut être **réduite à un simple booléen, essayez simplement de changer false en true** et voyez si vous obtenez un accès.
|
||||||
|
|
||||||
## OAuth pour prise de contrôle de compte
|
## OAuth pour Prise de Contrôle de Compte
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
oauth-to-account-takeover.md
|
oauth-to-account-takeover.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
## Injection d'en-tête Host
|
## Injection d'En-tête Host
|
||||||
|
|
||||||
1. L'en-tête Host est modifié suite à l'initiation d'une demande de réinitialisation de mot de passe.
|
1. L'en-tête Host est modifié suite à l'initiation d'une demande de réinitialisation de mot de passe.
|
||||||
2. L'en-tête proxy `X-Forwarded-For` est altéré à `attacker.com`.
|
2. L'en-tête proxy `X-Forwarded-For` est modifié en `attacker.com`.
|
||||||
3. Les en-têtes Host, Referrer et Origin sont simultanément changés en `attacker.com`.
|
3. Les en-têtes Host, Referrer et Origin sont simultanément changés en `attacker.com`.
|
||||||
4. Après avoir initié une réinitialisation de mot de passe et choisi de renvoyer le mail, toutes les trois méthodes mentionnées ci-dessus sont employées.
|
4. Après avoir initié une réinitialisation de mot de passe et choisi de renvoyer le mail, toutes les trois méthodes mentionnées ci-dessus sont employées.
|
||||||
|
|
||||||
## Manipulation de réponse
|
## Manipulation de Réponse
|
||||||
|
|
||||||
1. **Manipulation de code** : Le code d'état est modifié en `200 OK`.
|
1. **Manipulation de Code** : Le code d'état est modifié en `200 OK`.
|
||||||
2. **Manipulation de code et de corps** :
|
2. **Manipulation de Code et de Corps** :
|
||||||
- Le code d'état est changé en `200 OK`.
|
- Le code d'état est changé en `200 OK`.
|
||||||
- Le corps de la réponse est modifié en `{"success":true}` ou un objet vide `{}`.
|
- Le corps de la réponse est modifié en `{"success":true}` ou un objet vide `{}`.
|
||||||
|
|
||||||
Ces techniques de manipulation sont efficaces dans les scénarios où JSON est utilisé pour la transmission et la réception de données.
|
Ces techniques de manipulation sont efficaces dans des scénarios où JSON est utilisé pour la transmission et la réception de données.
|
||||||
|
|
||||||
## Changer l'email de la session actuelle
|
## Changer l'email de la session actuelle
|
||||||
|
|
||||||
D'après [ce rapport](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea) :
|
D'après [ce rapport](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea) :
|
||||||
|
|
||||||
- L'attaquant demande à changer son email avec un nouveau.
|
- L'attaquant demande à changer son email avec un nouveau
|
||||||
- L'attaquant reçoit un lien pour confirmer le changement de l'email.
|
- L'attaquant reçoit un lien pour confirmer le changement de l'email
|
||||||
- L'attaquant envoie le lien à la victime pour qu'elle clique dessus.
|
- L'attaquant envoie le lien à la victime pour qu'elle clique dessus
|
||||||
- L'email de la victime est changé pour celui indiqué par l'attaquant.
|
- L'email de la victime est changé pour celui indiqué par l'attaquant
|
||||||
- L'attaquant peut récupérer le mot de passe et prendre le contrôle du compte.
|
- L'attaquant peut récupérer le mot de passe et prendre le contrôle du compte
|
||||||
|
|
||||||
Cela s'est également produit dans [**ce rapport**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea).
|
Cela s'est également produit dans [**ce rapport**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea).
|
||||||
|
|
||||||
### Contourner la vérification de l'email pour la prise de contrôle de compte
|
### Contourner la vérification d'email pour Prise de Contrôle de Compte
|
||||||
- L'attaquant se connecte avec attacker@test.com et vérifie l'email lors de l'inscription.
|
- L'attaquant se connecte avec attacker@test.com et vérifie l'email lors de l'inscription.
|
||||||
- L'attaquant change l'email vérifié en victim@test.com (pas de vérification secondaire lors du changement d'email).
|
- L'attaquant change l'email vérifié en victim@test.com (pas de vérification secondaire lors du changement d'email)
|
||||||
- Maintenant, le site permet à victim@test.com de se connecter et nous avons contourné la vérification de l'email de l'utilisateur victime.
|
- Maintenant, le site permet à victim@test.com de se connecter et nous avons contourné la vérification d'email de l'utilisateur victime.
|
||||||
|
|
||||||
### Anciens Cookies
|
### Anciens Cookies
|
||||||
|
|
||||||
|
@ -471,16 +471,66 @@ window.search = window.search || {};
|
|||||||
showResults(true);
|
showResults(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
var branch = lang === "en" ? "master" : lang
|
(async function loadSearchIndex(lang = window.lang || 'en') {
|
||||||
fetch(`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.json`)
|
/* ───────── paths ───────── */
|
||||||
.then(response => response.json())
|
const branch = lang === 'en' ? 'master' : lang;
|
||||||
.then(json => init(json))
|
const baseRemote = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/${branch}`;
|
||||||
.catch(error => { // Try to load searchindex.js if fetch failed
|
const remoteJson = `${baseRemote}/searchindex.json`;
|
||||||
var script = document.createElement('script');
|
const remoteJs = `${baseRemote}/searchindex.js`;
|
||||||
script.src = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`;
|
const localJson = './searchindex.json';
|
||||||
script.onload = () => init(window.search);
|
const localJs = './searchindex.js';
|
||||||
document.head.appendChild(script);
|
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
|
// Exported functions
|
||||||
search.hasFocus = hasFocus;
|
search.hasFocus = hasFocus;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user