
LDAP를 통한 Active Directory 정보 덤퍼
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 패키지는 git 소스에서 python setup.py install로 설치하거나, 최신 릴리스의 경우 pip install ldapdomaindump로 설치할 수 있습니다.
도구를 사용하는 세 가지 방법이 있습니다:
python ldapdomaindump.py 실행python -m ldapdomaindump 실행ldapdomaindump 실행도움말은 -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로 실행할 수 있습니다.
변환 도구는 users/groups/computers/trusts .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