- L’écran par défaut d’IIS n’est pas une impasse, mais le point de départ d’une reconnaissance en bug bounty ; Shodan, les Google dorks et les en-têtes de réponse permettent de réduire la liste des serveurs exposés et des vhost cachés
- Les requêtes HTTP/1.0,
HTTPAPI 2.0 404, les certificats SSL et le brute force de l’en-têteHostfournissent des indices initiaux pour trouver des IP internes, des noms d’hôte Exchange et des hôtes virtuels - L’énumération tilde shortname, fondée sur le DOS 8.3 dans IIS, peut révéler des noms courts de fichiers et de répertoires même quand le listing de répertoire est désactivé, et GitHub Search, BigQuery, les LLM et
crunchservent à estimer des candidats pour les noms complets - Le fuzzing spécialisé IIS/.NET cible d’abord des chemins et extensions à forte valeur comme
web.config,trace.axd,elmah.axd,appsettings.*.json,.aspx/.ashx/.asmx/.config - L’exposition de
web.config, la normalisation de chemin avec les sessions cookieless, la confusion de chemin en reverse proxy, les alternate data streams NTFS, les contournements d’extension à l’upload et la HPP montrent comment des erreurs de configuration et des comportements legacy peuvent devenir une surface d’attaque
Méthodes de reconnaissance pour repérer des serveurs IIS
- Les cibles IIS peuvent d’abord être trouvées via les moteurs de recherche et les services de recherche d’actifs exposés sur Internet
- Les requêtes Shodan permettent de réduire la liste des serveurs IIS en combinant le certificat SSL du domaine cible, le nom de l’organisation et
http.title:"IIS"- Les exemples de cibles incluent des serveurs de staging, des panneaux d’administration oubliés et des outils internes exposés sur Internet
- En plus de Shodan, fofa, censys, netlas et odin fournissent aussi des index Internet différents
- Le Google dorking sert à trouver des pages indexées qui portent des traces d’IIS
- Le dossier
aspnet_clientet_vti_binsont traités comme des signaux IIS ext:aspxpermet de trouver des pages ASP.NET et suggère la présence d’IIS en dessous- Les recherches avec joker comme
site:*.target.cometsite:*.*.target.comservent à découvrir des sous-domaines imbriqués que l’énumération classique des sous-domaines peut manquer
- Le dossier
- Les en-têtes de réponse sont l’indice le plus simple pour identifier IIS
Server: Microsoft-IIS/10.0X-Powered-By: ASP.NET- À grande échelle, on peut créer une liste de cibles IIS avec
httpxounuclei
Indices initiaux obtenus après confirmation d’IIS
- Certaines configurations IIS, en particulier des frontaux Exchange ou OWA, peuvent exposer des informations internes via des requêtes HTTP/1.0
- L’en-tête
Locationpeut contenir une IP interne commehttps://192.168.5.237/owa/ - L’en-tête
X-FEServerpeut révéler le nom d’hôte interne d’un serveur Exchange - Ces informations peuvent ensuite être exploitées comme divulgation d’informations
Automatisation et recherche de vhosts cachés
- Une fois une liste de cibles IIS obtenue, exécuter
nucleiavec des tags commemicrosoft,windows,asp,aspx,iis,azure,config,exposurepermet de réduire le travail répétitif HTTPAPI 2.0 404ne signifie pas forcément qu’il n’y a réellement rien- Une instance IIS peut être liée à un hôte virtuel spécifique, et renvoyer une 404 parce que l’en-tête
Hostde la requête ne correspond pas
- Une instance IIS peut être liée à un hôte virtuel spécifique, et renvoyer une 404 parce que l’en-tête
- Il existe deux façons de trouver des vhost cachés
- Chercher le nom d’hôte nécessaire dans le subject ou les champs SAN du certificat SSL
- Si le certificat n’aide pas, faire du brute force de vhost avec
ffufet une wordlist pour l’en-têteHost
- Une fois le bon nom d’hôte trouvé, l’application réelle peut répondre au lieu d’une 404 générique
Énumération des tilde shortnames IIS
- IIS peut permettre d’énumérer les noms courts de fichiers et de répertoires à cause d’un comportement hérité des anciennes règles de nommage DOS 8.3
- Même si le listing de répertoire est désactivé, des fragments comme
WEB~1.CON,GLOBAL~1.ASA,SITEBA~1.ZIP,ADMIN~1peuvent être révélés - shortscan est utilisé comme outil d’énumération des shortnames IIS
- burp’s IIS Tilde Enumeration Scanner peut aussi servir d’alternative
- Il existe plusieurs façons de convertir un nom court en nom de fichier complet
- LLM : générer des candidats plausibles contenant le fragment de shortname
- GitHub code search : rechercher de vrais noms de fichiers à partir des 6 premiers caractères avant
~1et de l’extension - GSNW : prend un fragment de shortname et collecte des noms de fichiers correspondants via GitHub code search
- GitHub-IIS-Shortname-Generator : génère une wordlist de manière similaire
- shortnameguesser : interroge plusieurs sources à partir de la sortie du scanner pour produire une wordlist ciblée
- L’approche BigQuery consiste à chercher dans le dataset public GitHub de Google BigQuery des chemins de fichiers correspondant au motif du shortname
- Avec
SITEBA~1.ZIP, on peut obtenir des candidats réels commesitebackup.zipousitebase.zip - Cette technique s’inspire de la recherche BigQuery d’Assetnote sur les fichiers cachés IIS
- Avec
- Si LLM, GitHub et BigQuery échouent, on peut générer une wordlist des combinaisons restantes avec crunch, puis tester avec
ffuf- Il faut aussi vérifier les variantes de nom de fichier avec tirets, underscores, espaces encodés dans l’URL et sans séparateurs
- Windows autorise les espaces dans les noms de fichiers, et IIS peut aussi les servir
Fuzzing spécialisé IIS/.NET
- Une wordlist générique seule peut manquer les fichiers et endpoints propres à l’écosystème IIS/.NET
- Les cibles à forte valeur à vérifier en priorité incluent :
/web.config,/web.config.bak,/web.config.old,/web.config.txt/global.asax/trace.axd/elmah.axd/connectionstrings.config/appsettings.json,/appsettings.Development.json,/appsettings.Staging.json,/appsettings.Production.json,/appsettings.Local.json/secrets.json/WS_FTP.LOG/_vti_pvt/service.cnf
trace.axdest le trace viewer ASP.NET ; s’il est activé, il peut exposer des logs de requêtes/réponses avec des en-têtes, des cookies et parfois des identifiantselmah.axdpeut rester accessible comme endpoint de debug que les développeurs n’ont pas désactivé, et afficher des journaux d’erreurs- Les extensions à fuzzier côté IIS incluent
.asp,.aspx,.ashx,.asmx,.wsdl,.wadl,.config,.xml,.zip,.txt,.dll,.json - Les wordlists utiles incluent :
- secLists IIS.txt : contient des chemins IIS de base, des handlers courants et des fichiers legacy
- orwa’s iis.txt : présentée comme une liste IIS utilisée dans de vrais programmes de bug bounty
- orwa’s aspx.txt : liste centrée sur les endpoints
.aspx - wfuzz iis.txt : petite liste focalisée sur des chemins IIS vulnérables connus
- dirbuster-ng iis.txt : liste compacte visant des faiblesses spécifiques à IIS
- Assetnote wordlists : générées automatiquement à partir de données de crawl réelles, mises à jour chaque mois ; les listes ASP et ASPX sont recommandées
- OneListForAll :
onelistforallshort.txtpour des runs ciblés, la liste complète pour des runs longs
- IIS est insensible à la casse, donc une wordlist en casse mixte peut créer des requêtes en double
- On utilise souvent une liste en minuscules, ou une normalisation avec
tr '[:upper:]' '[:lower:]' | sort -u
- On utilise souvent une liste en minuscules, ou une normalisation avec
Exposition de web.config et fuite de code
- Si
web.configpeut être lu via path traversal, un fichier de sauvegarde exposé par erreur ou une découverte par shortname, l’impact peut être important sur une cible IIS - Le
web.configd’IIS peut contenir des machine keys utilisées pour la signature et le chiffrement de ViewState - Avec ces machine keys, il peut être possible de forger un payload ViewState de désérialisation malveillante et d’aboutir à une exécution de code à distance fondée sur la désérialisation
- ysoserial.net est un outil qui aide à générer ce type de payload quand on dispose des clés
- En présence d’un paramètre de téléchargement ou de lecture de fichier, on poursuit souvent avec des tentatives comme
../../web.configet ses variantes encodées en URL - L’ancienne fonctionnalité cookieless session d’ASP.NET peut insérer dans le chemin URL un jeton de session de la forme
(S(X))- IIS peut supprimer ce segment lors de la normalisation du chemin, ce qui permet de contourner les blocages d’accès au répertoire
/bin Newtonsoft.Json.dllest une bibliothèque standard et peut ne pas contenir de secrets applicatifs- Si l’on récupère une vraie DLL métier, on peut la décompiler avec dotPeek ou dnSpy pour y voir des identifiants codés en dur, des clés API, la logique des endpoints internes ou une implémentation d’authentification personnalisée
- IIS peut supprimer ce segment lors de la normalisation du chemin, ce qui permet de contourner les blocages d’accès au répertoire
Normalisation de chemin, NTFS, upload et contournement de WAF
- Quand IIS est derrière un reverse proxy ou joue lui-même ce rôle, des différences de normalisation de chemin peuvent mener à des contournements de contrôle d’accès
- Le proxy peut transmettre un chemin encodé en le voyant comme une autre ressource, tandis qu’IIS décode
%2fen/et interprète le traversal, ce qui peut donner accès à des chemins protégés
- Le proxy peut transmettre un chemin encodé en le voyant comme une autre ressource, tandis qu’IIS décode
- IIS 7.5 et des versions proches peuvent permettre un contournement de basic authentication via les alternate data streams NTFS et le comportement d’index allocation
- Le module d’authentification peut ne pas reconnaître le chemin comme protégé, alors que le système de fichiers l’interprète comme le répertoire réel
- Dans les fonctionnalités d’upload de fichiers, même si
.aspxet.aspsont bloqués, IIS peut rendre possible une stored XSS via des extensions qu’il sert en HTML par défaut- Exemples d’extensions rendues comme HTML :
.cer,.hxt,.htm - Exemples d’extensions vectrices de XSS basées sur XML :
.dtd,.mno,.vml,.xsl,.xht,.svg,.xml,.xsd,.xsf,.svgz,.xslt,.wsdl,.xhtml
- Exemples d’extensions rendues comme HTML :
- IIS supprime le point final dans les noms de fichiers, ce qui peut permettre de contourner des filtres d’upload avec
shell.aspx.,shell.aspx..,shell.aspx... - Les extensions
.stm,.shtm,.shtmlsont citées comme cibles pour les server-side includes - Quand un WAF bloque un payload, on peut utiliser la HTTP Parameter Pollution pour répartir le payload sur des paramètres dupliqués
- IIS et ASP.NET concatènent par défaut les valeurs des paramètres dupliqués avec des virgules, ce qui peut permettre au payload d’être réassemblé derrière le WAF
Leçons à retenir et ressources sur IIS en bug bounty
- La surface d’attaque IIS en bug bounty est large, mais reste souvent insuffisamment testée
- Des serveurs Windows/IIS exposés peuvent laisser fuiter des informations sous forme d’IP internes, de fichiers de configuration ou d’énumération de shortnames
- En pratique, il est important de ne pas s’arrêter à l’écran par défaut d’IIS et de pousser la reconnaissance plus loin
- Ressources
1 commentaires
Commentaires sur Hacker News
La raison pour laquelle on met une page d’accueil IIS devant chaque honeypot, c’est justement pour attirer les black hats
Rien que d’imaginer qu’ils ont perdu des heures à courir après leur propre queue me remplit de joie
Les black hats du haut du panier visent de grosses cibles, et ceux du bas se concentrent sur les proies faciles trouvées sur Shodan ou sur des zero-days applicatifs qu’ils ont eux-mêmes découverts
S’il existe des moyens de faire enrager les scanners de ports, je veux bien en connaître davantage
aspnet_client/admin.phpet leur faire renvoyer des en-têtes WebObjects, ça pourrait aussi devenir un bon hobbyQuand on dit que « IIS a un comportement hérité de l’ancienne règle DOS des noms de fichiers 8.3 », est-ce que cela signifie que le comportement sous-jacent du système d’exploitation est exposé, en combinaison avec le fait que la racine documentaire d’IIS est par défaut
C:\Inetpub?Sous Windows 10/11, les noms de fichiers 8.3 sont activés par défaut sur le lecteur C, mais désactivés par défaut sur les autres lecteurs
PS> (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion→24H2fsutil 8dot3name query C:renvoie8dot3 name creation is ENABLED, etfsutil 8dot3name query U:renvoieDISABLEDc:\inetpubsur tous les PC, pas seulement les serveurs, pour la raison très floue de « renforcer la protection »https://www.pcworld.com/article/2684062/why-is-windows-11-la...
DisplayVersionne renvoyait rien, et sur les anciennes versions comme LTSC, il semble qu’il faille utiliserReleaseIdcomme ci-dessous(Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId→1809Le style d’écriture de l’article est assez particulier
Waouh, ça me ramène vraiment en arrière
À une époque, il y avait tellement de scanners IIS que les logs serveur étaient pratiquement inutilisables
Il y avait une faille de traversée de répertoires où il suffisait d’encoder l’URL de
../, et ça a mis le feu à tout l’Internet pendant des moisIl y a encore des gens qui utilisent IIS ?
HOST/MACHINE.DOMAINLes services Windows et les identités d’App Pool IIS se connectent avec des (g)MSA ou des comptes virtuels (
NT Service*), ce qui permet d’avoir un environnement Kerberos administré qui fonctionne correctement sans gérer soi-même les rotations de mot de passe à 30/60/90 joursOn peut se connecter à MS SQL Server avec Kerberos, puis aux flux OAuth2 d’autres applications web aussi avec Kerberos, et tout s’imbrique naturellement
Depuis le shell Windows de base, WinRM fonctionne aussi sans configuration particulière, et techniquement il peut même contourner la 2FA, parce que c’est effectivement comme ça que ça marche
Est-ce possible sous Linux ? Oui, mais selon l’environnement de travail il est peu probable que ce soit correctement configuré, du moins d’après mon expérience
Il y a énormément de vieilles applications, dont un bon nombre sont très importantes
Toute très grande entreprise assez vaste pour faire tourner un intranet a probablement du IIS quelque part, voire partout
L’intégration avec AD est bonne, ce qui rend absurdement simples des opérations très complexes
L’usage baisse à mesure que le monde bascule vers AWS, mais c’est tout aussi idiot de se lier encore une fois au produit propriétaire d’un seul fournisseur (Amazon). La seule différence, c’est qu’on ne possède même plus le matériel cette fois
L’IT du secteur public aime IIS. Si vous regardez les sites fiscaux ou immobiliers des collectivités locales, il y a de fortes chances de voir plein de scripts
.aspxJ’en ai vu aussi dans des applications web du secteur public en Europe, où des applications .NET sur mesure avec un backend SQL Server font souvent tourner toute une administration locale
L’Asie, et en particulier la Chine et Taïwan, semblaient aimer IIS et l’utiliser pour héberger toutes sortes de choses
Le monde est bien passé en grande partie à autre chose, mais il reste une quantité énorme de code legacy sur IIS qui fait tourner des villes et des organisations cruciales, et cela ne changera probablement pas
Si vous pensez que c’est grave, il existe encore des endroits sur le web qui font tourner AS/400, Lotus Notes et Novell GroupWise
Il suffit d’imaginer une petite entreprise qui produit du code .NET Framework d’entreprise, où tout est sous Windows, où les clients n’acceptent pas le cloud, où SOAP reste dominant, et où l’unique responsable IT n’a pas eu une seconde depuis 2010 pour se soucier de ce qui s’est passé ensuite
Une réécriture complète est irréaliste, on voudrait bien améliorer la sécurité, mais on n’a ni les moyens d’aller fouiller profondément la configuration ni la possibilité de parier sur quelque chose d’aussi complexe que Kubernetes
J’aimerais voir ce type d’analyse aussi pour nginx
À l’échelle de l’ensemble des navigateurs desktop, le design est vraiment réussi, et le contenu aussi est excellent
Cela dit, à part ça, la présentation me plaît
L’auteur semble devoir encore apprendre à quel point la civilisation dépend de gens qui, sans raison particulière, choisissent de ne pas être malveillants les uns envers les autres
Je ne comprends pas ce qui se passe avec la barre latérale de gauche qui chevauche le texte principal