
Дампер информации Active Directory через LDAP
Дампер информации Active Directory через LDAP
В домене Active Directory множество интересной информации можно получить через LDAP от любого аутентифицированного пользователя (или машины). Это делает LDAP интересным протоколом для сбора информации на этапе разведки в ходе пентеста внутренней сети. Проблема в том, что данные из LDAP часто недоступны в удобном для чтения формате.
ldapdomaindump — это инструмент, предназначенный для решения этой проблемы: он собирает и анализирует информацию, доступную через LDAP, и выводит её в удобочитаемом HTML-формате, а также в машиночитаемых форматах json и csv/tsv/greppable.
Инструмент создавался с учётом следующих целей:
Инструмент создаёт несколько файлов, содержащих обзор объектов в домене:
А также два сгруппированных файла:
Требуются ldap3 > 2.0 и dnspython. ldapdomaindump требует Python 3.6 или новее.
Зависимости можно установить вручную с помощью pip install ldap3 dnspython future, но в большинстве случаев pip установит их автоматически при установке основного пакета из git или pypi.
Пакет ldapdomaindump можно установить с помощью python setup.py install из исходного кода git, или для последнего релиза с помощью pip install ldapdomaindump.
Есть 3 способа использовать инструмент:
python ldapdomaindump.pypython -m ldapdomaindumpldapdomaindumpСправку можно получить с помощью ключа -h:
usage: ldapdomaindump.py [-h] [-u USERNAME] [-p PASSWORD] [-at {NTLM,SIMPLE}]
[-o DIRECTORY] [--no-html] [--no-json] [--no-grep]
[--grouped-json] [-d DELIMITER] [-r] [-n DNS_SERVER]
[-m]
HOSTNAME
Domain information dumper via LDAP. Dumps users/computers/groups and
OS/membership information to HTML/JSON/greppable output.
Required options:
HOSTNAME Hostname/ip or ldap://host:port connection string to
connect to (use ldaps:// to use SSL)
Main options:
-h, --help show this help message and exit
-u USERNAME, --user USERNAME
DOMAIN\username for authentication, leave empty for
anonymous authentication
-p PASSWORD, --password PASSWORD
Password or LM:NTLM hash, will prompt if not specified
-at {NTLM,SIMPLE}, --authtype {NTLM,SIMPLE}
Authentication type (NTLM or SIMPLE, default: NTLM)
Output options:
-o DIRECTORY, --outdir DIRECTORY
Directory in which the dump will be saved (default:
current)
--no-html Disable HTML output
--no-json Disable JSON output
--no-grep Disable Greppable output
--grouped-json Also write json files for grouped files (default:
disabled)
-d DELIMITER, --delimiter DELIMITER
Field delimiter for greppable output (default: tab)
Misc options:
-r, --resolve Resolve computer hostnames (might take a while and
cause high traffic on large networks)
-n DNS_SERVER, --dns-server DNS_SERVER
Use custom DNS resolver instead of system DNS (try a
domain controller IP)
-m, --minimal Only query minimal set of attributes to limit memmory
usage
Большинство AD-серверов поддерживают NTLM-аутентификацию. В редких случаях, когда это не так, используйте --authtype SIMPLE.
По умолчанию инструмент выводит все файлы в форматах HTML, JSON и через табуляцию (greppable). Также для удобства создаются два сгруппированных файла (users_by_group и computers_by_os). Для них нет вывода в greppable. JSON-вывод для сгруппированных файлов отключён по умолчанию, поскольку он создаёт очень большие файлы без дополнительных данных, которых нет в других файлах.
Важным параметром является -r, который определяет, следует ли разрешать атрибут DNSHostName компьютеров в IPv4-адрес. Хотя это может быть очень полезно, атрибут DNSHostName не обновляется автоматически. Если в домене AD используются поддомены для имён компьютеров, DNSHostName часто будет некорректным и не разрешится. Также имейте в виду, что разрешение всех имён в домене может создать большую нагрузку на контроллер домена.
По умолчанию ldapdomaindump пытается записать на диск каждый атрибут, который может прочитать, в файлы .json. В больших сетях это потребляет много памяти (поскольку отношения групп в настоящее время вычисляются в памяти перед записью на диск). Чтобы сбрасывать только минимально необходимые атрибуты (те, которые по умолчанию отображаются в файлах .html и .grep), используйте параметр --minimal.
LDAPDomainDump включает утилиту для преобразования файлов .json ldapdomaindump в CSV-файлы, подходящие для BloodHound. Утилита называется ldd2bloodhound и добавляется в PATH при установке. Альтернативно её можно запустить с помощью python -m ldapdomaindump.convert или python ldapdomaindump/convert.py, если вы работаете из исходного кода.
Инструмент конвертации берёт файлы .json пользователей/групп/компьютеров/доверительных отношений и преобразует их в group_membership.csv и trust.csv, которые можно добавить в BloodHound. Обратите внимание, что эти файлы совместимы только с BloodHound 1.x, который довольно стар. Планов по поддержке последней версии нет, поскольку для этого был создан проект BloodHound.py. При использовании метода сбора только с контроллера домена (DCOnly) этот инструмент также будет обращаться только к LDAP и собирать больше информации, чем ldapdomaindump.
LDAPDomainDump включает утилиту для вывода файлов .json ldapdomaindump в стиле вывода enum4linux. Утилита называется ldd2pretty и добавляется в PATH при установке. Альтернативно её можно запустить с помощью python -m ldapdomaindump.pretty или python ldapdomaindump/pretty.py, если вы работаете из исходного кода.
MIT