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

433 lines
35 KiB
Markdown

# 80,443 - Méthodologie de pentesting 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 [**La famille PEASS**](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>
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">
**Astuce pour les primes de bug** : **inscrivez-vous** sur **Intigriti**, une **plateforme premium de primes de bug créée par des pirates, pour des pirates** ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** !
{% embed url="https://go.intigriti.com/hacktricks" %}
## Informations de base
Le service web est le service le plus **courant et le plus étendu** et il existe de nombreux **types de vulnérabilités différents**.
**Port par défaut :** 80 (HTTP), 443 (HTTPS)
```bash
PORT STATE SERVICE
80/tcp open http
443/tcp open ssl/https
```
```bash
nc -v domain.com 80 # GET / HTTP/1.0
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
```
### Conseils pour les API Web
{% content-ref url="web-api-pentesting.md" %}
[web-api-pentesting.md](web-api-pentesting.md)
{% endcontent-ref %}
## Résumé de la méthodologie
> Dans cette méthodologie, nous supposons que vous allez attaquer un domaine (ou sous-domaine) et uniquement celui-ci. Vous devez donc appliquer cette méthodologie à chaque domaine, sous-domaine ou adresse IP découvert avec un serveur web indéterminé dans le périmètre.
* [ ] Commencez par **identifier** les **technologies** utilisées par le serveur web. Recherchez des **astuces** à garder à l'esprit pendant le reste du test si vous parvenez à identifier avec succès la technologie.
* [ ] Y a-t-il une **vulnérabilité connue** de la version de la technologie ?
* [ ] Utilisez-vous une **technologie bien connue** ? Y a-t-il une **astuce utile** pour extraire plus d'informations ?
* [ ] Utilisez-vous un **scanner spécialisé** à exécuter (comme wpscan) ?
* [ ] Lancez des **scanners à usage général**. On ne sait jamais s'ils vont trouver quelque chose ou si ils vont trouver des informations intéressantes.
* [ ] Commencez par les **vérifications initiales** : **robots**, **sitemap**, erreur **404** et analyse **SSL/TLS** (si HTTPS).
* [ ] Commencez à **explorer** la page web : Il est temps de **trouver** tous les **fichiers, dossiers** et **paramètres** possibles utilisés. Vérifiez également les **découvertes spéciales**.
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être exploré._
* [ ] **Attaque par force brute des répertoires** : Essayez de forcer par la méthode de force brute tous les répertoires découverts à la recherche de nouveaux **fichiers** et **répertoires**.
* [ ] _Notez qu'à chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être attaqué par force brute._
* [ ] **Vérification des sauvegardes** : Testez si vous pouvez trouver des **sauvegardes** des **fichiers découverts** en ajoutant des extensions de sauvegarde courantes.
* [ ] **Attaque par force brute des paramètres** : Essayez de **trouver des paramètres cachés**.
* [ ] Une fois que vous avez **identifié** tous les **points d'extrémité** possibles acceptant une **entrée utilisateur**, vérifiez toutes sortes de **vulnérabilités** qui y sont liées.
* [ ] [Suivez cette liste de vérification](../../pentesting-web/web-vulnerabilities-methodology/)
## Version du serveur (Vulnérable ?)
### Identification
Vérifiez s'il existe des **vulnérabilités connues** pour la **version** du serveur qui est en cours d'exécution.\
Les **en-têtes HTTP et les cookies de la réponse** peuvent être très utiles pour **identifier** les **technologies** et/ou la **version** utilisées. L'outil **Nmap scan** peut identifier la version du serveur, mais les outils [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ou [**https://builtwith.com/**](https://builtwith.com)**:** peuvent également être utiles.
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
webtech -u <URL>
webanalyze -host https://google.com -crawl 2
```
Recherchez les vulnérabilités de la version de l'application web.
### Vérifiez si un WAF est utilisé
* [https://github.com/EnableSecurity/wafw00f](https://github.com/EnableSecurity/wafw00f)
* [https://github.com/Ekultek/WhatWaf.git](https://github.com/Ekultek/WhatWaf.git)
* [https://nmap.org/nsedoc/scripts/http-waf-detect.html](https://nmap.org/nsedoc/scripts/http-waf-detect.html)
### Astuces techniques web
Voici quelques astuces pour trouver des vulnérabilités dans différentes technologies bien connues :
* [AEM - Adobe Experience Cloud](aem-adobe-experience-cloud.md)
* [Apache](apache.md)
* [Artifactory](artifactory-hacking-guide.md)
* [Buckets](buckets/)
* [CGI](cgi.md)
* [Drupal](drupal.md)
* [Flask](flask.md)
* [Git](git.md)
* [Golang](golang.md)
* [GraphQL](graphql.md)
* [H2 - Base de données SQL Java](h2-java-sql-database.md)
* [Astuces IIS](iis-internet-information-services.md)
* [JBOSS](jboss.md)
* [Jenkins](broken-reference/)
* [Jira](jira.md)
* [Joomla](joomla.md)
* [JSP](jsp.md)
* [Laravel](laravel.md)
* [Moodle](moodle.md)
* [Nginx](nginx.md)
* [PHP (php a beaucoup d'astuces intéressantes qui pourraient être exploitées)](php-tricks-esp/)
* [Python](python.md)
* [Spring Actuators](spring-actuators.md)
* [Symphony](symphony.md)
* [Tomcat](tomcat.md)
* [VMWare](vmware-esx-vcenter....md)
* [Test de pénétration de l'API Web](web-api-pentesting.md)
* [WebDav](put-method-webdav.md)
* [Werkzeug](werkzeug.md)
* [Wordpress](wordpress.md)
* [Electron Desktop (XSS to RCE)](electron-desktop-apps/)
Notez que le même domaine peut utiliser différentes technologies sur différents ports, dossiers et sous-domaines. Si l'application web utilise une technologie ou une plateforme bien connue répertoriée ci-dessus ou toute autre, n'oubliez pas de rechercher sur Internet de nouvelles astuces (et faites-le moi savoir !).
### Examen du code source
Si le code source de l'application est disponible sur GitHub, en plus de réaliser votre propre test en boîte blanche de l'application, il existe des informations qui pourraient être utiles pour les tests en boîte noire actuels :
* Y a-t-il un fichier de journal des modifications, un fichier Readme ou une version ou toute autre information de version accessible via le web ?
* Comment et où sont enregistrées les informations d'identification ? Y a-t-il un fichier (accessible ?) contenant des informations d'identification (noms d'utilisateur ou mots de passe) ?
* Les mots de passe sont-ils en texte clair, chiffrés ou quel algorithme de hachage est utilisé ?
* Utilise-t-il une clé maître pour chiffrer quelque chose ? Quel algorithme est utilisé ?
* Pouvez-vous accéder à l'un de ces fichiers en exploitant une vulnérabilité ?
* Y a-t-il des informations intéressantes dans les problèmes résolus et non résolus de GitHub ? Ou dans l'historique des commits (peut-être un mot de passe introduit dans un ancien commit) ?
{% content-ref url="code-review-tools.md" %}
[code-review-tools.md](code-review-tools.md)
{% endcontent-ref %}
### Scanners automatiques
#### Scanners automatiques polyvalents
```bash
nikto -h <URL>
whatweb -a 4 <URL>
wapiti -u <URL>
W3af
zaproxy #You can use an API
nuclei -ut && nuclei -target <URL>
# https://github.com/ignis-sec/puff (client side vulns fuzzer)
node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi2rVUN/?query=FUZZ"
```
#### Scanners de CMS
Si un CMS est utilisé, n'oubliez pas d'**exécuter un scanner**, peut-être que quelque chose de juteux sera trouvé :
[**Clusterd**](https://github.com/hatRiot/clusterd)** :** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat.md)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan) : [**WordPress**](wordpress.md), [**Drupal**](drupal.md), **Joomla**, sites **vBulletin** pour les problèmes de sécurité. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)** :** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal.md)**, PrestaShop, Opencart**\
**CMSMap** : [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal.md) **ou** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)** :** [**Drupal**](drupal.md)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
```bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> À ce stade, vous devriez déjà avoir des informations sur le serveur web utilisé par le client (si des données sont fournies) et quelques astuces à garder à l'esprit pendant le test. Si vous avez de la chance, vous avez même trouvé un CMS et exécuté un scanner.
## Découverte pas à pas de l'application Web
> À partir de ce point, nous allons commencer à interagir avec l'application Web.
### Vérifications initiales
**Pages par défaut avec des informations intéressantes :**
* /robots.txt
* /sitemap.xml
* /crossdomain.xml
* /clientaccesspolicy.xml
* /.well-known/
* Vérifiez également les commentaires sur les pages principales et secondaires.
**Forcer des erreurs**
Les serveurs Web peuvent **avoir un comportement inattendu** lorsque des données étranges leur sont envoyées. Cela peut ouvrir des **vulnérabilités** ou **révéler des informations sensibles**.
* Accédez à des **pages fictives** comme /whatever\_fake.php (.aspx,.html,.etc)
* Ajoutez "\[]", "]]" et "\[\[" dans les **valeurs des cookies** et les **valeurs des paramètres** pour créer des erreurs
* Générez une erreur en donnant une entrée sous la forme de **`/~randomthing/%s`** à la **fin** de l'URL
* Essayez **différentes méthodes HTTP** comme PATCH, DEBUG ou incorrectes comme FAKE
#### **Vérifiez si vous pouvez télécharger des fichiers (**[**verbe PUT, WebDav**](put-method-webdav.md)**)**
Si vous découvrez que **WebDav** est **activé** mais que vous n'avez pas suffisamment de permissions pour **télécharger des fichiers** dans le dossier racine, essayez de :
* **Forcer** les identifiants
* **Télécharger des fichiers** via WebDav vers le **reste** des **dossiers trouvés** à l'intérieur de la page Web. Vous pouvez avoir les permissions pour télécharger des fichiers dans d'autres dossiers.
### **Vulnérabilités SSL/TLS**
* Si l'application **n'impose pas l'utilisation de HTTPS** à un moment donné, alors elle est **vulnérable aux attaques de type MitM**
* Si l'application **envoie des données sensibles (mots de passe) en utilisant HTTP**. Alors c'est une vulnérabilité élevée.
Utilisez [**testssl.sh**](https://github.com/drwetter/testssl.sh) pour vérifier les **vulnérabilités** (dans le cadre des programmes de Bug Bounty, ce type de vulnérabilités ne sera probablement pas accepté) et utilisez [**a2sv**](https://github.com/hahwul/a2sv) pour revérifier les vulnérabilités :
```bash
./testssl.sh [--htmlfile] 10.10.10.10:443
#Use the --htmlfile to save the output inside an htmlfile also
# You can also use other tools, by testssl.sh at this momment is the best one (I think)
sslscan <host:port>
sslyze --regular <ip:port>
```
Informations sur les vulnérabilités SSL/TLS :
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
### Spidering
Lancez une sorte de **spider** à l'intérieur du web. L'objectif de l'araignée est de **trouver autant de chemins que possible** à partir de l'application testée. Par conséquent, le crawling web et les sources externes doivent être utilisés pour trouver autant de chemins valides que possible.
* [**gospider**](https://github.com/jaeles-project/gospider) (go) : araignée HTML, LinkFinder dans les fichiers JS et sources externes (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
* [**hakrawler**](https://github.com/hakluke/hakrawler) (go) : araignée HML, avec LinkFider pour les fichiers JS et Archive.org comme source externe.
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python) : araignée HTML, indique également les "fichiers juteux".
* [**evine** ](https://github.com/saeeddhqan/evine)(go) : araignée HTML interactive en ligne de commande. Il recherche également dans Archive.org.
* [**meg**](https://github.com/tomnomnom/meg) (go) : Cet outil n'est pas une araignée mais peut être utile. Vous pouvez simplement indiquer un fichier avec des hôtes et un fichier avec des chemins et meg récupérera chaque chemin sur chaque hôte et enregistrera la réponse.
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go) : araignée HTML avec des capacités de rendu JS. Cependant, il semble qu'il ne soit plus maintenu, la version précompilée est ancienne et le code actuel ne compile pas.
* [**gau**](https://github.com/lc/gau) (go) : araignée HTML qui utilise des fournisseurs externes (wayback, otx, commoncrawl).
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider) : Ce script trouvera les URL avec des paramètres et les listera.
* [**galer**](https://github.com/dwisiswant0/galer) (go) : araignée HTML avec des capacités de rendu JS.
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python) : araignée HTML, avec des capacités de beautification JS capable de rechercher de nouveaux chemins dans les fichiers JS. Il peut également être intéressant de jeter un coup d'œil à [JSScanner](https://github.com/dark-warlord14/JSScanner), qui est un wrapper de LinkFinder.
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go) : Pour extraire les points de terminaison à la fois dans la source HTML et dans les fichiers javascript intégrés. Utile pour les chasseurs de bugs, les équipes rouges et les ninjas de la sécurité de l'information.
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7) : Un script python 2.7 utilisant Tornado et JSBeautifier pour analyser les URL relatives à partir des fichiers JavaScript. Utile pour découvrir facilement les requêtes AJAX. Semble ne plus être maintenu.
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby) : Étant donné un fichier (HTML), il extraira les URL à partir de celui-ci en utilisant une expression régulière astucieuse pour trouver et extraire les URL relatives à partir de fichiers moches (minifiés).
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, plusieurs outils) : Rassemble des informations intéressantes à partir de fichiers JS en utilisant plusieurs outils.
* [**subjs**](https://github.com/lc/subjs) (go) : Trouver des fichiers JS.
* [**page-fetch**](https://github.com/detectify/page-fetch) (go) : Charge une page dans un navigateur sans tête et affiche toutes les URL chargées pour charger la page.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust) : Outil de découverte de contenu mélangeant plusieurs options des outils précédents.
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions) : Une extension Burp pour trouver des chemins et des paramètres dans les fichiers JS.
* [**Sourcemapper**](https://github.com/denandz/sourcemapper) : Un outil qui, étant donné l'URL .js.map, vous donnera le code JS beautifié.
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder) : Cet outil est utilisé pour découvrir les points de terminaison pour une cible donnée.
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Découvrir des liens à partir de la machine wayback (télécharger également les réponses dans la wayback et rechercher d'autres liens).
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go) : Crawl (même en remplissant des formulaires) et trouver également des informations sensibles en utilisant des regex spécifiques.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite) : Spider Suite est un crawler/spider de sécurité web GUI multi-fonction avancé conçu pour les professionnels de la cybersécurité.
* [**jsluice**](https://github.com/BishopFox/jsluice) (go) : C'est un package Go et un outil en ligne de commande pour extraire des URL, des chemins, des secrets et d'autres données intéressantes à partir du code source JavaScript.
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge) : ParaForge est une extension simple de **Burp Suite** pour extraire les paramètres et les points de terminaison de la requête afin de créer une liste de mots personnalisée pour le fuzzing et l'énumération.
### Brute Force des répertoires et des fichiers
Commencez par **brute-forcer** à partir du dossier racine et assurez-vous de brute-forcer **tous les répertoires trouvés** en utilisant **cette méthode** et tous les répertoires **découverts** par le **Spidering** (vous pouvez effectuer cette brute-forcing **de manière récursive** et ajouter au début de la liste de mots utilisée les noms des répertoires trouvés).\
Outils :
* **Dirb** / **Dirbuster** - Inclus dans Kali, **ancien** (et ** lent **) mais fonctionnel. Autorise les certificats auto-signés et la recherche récursive. Trop lent par rapport aux autres options.
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python) : Il n'autorise pas les certificats auto-signés mais permet une recherche récursive.
* [**Gobuster**](https://github.com/OJ/gobuster) (go) : Il autorise les certificats auto-signés, il n'a pas de recherche **récursive**.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Rapide, prend en charge la recherche récursive.**
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
* [**ffuf** ](https://github.com/ffuf/ffuf)- Rapide : `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python) : Ce n'est pas une araignée mais un outil qui, étant donné la liste des URL trouvées, supprimera les URL "dupliquées".
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger) : Extension Burp pour créer une liste de répertoires à partir de l'historique de burp de différentes pages.
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor) : Supprime les URL avec des fonctionnalités en double (basé sur les imports JS).
* [**Chamaleon**](https://github.com/iustin24/chameleon) : Il utilise wapalyzer pour détecter les technologies utilisées et sélectionner les listes de mots à utiliser.
**Dictionnaires recommandés :**
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
* [**Dirsearch** dictionnaire inclus](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
* [Listes de mots Assetnote](https://wordlists.assetnote.io)
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* raft-large-directories-lowercase.txt
* directory-list-2.3-medium.txt
* RobotsDisallowed/top10000.txt
* [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
* [https://github.com/google/fuzzing/tree/master/dictionaries](https://github.com/google/fuzzing/tree/master/dictionaries)
* [https://github.com/six2dez/OneListForAll](https://github.com/six2dez/OneListForAll)
* [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
* _/usr/share/wordlists/dirb/common.txt_
* _/usr/share/wordlists/dirb/big.txt_
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
Notez que chaque fois qu'un nouveau répertoire est découvert lors d'une attaque par force brute ou d'une exploration, il doit être soumis à une attaque par force brute.
### Ce qu'il faut vérifier sur chaque fichier trouvé
* [**Vérificateur de liens cassés**](https://github.com/stevenvachon/broken-link-checker) : Trouvez les liens cassés à l'intérieur des fichiers HTML qui peuvent être vulnérables aux prises de contrôle.
* **Sauvegardes de fichiers** : Une fois que vous avez trouvé tous les fichiers, recherchez les sauvegardes de tous les fichiers exécutables ("_.php_", "_.aspx_"...). Les variations courantes pour nommer une sauvegarde sont : _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp et file.old._ Vous pouvez également utiliser l'outil [**bfac**](https://github.com/mazen160/bfac).
* **Découverte de nouveaux paramètres** : Vous pouvez utiliser des outils tels que [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **et** [**Param Miner**](https://github.com/PortSwigger/param-miner) **pour découvrir les paramètres cachés. Si possible, vous pouvez essayer de rechercher** des paramètres cachés dans chaque fichier web exécutable.
* _Tous les wordlists par défaut d'Arjun :_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _Param-miner "params" :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnote "parameters\_top\_1m" :_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
* _nullenc0de "params.txt" :_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
* **Commentaires** : Vérifiez les commentaires de tous les fichiers, vous pouvez trouver des **identifiants** ou des **fonctionnalités cachées**.
* Si vous jouez à un **CTF**, une astuce "courante" consiste à **cacher** des **informations** à l'intérieur des commentaires à **droite** de la **page** (en utilisant des **centaines** d'**espaces** pour que vous ne voyiez pas les données si vous ouvrez le code source avec le navigateur). Une autre possibilité est d'utiliser **plusieurs nouvelles lignes** et de **cacher des informations** dans un commentaire en **bas** de la page web.
* **Clés d'API** : Si vous trouvez une **clé d'API**, il existe un guide qui indique comment utiliser les clés d'API de différentes plateformes : [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](https://github.com/l4yton/RegHex\)/)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
* Clés d'API Google : Si vous trouvez une clé d'API ressemblant à **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik, vous pouvez utiliser le projet [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) pour vérifier quelles API la clé peut accéder.
* **Buckets S3** : Lors de l'exploration, vérifiez si un **sous-domaine** ou un **lien** est lié à un **bucket S3**. Dans ce cas, [**vérifiez** les **permissions** du bucket](buckets/).
### Découvertes spéciales
**Pendant** l'**exploration** et l'**attaque par force brute**, vous pouvez trouver des **éléments intéressants** dont vous devez **prendre note**.
**Fichiers intéressants**
* Recherchez des **liens** vers d'autres fichiers à l'intérieur des fichiers **CSS**.
* [Si vous trouvez un fichier _**.git**_, des informations peuvent être extraites](git.md)
* Si vous trouvez un fichier _**.env**_, des informations telles que des clés d'API, des mots de passe de bases de données et d'autres informations peuvent être trouvées.
* Si vous trouvez des **points de terminaison d'API**, vous [devriez également les tester](web-api-pentesting.md). Ce ne sont pas des fichiers, mais ils ressembleront probablement à des fichiers.
* **Fichiers JS** : Dans la section d'exploration, plusieurs outils capables d'extraire des chemins à partir de fichiers JS ont été mentionnés. De plus, il serait intéressant de **surveiller chaque fichier JS trouvé**, car dans certaines occasions, un changement peut indiquer qu'une vulnérabilité potentielle a été introduite dans le code. Vous pouvez utiliser par exemple [**JSMon**](https://github.com/robre/jsmon)**.**
* Vous devriez également vérifier les fichiers JS découverts avec [**RetireJS**](https://github.com/retirejs/retire.js/) ou [**JSHole**](https://github.com/callforpapers-source/jshole) pour voir s'ils sont vulnérables.
* **Déobfuscateur et désassembleur Javascript** : [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
* **Embellisseur Javascript** : [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
* **Déobfuscation JsFuck** (javascript avec les caractères :"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* À plusieurs occasions, vous devrez **comprendre les expressions régulières** utilisées, cela sera utile : [https://regex101.com/](https://regex101.com)
* Vous pouvez également **surveiller les fichiers où les formulaires ont été détectés**, car un changement dans le paramètre ou l'apparition d'un nouveau formulaire peut indiquer une nouvelle fonctionnalité potentiellement vulnérable.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
{% content-ref url="403-and-401-bypasses.md" %}
[403-and-401-bypasses.md](403-and-401-bypasses.md)
{% endcontent-ref %}
**502 Proxy Error**
Si une page **répond** avec ce **code**, il s'agit probablement d'un **proxy mal configuré**. **Si vous envoyez une requête HTTP comme : `GET https://google.com HTTP/1.1`** (avec l'en-tête d'hôte et d'autres en-têtes courants), le **proxy** essaiera d'**accéder** à _**google.com**_ **et vous aurez trouvé un** SSRF.
**Authentification NTLM - Divulgation d'informations**
Si le serveur en cours d'exécution qui demande une authentification est **Windows** ou si vous trouvez une connexion qui demande vos **informations d'identification** (et demande un **nom de domaine**), vous pouvez provoquer une **divulgation d'informations**.\
**Envoyez** l'**en-tête** : `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` et en raison du fonctionnement de l'**authentification NTLM**, le serveur répondra avec des informations internes (version de IIS, version de Windows...) dans l'en-tête "WWW-Authenticate".\
Vous pouvez **automatiser** cela en utilisant le **plugin nmap** "_http-ntlm-info.nse_".
**Redirection HTTP (CTF)**
Il est possible de **mettre du contenu** à l'intérieur d'une **redirection**. Ce contenu **ne sera pas affiché à l'utilisateur** (car le navigateur exécutera la redirection), mais quelque chose pourrait être **caché** à l'intérieur.
### Vérification des vulnérabilités Web
Maintenant qu'une énumération complète de l'application Web a été effectuée, il est temps de vérifier de nombreuses vulnérabilités possibles. Vous pouvez trouver la liste de contrôle ici :
{% content-ref url="../../pentesting-web/web-vulnerabilities-methodology/" %}
[web-vulnerabilities-methodology](../../pentesting-web/web-vulnerabilities-methodology/)
{% endcontent-ref %}
TODO: Complétez la liste des vulnérabilités et des techniques avec [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist) et [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html), [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### Surveiller les pages pour les modifications
Vous pouvez utiliser des outils tels que [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) pour surveiller les pages afin de détecter les modifications qui pourraient introduire des vulnérabilités.
### Commandes automatiques HackTricks
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.
Protocol_Description: Web #Protocol Abbreviation Spelled out
Entry_1:
Name: Notes
Description: Notes for Web
Note: |
https://book.hacktricks.xyz/pentesting/pentesting-web
Entry_2:
Name: Quick Web Scan
Description: Nikto and GoBuster
Command: nikto -host {Web_Proto}://{IP}:{Web_Port} &&&& gobuster dir -w {Small_Dirlist} -u {Web_Proto}://{IP}:{Web_Port} && gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_3:
Name: Nikto
Description: Basic Site Info via Nikto
Command: nikto -host {Web_Proto}://{IP}:{Web_Port}
Entry_4:
Name: WhatWeb
Description: General purpose auto scanner
Command: whatweb -a 4 {IP}
Entry_5:
Name: Directory Brute Force Non-Recursive
Description: Non-Recursive Directory Brute Force
Command: gobuster dir -w {Big_Dirlist} -u {Web_Proto}://{IP}:{Web_Port}
Entry_6:
Name: Directory Brute Force Recursive
Description: Recursive Directory Brute Force
Command: python3 {Tool_Dir}dirsearch/dirsearch.py -w {Small_Dirlist} -e php,exe,sh,py,html,pl -f -t 20 -u {Web_Proto}://{IP}:{Web_Port} -r 10
Entry_7:
Name: Directory Brute Force CGI
Description: Common Gateway Interface Brute Force
Command: gobuster dir -u {Web_Proto}://{IP}:{Web_Port}/ -w /usr/share/seclists/Discovery/Web-Content/CGIs.txt -s 200
Entry_8:
Name: Nmap Web Vuln Scan
Description: Tailored Nmap Scan for web Vulnerabilities
Command: nmap -vv --reason -Pn -sV -p {Web_Port} --script=`banner,(http* or ssl*) and not (brute or broadcast or dos or external or http-slowloris* or fuzzer)` {IP}
Entry_9:
Name: Drupal
Description: Drupal Enumeration Notes
Note: |
git clone https://github.com/immunIT/drupwn.git for low hanging fruit and git clone https://github.com/droope/droopescan.git for deeper enumeration
Entry_10:
Name: WordPress
Description: WordPress Enumeration with WPScan
Command: |
?What is the location of the wp-login.php? Example: /Yeet/cannon/wp-login.php
wpscan --url {Web_Proto}://{IP}{1} --enumerate ap,at,cb,dbe && wpscan --url {Web_Proto}://{IP}{1} --enumerate u,tt,t,vp --passwords {Big_Passwordlist} -e
Entry_11:
Name: WordPress Hydra Brute Force
Description: Need User (admin is default)
Command: hydra -l admin -P {Big_Passwordlist} {IP} -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'
Entry_12:
Name: Ffuf Vhost
Description: Simple Scan with Ffuf for discovering additional vhosts
Command: ffuf -w {Subdomain_List}:FUZZ -u {Web_Proto}://{Domain_Name} -H "Host:FUZZ.{Domain_Name}" -c -mc all {Ffuf_Filters}
```
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
**Astuce de prime de bug**: **inscrivez-vous** à **Intigriti**, une plateforme premium de prime de bug créée par des hackers, pour les hackers ! Rejoignez-nous sur [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) dès aujourd'hui et commencez à gagner des primes allant jusqu'à **100 000 $** !
{% embed url="https://go.intigriti.com/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 [**La famille PEASS**](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>