1 Punkte von GN⁺ 3 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • Die Standard-IIS-Seite ist keine Sackgasse, sondern der Ausgangspunkt für Bug-Bounty-Aufklärung; mit Shodan, Google Dorks und Response-Headern lassen sich exponierte Server und versteckte vHosts eingrenzen
  • HTTP/1.0-Anfragen, HTTPAPI 2.0 404, SSL-Zertifikate und Brute-Forcing des Host-Headers liefern erste Hinweise auf interne IPs, Exchange-Hostnamen und virtuelle Hosts
  • Die auf DOS 8.3 basierende Tilde-Shortname-Enumeration von IIS kann auch bei deaktiviertem Directory Listing kurze Datei- und Verzeichnisnamen offenlegen; mit GitHub-Suche, BigQuery, LLM und crunch lassen sich Kandidaten für die vollständigen Namen ableiten
  • IIS/.NET-spezifisches Fuzzing zielt zuerst auf hochwertige Pfade und Erweiterungen wie web.config, trace.axd, elmah.axd, appsettings.*.json, .aspx/.ashx/.asmx/.config
  • Freigelegte web.config, Cookieless-Session-Pfadnormalisierung, Reverse-Proxy-Path-Confusion, NTFS Alternate Data Streams, Upload-Erweiterungs-Bypässe und HPP zeigen, dass Fehlkonfigurationen und Legacy-Verhalten zur Angriffsfläche werden können

Aufklärungsmethoden zum Auffinden von IIS-Servern

  • IIS-Ziele lassen sich zuerst über Suchmaschinen und Internet-Asset-Suchdienste finden
  • Shodan-Abfragen verengen IIS-Server über die SSL-Zertifikate der Zieldomain, den Organisationsnamen und die Kombination http.title:"IIS"
    • Beispielziele umfassen Staging-Server, vergessene Admin-Panels und intern gedachte Tools, die im Internet exponiert sind
    • Neben Shodan bieten auch fofa, censys, netlas und odin unterschiedliche Internet-Indizes
  • Google Dorking wird verwendet, um Seiten mit indexierten IIS-Spuren zu finden
    • Der Ordner aspnet_client und _vti_bin gelten als IIS-Signale
    • ext:aspx findet ASP.NET-Seiten und deutet darauf hin, dass darunter IIS läuft
    • Wildcard-Suchen wie site:*.target.com und site:*.*.target.com werden genutzt, um verschachtelte Subdomains zu finden, die bei grundlegender Subdomain-Enumeration übersehen wurden
  • Response-Header sind der einfachste Hinweis zur Identifikation von IIS
    • Server: Microsoft-IIS/10.0
    • X-Powered-By: ASP.NET
    • Für Prüfungen im großen Maßstab lässt sich mit httpx oder nuclei eine Liste von IIS-Zielen erstellen

Erste Hinweise nach der Bestätigung von IIS

  • Einige IIS-Konfigurationen, insbesondere Exchange- oder OWA-Frontends, können bei HTTP/1.0-Anfragen interne Informationen offenlegen
  • Im Location-Header kann eine interne IP wie https://192.168.5.237/owa/ enthalten sein
  • Der X-FEServer-Header kann den internen Hostnamen eines Exchange-Servers preisgeben
  • Solche Informationen führen später zu nutzbarer Informationspreisgabe

Automatisierung und das Finden versteckter virtueller Hosts

  • Nachdem eine IIS-Zielliste vorliegt, lässt sich nuclei mit Tags wie microsoft, windows, asp, aspx, iis, azure, config, exposure ausführen, um Wiederholungsarbeit zu reduzieren
  • HTTPAPI 2.0 404 bedeutet nicht zwingend, dass tatsächlich nichts vorhanden ist
    • Eine IIS-Instanz kann an einen bestimmten virtuellen Host gebunden sein, und weil der Host-Header der Anfrage nicht passt, wird 404 zurückgegeben
  • Es gibt zwei Wege, versteckte vHosts zu finden
    • Den benötigten Hostnamen aus dem Subject- oder SAN-Feld des SSL-Zertifikats ermitteln
    • Wenn das Zertifikat nicht hilft, mit ffuf und einer Host-Header-Wordlist vHosts bruteforcen
  • Wird der richtige Hostname gefunden, kann statt einer generischen 404-Antwort die eigentliche Anwendung antworten

