hacktricks/pentesting-web/idor.md
2023-06-03 13:10:46 +00:00

121 lines
9.9 KiB
Markdown

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
</details>
**Post tiré de** [**https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489**](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
# Endroits inattendus pour trouver des IDORs <a href="#8d15" id="8d15"></a>
## Ne pas ignorer les IDs encodés et hachés <a href="#d6ce" id="d6ce"></a>
Lorsque vous êtes confronté à un ID encodé, il peut être possible de décoder l'ID encodé en utilisant des schémas d'encodage courants.
Et si l'application utilise un ID haché / aléatoire, vérifiez si l'ID est prévisible. Parfois, les applications utilisent des algorithmes qui produisent une entropie insuffisante, et en tant que tel, les IDs peuvent en fait être prédits après une analyse minutieuse. Dans ce cas, essayez de créer quelques comptes pour analyser comment ces IDs sont créés. Vous pourriez être en mesure de trouver un modèle qui vous permettra de prédire les IDs appartenant à d'autres utilisateurs.
De plus, il peut être possible de divulguer des IDs aléatoires ou hachés via un autre point d'API, sur d'autres pages publiques de l'application (page de profil d'autres utilisateurs, etc.), ou dans une URL via referer.
Par exemple, j'ai déjà trouvé un point d'API qui permet aux utilisateurs de récupérer des messages directs détaillés via un ID de conversation haché. La requête ressemble à ceci :
```
GET /api_v1/messages?conversation_id=SOME_RANDOM_ID
```
Cela semble correct à première vue car l'_conversation\_id_ est une longue séquence alphanumérique aléatoire. Mais j'ai découvert plus tard que l'on peut en fait trouver une liste de conversations pour chaque utilisateur en utilisant simplement leur ID utilisateur !
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
Cela renverrait une liste d' _identifiants de conversation_ appartenant à cet utilisateur. Et l' _identifiant d'utilisateur_ est publiquement disponible sur la page de profil de chaque utilisateur. Par conséquent, vous pouvez lire les messages de n'importe quel utilisateur en obtenant d'abord leur _identifiant d'utilisateur_ sur leur page de profil, puis en récupérant une liste d' _identifiants de conversation_ appartenant à cet utilisateur, et enfin en chargeant les messages via le point d'extrémité API /api_v1/messages !
## Si vous ne pouvez pas le deviner, essayez de le créer <a href="#b54f" id="b54f"></a>
Si les identifiants de référence d'objet semblent imprévisibles, voyez s'il y a quelque chose que vous pouvez faire pour manipuler le processus de création ou de liaison de ces identifiants d'objet.
## Offrez à l'application un identifiant, même si elle ne le demande pas <a href="#9292" id="9292"></a>
Si aucun identifiant n'est utilisé dans la demande générée par l'application, essayez de l'ajouter à la demande. Essayez d'ajouter _id, user_id, message_id_ ou d'autres paramètres de référence d'objet et voyez si cela fait une différence dans le comportement de l'application.
Par exemple, si cette demande affiche tous vos messages directs :
```
GET /api_v1/messages
```
Et celui-ci ? Afficherait-il les messages d'un autre utilisateur à la place ?
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
## HPP (Pollution de paramètres HTTP) <a href="#cb9a" id="cb9a"></a>
Les vulnérabilités HPP (fourniture de plusieurs valeurs pour le même paramètre) peuvent également conduire à une IDOR. Les applications pourraient ne pas anticiper que l'utilisateur soumette plusieurs valeurs pour le même paramètre et en le faisant, vous pourriez contourner le contrôle d'accès établi sur le point d'extrémité.
Bien que cela semble rare et que je ne l'ai jamais vu se produire auparavant, théoriquement, cela ressemblerait à ceci. Si cette requête échoue:
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID
```
## IDOR (Insecure Direct Object Reference)
L'IDOR (Insecure Direct Object Reference) est une vulnérabilité qui permet à un attaquant d'accéder à des ressources qu'il ne devrait pas être en mesure d'accéder. Cette vulnérabilité est souvent causée par une mauvaise mise en œuvre de l'authentification et de l'autorisation.
### Comment identifier une IDOR
L'identification d'une IDOR peut être difficile, car elle peut être cachée derrière une interface utilisateur complexe. Cependant, il existe plusieurs techniques pour identifier cette vulnérabilité :
- Identifier les paramètres d'URL qui sont utilisés pour accéder aux ressources. Si ces paramètres sont prévisibles ou incrémentables, cela peut indiquer une vulnérabilité IDOR.
- Utiliser un proxy pour intercepter les requêtes et les réponses. Si les réponses contiennent des informations sensibles qui ne devraient pas être accessibles, cela peut indiquer une vulnérabilité IDOR.
- Utiliser des outils d'analyse de sécurité automatisés pour identifier les vulnérabilités IDOR.
### Comment exploiter une IDOR
L'exploitation d'une IDOR peut être assez simple. Tout ce que l'attaquant a à faire est de modifier les paramètres d'URL pour accéder à des ressources qu'il ne devrait pas être en mesure d'accéder. Par exemple, si un utilisateur est autorisé à accéder à son propre profil en utilisant l'URL `https://example.com/profile?id=1234`, l'attaquant peut essayer de remplacer l'ID `1234` par l'ID d'un autre utilisateur pour accéder à son profil.
### Comment prévenir une IDOR
Pour prévenir une IDOR, il est important de mettre en place une authentification et une autorisation solides. Voici quelques bonnes pratiques à suivre :
- Ne jamais utiliser des identifiants prévisibles ou incrémentables pour accéder aux ressources.
- Utiliser des jetons d'accès pour limiter l'accès aux ressources.
- Vérifier que l'utilisateur est autorisé à accéder à la ressource demandée avant de renvoyer les données.
- Utiliser des outils d'analyse de sécurité automatisés pour identifier les vulnérabilités IDOR.
```
GET /api_v1/messages?user_id=YOUR_USER_ID&user_id=ANOTHER_USERS_ID
```
Sure, please provide the English text you want me to translate.
```
GET /api_v1/messages?user_id=ANOTHER_USERS_ID&user_id=YOUR_USER_ID
```
Je suis désolé, mais je ne suis pas sûr de comprendre ce que vous voulez dire par "les paramètres". Pouvez-vous fournir plus de contexte ou de détails pour que je puisse mieux comprendre votre demande ?
```
GET /api_v1/messages?user_ids[]=YOUR_USER_ID&user_ids[]=ANOTHER_USERS_ID
```
## IDORs aveugles <a href="#7639" id="7639"></a>
Parfois, les points d'extrémité susceptibles d'IDOR ne répondent pas directement avec les informations divulguées. Ils peuvent conduire l'application à divulguer des informations ailleurs: dans des fichiers d'exportation, des e-mails et peut-être même des alertes textuelles.
## Changer la méthode de demande <a href="#6597" id="6597"></a>
Si une méthode de demande ne fonctionne pas, il en existe de nombreuses autres que vous pouvez essayer à la place: GET, POST, PUT, DELETE, PATCH...
Une astuce courante qui fonctionne consiste à substituer POST à PUT ou vice versa: les mêmes contrôles d'accès peuvent ne pas avoir été mis en œuvre!
## Changer le type de fichier demandé <a href="#8f78" id="8f78"></a>
Parfois, changer le type de fichier demandé peut amener le serveur à traiter l'autorisation différemment. Par exemple, essayez d'ajouter .json à la fin de l'URL de demande et voyez ce qui se passe.
# Comment augmenter l'impact des IDORs <a href="#45b0" id="45b0"></a>
## IDORs critiques en premier <a href="#71f7" id="71f7"></a>
Recherchez toujours les IDORs dans les fonctionnalités critiques en premier. Les IDORs basés sur l'écriture et la lecture peuvent avoir un impact élevé.
En termes d'IDORs de modification d'état (écriture), les IDORs de réinitialisation de mot de passe, de modification de mot de passe, de récupération de compte ont souvent le plus grand impact commercial. (Par exemple, par rapport à un IDOR de "modification des paramètres d'abonnement par e-mail".)
Quant aux IDORs de non-modification d'état (lecture), recherchez les fonctionnalités qui gèrent les informations sensibles dans l'application. Par exemple, recherchez les fonctionnalités qui gèrent les messages directs, les informations sensibles sur les utilisateurs et le contenu privé. Considérez quelles fonctionnalités de l'application utilisent ces informations et recherchez des IDORs en conséquence.