mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-27 07:01:09 +00:00
238 lines
16 KiB
Markdown
238 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) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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
|
|
|
|
Principal :
|
|
|
|
* **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é dans [http://www.dneonline.com/calculator.asmx](http://www.dneonline.com/calculator.asmx) (document WSDL dans [http://www.dneonline.com/calculator.asmx?wsdl](http://www.dneonline.com/calculator.asmx?wsdl)) et vous pouvez voir une demande d'exemple appelant la méthode `Add` dans [http://www.dneonline.com/calculator.asmx?op=Add](http://www.dneonline.com/calculator.asmx?op=Add)
|
|
* Pour analyser ces fichiers et créer des demandes 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 demandes 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 provenant des 10 principales 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 auront besoin de 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 faire en sorte 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
|
|
|
|
### Jouer avec les routes
|
|
|
|
`/files/..%2f..%2f + ID de la victime + %2f + nom de fichier de la victime`
|
|
|
|
### Vérifier 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érifier les versions possibles (approche automatisée)
|
|
|
|
Extension AutoRepeater Burp : Ajouter une règle de remplacement
|
|
|
|
* `Type : Chaîne de requête`
|
|
* `Correspondance : v2 (version supérieure)`
|
|
* `Remplacer : v1 (version inférieure)`
|
|
|
|
## 🛡️ 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 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 de sécurité et de test de pénétration des API la plus avancée et précise 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/en/dist/owasp-api-security-top-10.pdf](https://github.com/OWASP/API-Security/blob/master/2019/en/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 des API
|
|
|
|
[https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)
|
|
|
|
## Liste des points d'accès possibles des API
|
|
|
|
[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'accès des 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) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Utilisez [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) 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>
|
|
|
|
* 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 [**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>
|