Ін’єкція «Джумлі»

єкція

Joomla 3.7.0, крім безлічі поліпшень і виправлень, принесла в ядро ​​функцію полів користувача і, зокрема, компонент com_fields . Як ти вже, напевно, здогадався, цей новий компонент став причиною проблеми. Так що без зайвих церемоній приступимо до захоплюючої подорожі у вихідниках слідами вразливості.

Деталі вразливості

Насамперед заглядаємо в сам файл контролера.

Відразу ж впадає у вічі умова [32]: якщо view і layout приймають значення fields і modal відповідно, то CMS завантажує адміністраторську версію компонента com_fields . І всі запити від звичайного користувача проксируватимуться в нього.

Що ж це нам дає? Давай подивимося.

Заглянемо всередину методу getListQuery, він займається тим, що збирає запит до бази даних. Нас цікавить частина з рядком, у якому формується сортування (ORDER BY).

Змінна $listOrdering — назва поля у таблиці, за якою потрібно відсортувати запит. Її фільтрує функція escape, яка залежить від драйвера, що використовується на сервері, для роботи з БД. Вона повертає рядок, у якому екрановані спецсимволи, зокрема лапки.

Розглянемо вихідний код цієї функції для драйвера mysqli. Він зустрічається найчастіше, оскільки Joomla при встановленні пропонує саме його.

/libraries/joomla/database/driver/mysqli.php

Для фільтрації використовується функція mysqli_real_escape_string (рядок 246), яка екранує null-байти, перенесення рядків, одинарні та подвійні лапки. Однак у нашому випадку це абсолютно непотрібні дії, тому що в нашій змінній зберігається назва колонки для сортування.

Давай подивимося, якпередати потрібні нам значення $listOrdering . Метод getState успадковується прямо з абстрактного класу JModelLegacy , який є батьком для JModelList , а він, у свою чергу, успадковується нашим FieldsModelFields .

Продовження доступне лише передплатникам

Варіант 2. Купи один матеріал