hacktricks/network-services-pentesting/pentesting-web/web-api-pentesting.md

246 lines
16 KiB
Markdown

# Pentestage des API Web
<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>
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.io/) pour créer et **automatiser des flux de travail** alimentés par les outils communautaires les plus avancés au monde.\
Obtenez un accès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Informations de base
Principales :
* **Services Web (SOAP/XML)**
* La documentation utilise le format **WSDL** et est généralement enregistrée dans le chemin `?wsdl` comme `https://api.example.com/api/?wsdl`
* Un exemple de cette documentation peut être trouvé sur [http://www.dneonline.com/calculator.asmx](http://www.dneonline.com/calculator.asmx) (document WSDL sur [http://www.dneonline.com/calculator.asmx?wsdl](http://www.dneonline.com/calculator.asmx?wsdl)) et vous pouvez voir un exemple de requête appelant la méthode `Add` sur [http://www.dneonline.com/calculator.asmx?op=Add](http://www.dneonline.com/calculator.asmx?op=Add)
* Pour analyser ces fichiers et créer des requêtes d'exemple, vous pouvez utiliser l'outil **SOAPUI** ou l'extension **WSDLer** de Burp Suite.
* **API REST (JSON)**
* La documentation standard est le fichier WADL. Trouvez un exemple ici : [https://www.w3.org/Submission/wadl/](https://www.w3.org/Submission/wadl/). Cependant, il existe d'autres moteurs de représentation d'API plus conviviaux pour les développeurs comme [https://swagger.io/tools/swagger-ui/](https://swagger.io/tools/swagger-ui/) (consultez la démo sur la page)
* Pour analyser ces fichiers et créer des requêtes d'exemple, vous pouvez utiliser l'outil **Postman**
* [**GraphQL**](graphql.md)
## Laboratoires
* [**VAmPI**](https://github.com/erev0s/VAmPI)**:** VAmPI est une API vulnérable créée avec Flask et elle inclut des vulnérabilités issues du top 10 des vulnérabilités OWASP pour les API.
## Astuces
### SOAP/XML
Ce type d'API peut être [**vulnérable aux XXE**](../../pentesting-web/xxe-xee-xml-external-entity.md), mais généralement les **déclarations DTD** sont **interdites** dans les entrées de l'utilisateur.
Vous pouvez également essayer d'utiliser des balises CDATA pour insérer des charges utiles (tant que le XML est valide)
![](<../../.gitbook/assets/image (534).png>)
### Vérifier l'accès
Généralement, certains points d'extrémité de l'API nécessitent plus de privilèges que d'autres. Essayez toujours d'accéder aux points d'extrémité les plus privilégiés à partir de comptes moins privilégiés (non autorisés) pour voir si c'est possible.
### CORS
Vérifiez toujours la configuration [**CORS**](../../pentesting-web/cors-bypass.md) de l'API, car si elle permet de terminer la requête avec les informations d'identification du domaine de l'attaquant, beaucoup de dommages peuvent être causés via [**CSRF**](../../pentesting-web/csrf-cross-site-request-forgery.md) à partir de victimes authentifiées.
### Modèles
Recherchez des modèles d'API à l'intérieur de l'API et essayez de les utiliser pour en découvrir davantage.\
Si vous trouvez _/api/albums/**\<album\_id>**/photos/**\<photo\_id>**_\*\* \*\* vous pouvez également essayer des choses comme _/api/**posts**/\<post\_id>/**comment**/_. Utilisez un fuzzer pour découvrir ces nouveaux points d'extrémité.
### Ajouter des paramètres
Quelque chose comme l'exemple suivant pourrait vous donner accès à l'album photo d'un autre utilisateur :\
_/api/MyPictureList → /api/MyPictureList?**user\_id=\<other\_user\_id>**_
### Remplacer les paramètres
Vous pouvez essayer de **fuzzer les paramètres** ou d'utiliser des paramètres **que vous avez vus** dans d'autres points d'extrémité pour essayer d'accéder à d'autres informations.
Par exemple, si vous voyez quelque chose comme : _/api/albums?**album\_id=\<album id>**_
Vous pouvez **remplacer** le paramètre **`album_id`** par quelque chose de complètement différent et potentiellement obtenir d'autres données : _/api/albums?**account\_id=\<account id>**_
### Pollution de paramètres
/api/account?**id=\<votre identifiant de compte>** → /api/account?**id=\<votre identifiant de compte>\&id=\<identifiant de compte de l'administrateur>**
### Paramètre générique
Essayez d'utiliser les symboles suivants comme paramètres génériques : **\***, **%**, **\_**, **.**
* /api/users/\*
* /api/users/%
* /api/users/\_
* /api/users/.
### Changement de méthode de requête HTTP
Vous pouvez essayer d'utiliser les méthodes HTTP : **GET, POST, PUT, DELETE, PATCH, INVENTED** pour vérifier si le serveur web vous donne des informations inattendues avec elles.
### Type de contenu de la requête
Essayez de jouer avec les types de contenu suivants (en modifiant en conséquence le corps de la requête) pour que le serveur web se comporte de manière inattendue :
* **x-www-form-urlencoded** --> user=test
* **application/xml** --> \<user>test\</user>
* **application/json** --> {"user": "test"}
### Types de paramètres
Si les données **JSON** fonctionnent, essayez d'envoyer des types de données inattendus comme :
* {"username": "John"}
* {"username": true}
* {"username": null}
* {"username": 1}
* {"username": \[true]}
* {"username": \["John", true]}
* {"username": {"$neq": "lalala"\}}
* toute autre combinaison que vous pouvez imaginer
Si vous pouvez envoyer des données **XML**, vérifiez les [injections XXE](../../pentesting-web/xxe-xee-xml-external-entity.md).
Si vous envoyez des données POST régulières, essayez d'envoyer des tableaux et des dictionnaires :
* username\[]=John
* username\[$neq]=lalala
### Jouez avec les routes
`/files/..%2f..%2f + ID de la victime + %2f + nom de fichier de la victime`
### Vérifiez les versions possibles
Les anciennes versions peuvent encore être utilisées et être plus vulnérables que les derniers points d'accès
* `/api/v1/login`
* `/api/v2/login`\\
* `/api/CharityEventFeb2020/user/pp/<ID>`
* `/api/CharityEventFeb2021/user/pp/<ID>`
### Vérifiez les versions possibles (approche automatisée)
Extension AutoRepeater Burp : Ajoutez une règle de remplacement
* `Type : Chaîne de requête`
* `Correspondance : v2 (version supérieure)`
* `Remplacer : v1 (version inférieure)`
![](../.gitbook/assets/image%20\(9\)%20\(1\)%20\(2\).png)
\
Utilisez [**Trickest**](https://trickest.io/) pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
Accédez dès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## 🛡️ Feuille de triche de l'Empire de la sécurité des API
\
Auteur de la feuille de triche : [Momen Eldawakhly (Cyber Guy)](https://www.linkedin.com/in/momen-eldawakhly-3b6250204)\
\
Dans ce référentiel, vous trouverez : des cartes mentales, des astuces, des ressources et tout ce qui concerne la sécurité des API et les tests de pénétration des API. Nos cartes mentales et nos ressources sont basées sur le TOP 10 API de l'OWASP, notre expérience en matière de tests de pénétration et d'autres ressources pour fournir la ressource la plus avancée et précise en matière de sécurité des API et de tests de pénétration sur le WEB !!
### 🚪 Première porte : `{{Reconnaissance}}`
La première porte pour entrer dans l'Empire de la sécurité des API est de savoir comment recueillir des informations sur l'infrastructure de l'API et comment effectuer une reconnaissance puissante sur l'API pour extraire les portes cachées qui compromettent toute l'infrastructure, nous vous proposons donc cette carte mentale de reconnaissance de l'API mise à jour avec les derniers outils et méthodologies en matière de reconnaissance de l'API :
\
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.png)
[**Version PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.pdf) **|** [**Version XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap.xmind)
#### ⚔️ Les armes dont vous aurez besoin :
* [BurpSuite](https://portswigger.net/burp/releases)
* [FFUF](https://github.com/ffuf/ffuf)
* [Arjun](https://github.com/InsiderPhD/Arjun)
* [Postman](https://www.postman.com/downloads/)
* [SecLists](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* [FuzzDB](https://github.com/fuzzdb-project/fuzzdb)
* [SoapUI](https://www.soapui.org/downloads/soapui/)
* [GraphQL Voyager](https://apis.guru/graphql-voyager/)
* [Kiterunner](https://github.com/assetnote/kiterunner)
* [unfurl](https://github.com/tomnomnom/unfurl)
#### 🏋️ Testez vos compétences et vos armes :
* [vapi](https://github.com/roottusk/vapi)
* [Generic-University](https://github.com/InsiderPhD/Generic-University)
### 🚪 Deuxième porte : `{{Attaque}}`
#### Attaque RESTful & SOAP :
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.png)\
[**Version PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.pdf) **|** [**Version XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20ATTACK.xmind)\\
#### Attaque GraphQL :
En raison des attaques limitées dans le GraphQL, nous avons essayé de générer toutes les attaques possibles en fonction de notre expérience dans les tests d'API dans la carte mentale suivante :
![](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.png)\
[**Version PDF**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.pdf) **|** [**Version XMind**](https://github.com/Cyber-Guy1/API-SecurityEmpire/blob/main/assets/API%20Pentesting%20Mindmap%20%7B%7BGraphQL%20Attacking%7D%7D.xmind)\\
## Owasp API Security Top 10
Lisez ce document pour apprendre comment **rechercher** et **exploiter** les 10 principales vulnérabilités API d'Owasp: [https://github.com/OWASP/API-Security/blob/master/2019/fr/dist/owasp-api-security-top-10.pdf](https://github.com/OWASP/API-Security/blob/master/2019/fr/dist/owasp-api-security-top-10.pdf)
## Liste de contrôle de sécurité des API
{% embed url="https://github.com/shieldfy/API-Security-Checklist" %}
## Filtres Logger++ pour la recherche de vulnérabilités API
[https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
## Liste des points d'extrémité API possibles
[https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)
## Outils
* [**kiterunner**](https://github.com/assetnote/kiterunner): Excellent outil pour **découvrir les points d'extrémité API.**
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20 # Downloaded from kiterunner repo
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* [**automatic-api-attack-tool**](https://github.com/imperva/automatic-api-attack-tool) : Outil d'attaque d'API personnalisable d'Imperva qui prend une spécification d'API en entrée, génère et exécute des attaques basées sur celle-ci en sortie.
* [**Astra**](https://github.com/flipkart-incubator/Astra) : Un autre outil de test d'API pour trouver plusieurs vulnérabilités web différentes.
* [**Susanoo**](https://github.com/ant4g0nist/Susanoo) : Scanner de vulnérabilité d'API.
* [**restler-fuzzer**](https://github.com/microsoft/restler-fuzzer) : RESTler est le _premier outil de fuzzing d'API REST étatique_ pour tester automatiquement les services cloud via leurs API REST et trouver des bugs de sécurité et de fiabilité dans ces services. Pour un service cloud donné avec une spécification OpenAPI/Swagger, RESTler analyse l'ensemble de sa spécification, puis génère et exécute des tests qui exploitent le service via son API REST.
* [**TnT-Fuzzer**](https://github.com/Teebytes/TnT-Fuzzer)**:** TnT-Fuzzer est un fuzzer OpenAPI (swagger) écrit en python.
* [**APIFuzzer**](https://github.com/KissPeter/APIFuzzer)**:** APIFuzzer lit la description de votre API et fuzz les champs étape par étape pour valider si votre application peut gérer les paramètres fuzzés.
* [**API-fuzzer**](https://github.com/Fuzzapi/API-fuzzer) : Le gem API\_Fuzzer accepte une requête API en entrée et renvoie les vulnérabilités possibles dans l'API.
* [**race-the-web**](https://github.com/TheHackerDev/race-the-web) : Teste les conditions de concurrence dans les applications web en envoyant un nombre spécifié de requêtes vers une URL cible (ou des URL) _simultanément_, puis compare les réponses du serveur pour déterminer leur unicité.
<figure><img src="../../.gitbook/assets/image (3).png" alt=""><figcaption></figcaption></figure>
Utilisez [**Trickest**](https://trickest.io/) pour créer et automatiser facilement des flux de travail alimentés par les outils communautaires les plus avancés au monde.\
Obtenez un accès dès aujourd'hui :
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<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>
* Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-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 [**NFT**](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>