IIS-Tilde-Shortname-Enumeration

  • IIS kann aufgrund eines Verhaltens aus den alten DOS-8.3-Dateinamensregeln mit speziellen Anfragen kurze Namen von Dateien und Verzeichnissen enumerieren
  • Selbst wenn Directory Listing deaktiviert ist, können Fragmente wie WEB~1.CON, GLOBAL~1.ASA, SITEBA~1.ZIP, ADMIN~1 sichtbar werden
  • shortscan wird als Tool zur IIS-Shortname-Enumeration verwendet
  • burp’s IIS Tilde Enumeration Scanner kann ebenfalls als Alternative genutzt werden
  • Es gibt mehrere Wege, kurze Namen in vollständige Dateinamen umzuwandeln
    • LLM: Erzeugt mögliche Dateinamenskandidaten, die die Shortname-Fragmente enthalten
    • GitHub Code Search: Sucht anhand der ersten 6 Zeichen vor ~1 und der Erweiterung nach echten Dateinamen
    • GSNW: Nimmt Shortname-Fragmente entgegen und sammelt passende Dateinamen aus der GitHub Code Search
    • GitHub-IIS-Shortname-Generator: Erzeugt auf ähnliche Weise Wortlisten
    • shortnameguesser: Fragt anhand der Scanner-Ausgabe mehrere Quellen ab und erstellt eine zielgerichtete Wordlist
  • Der BigQuery-Ansatz sucht im öffentlichen GitHub-Datensatz von Google BigQuery nach Dateipfaden, die zum Shortname-Muster passen
  • Wenn LLM, GitHub und BigQuery scheitern, lässt sich mit crunch eine Wordlist der verbleibenden Zeichenkombinationen erstellen und mit ffuf testen
    • Dabei werden auch Dateinamensvarianten mit Bindestrich, Unterstrich, URL-kodierten Leerzeichen und ohne Trennzeichen geprüft
    • Windows erlaubt Leerzeichen in Dateinamen, und IIS kann diese ebenfalls ausliefern

IIS/.NET-spezifisches Fuzzing

  • Mit allgemeinen Wordlists allein lassen sich die spezifischen Dateien und Endpunkte des IIS/.NET-Ökosystems leicht übersehen
  • Zu den hochwertigen Zielen, die zuerst geprüft werden sollten, gehören:
    • /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 ist der ASP.NET-Trace-Viewer; wenn er aktiv ist, können Request-/Response-Logs inklusive Headern, Cookies und manchmal auch Zugangsdaten offengelegt werden
  • elmah.axd kann als Debug-Endpunkt, den Entwickler nicht deaktiviert haben, bestehen bleiben und Fehlerprotokolle anzeigen
  • Zu den fuzzing-relevanten IIS-spezifischen Erweiterungen gehören .asp, .aspx, .ashx, .asmx, .wsdl, .wadl, .config, .xml, .zip, .txt, .dll, .json
  • Nützliche Wordlists sind unter anderem:
    • secLists IIS.txt: Enthält grundlegende IIS-Pfade, allgemeine Handler und Legacy-Dateien
    • orwa’s iis.txt: Wird als IIS-Liste vorgestellt, die in realen Bug-Bounty-Programmen verwendet wurde
    • orwa’s aspx.txt: Eine auf .aspx-Endpunkte fokussierte Liste
    • wfuzz iis.txt: Eine kleine Liste mit Fokus auf bekannte verwundbare IIS-Pfade
    • dirbuster-ng iis.txt: Eine kompakte Liste, die auf IIS-spezifische Schwachstellen zielt
    • Assetnote wordlists: Automatisch aus realen Crawling-Daten erzeugt, monatlich aktualisiert; empfohlen werden die ASP- und ASPX-Listen
    • OneListForAll: onelistforallshort.txt eignet sich für zielgerichtete Läufe, die vollständige Liste für lange Scans
  • Da IIS nicht zwischen Groß- und Kleinschreibung unterscheidet, können Mixed-Case-Wordlists doppelte Anfragen erzeugen
    • Verwendet werden daher Listen in Kleinbuchstaben oder eine Normalisierung mit tr '[:upper:]' '[:lower:]' | sort -u

