Как-то, во время прогулок по просторам Интернета, я наткнулся на весьма любопытный скрипт. Назывался он "CGI-Telnet". Это было ни что иное, как интерпретатор команд операционной системы. Почитал исходник, головой покачал, языком поцокал и со словами "Авось, пригодится..." положил к себе на винт в далёкую папку. На этом бы дело и закончилось, если бы не статья «Примитивный дефейс». Прочитав её, я вспомнил, что подобный скрипт где-то у меня валялся. Нашёл, прикрутил к своему серверу, поюзал... И вдруг меня посещает идея... Решил проверить... Была у меня шеллка платная. Предоставлялся telnet-доступ и хостинг. Залогинился я туда, запустил Midnight Commander и пошёл шарить по директориям пользователей. И вправду, у некоторых пользователей в папке public_html нашлись файлы с разрешениями rwx-rwx-rwx... Одного такого файла было достаточно, чтобы пользователь оказался порутанным. Как? Очень просто... Рассмотрим два варианта атаки:
Вариант 1
Необходимо:
- Telnet или SSH доступ к аккаунту.
- Возможность хоститься там же.
- Нерадивый пользователь, у которого открыт доступ на public_html и один файл в папке public_html c разрешениями rwx-rwx-rwx (777).
- CGI/PHP Shell (Неплохой шелл на perl можно взять тут: http://www.rohitab.com/cgiscripts/cgitelnet.html)
Цель атаки:
Угон аккаунта атакуемого пользователя.
Подготовка:
Подключаемся к своему аккаунту по ФТП и заливаем туда CGI/PHP шелл. Проверяем, может ли он работать на данном сервере. Скорей всего сможет, но всякое бывает... Если работает, то отлично. Теперь проверим, есть ли атакуемый пользователь в системе (finger
Атака:
Запускаем MC (на нормальном шелле он должен быть! Но его запуск опционален...) Идём в папку юзера (к примеру, /home/users/pupkin/) Даже, если мы там ничего не видим, это не значит, что там ничего нет 😉 Набираем cd public_html (или cd <чего-то-там>, это зависит от настроек сервера, но чаще всего используется именно public_html). Находим там файл с разрешениями 777(rwx-rwx-rwx). Если на сервере разрешён запуск cgi и php из любых папок, то всё ОК, если нет, то придётся искать rwx-rwx-rwx файл в cgi-bin, что несколько усложняет ситуацию. В общем, считаем, что файл найден. Теперь открываем его текстовым редактором (я использовал встроенный редактор MC, но подойдёт любой). Удаляем всё, что было в файле. Выбираем "Paste from file" и прописываем путь к файлу CGI/PHP шелла, который накануне залили к себе. Сохраняем файл (у него же rwx для всех, поэтому он сохранится без проблем) Если его расширение не .cgi/.pl/.php, то переименовываем (опять же, rwx позволит и это...) Теперь стучимся к файлу через веб. Вводим пароль, который был заранее указан в файле и получаем возможность выполнять команды на удалённой системе. Теперь можно выполнить passwd, и аккаунт юзера станет твоим... Вот так-то!..
Вариант 2
Необходимо:
См. Вариант 1
Цель атаки:
Незаметное копирование/просмотр/запись файлов, доступных только атакуемому пользователю; незаметный запуск программ от лица атакуемого пользователя.
Подготовка:
Проводим подготовку, описанную в первом варианте. Кроме этого, идём в директорию, где лежит файл, через который мы будем атаковать и копируем его (к себе в папку или просто создаём backup).
Атака:
Атака производится идентично первому варианту, но вместо passwd выполняем ls, chdir и копирование интересующих файлов. Можно ещё записать пару бинарников или скриптов и привязать их к cron'у... А можно задефейсить странички и файлы с разрешениями 7XX Если не объяснить пользователю, как это было сделано, он долго будет ломать голову. А "особо продвинутые" спишут всё на root'а 🙂
Заметание следов:
Именно в заметании следов и есть кардинальное отличие от первого варианта. А заметание следов производим в обратной последовательности атаке. Берём инфу из бэкапа, созданного при подготовке и записываем её обратно (в тот файл, через который ломали) Также нужно переименовать файл в исходное имя, если его переименовывали при атаке. Также нужно вытереть бэкап. Если он лежит в директории пользователя, то чтобы не было видно способа или факта взлома. Если в твоей директории, то тем более (улика). Также желательно удалить со своего аккаунта CGI/PHP шелл, через который проводился взлом. Разве что в серверных логах останется инфа о операциях с файлами. Но если у порутанного пользователя хватит прав, чтобы почистить логи, то и это не проблема...
В чём же фишка:
А фишка в том, что скрипты сервер запускает с правами владельца. И, раз мы переписываем файл пользователя, то владельцем НАШЕГО скрипта становится АТАКУЕМЫЙ ПОЛЬЗОВАТЕЛЬ.
Как защититься:
Очень просто 🙂 Для чего тебе нужны разрешения rwx-rwx-rwx на файлах, да, к тому же, в public_html?.. На всех твоих файлах и папках должны стоять rwx------- (т.е. доступ только для тебя) На public_html - rwx-r-x-r-x (всем, кроме тебя, только чтение и запуск) на файлах в public_html - rwx-r--r-- (только чтение) на исполняемых файлах (cgi/php/asp/shtml/exe) в public_html - rwx-r-x-r-x (чтение+выполнение). При таком раскладе через описанную мной дырку тебя не взломают. Как говорил мой знакомый админ, "Не бывает дырявого и кривого софта, бывают дырявые головы и кривые руки" 🙂
И помни, если ты даже здесь и был, то читал только раздел "Как защититься". А я только его и писал 😉 Ищи 777 и будет тебе джекпот!..