С тех пор, как я начал вести занятия у групп информационной безопасности, я задаюсь вопросом: а как можно заниматься защитой информации, не зная про уязвимости? А если уязвимость тебе известна, зачем её “закрывать”, если можно ею воспользоваться в личных целях? Другое дело, что за подобное можно как минимум получить в лицо, а как максимум сесть в тюрьму, но будем о хорошем. Сегодня я хотел бы рассказать про один из самых простейших способов взломать сайт, который работает под контролем одной из самых популярных системой управления контентом WordPress.
Естественно, для начала нужно сказать, что всё, что написано ниже, носит исключительно ознакомительный характер.
Хорошо, теперь можно начинать. Для начала нам нужно иметь Kali Linux. Без него никак. Хотя бы загрузочную флешку. Ну или на виртуалке. Как установить гостевую операционную систему на виртуальную машину я уже рассказывал здесь. Ну а свежий дистрибутив Kali Linux под Вашу архитектуру процессора можно найди здесь. Кстати, Kali можно даже и не устанавливать - достаточно будет обычной Live-загрузки. Здорово, правда?
Отлично, Kali мы запустили, и он даже исправно у нас работает. Что делать дальше? Сначала нужно определиться, какой сайт мы будем атаковать. Для того, чтобы никого не обижать, да и взлом у нас получился на 100%, мы будем использовать наш личный сайт, который сами сделаем за пару минут.
Глава 1. Создаём сайт. Часть 1. Запускаем веб-сервер apache2.
Хорошие новости: в Kali Linux уже есть все нужные нам инструменты, поэтому абсолютно ничего (кроме самого WordPress и вордлиста) нам качать и устанавливать не придётся. Достаточно просто запустить нужную службу и настроить её. А начнём мы, непосредственно, с веб-сервера, на котором будет находиться наш локальный сайт! Чтобы запустить этот самый веб-сервер, необходимо в открыть терминал, и вписать следующую команду: service apache2 start
В результате в терминале нам ничего написано не будет, а лишь предложение вписывать следующие команды. Так запустился сервер или нет? Давайте проверим. Сделать это можно, открыв браузер и вписав в адресную строку адрес локального хоста (127.0.0.1). Если Вы все сделали правильно, то у Вас должна открыться страница примерно со следующим содержимым:
Если Вы видите эту страницу, значит все сделали правильно. Если нет - печально. Курите мануалы по установке apache под линукс.
Глава 1. Создаём сайт. Часть 2. Запускаем MySQL-сервер.
Для нормального функционирования нашего будущего сайта, нам нужно запустить сервер баз данных, а также создать в нём эту самую базу данных (таблицы создавать не нужно - вордпресс сам всё сделает при установке).
Итак, чтобы запустить MySQL сервер, снова открыв терминал, и вписав следующую команду: service mysql start
И снова нам ничего не скажут об успешном запуске сервера БД. Теперь нам нужно войти в режим редактирования БД от имени root-пользователя и создать в нём БД, в которую будет записываться вся информация с движка WordPress. Для того, чтобы войти в режим редактирования БД от имени root-пользователя, мы вводим команду mysql -u root
Я искренне за Вас рад, если у Вас получилось. Но работы впереди ещё много, поэтому продолжаем разговор. Мы вошли в режим редактирования, и теперь терминал будет понимать только SQL-запросы. Давайте напишем запрос на создания БД для нашего Wordpress-движка: create database wordpress; (ВНИМАНИЕ! После каждого запроса не забывайте ставить точку с запятой, как у меня). Тут мы создали базу данных с именем wordpress. Результат выполнения команды должен быть такой:
Настройка базы данных на этом не закончена. Теперь необходимо переключиться на базу, с которой мы будем работать (то есть на вновь созданную). Делается это командой use wordpress; Видите отклик в терминале “Database changed”? Если да, то мы на верном пути.
Всё, база данных настроена. Теперь давайте разберемся с самим движком.
Глава 1. Создаём сайт. Часть 3. Устанавливаем WordPress.
Для того, чтобы установить WordPress, нужно его сначала скачать. Скачали? А теперь разархивируйте. А содержимое архива поместите в директорию с сервером (/var/www/html):
Если мы прямо сейчас попробуем установить WordPress, то движок начнёт ругаться на то, что у него нет соответствующих прав на изменение содержимого директории, куда мы его положили (/var/www/html). Поэтому давайте дадим заранее нужные права на эту директорию. Жмём ПКМ по директории www->Свойства->Права->В разделе “Остальные” выбираем пункт “Создание и удаление файлов”.
Всё, тут мы с этим закончили. Осталось установить движок. Для этого открываем браузер, снова вписываем адрес нашего локального хоста - 127.0.0.1, и видим следующее:
Все эти данные у нас есть, все хорошо, мы заранее всё подготовили. Нужно только их вписать. Жмём на кнопку “Let’s go!” и поехали...
В пункте “Database Name” мы оставляем значение “wordpress”, ведь именно так мы и назвали нашу БД, когда создавали её.
В пункте “Username” мы вписываем значение root (пользователь по умолчанию для работы с БД MySQL).
Поле “Password” оставляем пустым, так как пароль мы не задавали за ненадобностью.
“Database Host” - “localhost”, так как наш компьютер и есть хост БД.
И “Table Prefix” мы не меняем. Пускай префикс для таблиц будет стандартным.
Ну и всё... Жмём кнопку Submit, и смотрим на сообщение, которое говорит нам, что связь с БД налажена, всё хорошо, и вообще мы большие молодцы:
Осталось нажать на кнопку “Run the install” и запустить установку, которая продлится пару секунд. Дальше нам нужно будет ввести заголовок нашего сайта - неважно какой, вводите что угодно, имя пользователя и пароль, e-mail адрес. Галочку на индексирование сайта поисковыми системами можно не ставить. На этом шаге мы обратим внимание на пароль. Для начала поставим его “#Qa937Zw#564S821x” (естественно, без кавычек).
Всё ввели, жмём “Install WordPress”, видим, что всё хорошо:
Дальше жмём Log In, вводим имя пользователя и пароль, который мы ставили на предыдущем шаге, и видим админку. Всё нормально, сайт установился, всё работает стабильно (можно проверить, снова введя в адресной строке браузера адрес 127.0.0.1).
Глава 2. Взлом. Часть 1. WPScan, wordlist.
Сайт, который мы же и будем взламывать, мы сделали. Хорошо. Для начала нам нужно немного подготовиться. Объясню в теории каким образом будет проходить взлом. Пользоваться мы будем инструментом wpscan, который предустановлен в Kali Linux. Что он умеет? Умеет он очень многое. Во-первых, он выдаёт нам подробную информацию о сайте. Во-вторых, он может дать нам список всех пользователей, зарегистрированных на сайте. В-третьих, он может дать нам список всех пользователей, у которых есть права администратора. В-четвертых, он может производить лобовые атаки на сайт, используя метод перебора (брут) по заданному словарю с паролями. Есть еще “в-пятых”, “в-шестых” и т.д., но на данный момент это нас не интересует. Каким образом происходит перебор? WPScan’у необходимо сообщить откуда брать слова и пытаться применять их в качестве пароля. Безусловно, Вы можете попытаться сделать это вручную, однако это займёт у Вас времени до следующего Большого Взрыва, что нас, естественно, не интересует. Да и вообще процесс хотелось бы автоматизировать. Ну так вот, мы остановились на том, что нам нужен этот самый словарь (wordlist) для осуществления перебора. Где его найти? В Kali Linux есть уже много готовых вордлистов. Посмотреть их можно в верхнем меню “Приложения” в разделе “Password Attacks”. Там самый последний пункт будет - Wordlists. Нажав по этому пункту, автоматически откроется терминал и Вас поместят в директорию с вордлистами:
Однако дело в том, что никто не даст гарантий, что пароль, который использует администратор, будет в этом самом вордлисте. Поэтому не забываем про таргетирование. И вообще, лучше всего использовать собственные вордлисты, которые Вы сами составляете (да, дело не из приятных, однако они будут более целевыми и полезными. Более того, в Kali Linux есть инструменты, которые помогают создавать эти самые вордлисты из различных комбинаций.). Сразу скажу, что нормальный вордлист должен состоять хотя бы из 25 000 000 слов... Хотя и этого мало. Ну и вес его должен быть около 2,5 Гигабайт. В нашем случае мы будем использовать один из моих любимых вордлистов - база украденных паролей от русскоязычных e-mail аккаунтов за 2014 год. Скачать её можно отсюда (объем: около 200 мегабайт).
Я не зря сказал Вам поставить в качестве пароля “#Qa937Zw#564S821x”. Понятное дело - это значение есть в вордлисте, который мы будем использовать. Ведь мне нужно просто показать Вам саму суть взлома, и вообще каким образом он происходит. Для других сайтов Вам, возможно, придётся использовать не один вордлист, чтобы подобрать нужный пароль.
Ну ладно... Вордлист по моей ссылке скачали, теперь для удобства киньте его в свою домашнюю папку. Пускай пока лежит там. Потом, если хотите, можете переместить его в папку со всеми остальными вордлистами (/usr/share/wordlists).
Глава 2. Взлом. Часть 2. Сбор информации.
Теперь давайте посмотрим на практике что умеет WPScan. Запустим терминал, и просто введём wpscan
Тут у нас что-то типа приветственной картинки, версия, авторы, а ниже представлены аргументы, с которыми нужно использовать введенную нами команду. Для начала соберем информацию. Для этого нужно использовать аргумент --url [адрес сайта]. Вот так и впишем в наш терминал: wpscan --url http://127.0.0.1
Всё, теперь можно внимательно почитать отчёт, который нам предоставил WPScan. На те пункты, в которых есть оранжевые восклицательные знаки, нужно обратить внимание, ведь они могут быть потенциальной уязвимостью сайта. Пролистав ниже, мы увидим версию WordPress, установленные плагины, установленные темы оформления, информацию об этой самой теме оформления и многое-многое другое интересное. А теперь давайте попробуем воспользоваться параметром --enumerate u, чтобы просмотреть список зарегистрированных пользователей. Как правило, сайты на вордпрессе имеют одного или два зарегистрированных пользователей (очень редко бывает, что регистрация на таких сайтах открытая). Даже если зарегистрированных пользователей на сайте оказалось много, нас должен интересовать аккаунт с ID 1 - как правило, это и есть аккаунт администратора. То есть самый первый созданный аккаунт. Пароль именно от этого аккаунта нам нужно попытаться подобрать. Итак, давайте посмотрим на список пользователей, которые есть на нашем сайте (безусловно, мы-то с Вами знаем, что у нас один пользователь - которого мы создавали в самом начале, при установке. Но сможет ли это определить WPScan?) В терминал вводим команду wpscan --url http://127.0.0.1 --enumerate u
Смотрите-ка! Определил! На созданном сайте действительно один пользователь, логин которого toffy. ID тоже сразу виден - 1. Значит, однозначно, аккаунт администратора. Осталось только подобрать к нему пароль. Как минимум логин нам уже известен от админки...
Глава 2. Взлом. Часть 3. Отаке!!11
Настало время самого интересного. Подбора пароля. У нас всё настроено, вордлист скачан, всё в боевой готовности. Осталось только вписать команду, подождать подбора пароля, и всё... А команду нужно вписать следующую: wpscan --url http://127.0.0.1 --wordlist /root/leaked_email_2014.txt
Здесь мы сообщаем WPScan’у с каким именно сайтом будем работать, отправляя адрес сайта через параметр --url (это мы уже знаем по части 2), а также даём абсолютную ссылку на заранее подготовленный вордлист, передавая его через параметр --wordlist. И всё. Теперь WPScan понял, что ему нужно перебирать все возможные варианты пароля для существующей учетной записи из заданного нами вордлиста, и он этим начал заниматься:
В самом низу он сообщает к какому аккаунту в данный момент подбирает пароль, время с начала подбора, первое число в скобках - сколько паролей он уже перебрал из нашего вордлиста, второе число в скобках - сколько всего паролей в нашем вордлисте. Дальше сколько процентов он уже “перебрал”, и примерное оставшееся время. Осталось только ждать.
Спустя некоторое количество времени, WPScan подобрал пароль к учетной записи администратора:
Всего 820 паролей перебрал WPScan, наш пароль оказался 821 :) Честно сказать, я специально выбрал в самом начале вордлиста пароль, и поставил его в качестве пароля администратора сайта, чтобы перебор не шел целые сутки или несколько часов... На скриншоте выше, в табличке, видно сколько прошло времени после начала подбора (всего пять секунд), а также имя пользователя, и рядом его пароль. Вот бы все пароли так быстро подбирались...
В любом случае, теперь Вы имеете представление, каким образом к любому сайту, построенному на WordPress, можно подобрать пароль. Этот “трюк” пройдет почти на любом сайте, который работает на вордпрессе. Почему “почти” на любом? Потому что может быть такое, что на сайте установлен плагин автобана, который после нескольких попыток подобрать пароль, заблокирует Ваш IP-адрес. Но о наличии этого плагина Вы всё равно сможете узнать. Не зря же я познакомил Вас с WPScan’ом.
На этом я буду заканчивать. Если У Вас появились какие-то вопросы, можете со мной связаться любым известным Вам способом (хоть через комментарии) и задать его.