web.config und Code-Exposition

  • Wenn sich web.config per Path Traversal, über falsch freigelegte Backups oder per shortname-basierter Entdeckung lesen lässt, kann die Auswirkung bei IIS-Zielen erheblich sein
  • In IIS-web.config können Machine Keys enthalten sein, die für die Signierung und Verschlüsselung von ViewState verwendet werden
  • Sind Machine Keys vorhanden, lassen sich bösartige serialisierte ViewState-Payloads fälschen, was zu deserialisierungsbasierter Remote Code Execution führen kann
  • ysoserial.net ist ein Tool, das bei vorhandenen Keys die Payload-Erzeugung unterstützt
  • Gibt es Parameter für Dateidownload oder Dateilesen, folgt daraus typischerweise der Versuch mit ../../web.config und URL-kodierten Varianten
  • Das Legacy-Feature Cookieless Session von ASP.NET kann Sitzungstoken im Format (S(X)) in den URL-Pfad einfügen
    • Wenn IIS dieses Segment bei der Pfadnormalisierung entfernt, kann dadurch die Zugriffssperre auf das Verzeichnis /bin umgangen werden
    • Newtonsoft.Json.dll ist als Bibliothek für sich genommen Standard und muss keine Anwendungsgeheimnisse enthalten
    • Erhält man jedoch echte Anwendungs-DLLs, lassen sie sich mit dotPeek oder dnSpy dekompilieren, um hartkodierte Zugangsdaten, API-Keys, Logik interner Endpunkte oder benutzerdefinierte Authentifizierungsimplementierungen zu sehen

Pfadnormalisierung, NTFS, Uploads und WAF-Umgehung

  • Wenn IIS hinter einem Reverse Proxy steht oder selbst als Reverse Proxy arbeitet, können Unterschiede in der Pfadnormalisierung zur Umgehung von Zugriffskontrollen führen
    • Der Proxy kann einen kodierten Pfad als andere Ressource weiterleiten, während IIS %2f zu / dekodiert und Traversal interpretiert, sodass geschützte Pfade ausgeliefert werden
  • IIS 7.5 und ähnliche Versionen können durch NTFS-Alternate Data Streams und Index-Allocation-Verhalten eine Umgehung von Basic Authentication ermöglichen
    • Das Authentifizierungsmodul erkennt den geschützten Pfad dann nicht, während das Dateisystem ihn als tatsächliches Verzeichnis interpretiert
  • Bei Dateiupload-Funktionen kann selbst bei blockierten .aspx- oder .asp-Dateien über Erweiterungen, die IIS standardmäßig als HTML ausliefert, Stored XSS möglich sein
    • Beispiele für HTML-rendernde Erweiterungen: .cer, .hxt, .htm
    • Beispiele für XML-basierte XSS-Vektorerweiterungen: .dtd, .mno, .vml, .xsl, .xht, .svg, .xml, .xsd, .xsf, .svgz, .xslt, .wsdl, .xhtml
  • IIS entfernt Punkte am Ende von Dateinamen, wodurch Upload-Filter etwa mit shell.aspx., shell.aspx.., shell.aspx... umgangen werden können
  • Für Server-Side-Includes werden die Erweiterungen .stm, .shtm, .shtml genannt
  • Wenn eine WAF Payloads blockiert, lässt sich mit HTTP Parameter Pollution die Payload auf doppelte Parameter verteilen
    • IIS und ASP.NET verketten doppelte Parameterwerte standardmäßig mit Kommas, sodass die Payload hinter der WAF wieder zusammengesetzt werden kann

