Приземлитесь изящно в целевой СУБД Microsoft SQL Server (MS SQL), словно прибывая бизнес-классом с бокалом шампанского в руке. 🥂
 на C#, созданный для операторов красных команд. Он предназначен для запуска внутри целевой среды непосредственно через ваши бекон-агенты (например, с помощью `execute-assembly` в Cobalt Strike или Havoc, или любой команды `dotnet`). Инструмент позволяет перемещаться по цепочкам связанных серверов, олицетворять любого пользователя, встреченного на пути, и выполнять любое желаемое действие на последнем узле. Всё с минимальным OPSEC-следом и без внешних зависимостей.
* **Обход связанных серверов** : автоматическое оборачивание `OPENQUERY` / `EXEC AT` по цепочкам любой глубины
* **Олицетворение** : `EXECUTE AS LOGIN` на каждом узле с каскадным многопользовательским олицетворением
* **Аутентификация** : текущий токен Windows, pass-the-hash через олицетворение токена бекон-агента, Kerberos
* **Обнаружение** : SQL Browser (UDP 1434), перечисление SPN в Active Directory через LDAP, широковещательные запросы, сканирование портов TDS
* **ConfigMgr / SCCM / MECM** : специальные действия `cm-*` для разведки и эксплуатации баз данных Microsoft Configuration Manager
* **Вывод** : таблицы, дружественные к Markdown, с временными метками, экспорт в CSV для чистых результатов пентеста
> [!TIP] MSSQLand построен с использованием `.NET Framework 4.8`, ориентирован на выполнение сборок в текущем контексте. Если вам нужно подключиться с использованием NT/LM-хешей или билета Kerberos, см. Pass-the-Hash.
> [!NOTE] Не забывайте об основах. Во время оценки безопасности иногда проще использовать SQL Server Management Studio (SSMS).
MSSQLand.exe [options] [options] [action-options]
Глобальные флаги (`-c`, `-l`, `--debug` и т.д.) принимаются в любой позиции, включая после имени действия; нераспознанные токены после действия передаются как есть.
> [!NOTE] Если опустить ` `, выполняется только проверка подключения. Инструмент аутентифицируется и завершает работу без выполнения запросов. Идеально для проверки учётных данных с минимальным OPSEC-следом.
> [!TIP] Избегайте ручного ввода всех вызовов **RPC Out** или **OPENQUERY**. Позвольте инструменту обработать любую цепочку связанных серверов с помощью аргумента `-l`, чтобы вы могли сосредоточиться на общей картине.
Формат: `server:port/user@database` или любая комбинация `server/user@database:port`.
* `server` (обязательно) - Имя хоста или IP-адрес SQL Server
* `:port` (необязательно) - Номер порта (по умолчанию: 1433, также часто встречается: 1434, 14333, 2433)
* `/user` (необязательно) - Пользователь для олицетворения на этом сервере ("execute as login")
* Поддерживает **каскадное олицетворение** : `/user1/user2/user3` выполняет `EXECUTE AS LOGIN = 'user1'; EXECUTE AS LOGIN = 'user2'; EXECUTE AS LOGIN = 'user3';`
* Каждый `/user` помещает новый контекст олицетворения в стек безопасности
* `@database` (необязательно) - Контекст базы данных
# Connectivity probe: checks if server is alive without authenticating
# Connection test only (no action executed, authenticates and exits)
MSSQLand.exe localhost:1434@db03 -c token info
MSSQLand.exe LAB-SQL01@AdventureWorks -c token tables -n Customer
Соедините несколько SQL-серверов с помощью флага `-l`, используя **точку с запятой (`;`) в качестве разделителя**:
* **Точка с запятой (`;`)** \- Разделяет серверы в цепочке
* **Косая черта (`/`)** \- Указывает пользователя для олицетворения ("execute as login")
* Поддерживает **каскадное олицетворение** : `/user1/user2` выполняет последовательное олицетворение
* **Знак @ (`@`)** \- Указывает контекст базы данных
* **Квадратные скобки (`[...]`)** \- Используются для защиты имени сервера от разделения нашими разделителями
-l SQL01/admin;SQL02;SQL03/manager@clients
# Cascading impersonation (impersonate user1, then user2 on SQL01)
# Mixed cascading (SQL01: user1→user2, SQL03: user3→user4→user5)
-l SQL01/user1/user2;SQL02;SQL03/user3/user4/user5@database
# Server names can contain hyphens, dots (no brackets needed)
# Brackets only needed if server name contains delimiter characters
-l [SERVER;PROD];SQL02;[SQL03@clients]@clientdb
> [!NOTE] Указание порта (`:port`) применяется только к начальному подключению к хосту. Цепочки связанных серверов (`-l`) используют имена связанных серверов, настроенные в `sys.servers`, а не комбинации `hostname:port`.
Эти режимы не требуют аутентификации и работают до получения учётных данных.
Служба SQL Server Browser прослушивает **UDP 1434** и отвечает на запросы обнаружения списком экземпляров SQL Server, работающих на хосте, включая их имена, версии и TCP-порты. Это полезно, когда на целевом сервере используются именованные экземпляры на динамических портах — не нужно гадать или сканировать.
# Query the SQL Browser service on a specific host (UDP 1434)
Active Directory предоставляет информацию о регистрации SQL Server через имена участников-служб (SPN), хранящиеся в учётных записях компьютеров и служб. MSSQLand выполняет запросы к AD через LDAP для SPN вида `MSSQLSvc/*`, чтобы перечислить экземпляры SQL Server в домене или во всём лесу через Глобальный каталог.
# Find SQL Servers in Active Directory via LDAP (current domain)
# Forest-wide via Global Catalog (port 3268)
Обнаружение многоуровневое. Подробнее см. в FindSqlServers.cs.
Служба SQL Server Browser также отвечает на широковещательные UDP-пакеты через **UDP 1434** , что позволяет обнаружить все экземпляры SQL Server, рекламирующие себя в локальной подсети.
# Broadcast discovery on the local network (UDP 1434)
> [!TIP] Это особенно полезно, когда SQL Server работает на машине, **не входящей в домен** , и поэтому не будет отображаться ни в одном LDAP- или SPN-запросе. Представьте изолированные серверы, машины разработчиков или нелегитимные экземпляры, развёрнутые во внутренней VLAN.
Проверяет открытые порты на наличие живых экземпляров SQL Server с использованием рукопожатий протокола TDS (не только TCP SYN). Порт сообщается только при ответе на пакет предварительного входа TDS.
MSSQLand.exe LAB-SQL03 --portscan --all # Find all instances (full ephemeral range)
MSSQLand.exe LAB-SQL03 --portscan 65184 # Single port
MSSQLand.exe LAB-SQL03 --portscan 65180-65190 # Port range
MSSQLand.exe LAB-SQL03 --portscan 1433,5000,65184 # Comma-separated list
MSSQLand выполняется как .NET-сборка внутри бекон-агента и всегда аутентифицируется, используя **текущий контекст выполнения** (`-c token`). Когда у вас есть хеш, правильный подход — сначала создать токен на уровне бекон-агента, а затем запустить MSSQLand обычным образом. `System.Data.SqlClient` прозрачно наследует этот токен, и не требуется никакой собственной реализации TDS.
Реализация NTLMv2 с нуля внутри MSSQLand означала бы:
* Замену `System.Data.SqlClient` на самодельный стек TDS 7.x (слишком много строк кода для сокетов, TLS и NTLM).
* Поддержку этой реализации с учётом особенностей версий SQL Server, изменений политик TLS и граничных случаев потоков токенов.
* Отсутствие функционального преимущества перед подходом с токенами в подавляющем большинстве заданий.
Если вам нужно аутентифицироваться с билетом Kerberos или хешами NT/LM с внешней позиции, mssqlclient-ng — правильный инструмент. Это клиент на Python 3, созданный для доступа со стороны Unix, легко связывается с SOCKS5-прокси, установленным из вашего бекон-агента.
Если вы запускаете MSSQLand на вашем хост-компьютере с Windows, но вам нужно получить доступ к целевому SQL Server через среду Linux (Hyper-V VM, VMware или WSL), вы можете легко перенаправить соединение с помощью `socat`:
sudo socat TCP4-LISTEN:1433,fork,reuseaddr TCP:10.10.11.90:1433
Эта команда прослушивает порт 1433 на вашей Linux-машине и перенаправляет весь трафик на целевой SQL Server по адресу `10.10.11.90:1433`. Затем вы можете подключить MSSQLand к IP-адресу вашей Linux-ВМ с вашего хоста Windows.
* `-h` или `--help` \- Показать все доступные действия
* `-h search_term` \- Отфильтровать действия (например, `-h adsi` показывает все действия, связанные с ADSI)
* `localhost -c token createuser -h` \- Показать подробную справку для конкретного действия
## 🔧 Поддержка Configuration Manager (ConfigMgr)
MSSQLand включает всестороннюю поддержку для эксплуатации и разведки **Microsoft Configuration Manager** (ранее SCCM / MECM). Когда у вас есть доступ к серверу базы данных ConfigMgr, вы можете использовать специализированные действия для сбора информации об устройствах (например, `cm-devices`) или картографирования инфраструктуры.
Все действия ConfigMgr используют префикс `cm-` (например, `cm-scripts`, `cm-package`), чтобы соответствовать соглашению об именовании официальных командлетов PowerShell от Microsoft (`Get-CM*`, `Set-CM*` и т.д.).
Вывод инструмента, обогащённый временными метками и ценной контекстной информацией, предназначен для создания визуально привлекательных и профессиональных результатов, что делает его идеальным для получения скриншотов высокого качества для любых ваших отчётов (например, отчёты для клиента, внутренние отчёты, оценки красных команд).
Все таблицы вывода дружественны к Markdown и могут быть скопированы и вставлены непосредственно в ваши заметки без каких-либо проблем с форматированием.
> [!TIP] Вы также можете получить вывод в формате `.csv`, используя опцию `--format csv`: `MSSQLand.exe localhost -c token --format csv --silent procedures > procedures.csv`
Вклад приветствуется и ценится! Будь то исправление ошибок, добавление новых функций, улучшение документации или обратная связь — ваши усилия важны и имеют значение. Открытый исходный код процветает благодаря сотрудничеству и признанию. Вклад, большой или малый, помогает улучшить инструмент и его сообщество. Ваше время и усилия действительно ценны.
Здесь никто не будет удалён из Git-истории. Здесь нечего бояться. Никто не будет копировать ваш код, не придерживаясь духа сотрудничества открытого исходного кода.
Пожалуйста, обратитесь к CONTRIBUTING.md за подробными инструкциями по началу работы.
Если вы задаётесь вопросом, почему этот инструмент существует, а не является вкладом в другие проекты SQL Server, см. ORIGIN.md.
**Этот инструмент предоставляется строго для оборонительных исследований безопасности, обучения и авторизованного тестирования на проникновение.** Вы должны иметь **явное письменное разрешение** перед запуском этого программного обеспечения против любой системы, которой вы не владеете.
Этот инструмент предназначен только для образовательных целей и призван помочь специалистам по безопасности понять и проверить безопасность сред SQL Server в санкционированных мероприятиях.
* Частные лабораторные среды, которые вы контролируете (локальные ВМ, изолированные сети).
* Санкционированные обучающие платформы (CTF, Hack The Box, сценарии экзаменов OffSec).
* Формальные пентесты или задания красных команд с документированным согласием клиента.
Неправильное использование этого проекта может привести к судебному преследованию.
Любое неавторизованное использование этого инструмента в реальных средах или против систем без явного разрешения владельца системы строго запрещено и может нарушать правовые и этические нормы. Создатели и участники этого инструмента не несут ответственности за любое неправильное использование или причинённый ущерб.
Используйте ответственно и этично. Всегда соблюдайте закон и получайте соответствующие разрешения.
The full story
This article is one source in a clustered incident — the cluster page carries the summary, timeline and every other outlet covering it.
