通过LDAP转储Active Directory信息
在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,但大多数情况下,当你从git或pypi安装主包时,pip会自动处理。
ldapdomaindump 包可以通过 python setup.py install 从git源码安装,或者对于最新发布版,使用 pip install ldapdomaindump。
使用该工具有三种方式:
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 包含一个实用程序,可将 ldapdomaindump 的 .json 文件转换为适用于BloodHound的CSV文件。该实用程序名为 ldd2bloodhound,安装时会添加到你的路径中。或者,如果你从源码运行,也可以使用 python -m ldapdomaindump.convert 或 python ldapdomaindump/convert.py。
转换工具将读取用户/组/计算机/信任的 .json 文件,并将其转换为 group_membership.csv 和 trust.csv,你可以将这些文件添加到BloodHound中。请注意,这些文件仅与 BloodHound 1.x 兼容,该版本已相当陈旧。目前没有计划支持最新版本,因为BloodHound.py项目就是为此目的而创建的。使用DCOnly收集方法时,该工具也只会与LDAP通信,并能比ldapdomaindump收集到更多信息。
LDAPDomainDump 包含一个实用程序,可将 ldapdomaindump 的 .json 文件输出为类似enum4linux的输出格式。该实用程序名为 ldd2pretty,安装时会添加到你的路径中。或者,如果你从源码运行,也可以使用 python -m ldapdomaindump.pretty 或 python ldapdomaindump/pretty.py。
MIT