Lehren und Materialien aus IIS-Bug-Bounties

1 Kommentare

 
GN⁺ 3 시간 전
Hacker-News-Kommentare
  • Der Grund, warum vor jedem Honeypot eine IIS-Landingpage steht, ist genau der, Black Hats anzulocken
    Der Gedanke, dass sie Stunden damit verschwendet haben, ihrem eigenen Schwanz hinterherzujagen, ist einfach herrlich

    • Man sollte dort nicht aufhören, sondern vorne einen echten IIS-Server hinstellen und den Honeypot wie eine Matrjoschka mehrfach verschachteln, nur um zu sehen, wie tief sie reinkommen
    • Wenn man den Honeypot nicht im IP-Bereich einer bestehenden Organisation betreibt, bekommt man am Ende sowieso nur Bot-Traffic
      Die besseren Black Hats gehen auf große Ziele, und die schlechteren konzentrieren sich auf leichte Beute aus Shodan oder auf Application-Zero-Days, die sie selbst gefunden haben
    • Noise ist eine als Sicherheitsschicht wirklich unterschätzte Sache
    • Ich habe die Ports für Plex und Nintendo Switch geöffnet, und die Scans kamen völlig irre rein
      Wenn es Wege gibt, Port-Scannern eins auszuwischen, würde ich gern mehr darüber wissen
    • URLs wie aspnet_client/admin.php anzulegen und dann WebObjects-Header zurückzugeben, klingt ebenfalls nach einem netten Hobby
  • Mit der Aussage, „IIS habe ein Legacy-Verhalten geerbt, das aus den alten DOS-8.3-Dateinamensregeln stammt“, frage ich mich, ob damit gemeint ist, dass durch den standardmäßigen IIS-Dokumentenstamm C:\Inetpub das Verhalten des zugrunde liegenden Betriebssystems offengelegt wird
    Unter Windows 10/11 sind 8.3-Dateinamen auf Laufwerk C standardmäßig aktiviert, auf anderen Laufwerken aber standardmäßig deaktiviert
    PS> (Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').DisplayVersion24H2
    fsutil 8dot3name query C: ergibt 8dot3 name creation is ENABLED, fsutil 8dot3name query U: dagegen DISABLED

  • Der Schreibstil des Artikels ist ziemlich eigenartig

    • Ich habe mich mehrmals gefragt, ob das von Claude geschrieben wurde
  • Wow, das weckt sofort alte Erinnerungen
    Früher gab es so viele IIS-Scanner, dass Server-Logs praktisch unbrauchbar waren
    Es gab eine Directory-Traversal-Schwachstelle, bei der man nur ../ URL-encoden musste, und sie hat monatelang das ganze Internet in Brand gesetzt

    • Solche Traversal-Versuche sieht man auch heute noch wirklich häufig, direkt neben PHP-/WordPress-Script-Kiddie-Angriffen
  • Gibt es überhaupt noch Leute, die IIS verwenden?

    • Ja. Wenn man Windows Server und IIS nutzt, hat man Maschinen in der Domäne, normalerweise mit einem SPN im Format HOST/MACHINE.DOMAIN
      Windows-Dienste und IIS-App-Pool-Identitäten melden sich mit (g)MSA oder virtuellen Konten (NT Service*) an, sodass eine sauber verwaltete Kerberos-Umgebung funktioniert, ohne dass man selbst 30/60/90-Tage-Passwortwechsel handhaben muss
      Man meldet sich per Kerberos bei MS SQL Server an, und auch in OAuth2-Flows anderer Web-Apps per Kerberos, und das funktioniert alles ganz natürlich
      WinRM lässt sich aus der Standard-Windows-Shell ebenfalls ohne große Konfiguration nutzen, und technisch kann man damit sogar 2FA umgehen, weil es in der Praxis genau so funktioniert
      Ob das unter Linux auch geht? Ja, aber wie wahrscheinlich es ist, dass es dort sauber eingerichtet wird, hängt vom Arbeitsumfeld ab, und meiner Erfahrung nach ist die Wahrscheinlichkeit nicht besonders hoch
    • In Unternehmens-IT-Abteilungen wird das noch sehr viel genutzt
    • Ich spreche oft mit Leuten, die auf Windows Server weiterhin IIS betreiben
      Es gibt extrem viele alte Anwendungen, und darunter sind etliche sehr wichtige
    • Manche Banken verwenden noch IIS
      Wenn ein Großunternehmen groß genug für ein Intranet ist, läuft irgendwo darin — vielleicht sogar überall — IIS
      Es integriert sich gut mit AD und macht selbst sehr komplexe Aufgaben absurd einfach
      Die Nutzung nimmt ab, weil die Welt zu AWS wechselt, aber das bedeutet nur, sich wieder an das proprietäre Produkt eines einzelnen Anbieters zu ketten (Amazon), was genauso töricht ist. Der einzige Unterschied ist, dass man diesmal nicht einmal die Hardware besitzt
      Der öffentliche Sektor mag IIS. Wenn man sich kommunale Steuer- oder Immobilien-Websites ansieht, findet man mit hoher Wahrscheinlichkeit jede Menge .aspx-Skripte
      Ich habe das auch in Web-Apps des öffentlichen Sektors in Europa gesehen, wo maßgeschneiderte .NET-Anwendungen mit SQL-Server-Backend oft ganze Kommunalverwaltungen tragen
      Asien, besonders China und Taiwan, schien IIS zu mögen und es für alle möglichen Hosting-Zwecke einzusetzen
      Die Welt ist größtenteils weitergezogen, aber es gibt immer noch gewaltige Mengen Legacy-Code auf IIS, die Städte und wichtige Organisationen am Laufen halten, und das wird sich wohl nicht ändern
      Wenn du das schlimm findest: Es gibt immer noch Orte, die AS/400, Lotus Notes und Novell GroupWise im Web betreiben
    • Stimmt. Und aus der Perspektive von jemandem, der sich nicht gut auskennt: Was soll man heute stattdessen verwenden?
      Stell dir ein kleines Unternehmen vor, das Enterprise-Code für .NET Framework baut, komplett auf Windows setzt, Kunden hat, die Cloud nicht akzeptieren, bei denen SOAP noch Mainstream ist und der einzige IT-Verantwortliche keine Zeit hatte, sich dafür zu interessieren, was seit 2010 passiert ist
      Ein kompletter Rewrite ist realistisch unmöglich, man hätte gern Sicherheitsgewinne, aber keine Kapazität, sich tief in Konfiguration einzugraben, und man kann auch nicht auf etwas Komplexes wie Kubernetes wetten
  • So eine Analyse würde ich auch gern über nginx lesen

  • Für Desktop-Browser insgesamt ist das Design wirklich gut, und der Inhalt ebenfalls hervorragend

    • Ich weiß nicht, ob das sarkastisch gemeint ist, aber in meinem Desktop-Browser überlappt die Sidebar das Hauptpanel, sodass Text auf Text liegt
      Davon abgesehen gefällt mir die Präsentation aber
    • „Hervorragend“ ist für Inhalte auf dem Niveau früher 2000er-Script Kiddies vielleicht etwas großzügig
      Der Autor muss wohl noch lernen, wie sehr die Zivilisation darauf angewiesen ist, dass Menschen ohne besonderen Grund nicht gemein zueinander sind
  • Ich verstehe nicht, was mit der linken Sidebar los ist, die den Haupttext überlappt