2 points par GN⁺ 3 시간 전 | 1 commentaires | Partager sur WhatsApp
  • 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ête Host fournissent 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 crunch servent à 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_client et _vti_bin sont traités comme des signaux IIS
    • ext:aspx permet de trouver des pages ASP.NET et suggère la présence d’IIS en dessous
    • Les recherches avec joker comme site:*.target.com et site:*.*.target.com servent à découvrir des sous-domaines imbriqués que l’énumération classique des sous-domaines peut manquer
  • Les en-têtes de réponse sont l’indice le plus simple pour identifier IIS
    • Server: Microsoft-IIS/10.0
    • X-Powered-By: ASP.NET
    • À grande échelle, on peut créer une liste de cibles IIS avec httpx ou nuclei

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 Location peut contenir une IP interne comme https://192.168.5.237/owa/
  • L’en-tête X-FEServer peut 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 nuclei avec des tags comme microsoft, windows, asp, aspx, iis, azure, config, exposure permet de réduire le travail répétitif
  • HTTPAPI 2.0 404 ne 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 Host de la requête ne correspond pas
  • 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 ffuf et une wordlist pour l’en-tête Host
  • 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~1 peuvent ê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 ~1 et 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
  • 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.axd est 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 identifiants
  • elmah.axd peut 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.txt pour 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

Exposition de web.config et fuite de code

  • Si web.config peut ê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.config d’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.config et 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.dll est 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

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 %2f en / et interprète le traversal, ce qui peut donner accès à des chemins protégés
  • 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 .aspx et .asp sont 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
  • 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, .shtml sont 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

1 commentaires

 
GN⁺ 3 시간 전
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

    • Il ne faudrait pas s’arrêter là : mettre un vrai serveur IIS en frontal, puis empiler les honeypots comme des poupées russes pour voir jusqu’où ils vont entrer, ce serait amusant
    • À moins de faire tourner le honeypot sur la plage d’IP d’une organisation existante, on ne reçoit au final que du trafic de bots
      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
    • Le bruit est vraiment une couche de sécurité sous-estimée
    • J’ai ouvert les ports de Plex et de la Nintendo Switch, et les scans sont arrivés comme des fous
      S’il existe des moyens de faire enrager les scanners de ports, je veux bien en connaître davantage
    • Créer des URL comme aspnet_client/admin.php et leur faire renvoyer des en-têtes WebObjects, ça pourrait aussi devenir un bon hobby
  • Quand 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').DisplayVersion24H2
    fsutil 8dot3name query C: renvoie 8dot3 name creation is ENABLED, et fsutil 8dot3name query U: renvoie DISABLED

    • À côté de ça, ça me rappelle quand une mise à jour de Windows avait créé c:\inetpub sur 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...
    • La recherche originale sur le sujet est ici : https://soroush.me/downloadable/microsoft_iis_tilde_characte...
    • Sur une machine Windows 10, la commande DisplayVersion ne renvoyait rien, et sur les anciennes versions comme LTSC, il semble qu’il faille utiliser ReleaseId comme ci-dessous
      (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').ReleaseId1809
  • Le style d’écriture de l’article est assez particulier

    • Je me suis demandé plusieurs fois si ce n’était pas écrit par Claude
  • 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 mois

    • Ce genre de tentatives de traversée reste encore aujourd’hui extrêmement courant, au même niveau que les attaques de script kiddies contre PHP/WordPress
  • Il y a encore des gens qui utilisent IIS ?

    • Oui. Quand on utilise Windows Server et IIS, on a une machine jointe au domaine, généralement avec un SPN de la forme HOST/MACHINE.DOMAIN
      Les 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 jours
      On 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
    • Les services IT d’entreprise l’utilisent encore énormément
    • Je parle souvent avec des gens qui font toujours tourner IIS sur Windows Server
      Il y a énormément de vieilles applications, dont un bon nombre sont très importantes
    • Certaines banques utilisent encore IIS
      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 .aspx
      J’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
    • Oui. Et, question sincère de quelqu’un qui n’y connaît pas grand-chose : qu’est-ce qu’il faut utiliser aujourd’hui ?
      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

    • Je ne sais pas si c’est ironique, mais dans mon navigateur desktop, la barre latérale chevauche le panneau principal et le texte se superpose au texte
      Cela dit, à part ça, la présentation me plaît
    • Dire que c’est « excellent », c’est quand même généreux pour un contenu de niveau script kiddie du début des années 2000
      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