
PowerShell MachineAccountQuota 및 DNS 익스플로잇 도구

기본 Active Directory ms-DS-MachineAccountQuota 특성 설정은 모든 도메인 사용자가 도메인에 최대 10개의 머신 계정을 추가할 수 있도록 허용합니다. Powermad에는 실제 시스템을 AD에 연결하지 않고 ms-DS-MachineAccountQuota를 악용하기 위한 함수 세트가 포함되어 있습니다.
이 함수는 머신 계정 특성에 채워진 값을 반환할 수 있습니다.
Get-MachineAccountAttribute -MachineAccount test -Attribute discription이 함수는 머신 계정의 ms-DS-CreatorSID 속성을 활용하여 사용자 이름 또는 SID 목록과 연결된 머신 계정을 반환합니다. ms-DS-CreatorSID 속성은 머신 계정이 권한이 없는 사용자에 의해 생성된 경우에만 채워집니다.
Get-MachineAccountCreator이 함수는 New-MachineAccount를 통해 추가된 머신 계정을 비활성화할 수 있습니다. 이 함수는 머신 계정을 생성한 동일한 사용자와 함께 사용해야 합니다.
Disable-MachineAccount -MachineAccount test이 함수는 Disable-MachineAccount를 통해 비활성화된 머신 계정을 활성화할 수 있습니다. 이 함수는 머신 계정을 생성한 동일한 사용자와 함께 사용해야 합니다.
Enable-MachineAccount -MachineAccount test이 함수는 호스트 시스템의 Active Directory 연결 상태에 영향을 주지 않고 LDAP 추가 요청을 통해 도메인 컨트롤러에 직접 새 머신 계정을 추가할 수 있습니다.
LDAP 추가 요청은 시스템을 도메인에 가입할 때 사용되는 추가 요청을 모델로 합니다. 다음 속성이 설정됩니다(대부분 DC에서 유효성 검사됨):
새 머신 계정은 'Domain Computers' 그룹에 부여된 권한을 활용하거나 도메인 열거, DNS 익스플로잇 등을 위한 추가 계정으로 사용할 수 있습니다. 기본적으로 머신 계정에는 로컬 로그온 권한이 없습니다. 네트워크 자격 증명을 직접 수락하는 도구/클라이언트를 사용하거나 'runas /netonly' 또는 @harmj0y의 PowerView에 포함된 Invoke-UserImpersonation/Invoke-RevertToSelf를 사용할 수 있습니다.
표준 사용자로 생성된 머신 계정은 mS-DS-CreatorSID에 표준 사용자의 SID가 채워집니다.
참고: ms-DS-MachineAccountQuota는 인증된 사용자가 추가된 머신 계정을 AD에서 삭제할 수 있는 기능을 제공하지 않습니다. 작업을 클라이언트에 넘기는 것을 피하려면 계정을 제거하기 위해 상승된 권한이 필요합니다.
새 머신 계정 추가
New-MachineAccount -MachineAccount test
runas /netonly로 추가된 계정 사용
runas /netonly /user:domain\test$ powershell
이 함수는 권한 있는 계정으로 머신 계정을 제거합니다.
Remove-MachineAccount -MachineAccount test -Credential $domainadmin이 함수는 사용자가 쓰기 액세스 권한이 있는 경우 New-MachineAccount를 통해 추가된 계정의 일부 특성을 채울 수 있습니다. 이 함수는 머신 계정을 생성한 동일한 사용자와 함께 사용해야 합니다.
다음은 일반적으로 쓰기 액세스가 활성화된 일부 특성 목록입니다:
SamAccountName 특성에서 끝에 있는 '$' 제거
Set-MachineAccountAttribute -MachineName test -Attribute SamAccountName -Value test
수정된 계정을 runas /netonly로 사용
runas /netonly /user:domain\test powershell
이 함수는 New-MachineAccount를 활용하여 MachineAccountQuota를 통해 하나의 권한 없는 계정에서 가능한 많은 머신 계정을 재귀적으로 생성합니다. 자세한 내용은 다음 블로그 게시물을 참조하세요:
기본적으로 인증된 사용자는 Active Directory 통합 DNS(ADIDNS) 영역에 대해 '모든 하위 개체 만들기' 권한을 가지고 있습니다. AD 영역에 현재 존재하지 않는 대부분의 레코드를 추가/삭제할 수 있습니다.
이 함수는 도메인 컨트롤러에서 보안 동적 업데이트의 기본 설정이 활성화된 경우 동적 DNS 레코드를 추가/삭제하는 데 사용할 수 있습니다. 현재 A, AAAA, CNAME, MX, PTR, SRV 및 TXT 레코드가 지원됩니다. Invoke-DNSUpdate는 '-g' 또는 'gsstsig' 옵션을 사용할 때 BIND의 nsupdate 도구를 모델로 합니다.
A 레코드 추가
Invoke-DNSUpdate -DNSType A -DNSName www -DNSData 192.168.100.125
A 레코드 삭제
Invoke-DNSUpdate -DNSType A -DNSName www.test.local
SRV 레코드 추가
Invoke-DNSUpdate -DNSType SRV -DNSName _autodiscover._tcp.test.local -DNSData system.test.local -DNSPriority 100 -DNSWeight 80 -DNSPort 443
이 함수는 ADIDNS 노드를 툼스톤 처리할 수 있습니다.
이 함수는 툼스톤 처리된 노드를 유효한 레코드로 되돌릴 수 있습니다.
Enable-ADIDNSNode -Node *이 함수는 DNS 노드 특성에 채워진 값을 반환할 수 있습니다.
Get-ADIDNSNodeAttribute -Node test -Attribute dnsRecord이 함수는 ADIDNS 노드의 소유자를 반환할 수 있습니다.
Get-ADIDNSNodeOwner -Node test이 함수는 ADIDNS 노드 또는 영역의 DACL을 가져옵니다.
도메인에 연결된 시스템에서 기본 Active Directory 통합 영역의 DACL을 가져옵니다.
Get-ADIDNSPermission
도메인에 연결된 시스템에서 test라는 DNS 노드의 DACL을 가져옵니다.
Get-ADIDNSPermission -Node test
이 함수는 ADIDNS 영역을 반환할 수 있습니다.
Get-ADIDNSZone이 함수는 DNS 노드 또는 영역 DACL에 ACE를 추가합니다.
Grant-ADIDNSPermission -Node * -Principal "authenticated users"이 함수는 암호화된 LDAP 추가 요청을 통해 Active Directory 통합 DNS(ADIDNS) 영역에 DNS 노드를 추가합니다.
New-ADIDNSNode -Node * -Tombstone이 함수는 dnsRecord 특성에 대한 유효한 바이트 배열을 생성합니다.
New-DNSRecordArray -Data 192.168.0.1이 함수는 DNS 영역의 현재 SOA 일련 번호를 가져와 설정된 양만큼 증가시킵니다.
New-SOASerialNumberArray이 함수는 DNS 노드의 이름을 바꿀 수 있습니다.
Rename-ADIDNSNode -Node test -NodeNew test2이 함수는 DNS 노드를 제거할 수 있습니다.
Remove-ADIDNSNode -Node *이 함수는 DNS 노드 또는 영역 DACL에서 ACE를 제거합니다.
Revoke-ADIDNSPermission -Node * -Principal user1 -Access GenericAll이 함수는 DNS 노드 특성에 값을 추가, 채우기 또는 덮어쓸 수 있습니다.
Set-ADIDNSNodeAttribute -Node test -Attribute description -Value "do not delete"이 함수는 DNS 노드의 소유자를 설정할 수 있습니다. SeRestorePrivilege가 있는 토큰이 필요합니다.
Set-ADIDNSNodeOwner -Node test -Principal user1이 함수는 알려진 사용자 이름과 암호에서 Kerberos AES 256 및 128 키를 생성할 수 있습니다. invoke-DNSUpdate에서 패스더해시를 테스트하는 데 사용할 수 있습니다.
Get-KerberosAESKey -Salt TEST.LOCALuser