Полностью твой админ. Эксплуатируем LFI и выполнение произвольного кода в phpMyAdmin - «Новости»
«Эпический» сериал Netflix по Assassin’s Creed впервые за несколько лет подал признаки жизни - «Новости сети»
«Эпический» сериал Netflix по Assassin’s Creed впервые за несколько лет подал признаки жизни - «Новости сети»
«Хуже моего самого страшного кошмара»: утечка геймплея с тестирования новой The Sims ужаснула фанатов - «Новости сети»
«Хуже моего самого страшного кошмара»: утечка геймплея с тестирования новой The Sims ужаснула фанатов - «Новости сети»
Самые полные издания Borderlands 3 и Diablo III добавят в Game Pass, а лучшая игра 2024 года по версии 3DNews подписку скоро покинет - «Новости сети»
Самые полные издания Borderlands 3 и Diablo III добавят в Game Pass, а лучшая игра 2024 года по версии 3DNews подписку скоро покинет - «Новости сети»
Amazon включилась в борьбу за американский бизнес TikTok - «Новости сети»
Amazon включилась в борьбу за американский бизнес TikTok - «Новости сети»
«Яндекс» представил «Нейроэксперта» — ИИ, который соберёт базу знаний по ссылкам и файлам пользователя - «Новости сети»
«Яндекс» представил «Нейроэксперта» — ИИ, который соберёт базу знаний по ссылкам и файлам пользователя - «Новости сети»
ZA/UM отреагировала на утечку «одиночной кооперативной игры» Locust City во вселенной Disco Elysium - «Новости сети»
ZA/UM отреагировала на утечку «одиночной кооперативной игры» Locust City во вселенной Disco Elysium - «Новости сети»
GTA V вернётся в Game Pass, причём совсем скоро — впервые игра будет доступна в PC Game Pass - «Новости сети»
GTA V вернётся в Game Pass, причём совсем скоро — впервые игра будет доступна в PC Game Pass - «Новости сети»
Обзор системы резервного копирования и восстановления данных «Кибер Бэкап Малый Бизнес» - «Новости сети»
Обзор системы резервного копирования и восстановления данных «Кибер Бэкап Малый Бизнес» - «Новости сети»
Nintendo создала гибридный эмулятор Switch, но работать он будет только на Switch 2 - «Новости сети»
Nintendo создала гибридный эмулятор Switch, но работать он будет только на Switch 2 - «Новости сети»
Лавкрафтианский хоррор Stygian: Outer Gods готовится к старту открытой «беты» — новый геймплейный трейлер - «Новости сети»
Лавкрафтианский хоррор Stygian: Outer Gods готовится к старту открытой «беты» — новый геймплейный трейлер - «Новости сети»
Новости мира Интернет » Новости » Полностью твой админ. Эксплуатируем LFI и выполнение произвольного кода в phpMyAdmin - «Новости»

Содержание статьи

  • Local File Inclusion (LFI). Детали уязвимости
  • Демонстрация уязвимости (видео)
phpMyAdmin — популярнейший веб-менеджер для баз данных MySQL. Возможность его установки есть у большинства хостингов, и примерно на каждом втором сайте можно найти путь, по которому он установлен. Сам понимаешь, насколько это лакомый кусочек — уязвимость в таком продукте. Под угрозой — масса компаний от мала до велика.

Уязвимость была обнаружена ребятами из команды ChaMd5 и позволяет выполнить произвольный код на целевой системе. Найденный баг затрагивает все версии phpMyAdmin ветки 4.8, вплоть до последней — 4.8.1.


Подготовка


Первым делом готовим все для демонстрации уязвимости. Так как phpMyAdmin написан на PHP (кто бы мог подумать), то его установка не вызовет никаких проблем даже у твоей прабабушки.


Как обычно, воспользуемся докер-контейнерами для максимально быстрого создания нужной нам инфраструктуры. Мы будем ломать веб-интерфейс для администрирования MySQL, поэтому сначала поднимем сервер MySQL.


$ docker run -d -e MYSQL_USER="pmavh" -e MYSQL_PASSWORD="8Aiu04nOay" -e MYSQL_DATABASE="pmavh" --rm --name=mysql --hostname=mysql mysql/mysql-server

Теперь дело за оставшимися тремя буквами из стека LAMP: Linux, Apache и PHP. Веб-сервер будет на основе Debian.


$ docker run -it --rm -p80:80 --name=pmavh --hostname=pmavh --link=mysql debian /bin/bash

Ставим необходимые сервисы и зависимости.


$ apt-get update && apt-get install -y apache2 php php-mysqli php-mbstring nano wget php-xdebug

Если не хочешь возиться с отладкой, то можешь не устанавливать модуль php-xdebug и не выполнять команды для его настройки.


$ echo "xdebug.remote_enable=1"  /etc/php/7.0/apache2/conf.d/20-xdebug.ini
$ echo "xdebug.remote_host=192.168.99.1"  /etc/php/7.0/apache2/conf.d/20-xdebug.ini

Следующим шагом будет загрузка дистрибутива и его распаковка в веб-директорию.


$ cd /tmp && wget https://files.phpmyadmin.net/phpMyAdmin/4.8.1/phpMyAdmin-4.8.1-all-languages.tar.gz
$ tar xzf phpMyAdmin-4.8.1-all-languages.tar.gz
$ rm -rf /var/www/html/* && mv phpMyAdmin-4.8.1-all-languages/* /var/www/html/
$ chown -R www-data:www-data /var/www/html/

Теперь нужно выполнить базовую настройку phpMyAdmin, иначе работа с ним будет невозможна. Для настройки нужно создать или отредактировать конфигурационный файл — ручками или с помощью специального интерфейса.


Я воспользуюсь первым вариантом, так как детальная настройка нас не интересует. Для дефолтной cookie-авторизации нужно указать секретный ключ (blowfish_secret), для шифрования данных сессии.


$ sed -i "s/cfg['blowfish_secret'] = '/$(tr -dc 'a-zA-Z0-9' < /dev/urandom | fold -w 32 | head -n 1)/" /var/www/html/config.sample.inc.php

Ну и необходимо указать адрес сервера MySQL, к которому будет подключение. У нас подключен контейнер под названием mysql, его и запишем.


$ sed -i 's/localhost/mysql/' /var/www/html/config.sample.inc.php

Далее делаем конфиг легитимным, переименовав его.


$ mv /var/www/html/config.sample.inc.php /var/www/html/config.inc.php

Можно запускать Apache, проверять работу нашего инструмента и переходить к поиску и эксплуатации уязвимости.


$ service apache2 start


Установленный phpMyAdmin версии 4.8.1

Local File Inclusion (LFI). Детали уязвимости


Баг можно проэксплуатировать только под учеткой авторизованного пользователя, поэтому для начала нужно войти. Сразу стало немного скучно? Не стоит недооценивать опасность этой уязвимости! Сколько раз в моей практике было так, что креды для доступа к базе данных есть, а шелл залить возможности нет. Теперь таких проблем будет на порядок меньше.


Итак, заглянем почти в самое начало файла index.php.


/index.php

54: // If we have a valid target, let’s load that script instead
55: if (! empty($_REQUEST['target'])
56:
&& is_string($_REQUEST['target'])
57:
&& ! preg_match('/^index/', $_REQUEST['target'])
58:
&& ! in_array($_REQUEST['target'], $target_blacklist)
59:
&& Core::checkPageValidity($_REQUEST['target'])
60: ) {
61:
include $_REQUEST['target'];
62:
exit;
63: 

Интересный кусочек кода, не правда ли? По сути, он выполняет включение (include) того, что мы передадим в параметре target. Причем делать это можно любыми способами (POST, GET, COOKIE) благодаря глобальной переменной $_REQUEST. Все, что от нас требуется, — это успешно пройти пять условий, которые проверяются if.


Условие 1. ! empty($_REQUEST['target'] — тут совсем все просто. Конечно же, мы будем указывать что-то в target, иначе в чем смысл?


Условие 2. is_string($_REQUEST['target']) — ну разумеется, это будет строкой, include не умеет работать с массивом имен файлов.


Условие 3. ! preg_match('/^index/', $_REQUEST['target']) — название файла для include не должно начинаться с index. Хорошо, учтем этот момент.


Условие 4. ! in_array($_REQUEST['target'], $target_blacklist) — файл не должен находиться в черном списке. Вот как он выглядит:


/index.php

50: $target_blacklist = array (
51:
'import.php', 'export.php'
52: );

Окей. Постараемся подобрать другие интересные файлы.


Источник новостиgoogle.com
Цитирование статьи, картинки - фото скриншот - Rambler News Service.
Иллюстрация к статье - Яндекс. Картинки.
Есть вопросы. Напишите нам.
Общие правила  поведения на сайте.

Содержание статьи Local File Inclusion (LFI). Детали уязвимости Демонстрация уязвимости (видео) phpMyAdmin — популярнейший веб-менеджер для баз данных MySQL. Возможность его установки есть у большинства хостингов, и примерно на каждом втором сайте можно найти путь, по которому он установлен. Сам понимаешь, насколько это лакомый кусочек — уязвимость в таком продукте. Под угрозой — масса компаний от мала до велика. Уязвимость была обнаружена ребятами из команды ChaMd5 и позволяет выполнить произвольный код на целевой системе. Найденный баг затрагивает все версии phpMyAdmin ветки 4.8, вплоть до последней — 4.8.1. Подготовка Первым делом готовим все для демонстрации уязвимости. Так как phpMyAdmin написан на PHP (кто бы мог подумать), то его установка не вызовет никаких проблем даже у твоей прабабушки. Как обычно, воспользуемся докер-контейнерами для максимально быстрого создания нужной нам инфраструктуры. Мы будем ломать веб-интерфейс для администрирования MySQL, поэтому сначала поднимем сервер MySQL. Теперь дело за оставшимися тремя буквами из стека LAMP: Linux, Apache и PHP. Веб-сервер будет на основе Debian. Ставим необходимые сервисы и зависимости. Если не хочешь возиться с отладкой, то можешь не устанавливать модуль php-xdebug и не выполнять команды для его настройки. Следующим шагом будет загрузка дистрибутива и его распаковка в веб-директорию. Теперь нужно выполнить базовую настройку phpMyAdmin, иначе работа с ним будет невозможна. Для настройки нужно создать или отредактировать конфигурационный файл — ручками или с помощью специального интерфейса. Я воспользуюсь первым вариантом, так как детальная настройка нас не интересует. Для дефолтной cookie-авторизации нужно указать секретный ключ (blowfish_secret), для шифрования данных сессии. Ну и необходимо указать адрес сервера MySQL, к которому будет подключение. У нас подключен контейнер под названием mysql, его и запишем. Далее делаем конфиг легитимным, переименовав его. Можно запускать Apache, проверять работу нашего инструмента и переходить к поиску и эксплуатации уязвимости. Установленный phpMyAdmin версии 4.8.1 Local File Inclusion (LFI). Детали уязвимости Баг можно проэксплуатировать только под учеткой авторизованного пользователя, поэтому для начала нужно войти. Сразу стало немного скучно? Не стоит недооценивать опасность этой уязвимости! Сколько раз в моей практике было так, что креды для доступа к базе данных есть, а шелл залить возможности нет. Теперь таких проблем будет на порядок меньше. Итак, заглянем почти в самое начало файла index.php. /index.php Интересный кусочек кода, не правда ли? По сути, он выполняет включение (include) того, что мы передадим в параметре target. Причем делать это можно любыми способами (POST, GET, COOKIE) благодаря глобальной переменной $Filtered. Все, что от нас требуется, — это успешно пройти пять условий, которые проверяются if. Условие 1. ! empty($Filtered_

запостил(а)
Page
Вернуться назад
0

Смотрите также

А что там на главной? )))



Комментарии )))