
Однопроходное анонимное перечисление Active Directory через SAMR и LSARPC — null-сессия, без учётных данных, со структурированным переиспользуемым выводом.
Однопроходный перечислитель Active Directory для анонимной (null) сессии,
использующий именованные каналы \samr и \lsarpc. Учётные данные не требуются.
Он не делает ничего, чего не умеют классические инструменты. Он собирает всё за
один запуск и аккуратно раскладывает результаты. На пентесте вы приходите без
доменной учётной записи, находите контроллер домена через DNS и хотите получить
полную картину: учётные записи, детали по каждому пользователю, группы, политику
и данные LSA/DNS — без склейки сессий rpcclient или нескольких отдельных скриптов
и последующего ручного разбора их stdout. Этот инструмент выполняет такой проход за
вас и записывает структурированный, пригодный для повторного использования вывод:
manifest.json,
готовые к использованию userlist.txt / computerlist.txt и сохранённый список
RID, который можно переиспользовать вместо повторного брутфорса.Пожалуйста, запускайте это только против систем, которыми вы владеете или которые вам явно разрешено тестировать. Перечисление чужого каталога без разрешения недопустимо и, в зависимости от вашего местоположения, может быть незаконным.
Есть две версии, которые ведут себя одинаково. Используйте ту, для которой у вас есть библиотека:
adnullenum.py — построен на impacket.$) отделяются от реальных пользователей.Он также помечает интересные учётные записи для вас: такие как «пароль не требуется», «пароль никогда не истекает», AS-REP-roastable, unconstrained delegation, никогда не входил в систему или описание, упоминающее пароль.
Пара вещей, которые естественно следуют из этого:
Всё здесь — стандартный анонимный SAMR/LSARPC, и устоявшиеся инструменты уже получают те же данные. Это удобная обёртка, а не новая возможность, поэтому стоит знать об альтернативах:
--rid-brute, --users,
--pass-pol) покрывает то же перечисление внутри гораздо более крупного
фреймворка.samrdump.py
(пользователи/группы/алиасы + детали по каждому пользователю) и lookupsid.py
(RID cycling через LSA). Ни одного единого запуска, ни fallback SAMR→LSA, только
stdout.rpcclient предоставляет доступ к нижележащим вызовам (queryuser,
enumdomusers, querydominfo, lsaquery, lookupsids, …), но интерактивно и
только в stdout. Его enumdomusers перечисляет стандартных пользователей по
имени, без учётных записей машин ($), а полные детали — это queryuser по
одному за раз. Без встроенного цикла RID cycling он не может восстановить
компьютеры или обойти ограниченное перечисление. См.
Как сделать это вручную.Что добавляет adnullenum — это упаковку: один запуск null-сессии вместо нескольких инструментов, SAMR в первую очередь с опциональным fallback на LSA, подобранные флаги интересных учётных записей и аккуратный вывод в нескольких форматах, который можно сразу передать следующему шагу или открыть позже. Если такой рабочий процесс подходит тому, как вы работаете, — используйте его; если вы предпочитаете проверенный в боях инструмент, обратитесь к enum4linux-ng или NetExec.
Вам нужен Python 3.9+ и одна SMB-библиотека. Виртуальное окружение помогает поддерживать порядок:
# clone / copy the files, then from the project folder:
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install impacket # for adnullenum.py
Вот и всё. Запустите python3 adnullenum.py --help, чтобы увидеть всё.
Всё работает через единый --mode. По умолчанию — recon, это безопасная вещь,
которую стоит запускать первой.
| Режим | Что вы получаете |
|---|---|
recon | Информация о домене, счётчики, политика паролей/блокировки и детали LSA/DNS. Без брутфорса. Просто осмотреться. |
rids | Находит, какие учётные записи существуют, и сортирует их на пользователей / компьютеры / группы. |
users | Всё вышеперечисленное плюс полные детали по каждому реальному пользователю и сводка «интересных учётных записей». Добавьте --include-groups, чтобы также перечислить группы каждого пользователя. |
groups | Доменные группы и встроенные алиасы с их участниками. |
full | Всё это. |
# 1. Is anonymous access open, and how big is this domain?
python3 adnullenum.py 10.0.0.10
# 2. Grab everything
python3 adnullenum.py 10.0.0.10 --mode full
# 3. Just the account inventory, wider net for a big domain
python3 adnullenum.py 10.0.0.10 --mode rids --start-rid 1000 --max-rid 200000
# 4. Go slower to stay quiet
python3 adnullenum.py 10.0.0.10 --mode users --sleep 1 --jitter 40
# 5. Also write JSON (txt and csv are always written)
python3 adnullenum.py 10.0.0.10 --mode full --json
Если домен не позволяет вам перечислять пользователей напрямую (что часто бывает), инструмент переключается на RID cycling: он просит контроллер домена преобразовать идентификаторы учётных записей в имена пакетами по 1000. По умолчанию он сканирует вверх, пока не найдёт всё, что, по словам контроллера домена, существует, или пока 5000 идентификаторов подряд не вернутся пустыми. Вместо этого вы можете задать точный диапазон:
python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
Некоторые контроллеры домена полностью отказывают в анонимном SAMR (enumdomains
и преобразование RID возвращают ACCESS_DENIED). Запуск не сдаётся: