Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
adnullenum — Однопроходное анонимное перечисление Active Directory через SAMR и LSARPC — null-сессия, без учётных данных, со структурированным переиспользуемым выводом. | Kitploit
Инструменты/GitHubGitHub/crypt0p3g/adnullenum
Оборонительные ИнструментыOSINT (Разведка открытых источников)РазведкаАнализ уязвимостейСбор информацииСетевая безопасностьТестирование на ПроникновениеRed Teaming
GitHubcrypt0p3g/adnullenum

adnullenum

Однопроходное анонимное перечисление Active Directory через SAMR и LSARPC — null-сессия, без учётных данных, со структурированным переиспользуемым выводом.

377495 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Репозиторий
Поделиться

adnullenum

Однопроходный перечислитель Active Directory для анонимной (null) сессии, использующий именованные каналы \samr и \lsarpc. Учётные данные не требуются.

Он не делает ничего, чего не умеют классические инструменты. Он собирает всё за один запуск и аккуратно раскладывает результаты. На пентесте вы приходите без доменной учётной записи, находите контроллер домена через DNS и хотите получить полную картину: учётные записи, детали по каждому пользователю, группы, политику и данные LSA/DNS — без склейки сессий rpcclient или нескольких отдельных скриптов и последующего ручного разбора их stdout. Этот инструмент выполняет такой проход за вас и записывает структурированный, пригодный для повторного использования вывод:

  • Одна команда охватывает информацию о домене, политику, обнаружение RID, детали по каждому пользователю и группы, выбирая работающий метод и корректно деградируя, когда SAMR заблокирован (см. Как это соотносится с другими и Когда SAMR заблокирован).
  • Вывод, созданный для передачи следующему инструменту. Папки запусков с отметкой времени, содержащие txt / csv / (опционально) json, manifest.json, готовые к использованию userlist.txt / computerlist.txt и сохранённый список RID, который можно переиспользовать вместо повторного брутфорса.
  • Интересные учётные записи помечаются по ходу работы (AS-REP-roastable, пароль не требуется, unconstrained delegation и так далее).
  • Пожалуйста, запускайте это только против систем, которыми вы владеете или которые вам явно разрешено тестировать. Перечисление чужого каталога без разрешения недопустимо и, в зависимости от вашего местоположения, может быть незаконным.

    Есть две версии, которые ведут себя одинаково. Используйте ту, для которой у вас есть библиотека:

    • adnullenum.py — построен на impacket.

    Что он собирает

    • Пользователи, компьютеры и группы. Учётные записи машин (те, что заканчиваются на $) отделяются от реальных пользователей.
    • Полные детали по каждому пользователю. Описание, членство в группах, метки времени смены пароля и входа, флаги учётной записи и ограничения входа (часы входа, разрешённые рабочие станции, срок действия).
    • Группы с их участниками, разрешёнными в реальные имена.
    • Информация о домене и политике. Имя домена, SID, роль сервера, фактические счётчики пользователей/групп/компьютеров, а также политика паролей и блокировки.
    • Детали LSA / DNS. DNS-имя домена и леса, GUID домена, SID домена и любые доверия — они часто возвращаются даже тогда, когда сам SAMR заблокирован.

    Он также помечает интересные учётные записи для вас: такие как «пароль не требуется», «пароль никогда не истекает», AS-REP-roastable, unconstrained delegation, никогда не входил в систему или описание, упоминающее пароль.

    Пара вещей, которые естественно следуют из этого:

    • Имена пользователей, которые вы собрали, — это ваш список для AS-REP roasting.
    • Имена компьютеров — это ваш список для проверок учётных записей машин pre-Windows 2000.

    Как это соотносится с другими

    Всё здесь — стандартный анонимный SAMR/LSARPC, и устоявшиеся инструменты уже получают те же данные. Это удобная обёртка, а не новая возможность, поэтому стоит знать об альтернативах:

    • enum4linux-ng — ближайший эквивалент: null-session SAMR + LSA, RID cycling, политика, пользователи и группы. Если вам нужен зрелый, широко используемый инструмент — используйте его. adnullenum во многом с ним пересекается.
    • NetExec (--rid-brute, --users, --pass-pol) покрывает то же перечисление внутри гораздо более крупного фреймворка.
    • impacket поставляет это в виде двух скриптов: 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-библиотека. Виртуальное окружение помогает поддерживать порядок:

    root@kitploit:~
    # 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Всё это.
    root@kitploit:~
    # 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 идентификаторов подряд не вернутся пустыми. Вместо этого вы можете задать точный диапазон:

    root@kitploit:~
    python3 adnullenum.py 10.0.0.10 --mode rids --range 500-50000
    

    Когда SAMR заблокирован

    Некоторые контроллеры домена полностью отказывают в анонимном SAMR (enumdomains и преобразование RID возвращают ACCESS_DENIED). Запуск не сдаётся:

    • LSA recon выполняется всегда. Имя домена, SID и часто лес, GUID и доверия берутся из \lsarpc, который часто отвечает, когда SAMR — нет.
    • RID cycling может переключиться на LSA (опционально). Если SAMR не преобразует RID и вы передаёте --lsa-fallback, инструмент повторяет тот же проход через LSA LsarLookupSids, используя SID домена, что всё ещё даёт вам инвентарь учётных записей (имена и типы, включая компьютеры). По умолчанию это выключено, потому что это второй проход брутфорса; без флага запуск останавливается на recon и сообщает об этом.
    • Глубокие детали по каждому пользователю и членство в группах требуют SAMR. Когда SAMR заблокирован, эти этапы пропускаются и отмечаются; вы всё равно получаете инвентарь имён/типов.
    • Если LSA-запросы также заблокированы, запуск деградирует только до recon (имя домена и SID). На такой цели ни один анонимный инструмент не перечислит учётные записи.

    Без повторного брутфорса

    Поиск учётных записей — медленная часть, поэтому инструмент сохраняет список (rids.txt) в папке вывода каждого запуска. Укажите более позднему запуску на эту папку через --session, и он пропустит брутфорс и переиспользует то, что вы уже нашли:

    root@kitploit:~
    python3 adnullenum.py 10.0.0.10 --mode rids
    # -> output/20260917-1530_10.0.0.10_rids/
    
    python3 adnullenum.py 10.0.0.10 --mode users \
        --session output/20260917-1530_10.0.0.10_rids
    

    --session принимает папку предыдущего запуска. (--rid-file делает то же самое из простого текстового файла с одним RID на строку.)


    Вывод

    Каждый запуск создаёт папку с отметкой времени в output/:

    root@kitploit:~
    output/20260917-1530_10.0.0.10_full/
    ├── rids.txt          # the account IDs found (reuse with --session)
    ├── manifest.json     # summary: counts, interesting accounts, run details
    ├── access_denied.txt # only if something was denied/restricted (with a timestamp)
    ├── output
    ├──── lists/          # ready-to-use lists (see below)
    ├──── txt/            # easy to read
    └──── csv/            # easy to grep / open in a spreadsheet
    

    txt и csv записываются всегда; добавьте --json для папки json/ тоже.

    Папка lists/ содержит два простых файла, созданных для прямой передачи другим инструментам:

    • lists/userlist.txt — сразу подходит для AS-REP roasting, password spraying или списка --users для крэкера. В режиме users/full он содержит только включённые учётные записи; в режиме rids (без деталей по каждому пользователю) — всех пользователей.
    • lists/computerlist.txt — имена учётных записей машин с сохранённым $ (sAMAccountName), для проверок учётных записей машин pre-Windows 2000.

    Забыли посмотреть на них или запустили только rids и теперь хотите списки? Укажите на папку запуска, и они будут пересобраны из CSV, сеть не нужна:

    root@kitploit:~
    python3 adnullenum.py --lists-from output/20260917-1530_10.0.0.10_full
    

    На экране вы получаете ограниченный предпросмотр, чтобы большой домен не затопил ваш терминал (--limit, по умолчанию 100 на секцию) — в файлах всегда полные данные. Цвет включён, когда вы в терминале; --no-color отключает его.


    Пример

    Запуск full против тестового контроллера домена (санитизировано). На экране вы получаете recon, проход RID, сводку интересных учётных записей и список записанных файлов:

    root@kitploit:~
    $ python3 adnullenum.py 10.0.0.10 --mode full
    [*] Connecting to 10.0.0.10:445 anonymously ...
    [+] SAM domain: CORP (S-1-5-21-1111111111-2222222222-3333333333)
    ...
    [ COUNTS ]
      Users:   43
      Groups:  0
      Aliases: 17
    
    [ PASSWORD POLICY ]
      Min length:       7
      Max age:          42 days
      Properties:       COMPLEX
    
    [*] Bruting RIDs via SAMR (chunk=1000, open-ended 500-100000, stop-after 5000)
    [*] up to RID 1498: 31 resolved, gap=0
    [*] stop: 5000 consecutive empty RIDs (--stop-after 5000)
    [+] Resolved: 5 users, 4 computers, 22 groups, 0 other
    [*] Deep-querying 5 users (skipping 4 computers)
        [!] Administrator (RID 500)  PWD_NEVER_EXPIRES
        [!] Guest (RID 501) (disabled)  PWD_NOT_REQUIRED, PWD_NEVER_EXPIRES
        [!] svc_sql (RID 1104)  ASREP_ROASTABLE
    [+] 5 users: 3 enabled, 2 disabled, 3 interesting (full detail in the users file)
    
    [ FILES WRITTEN in output/20260101-120000_10.0.0.10_full ]
      txt/recon.txt / csv/recon.csv        domain info + password/lockout policy
      txt/inventory.txt / csv/inventory.csv  all resolved accounts
      txt/users.txt / csv/users.csv        full per-user detail
      txt/groups.txt / csv/groups.csv      groups + aliases with members
      rids.txt                             existing RIDs (reuse with --session)
      lists/userlist.txt                   usernames, one per line
      lists/computerlist.txt               machine accounts (with $)
      manifest.json                        run metadata + counts
    

    Одна запись из txt/users.txt (основная группа и прямые группы разрешены в имена):

    root@kitploit:~
    [+] RID 500
        Enabled:                   True
        SamAccountName:            Administrator
        SID:                       S-1-5-21-1111111111-2222222222-3333333333-500
        Description/AdminComment:  Built-in account for administering the computer/domain
        Last Logon:                2026-09-03 17:58:26+09:00
        Password Last Set:         2026-01-23 05:14:35+09:00
        Primary Group:             Domain Users (513)
        Account Control:           NORMAL_ACCOUNT | PASSWORD_NEVER_EXPIRES
        Logon Count:               92
        Direct Domain Groups:      Domain Users; Administrators; Domain Admins
        >> INTERESTING:            PWD_NEVER_EXPIRES
    

    Как сделать это вручную

    Всё здесь — стандартный SAMR/LSARPC, так что вы можете вытащить те же факты по одному вызову за раз с помощью rpcclient из Samba. Сначала подключитесь анонимно:

    root@kitploit:~
    rpcclient -U "" -N 10.0.0.10
    
    Этот инструментЭквивалент в rpcclient
    recon (информация о домене + счётчики)querydominfo
    recon (политика паролей)getdompwinfo
    recon (LSA домен + SID)lsaquery, lsaenumsid
    rids (преобразование имя/SID)lookupnames <name>, lookupsids <SID>
    rids (серверный список)enumdomusers (только стандартные пользователи — без учётных записей машин $)
    users (детали по каждому пользователю)queryuser <rid> или queryuser <name>, querydispinfo
    groupsenumdomgroups, querygroupmem <rid>, enumalsgroups builtin, queryaliasmem builtin <rid>

    enumdomusers возвращает стандартные учётные записи пользователей только по имени; учётные записи машин ($) отфильтровываются, а полные детали означают запуск queryuser по одной учётной записи за раз. У rpcclient нет встроенного цикла RID cycling, поэтому он не может восстановить учётные записи машин (или что-либо ещё), когда серверное перечисление ограничено; вам пришлось бы самостоятельно написать скрипт с lookupsids по диапазону. У него также нет команды политики блокировки и он не возвращает LSA DNS/forest/GUID или доверия, поэтому этот инструмент запрашивает PolicyDnsDomainInformation напрямую.

    О скриптовых эквивалентах и о том, как этот инструмент соотносится с ними, см. Как это соотносится с другими.


    Меры противодействия

    Если вы на синей стороне и хотите это закрыть, анонимный путь — то, что нужно закрыть:

    • Включите «Do not allow anonymous enumeration of SAM accounts» и «…accounts and shares» (настройки RestrictAnonymousSAM / RestrictAnonymous).
    • Удалите Anonymous Logon (и Everyone) из группы Pre-Windows 2000 Compatible Access. Обычно именно поэтому null-session RID cycling работает на контроллере домена.
    • Установите «Let Everyone permissions apply to anonymous users» в Disabled и ограничьте анонимный доступ к именованным каналам.
    • Требуйте подписывания SMB и отключите SMBv1.

    Ничто из этого не мешает вошедшему в систему пользователю читать те же данные — это нормально и ожидаемо. Это закрывает только путь без учётных данных.

    Обнаружение

    • Включите аудит объектов SAM/каталога и следите за всплеском событий 4661 / 4662 (дескриптор объекта SAM или каталога) с одной машины за короткое окно.
    • Следите за множеством анонимных входов (событие 4624, тип входа 3, учётная запись ANONYMOUS LOGON) и активностью IPC$ (5140 / 5145).
    • Признак — объём из одного источника: множество запросов идентификаторов учётных записей к \samr или вызовов политики/поиска к \lsarpc за короткое время.
    • Поскольку --sleep и --jitter могут растянуть вызовы во времени, оповещайте об общем количестве за окно, а не только о скорости.

    Примечания

    • Используется только порт 445 — это не затрагивает RPC endpoint mapper на 135.
    • Если преобразование RID через SAMR возвращает ACCESS_DENIED, добавьте --lsa-fallback, чтобы попробовать LSA LsarLookupSids для инвентаря (см. «Когда SAMR заблокирован»). Если LSA-запросы тоже заблокированы, возможен только recon (имя домена + SID).

    Лицензия

    MIT. См. LICENSE.

    Скачать инструмент