✔Как подчинить белку. Учимся эксплуатировать новую уязвимость в почтовике SquirrelMail - «Новости»
Содержание статьи
- Детали
- Чтение произвольных файлов
- Выводы
Почти год назад я писал о другой уязвимости SquirrelMail — тогда речь шла об RCE, а проблема?была в некорректной фильтрации параметров, которые отправляются бинарнику sendmail
. Через месяц после этого, в мае 2017 года, исследователь из TROOPERS18 Флориан Груноу (Florian Grunow) обнаружил еще одну критическую уязвимость в этом же продукте. На сей раз проблема закралась в функцию прикрепления?файлов к сообщению, а успешная эксплуатация позволяет атакующему читать файлы на целевой системе.
Груноу целый год не публиковал информацию о найденной уязвимости, ожидая, пока ее закроют. Однако разработчики за все это время?не удосужились ему ответить. Терпение у исследователя кончилось, и он выложил информацию в публичный доступ.
Как тестировать уязвимость
Перво-наперво поднимем стенд. Почтовые сервисы — это такой тип приложений, развертывание которых дает тебе как минимум +3 к навыкам администрирования. Тут много подводных камней, и?без погружения в конфиги не обойтись. Хорошо хоть старый добрый Docker может выручить. Если не хочешь возиться с настройкой, то качай готовый контейнер из моего репозитория и переходи к следующему абзацу.
Запускаем докер и устанавливаем необходимый?набор сервисов.
docker run -ti -p80:80 --rm --name=squirrel --hostname=squirrel debian /bin/bash
apt-get update && apt-get install -y sendmail wget nano apache2 dovecot-core dovecot-imapd php
[/code]
Скачиваем один из последних дистрибутивов SquirrelMail. Ссылка легко может быть недействительной, так как разработчики постоянно обновляют сборки, удаляя при этом старые архивы.
install -d /usr/local/src/downloads
cd /usr/local/src/downloads
wget http://prdownloads.sourceforge.net/squirrelmail/squirrelmail-webmail-1.4.22.tar.gz
mkdir /usr/local/squirrelmail
cd /usr/local/squirrelmail
mkdir data temp attach
chown www-dаta:www-data data temp attach
tar xvzf /usr/local/src/downloads/squirrelmail-webmail-1.4.22.tar.gz
mv squirrelmail-webmail-1.4.22 www
[/code]
Теперь нужно создать конфигурационный файл для Squirrell. Для этих целей существует конфигуратор.
www/configure
[/code]
Или по старинке?можешь вручную отредактировать дефолтный конфигурационный файл
www/config/config_default.php
.
Для нас главное, что в нем нужно указать, — это пути, по которым будут располагаться временные файлы, в том числе прикрепляемые к письмам. По умолчанию пути такие:
Data Directory: /var/local/squirrelmail/data/
.
Attachment Directory: /var/local/squirrelmail/attach/
.
Меняем их в?соответствии с реальным положением вещей.
sed "s/domain = 'example.com'/domain = 'visualhack'/; s#/var/local/squirrelmail/#/usr/local/squirrelmail/#g" /usr/local/squirrelmail/www/config/config_default.php > /usr/local/squirrelmail/www/config/config.php
[/code]
Приближаемся к финишной прямой — настройке почтовых сервисов. Указываем, какие протоколы будем использовать.
echo "protocols = imap" > /etc/dovecot/dovecot.conf
[/code]
Разрешаем авторизацию по файлу паролей.
echo !include auth-passwdfile.conf.ext > /etc/dovecot/conf.d/10-auth.conf
[/code]
Теперь добавим юзера в dovecot, так как для успешной эксплуатации уязвимости нужно быть авторизованным?в системе.
useradd -G mail attacker
install -d -g attacker -o attacker /home/attacker
cat /etc/passwd|grep attacker|sed 's/x/{PLAINpassw/; s/.$//' > /etc/dovecot/users
[/code]
Не забываем прописать в конфиге Apache алиас для доступа к дистрибутиву SquirrelMail и доступ на чтение папки, в которой он находится.
cat /etc/apache2/apache2.conf EOL
Alias /squirrelmail /usr/local/squirrelmail/www
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
EOL
[/code]
Вот вроде бы и все приготовления. Теперь запускаем требуемые сервисы и переходим?непосредственно к изучению уязвимости.
service dovecot start && service apache2 start && service sendmail start
[/code]
Детали
Проблема кроется в функции создания нового письма, так что с этого и начнем. Авторизуемся и откроем скрипт
compose.php
.
Приложение SquirrelMail написано на PHP, поэтому никаких проблем с чтением исходников не возникает. За вывод всей формы отвечает метод
showInputForm
.
Источник новости - google.com